All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
credit_counter
: Add up/down counter for credit.
mem_to_banks_detailed
: Ensure no spurious response after full dead write.
registers
: Fix else statement in FFARNC macro.stream_arbiter_flushable
: Do not lock priority arbiter.
id_queue
: Add parameter to cut a critical path.
stream_xbar
: Add payload assertion stability mask.
stream_omega_net
: Fix assertion.- Revert gitlab-ci trigger condition to
pull_request
.
- Add
passthrough_stream_fifo
: Stream FIFO which does not cut the timing path, this allows it to do a simultaneous push and pop when full. - Registers: Add FFARNC macro: Flip-Flop with asynchronous active-low reset and synchronous clear.
- Enable assertions in verilator.
- Change
pragma translate_off
statements to ```ifndef SYNTHESIS`` according to IEEE 1364.1-2005 spec 6.3.2. plru_tree
: Add assertion that output is onehot.- Update CI trigger condition.
onehot_to_bin
: Fix width mismatch in assignment.plru_tree
: Improve tool compatibility.stream_xbar
: Fix masked assertion.
- Add
stream_join_dynamic
:stream_join
with a dynamically configurable subset selection. - Add
multiaddr_decode
: Address map decoder using NAPOT regions and allowing for multiple address inputs. - Add
addr_decode_dync
:addr_decode
with support for dynamic online configuration.
mem_to_banks
: Change default value forNumBanks
from0
to1
to avoid division by zero.
mem_to_banks
: Keep defaut values for localparams
- Add
mem_to_banks_detailed
:mem_to_banks
with detailed response signals
unread
: Add dummy signal assignment when targeting Vivado to avoid blackbox inference
- Add
lossy_valid_to_stream
: A converter between valid-only protocols and ready-valid where the latest transaction overwrites the most recently queue one. - Add
clk_int_div_static
: A wrapper forclk_int_div
for static clock division.
popcount
: Refactor and support all input widths.clk_int_div
: Support clock output during reset.stream_delay
: Support larger counts.
clk_int_div
: Fix possible deadlock and avoid hold issues.
- Add
shift_reg_gated
: Shift register with ICG for arbitrary types.
- CI: Run testbenches in
test/
on internal gitlab mirror. fifo_tb
: Add test for DEPTH not power of two.
clk_int_div
: Allow configuration while clock is disabled.mem_to_banks
: Cut possible timing loop for HideStrb feature.- Improved tool compatibility (Verilator, Questasim, Synopsys).
- Add
clk_mux_glitch_free
: A glitch-free clock multiplexer.
fall_through_register
: Remove superfluous$size()
call for tool compatibility
- Add
mem_to_banks
: split memory access over multiple parallel banks. Moved from theAXI4+ATOP
axi_to_mem
module. - Add
read
: dummy module that prevents a signal from being removed during synthesis
stream_fifo_optimal_wrap
: Remove assertsfall_through_register
: Update fifo tofifo_v3
- FuseSoC: Add
assertions.svh
- Add
stream_throttle
: restricts the number of outstanding transfers in a stream.
- Allow out-of-bounds (i.e.
'0
) top end address in addr_map ofaddr_decode
module for end of address space. - Update CI.
- Add
addr_decode_napot
: variant ofaddr_decode
which uses a base address and mask instead of a start and end address. - Add
stream_fifo_optimal_wrap
: instantiates a more optimalspill_register
instead of astream_fifo
fordepth == 2
.
- Make
stream_register
truly stream by replacing internal FIFO with FFs. - Avoid using
$bits()
call inid_queue
's parameters. - Remove
cb_filter
andcb_filter_pkg
from from Vivado IP packager project sources due to compatibility issues. - Use
tc_clk_mux
as glitch-free muxes inrstgen_bypass
to avoid combinational glitches. - Avoid program blocks in testbenches for simulator compatibility.
- Update
src_files.yml
andcommon_cells.core
- Fix typos in
Bender.yml
andsrc_files.yml
- Add
edge_propagator_ack
: Edge/pulse propagator with sender-synchronous receive-acknowledge output.edge_propagator
is now implemented by instantiatingedge_propagator_ack
. - Add
4phase_cdc
: A 4 phase handshaking CDC that allows glitch-free resetting (used internally in the new clearable CDC IPs). - Add one-sided clearable and/or async resettable flavors of 2phase CDC (
cdc_2phase_clearable
) and gray-counting FIFO CDCs (cdc_fifo_gray_clearable
). - Add reset CDC controller
cdc_reset_ctrl
that supports reset/synchronous clear sequencing across clock domain crossings (used internally in clearable CDC IPs). - Add
clk_int_div
arbitrary integer clock divider with at-runtime configurable divider selection and glitch-free, 50%duty cycle output clock. - Add an assertion to the
lzc
to verify parameters.
- Correct reset polarity in assertions in
isochronous_4phase_handshake
andisochronous_spill_register
- Fix compatibility of
sub_per_hash
constructs with Verilator
- Add
dont_touch
andasync_reg
attribute to FFs insync
cell. - Improved reset behavior documentation (in module header) of existing CDC IPs.
- Deprecated flawed
clk_div
module and add elaboration warning message that will be shown for existing designs (can be disabled with optional instantiation parameter). - Add optional
Seed
parameter tostream_delay
module - Update
tech_cells_generic
to0.2.9
- Add
cc_onehot
isochronous_4phase_handshake
: Isochronous clock domain crossing cutting all paths using a 4-phase handshake.- Changed
isochronous_spill_register_tb
toisochronous_crossing_tb
also covering theisochronous_4phase_handshake
module. - Make reset value of
sync
module parameterizable.
id_queue
: Allow simultaneous input and output requests inFULL_BW
mode
- Remove breaking change of
spill_register
- Add
spill_register_flushable
registers.svh
: Merge explicit and implicit register variants into`FF
and`FFL
macrosrr_arb_tree
: Allow flushing locked decision- Improved
verific
compatibility
- Remove
timeprecision/timeunit
arguments - Update
common_verification
to0.2.0
- Update
tech_cells_generic
to0.2.3
id_queue
: Replace default or reset value of signals that were assigned'x
with'0
.id_queue
: Usecf_math_pkg::idx_width()
for computation of localparams.
- Add
XSIM
define guard for statements incompatible withxsim
.
- assertions: Assertion include header with macros (from lowrisc)
sram.sv
: Deprecated as it has been moved totech_cells_generic
stream_register
: FixDATA_WIDTH
of instantiated FIFO.stream_xbar
: Add missing argument in assertion error string.- Lint style fixes
stream_omega
: Fix parse issue with verible.src_files.yml
: Fix compile order and missing modules.
- stream_to_mem: Allows to use memories with flow control (req/gnt) for requests but without flow control for output data to be used in streams.
- isochronous_spill_register: Isochronous clock domain crossing cutting all paths.
rr_arb_tree_tb
: Systemverilog testbench forrr_arb_tree
, which checks for fair throughput.cf_math_pkg::idx_width
: Constant function for defining the binary representation width of an index signal.
addr_decode
: Usecf_math_pkg::idx_width
for computing the index width, inline documentation.lzc
: Usecf_math_pkg::idx_width
for computing the index width, inline documentation.Bender
: Change levels of modules affected by depending oncf_math_pkg::idx_width()
.stream_xbar
: Fully connected stream bassed interconnect with variable number of inputs and outputs.stream_xbar
: Fully connected stream-bassed interconnect with a variable number of inputs and outputs.stream_omega_net
: Stream-based network implementing an omega topology. Variable number of inputs, outputs and radix. Topology is isomorphic to a butterfly network.
- Improve tool compatibility.
rr_arb_tree
: Properly degeneraterr_i
andidx_o
signals.rr_arb_tree
: Add parameterFairArb
to distribute throughput of input requests evenly when not all inputs have requests active.stream_demux
: Properly degenerateinp_sel_i
signal.
- stream_fork_dynamic: Wrapper around
stream_fork
for partial forking. - stream_join: Join multiple Ready/Valid handshakes to one common handshake.
- SECDED (Single Error Correction, Double Error Detection) encoder and decoder
- SECDED Verilator-based testbench
- Travis build for SECDED module
- stream_fifo: Ready/Valid handshake wrapper around
fifo_v3
- id_queue: Fix generation of
head_tail_q
registers
- Handle degenerated
addr_decode
withNoIndices == 1
, change default parameters to32'd0
- Fix author section in Bender.yml
rr_arb_tree
: Add guard SVA statement for Verilator- Added missing sources in
Bender.yml
andsrc_files.yml
- Handle degenerated
onehot_to_bin
withONEHOT_WIDTH == 1
- Handle degenerated
id_queue
withCAPACITY == 1
orHT_CAPACITY == 1
- Fix
cdc_fifo_gray
to be a safe clock domain crossing (CDC)
- Added address map decoder module
- Handle degenerated
lzc
withWIDTH == 1
- Added spubstitution-permutation hash function module
- Added couning-bloom-filter module
spill_register
: Added Bypass parametercounter
: Added sticky overflow- Added counter with variable delta
- Added counter that tracks its maximum value
- Added formal testbench for
fifo
andfall_through_regsiter
- Fix path in
src_files.yml
forstream_arbiter
andstream_arbiter_flushable
- Added exponential backoff window module
- Added parametric Galois LFSR module with optional whitening feature
- Added
cf_math_pkg
: Constant Function implementations of mathematical functions for HDL elaboration
- Parametric payload data type for
rr_arb_tree
- The following arbiter implementations are deprecated and superseded by
rr_arb_tree
: - Priority arbiter
prioarbiter
- Round-robin arbiter
rrarbiter
- Add priority arbiter
- Add Pseudo Least Recently Used tree
- Add round robin arbiter mux tree
- Add selectable arbiter implementation for
stream_arbiter
andstream_arbiter_flushable
. One can choose between priority (prio
) and round-robin arbitration (rr
). - Add
$onehot0
assertion in one-hot to bin - Rework
rrarbiter
unit (usesrr_arb_tree
implementation underneath)
- Add stream fork
- Add fall-through register
- Add stream filter
- Add ID queue
sync_wedge
use existing synchronizer. This defines a single place where a tech-specific synchronizer can be defined.
- Fix FIFO push and pop signals in
stream_register
to observe interface prerequisites. - In
fifo_v3
, fix data output when pushing into empty fall-through FIFO. Previously, the data output of an empty fall-through FIFO with data at its input (andpush_i=1
) depended onpop_i
: Whenpop_i=0
, old, invalid data were visible at the output (even thoughempty_o=0
, indicating that the data output is valid). Only whenpop_i=1
, the data from the input fell through. One consequence of this bug was thatdata_o
of thefall_through_register
could change whilevalid_o=1
, violating the basic stream specification.
- Add
fifo_v3
with generic fill count - Add 16 bit LFSR
- Add stream delayer
- Add stream arbiter
- Add register macros for RTL
- Add shift register
- Make number of registers of
rstgen_bypass
a parameter.
- Fix
valid_i
andgrant_i
guarantees ingeneric_fifo
for backward compatibility. - LZC: Synthesis of streaming operators in ternary operators
- Add missing entry for
popcount
toBender.yml
. - Add default values for parameters to improve compatibility with Synopsys DC and Vivado.
- Add popcount circuit
popcount
- Add lock feature to the rrarbiter. This prevents the arbiter to change the decision when we have pending requests that remain unaknowledged for several cycles.
- Add deglitching circuit
- Add generic clock divider
- Add edge detecter as alias to sync_wedge (name is more expressive)
- Add generic counter
- Add moving deglitcher
- Add reset synchronizer with explicit reset bypass in testmode
- Fix incompatibility with verilator
- Fix dependency to open-source repo
- Fix assertions in
fifo_v2
(write on full / read on empty did not trigger properly)
- Use proper
fifo_v2
ingeneric_fifo
module.
- Almost full/empty flags to FIFO, as
fifo_v2
.
- FIFO moved to
fifo_v1
and instantiatesfifo_v2
.
- Revert breaking changes to
fifo
.
- Add stream register (
stream_register
). - Add stream multiplexer and demultiplexer (
stream_mux
,stream_demux
). - Add round robin arbiter (
rrarbiter
). - Add leading zero counter (
lzc
).
- Deprecate
find_first_one
in favor oflzc
.
- Add binary to Gray code converter.
- Add Gray code to binary converter.
- Add Gray code testbench.
- Add CDC FIFO based on Gray counters. This is a faster alternative to the 2-phase FIFO which also works if a domain's clock has stopped.
- Rename
cdc_fifo
tocdc_fifo_2phase
. - Adjust CDC FIFO testbench to cover both implementations.
- Replace explicit clock gate in
fifo
with implicit one.
- Remove duplicate deprecated modules.
- Remove deprecated
rstgen
and fix interface.
- Remove deprecated
onehot_to_bin
.
- Add behavioural SRAM model
- Clock domain crossing FIFO
- Re-name new sync modules to resolve namespace collisions
- 2-phase clock domain crossing
- Add old common cells as deprecated legacy modules
- Backwards compatibility wrapper for
generic_LFSR_8bit
- Backwards compatibility wrapper for
generic_fifo
- Fix an issue in the spill register which causes transactions to be lost
- Add spill register
- Find first zero
- Re-implementation of the generic FIFO supporting all kinds of use-cases
- Testbench for FIFO
- Re-formatting and artistic code clean-up
- Fork of PULP common cells repository