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.
boxcar: Add boxcar function to compose bit masksheaviside: Add Heaviside function to compose bit masksring_buffer: Add ring buffer with sequential write and random readstrip_counter: Add counter with 'trip' output when reaching threshold value
cb_filter,id_queue,lzc,rr_arb_tree: Speed up Verilator simulationcdc_fifo_gray*,isochronous_spill_register: Change flip-flops without to flip-flops with resetisochronous_spill_register: Remove unnecessary data stability assertionsaddr_decode*: Change assumed integer index to arbitrary type (default remains integer)
id_queue: Fix struct accesscdc_fifo_gray*: Fix Spyglass linting edge caselzc: Fix assertion for degenerate caseWIDTH == 0- Fix Verilator compilation by adding guard statements
- Assertions no longer disabled for Verilator. Define
ASSERTS_OFFto disable. - Define
ASSERTS_OVERRIDE_ONto override any defines that turn assertions off otherwise. id_queue: Parametrize number of compare ports.assertions.svh: Add optional argument to assertion macros to display custom error message.stream_to_mem: Disable assertions during reset.addr_decode_dync,cdc_fifo_gray_clearable,multiaddr_decode,spill_register_flushable: Promote$warningto$error.rr_arb_tree,stream_omega_net,stream_xbar: Remove default assertion disable.
delta_counter: Fix inverted reset.stream_join_dynamic: Handshake only selected streams.- Various tool compatibility improvements.
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_offstatements 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_joinwith 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_decodewith support for dynamic online configuration.
mem_to_banks: Change default value forNumBanksfrom0to1to avoid division by zero.
mem_to_banks: Keep defaut values for localparams
- Add
mem_to_banks_detailed:mem_to_bankswith 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_divfor 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+ATOPaxi_to_memmodule. - 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_decodemodule for end of address space. - Update CI.
- Add
addr_decode_napot: variant ofaddr_decodewhich uses a base address and mask instead of a start and end address. - Add
stream_fifo_optimal_wrap: instantiates a more optimalspill_registerinstead of astream_fifofordepth == 2.
- Make
stream_registertruly stream by replacing internal FIFO with FFs. - Avoid using
$bits()call inid_queue's parameters. - Remove
cb_filterandcb_filter_pkgfrom from Vivado IP packager project sources due to compatibility issues. - Use
tc_clk_muxas glitch-free muxes inrstgen_bypassto avoid combinational glitches. - Avoid program blocks in testbenches for simulator compatibility.
- Update
src_files.ymlandcommon_cells.core
- Fix typos in
Bender.ymlandsrc_files.yml
- Add
edge_propagator_ack: Edge/pulse propagator with sender-synchronous receive-acknowledge output.edge_propagatoris 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_ctrlthat supports reset/synchronous clear sequencing across clock domain crossings (used internally in clearable CDC IPs). - Add
clk_int_divarbitrary integer clock divider with at-runtime configurable divider selection and glitch-free, 50%duty cycle output clock. - Add an assertion to the
lzcto verify parameters.
- Correct reset polarity in assertions in
isochronous_4phase_handshakeandisochronous_spill_register - Fix compatibility of
sub_per_hashconstructs with Verilator
- Add
dont_touchandasync_regattribute to FFs insynccell. - Improved reset behavior documentation (in module header) of existing CDC IPs.
- Deprecated flawed
clk_divmodule and add elaboration warning message that will be shown for existing designs (can be disabled with optional instantiation parameter). - Add optional
Seedparameter tostream_delaymodule - Update
tech_cells_genericto0.2.9
- Add
cc_onehot isochronous_4phase_handshake: Isochronous clock domain crossing cutting all paths using a 4-phase handshake.- Changed
isochronous_spill_register_tbtoisochronous_crossing_tbalso covering theisochronous_4phase_handshakemodule. - Make reset value of
syncmodule parameterizable.
id_queue: Allow simultaneous input and output requests inFULL_BWmode
- Remove breaking change of
spill_register
- Add
spill_register_flushable
registers.svh: Merge explicit and implicit register variants into`FFand`FFLmacrosrr_arb_tree: Allow flushing locked decision- Improved
verificcompatibility
- Remove
timeprecision/timeunitarguments - Update
common_verificationto0.2.0 - Update
tech_cells_genericto0.2.3
id_queue: Replace default or reset value of signals that were assigned'xwith'0.id_queue: Usecf_math_pkg::idx_width()for computation of localparams.
- Add
XSIMdefine 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_WIDTHof 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_widthfor computing the index width, inline documentation.lzc: Usecf_math_pkg::idx_widthfor 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_iandidx_osignals.rr_arb_tree: Add parameterFairArbto distribute throughput of input requests evenly when not all inputs have requests active.stream_demux: Properly degenerateinp_sel_isignal.
- stream_fork_dynamic: Wrapper around
stream_forkfor 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_qregisters
- Handle degenerated
addr_decodewithNoIndices == 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.ymlandsrc_files.yml
- Handle degenerated
onehot_to_binwithONEHOT_WIDTH == 1 - Handle degenerated
id_queuewithCAPACITY == 1orHT_CAPACITY == 1 - Fix
cdc_fifo_grayto be a safe clock domain crossing (CDC)
- Added address map decoder module
- Handle degenerated
lzcwithWIDTH == 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
fifoandfall_through_regsiter
- Fix path in
src_files.ymlforstream_arbiterandstream_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_arbiterandstream_arbiter_flushable. One can choose between priority (prio) and round-robin arbitration (rr). - Add
$onehot0assertion in one-hot to bin - Rework
rrarbiterunit (usesrr_arb_treeimplementation underneath)
- Add stream fork
- Add fall-through register
- Add stream filter
- Add ID queue
sync_wedgeuse existing synchronizer. This defines a single place where a tech-specific synchronizer can be defined.
- Fix FIFO push and pop signals in
stream_registerto 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_oof thefall_through_registercould change whilevalid_o=1, violating the basic stream specification.
- Add
fifo_v3with 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_bypassa parameter.
- Fix
valid_iandgrant_iguarantees ingeneric_fifofor backward compatibility. - LZC: Synthesis of streaming operators in ternary operators
- Add missing entry for
popcounttoBender.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_v2ingeneric_fifomodule.
- Almost full/empty flags to FIFO, as
fifo_v2.
- FIFO moved to
fifo_v1and 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_onein 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_fifotocdc_fifo_2phase. - Adjust CDC FIFO testbench to cover both implementations.
- Replace explicit clock gate in
fifowith implicit one.
- Remove duplicate deprecated modules.
- Remove deprecated
rstgenand 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