Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
// Copyright 2022 ETH Zurich and University of Bologna.
// Copyright and related rights are licensed under the Solderpad Hardware
// License, Version 0.51 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law
// or agreed to in writing, software, hardware and materials distributed under
// this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
`include "common_cells/registers.svh"
/// Register with a simple stream-like ready/valid handshake.
/// This register does not cut combinatorial paths on all control signals; if you need a complete
/// cut, use the `cc_spill_register`.
module cc_stream_register #(
parameter type data_t = logic // Vivado requires a default value for type parameters.
) (
input logic clk_i, // Clock
input logic rst_ni, // Asynchronous reset active low
input logic clr_i, // Synchronous clear active high
// Input port
input logic valid_i,
output logic ready_o,
input data_t data_i,
// Output port
output logic valid_o,
input logic ready_i,
output data_t data_o
);
logic reg_ena;
assign ready_o = ready_i | ~valid_o;
assign reg_ena = valid_i & ready_o;
// Load-enable FFs with synch clear
`FFLARNC(valid_o, valid_i, ready_o, clr_i, 1'b0, clk_i, rst_ni)
`FFLARNC(data_o, data_i, reg_ena, clr_i, data_t'('0), clk_i, rst_ni)
endmodule
e73baaec2This file is pinned to the selected release. Download the original to open it in your design tool.