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.
- Add
axi_burst_unwrap. #326
- Modify
axi_dw_upsizerto avoid unnecessarily wide indices into r_data. #362
- Add random user signal generation for llc-partition test. #315
- Update
common_verificationfromv0.2.4tov0.2.5.
- Support connectivity in
axi_intercon_gen. #351 - Add
iomsbfunction to avoid underflow in array lengths toaxi_pkg. #355
- Make the case statements in
axi_dw_upsizerunique. Add default cases to prevent simulator warnings. #348 - Fix write channel assertions in
axi_rw_split. #357 - Tie unused
demuxport in pass-through termination inaxi_isolate. #359
- Improve VCS and Verilator support treewide. #358
- Update
common_verificationtov0.2.4to include Verilator fixes.
- Disabled the interface variant of
axi_xbar_unmuxedfor VCS, as VCS does not support multi-dimensional arrays of interfaces yet.
axi_id_serialize: Revert #342 to fix boot problems of CVA6 in Cheshire.
axi_sim_mem: Increase number of request ports, add multiport interface variant.axi_bus_compare: Optionally consider AXIsizefield to only compare used data.AXI_BUS_DV: Add property checking that bursts do not cross 4KiB page boundaries.- Add
axi_xbar_unmuxed: Partial crossbar with unmultiplexed mst_ports.
axi_bus_compare: Fix mismatch detection.axi_to_detailed_mem: Only respond withexokayiflockwas set on the request. Bumpcommon_cellsformem_to_banksfix.axi_dw_downsizer: Fixi_forward_b_beats_queueunderflow.axi_atop_filter: Add reset state to internal FSM to avoid simulation bug in XSIM.axi_test: Ensure random requests do not cross 4KiB page boundaries.
axi_id_serializer: Change internal design (and behavior) for simpler code, less hardware, and less stalling.
v0.39.4 is fully backward-compatible to v0.39.3.
axi_sim_mem: Allow response data for uninitialized region to have configurable defined value.axi_test: addclear_memory_regionstoaxi_rand_master.axi_test: Addadd_traffic_shaping_with_sizetoaxi_rand_masterto allow for traffic shaping with a custom size.
axi_pkg: AdjustLatencyModeparameter ofxbar_cfg_tto bit vector fromxbar_pipeline_eenum to allow custom configurations.
v0.39.3 is fully backward-compatible to v0.39.2.
axi_interleaved_xbar: An experimental crossbar extension interleaving memory transfers over #334 subordinate devices. Use at your own risk.axi_zero_mem: Implementing \dev\zero function for AXI. #334
axi_to_detailed_mem: VCS crashed on default parameters 0, changed them to 1 #334axi_to_mem: Add missing testmode pins #327axi_sim_mem: Fix byte calculation in R and W forks #331
v0.39.2 is fully backward-compatible to v0.39.1.
axi_cdc: AddSyncStagesparameter.axi_to_mem_interleaved: Add interface variant.axi_burst_splitter: Exposeid_queue'sFULL_BWparameter.axi_chan_compare: Add parameter to allow reordered transactions.- Add
AXI_HIGHLIGHTmacro to highlight AXI signals. - Add flat port instantiation macros.
axi_test: Avoid false negatives for misaligned reads inaxi_scoreboard.axi_to_detailed_mem: Ensure proper propagation orerrandexokaysignals.
- Synthesizable IPs:
axi_bus_compareandaxi_slave_compare; two synthesizable verification IPs meant to be used to compare two AXI buses on an FPGA.axi_lite_from_memandaxi_from_memacting like SRAMs making AXI4 requests downstream.axi_lite_dw_converter: Convert the data width of AXI4-Lite transactions. Emits the appropriate amount of downstream transactions to perform the whole requested access.axi_rw_joinandaxi_rw_splitto split/join the read and write channels of an AXI bus.
CT-macros allowing to instantiate AXI structs with custom channel type names.axi_pkg': Add documentation toxbar_cfg_t`.- Testbench IPs:
axi_chan_compare.sv: Non-synthesizable module comparing two AXI channels of the same type- Add
axi_file_mastertoaxi_test, allowing file-based AXI verification approaches. - Add
#_widthfunctions toaxi_testreturning the width of the AXI channels.
- Synthesizable IPs:
axi_demux: Replace FIFO between AW and W channel by a register plus a counter. This prevents AWs from being issued to one master port while Ws from another burst are ongoing to another master port. This is required to prevents deadlocks due to circular waits downstream. RemovesFallThroughparameter fromaxi_demux.- Split the
axi_demuxlogic and timing decoupling. A new module calledaxi_demux_simplecontains the core logic. axi_dw_downsizerusesaxi_pkg::RESP_EXOKAYas a default value.- Simplify the
casezinaxi_id_remap. - Add optional explicit mapping to the
axi_id_serializemodule. - Expand
axi_to_memtoaxi_to_detailed_memexposing all of AXI's side-signals; namelyid,user,cache,prot,qos,region,atop. Add possibility to injecterrandexokay. axi_xbar: Add parameterPipelineStagestoaxi_pkg::xbar_cfg_t. This addsaxi_multicutsin the crossed connections in thexbarbetween the demuxes and muxes. Improve inline documentation.- Move
mem_to_bankstocommon_cells.
axi_pkg: Improve for better compatibility with Vivado.- `axi_test:
axi_lite_rand_slave:Rresponse field is now randomized.- Remove excessive prints from random master and slave.
- Properly size-align the address.
axi_pkg: Definelocalparamsto define AXI type widths.- Update
common_cellsfrom versionv1.26.0tov1.27.0. - Tooling:
- Use
pulp-platform/pulp-actions/gitlab-ci@v2in the GitHub CI to communicate with the internal CI. - Bump
DC Shell versionfrom2019.12to2022.03 - No longer check ModelSim versions
10.7eand2021.3, add2022.3. - More thorough verification runs for the
xbar. - Start transitioning from shell script to Makefile to run simulations.
- Use
- Use
scripts/update_authorsto update authors, slight manual fixes performed.
axi_to_mem_banked: Reduce hardware by properly settingUniqueIds.axi_to_mem_interleavedandaxi_to_mem_splitproperly instantiates a demultiplexer now. Addstest_iport for DFT.
There are breaking changes between v0.38.0 and v0.39.0:
axi_demux:FallThroughparameter was removed.axi_xbar:axi_pkg::xbar_cfg_taddedPipelineStagesparameter.axi_to_mem_interleavedandaxi_to_mem_split: Addedtest_iinput port.
- Add
axi_dumperandaxi_dumper_interpretscript to dump log from an AXI bus for debugging purposes. - Add FuseSoC and Vivado XSIM limited test to CI
assign.svh: Add macros to assign flat buses using the Vivado naming style.axi_lfsrandaxi_lite_lfsr: Add AXI4 and AXI4 Lite LFSR Subordinate devices.axi_xp: Add crosspoint with homomorphous slave and master ports.
- Improve compatibility with FuseSoC
- Improve compatibility with Vivado XSIM
- Performance improvements to
axi_to_mem - Use
scripts/update_authorsto update authors, slight manual fixes performed.
v0.38.0 is fully backward-compatible to v0.36.0 and v0.37.0.
axi_fifo: Inserts a FIFO into all 5 AXI4 channels; add module and its testbenchaxi_test: Addmappedmode to the random classes as well as additional functionality to the scoreboard class.axi_throttle: Add a module that limits the maximum number of outstanding transfers sent to the downstream logic.axi_to_mem: AXI4+ATOP slave to control on chip memory.axi_to_mem_banked: AXI4+ATOP slave to control on chip memory, with banking support, higher throughput thanaxi_to_mem.axi_to_mem_interleaved: AXI4+ATOP slave to control on chip memory, interleaved to prevent deadlocks.axi_to_mem_split: AXI4+ATOP slave to control memory protocol interconnect.Bender: Add dependencytech_cells_genericv0.2.2for generic SRAM macro for simulation.
axi_demux: Add module docstringaxi_sim_mem: Add the capability to emit read and write errorsBender: Update dependencycommon_cellstov1.26.0fromv1.21.0(required byaxi_throttle)- Remove
docsdirectory, move content todocfolder.docsis automatically created and populated during the CI run. - Update vsim version to
2021.3in CI, drop test for2020.1and2021.1
axi_lite_demux: Improve compatibility with vsim version 10.7b.axi_lite_mux: Reduce complexity of W channel at master port by removing an unnecessary multiplexer.
v0.37.0 is fully backward-compatible to v0.36.0.
- Add Monitor modport to
AXI_BUS,AXI_LITE, andAXI_LITE_DVinterfaces.
axi_demux: Eliminate unnecessary stalls of AW channel when the AR channel has reached its maximum number of transactions. Prior to this fix,axi_demuxwould always stall AWs while read transactions were at their maximum (that is, whileMaxTransread transactions were outstanding). However, this stall is only required when the AW that is being handled byaxi_demuxis an atomic operation (ATOP) that entails an R response. This fix therefore removes unnecessary stalls as well as an unnecessary dependency between reads and writes. The integrity of data or transactions was not affected by this problem.
axi_lite_mux_intf: Fix type ofslvandmstinterface ports; they wereAXI_BUSinstead ofAXI_LITE.axi_xbar_intf: Fix order of parameters. Prior to this fix, theCONNECTIVITYparameter was defined using theCfgparameter before theCfgparameter was defined.axi_test::axi_rand_master: Improve compatibility with simulators by changing an implication inside an assertion to a conditional assertion.
axi_demuxandaxi_lite_demux: Add missing spill registers for configurations with a single master port.axi_demux_intf: Add missing parameter (ATOP_SUPPORT) to optionally disable support for atomic operations.axi_muxandaxi_lite_mux: Add missing spill registers for configurations with a single slave port.axi_lite_mux_intf: Add missing parameter values on the internalaxi_lite_muxinstance (axi_req_tandaxi_resp_t).axi_sim_mem: Propagate the AR channel's user signal correctly to the monitor.
axi_sim_mem: Add monitoring interface to observe the point of coherency between the write and the read channel.
axi_sim_mem: Keep R response stable while not accepted.
axi_demuxandaxi_isolate: Add parameterAtopSupportto optionally disable the support for atomic operations (ATOPs). This parameter defaults to1'b1, i.e., ATOPs are supported. Therefore, this change is backward-compatible.axi_isolate: Add parameterTerminateTransactionto optionally respond to transactions during isolation. This parameter defaults to1'b0, i.e., transactions do not get responses. Therefore, this change is backward-compatible.axi_xbar: AddConnectivityparameter to enable the implementation of partially-connected crossbars. This parameter defaults to'1, i.e., every slave port is connected to every master port. Therefore, this change is backward-compatible.axi_test: Add monitor classaxi_monitor.axi_test::axi_driver: Add monitor tasks.
axi_isolate: Add parameters for the address, data, ID, and user signal width. This is required for the implementation of theTerminateTransactionparameter (see Added section). This change is backward-incompatible for all instances ofaxi_isolateoutside this repository. Users must update all instances ofaxi_isolatein their code. The interface variant is not affected and remains backward-compatible.
axi_xbar_intf: Add missingATOPSparameter to optionally disable the support of atomic operations (introduced in v0.25.0 foraxi_xbar). The default value of the added parameter makes this fix backward-compatible.
- Add
axi_sim_mem_intfinterface variant ofaxi_sim_mem.
axi_cdc: Improve compatibility with VCS by restricting a QuestaSim workaround to be used only for QuestaSim (issue #207).axi_id_remap: Improve compatibility with Verilator by excludingasserts for that tool.axi_lite_demux: Improve compatibility with VCS (issue #187 reported foraxi_demux, which was fixed in v0.29.2).axi_xbar: Improve compatibility with VCS by adding VCS-specific code that does not use constant function calls (#208).
axi_atop_filter,axi_burst_splitter,axi_cut,axi_delayer,axi_demux,axi_err_slv,axi_isolate,axi_lite_demux,axi_lite_mux,axi_lite_to_axi, andaxi_lite_xbar,axi_multicut,axi_serializer,axi_sim_mem: Prefixreq_tandresp_ttype parameters withaxi_. This prevents type collisions in tools that have problems with correct type resolution and isolation. This change is backward-incompatible for all instances of the listed modules outside this repository. Users must update all instances of the listed modules in their code. Interface variants are not affected and remain backward-compatible.
axi_xbar: Fix signal width for single master port. Before this fix, a crossbar instantiated with a single master port would contain arrays with incorrect dimensions.
- Add three modules to convert between any two AXI ID widths under many different concurrency
requirements:
axi_iw_converteris the top-level module that converts between any two AXI ID widths with all supported parameters. It upsizes IDs by extending the MSBs with zeros and joins two interfaces with identical ID widths. For downsizing IDs, it instantiates one of the following two modules:axi_id_remapremaps AXI IDs from wide IDs at the slave port to narrower IDs at the master port without serializing transactions.axi_id_serializereduces AXI IDs by serializing transactions when necessary.
- Add
axi_lite_xbar_intfinterface variant ofaxi_lite_xbar.
axi_lite_demux: Improve compatibility with new version of QuestaSim's optimizer (vopt). Before this workaround, QuestaSim 2021.1 could segfault on instances ofaxi_lite_demux.
axi_demux: Improve compatibility with VCS (#187). The workaround of #169 was not compatible with VCS 2020.12. That workaround is now only active ifTARGET_VSIMis defined.axi_dw_downsizerandaxi_dw_upsizer(part ofaxi_dw_converter): Avoid latch inference on the Mentor Precision synthesis tool.axi_lite_cdc_src_intf: Fix_iand_osuffixes in instantiation ofaxi_cdc_src.axi_test::axi_rand_slave: Improve compatibility with VCS (#175).axi_test::axi_scoreboard: Add default value to parameters to improve compatibility with some tools.
axi_lite_to_apb_intf: Add missing parameters, which were added toaxi_lite_to_apbin v0.28.0.
axi_xbarandaxi_demux: Add support for unique IDs by adding aUniqueIdsparameter to both modules (#172). If you can guarantee that the ID of each transaction is always unique among all in-flight transactions in the same direction, setting theUniqueIdsparameter to1'b1simplifies the demultiplexer (see documentation ofaxi_demuxfor details). This change is backward-compatible onaxi_demux(because the default value of the new parameter is1'b0). Asaxi_xbaris configured with thexbar_cfg_tstruct, this change is not backward-compatible foraxi_xbar(except forxbar_cfg_ts initialized with adefaultpart).
axi_test::axi_rand_master: Refactor ID legalization into common function to simplify the implementation and remove redundant code. No known functional bug was fixed, but the correctness of the refactored code can be asserted more easily.
- Add source- and destination-clock-domain "halves" for the clock domain crossing (CDC):
axi_cdc_srcandaxi_cdc_dst. This is implemented by refactoring theaxi_cdcmodule, so the implementation is reused from the existingaxi_cdcmodule. To avoid code duplication,axi_cdcnow instantiates anaxi_cdc_srcconnected to anaxi_cdc_dst.
axi_lite_to_apb: Make pipeline registers on request and response path optional (can be enabled with the newPipelineRequestandPipelineResponseparameters), and disable those pipeline registers by default.
axi_demux: Improve compatibility with new version of QuestaSim's optimizer (vopt) (#169). Before this workaround, QuestaSim 2020.2 and 2021.1 could segfault on instances ofaxi_demux.
axi_dw_downsizerandaxi_dw_upsizer(part ofaxi_dw_converter): Fix declaration order ofw_req_t,w_req_d, andw_req_qto remove problematic forward references.- FuseSoC: Fix version of
common_cells(1.21.0).
assign.svh: Add macros for assigning between AXI-Litestructs, both inside a process (AXI_LITE_SET_*_STRUCT) and outside a process (AXI_LITE_ASSIGN_*_STRUCT). This is safer than assigningstructs with a simple=, because the macros assign individual fields.typedef.svh: AddAXI_TYPEDEF_ALLandAXI_LITE_TYPEDEF_ALLmacros for defining all channels and request/responsestructs of an AXI4+ATOPs and an AXI4-Lite interface, respectively, in a single macro call.axi_test::axi_rand_slave: Add parameterRAND_RESP, which enables randomization of therespfield in B and R beats.
axi_test::axi_rand_master: Randomize the QoS field.- Update
common_verificationdependency to0.2.0, which has been released for more than a year. - Update
common_cellsdependency to1.21.0to align on version0.2.0of thecommon_verificationdependency. This includes version1.20.1ofcommon_cells, which fixes an out-of-bounds index inaxi_burst_splitter(#150).
- Add infinite, simulation-only memory
axi_sim_mem. assign.svh: Add macros for assigning betweenstructs, both inside a process (AXI_SET_*_STRUCT) and outside a process (AXI_ASSIGN_*_STRUCT). This is safer than assigningstructs with a simple=, because the macros assign individual fields. (Fields that mismatch between twostructs, e.g., due to differentusersignal widths, should, and in some cases must, be still assigned separately.)
- Rename the following classes in
axi_testto follow the convention that all user-facing objects in this repository start withaxi_:rand_axi_lite_mastertoaxi_lite_rand_master,rand_axi_lite_slavetoaxi_lite_rand_slave,rand_axi_mastertoaxi_rand_master, andrand_axi_slavetoaxi_rand_slave.
axi_xbar: Add parameter to disable support for atomic operations (ATOPs).
AXI_BUS,AXI_BUS_ASYNC,AXI_BUS_DV,AXI_LITE, andAXI_LITE_DV: Change type of every parameter frominttoint unsigned. An unsigned type is more appropriate, because none of those parameters can actually take a negative value, and it improves compatibility with some tools.axi_test::rand_axi_lite_slaveandaxi_test::rand_axi_lite_master: Change type of address and data width parameters (AWandDW) frominttoint unsigned. Same rationale as forAXI_BUS(et al.) above.
axi_demux: Break combinatorial simulation loop.axi_xbar: Improve compatibility with vsim version 10.6c (and earlier) by introducing a workaround for a tool limitation (#133).tb_axi_lite_regs: Removed superfluous hardcoded assertion.- Improve compatibility with Vivado XSim by disabling formal properties in
axi_demux,axi_err_slv, andaxi_xbarifXSIMis defined.
axi_test::rand_axi_lite_masterandaxi_test::rand_axi_lite_slave: Specify default values for parameters to improve compatibility with tools that require a default value for every parameter.
axi_lite_demux: Movetypedefout ofgenerateblock to improve compatibility with VCS.axi_test::rand_axi_masterandaxi_test::rand_axi_slave: Fix call torandomizefunction for class variables. Prior to this fix, thestd::randomize()function was used for three class variables, but class variables must use the.randomize()member function.
- Update
common_cellsdependency to1.20.0to fix file order in IPApproX.
doc/axi_lite_mailbox: Fix position ofRFIFOLandWFIFOLinSTATUSregister.- IPApproX:
- Add missing link against
common_cells_lib. - Fix include path for
common_cells. - Fix version specification of
common_verification.
- Add missing link against
axi_pkg: Add function that defines response precedence.
axi_dw_downsizerandaxi_dw_upsizer: Pipeline injection of atomic AWs into the AR channel to shorten the critical path.
axi_dw_downsizerandaxi_dw_upsizer: Improve portability of bit slice assignment constructs.axi_dw_downsizer:- Forward worst response among split transactions.
- Fix overflow of B forward FIFO.
axi_test: Remove minimal length constraint fromrand_atop_burst.
ips_list.yml: Add missingcommon_verificationdependency.
axi_lite_demux_intf: Fix passing ofreq_tandresp_tparameters toaxi_lite_demux.axi_lite_xbar: Add missingslv_a{w,r}_cache_iconnections onaxi_lite_to_axiinstance.
axi_lite_regs: Add memory-mapped registers with AXI4-Lite slave port and the option to make individual bytes read-only.
- Interfaces
AXI_LITEandAXI_LITE_DV: addaw_protandar_protsignals.- The
AXI_LITE_ASSIGN*andAXI_LITE_SET*macros (ininclude/axi/assign.svh) have been updated to include the two new interface signals. axi_test::axi_lite_driver: A newprotfunction argument has been added to thesend_aw,send_ar,recv_aw, andrecv_arfunctions.axi_test::rand_axi_lite_master:- A new
w_protandr_protfunction argument has been added to thewriteandreadfunction, respectively. The new arguments have a default value of'0. - The
send_awsand thesend_arsfunction now randomizes theprotsignal of each AW and AR, respectively.
- A new
axi_test::rand_axi_slave: Displayprotsignal (but otherwise still ignore it).
- The
rand_axi_master(inaxi_test): Another fix to respect burst type restrictions when emitting ATOPs.
rand_axi_master(inaxi_test): Respect burst type restrictions when emitting ATOPs.
axi_pkg: Addbufferableandmodifiablehelper functions.axi_dw_converter: Add support for single-beat fixed bursts in the downsizer and for fixed bursts of any length in the upsizer.
axi_dw_downsizer(part ofaxi_dw_converter): Downsize regardless of the modifiable bit of incoming transactions. Previously, non-modifiable transactions whose attributes would have to be modified for downsizing were rejected with a slave error. As of this change, transactions are downsized and their attributes modified even if their modifiable bit is not set. This is permitted by a note in the AXI specification (page A4-65 of IHI0022H).
axi_dw_downsizer(part ofaxi_dw_converter): Fix condition for keeping transactions that have a smallersizethan the master/downstream port unmodified.
axi_serializer: serialize transactions with different IDs to the same ID.
axi_modify_address:- Simplify redundant
slv_resp_tandmst_resp_tparameters to singleaxi_resp_tparameter. - Remove unnecessary
slv_a{r,w}_addr_ooutputs, which were fed back from theslv_req_iinputs. Those signals can instead be derived outsideaxi_modify_address.
- Simplify redundant
axi_modify_address_intf:- Change name of slave port to
slvand master port tomstand change name of associated parameters to align them with repository conventions. - Change type of parameters to
int unsignedbecause their values are unsigned. - Add parameters for data, ID, and user width to avoid derivation from interface, which is incompatible with many tools.
- Add missing I/O suffixes to port names and align them with
axi_modify_address.
- Change name of slave port to
axi_modify_address_intf: Fix type parameters passed to actual implementation.
axi_pkg: Addwrap_boundaryfunction to calculate the boundary of a wrapping burst.axi_test: The random AXI masterrand_axi_mastercan now emit wrapping bursts (but does not do so by default). Three new parameters control the burst types of the emitted transactions; not setting those parameters means the random master behaves as it did before this change.- Interface
AXI_BUS_DV: AddMonitormodport, in which all signals are inputs. axi/assign.svh: AddAXI_ASSIGN_MONITORmacro, which assigns anAXI_BUSto anAXI_BUS_DV.Monitor.- Package
axi_test: Addaxi_scoreboardclass, which checks that data read from a memory address matches data written to that address.
axi_pkg:- The
beat_addrfunction now supports all burst types. Due to this, the function has two new arguments (the length and type of the burst). - The
beat_upper_byteandbeat_lower_bytefunctions internally callbeat_addr, so they have two new arguments as well.
- The
axi_lite_to_axi: ExposeAxCACHEsignals. It is now possible to define thecachesignal of AXI transactions coming out of this module by driving the addedslv_aw_cache_iandslv_ar_cache_iinputs. To retain the behavior prior to this change, tie those two inputs to zero.
axi_modify_address: Fix unconnectedw_valid.axi_dw_converter: Fix internal inversion of up- and downconversion, which led to incorrect lane steering and serialization.rand_axi_master(inaxi_test): In ATOP mode, this module could get stuck receiving an R beat when only writes (without ATOP read responses) were left to complete. This has been fixed.assign.svh: Remove spurious semicolons.axi_lite_to_apb: Fix message of assertion checking the strobe width.
axi_dw_converter: a data width converter between AXI interfaces of any data width. Depending on its parametrization, this module instantiates one of the following:axi_dw_downsizer: a data width converter between a wide AXI master and a narrower slave.axi_dw_upsizer: a data width converter between a narrow AXI master and a wider slave.
- Add
axi_isolateto isolate downstream slaves from receiving new transactions.
axi_lite_to_axi: Add mandatoryAxiDataWidthparameter to enable fix mentioned below.
- Improve compatibility with Xcelium:
- by removing unsupported hierarchical argument to
$bits()function inaxi_lite_to_axi; - by removing unsupported
structassignment inaxi_lite_demux.
- by removing unsupported hierarchical argument to
axi_err_slv: Add optional parameter to define data returned by read response. The parameter defaults to a 64-bit value, so buses with data width larger than or equal to 64 bit see an additional 32-bit value in error responses compared to the prior version. Other than that, this change is fully backward compatible.
axi_atop_filter: Fix underflow in counter forAxiMaxWriteTxns = 1.
- Remove whitespace in and semicolon after macro calls.
axi_intf: Improve Verilator compatibility by disabling unsupported assertions.
axi_cdc_intf: Add interface variant of AXI clock domain crossing.
axi_cdc: Remove unused globalimport axi_pkg::*.axi_intf: Remove globalimport axi_pkg::*and explicitly use symbols fromaxi_pkg.axi_lite_cut_intf: Add missing assigns to and from interface ports.tb_axi_cdc:- Remove global
import axi_pkg::*. - Define channels with
AXI_TYPEDEFmacros instead of localtypedefs.
- Remove global
- Remove unused
AXI_ARBITRATIONandAXI_ROUTING_RULESinterfaces.
axi_intf: Add single-channel assertions toAXI_BUS_DV.
axi_lite_to_apb: Fix the interface version (axi_lite_to_apb_intf) to match the changes from version0.15.0.axi_demux: WhenMaxTranswas 1, theIdCounterWidthbecame 0. This has been fixed.axi_atop_filter:- The master interface of this module in one case depended on
aw_readybefore applyingw_valid, which is a violation of the AXI specification that can lead to deadlocks. This issue has been fixed by removing that dependency. - The slave interface of this module could illegally change the value of B and R beats between valid and handshake. This has been fixed.
- The master interface of this module in one case depended on
rand_axi_master(inaxi_test):- Fix infinite wait in
send_wstask. - Decouple generation of AWs from sending them. This allows to apply W beats before or simultaneous with AW beats.
- Fix infinite wait in
rand_axi_slave(inaxi_test):- Decouple receiving of Ws from receiving of AWs. This allows to receive W beats independent of AW beats.
- Update
common_cellsto1.16.4to fix synthesis warning inid_queue.
axi_burst_splitter: Split AXI4 bursts to single-beat transactions.
axi_lite_to_apb: Thepselfield of theapb_req_tstruct is now a single bit. That is, every APB slave has its own request struct. Accordingly,apb_req_ois now an array withNoApbSlavesentries.axi_decerr_slvhas been replaced by a more genericaxi_err_slv, which takes the kind of error as parameter. Thisaxi_err_slvno longer has aFallThroughparameter; instead, a response (i.e., B or R beat) now always comes one cycle after the AW or AR beat (as required by the AXI Spec) but the slave can accept a W beat in the same cycle as the corresponding AW beat. Additionally,axi_err_slvgot a parameterATOPsthat defines if it supports atomic operations.axi_to_axi_lite: Rework module to structs and add burst support.
axi_demux: Thecasestatement controlling the counters had not been specifieduniqueeven though it qualified for it. This has been fixed.axi_lite_mux_intf: Fix signal names in internal assignments, names of parameters ofaxi_lite_muxinstance, and typos in assertion messages.
- Add
axi_lite_mailbox: AXI4-Lite mailbox.
axi_xbar_intf: Add interface variant of crossbar.
axi_atop_filter: Fix ModelSim warnings by addingdefaultstatement. The signal in thecasehas a single bit, and both values were correctly handled in synthesis. However, when starting simulation, the signal has an undefined value, and ModelSim threw warnings that this violated theuniquecondition.axi_demux: Movetypedefoutsidegeneratefor compatibility with VCS.axi_id_prepend:- Fix text of some assertion messages.
- Fix case of prepending a single-bit ID.
tb_axi_xbar: Fix for localparamAxiIdWidthSlavesto be dependent on the number of masters.
axi_lite_to_apb: AXI4-Lite to APB4 converter.
axi_cdc: Add a safe AXI clock domain crossing (CDC) implementation.
- The interface variants of
axi_demuxandaxi_muxhave been changed to match the convention for interface variants in this repository:axi_demux_wrap: Change name toaxi_demux_intfand change parameter names to ALL_CAPS.axi_mux_wrap: Change name toaxi_mux_intf, and change parameter names to ALL_CAPS.
axi_demux: Default parameters to0.
axi_demux: Add parameter case forNoMstPorts == 1.
axi_atop_filter: Remove unreachabledefaultinunique caseblock.axi_demux_wrap: Fix signals passed to demux.axi_lite_demux_intf: Fix signal passed to demux.axi_lite_mux: Add missing declaration ofr_fifo_push.
axi_lite_xbar: Fix synthesis forNoMstPorts == 1.
axi_lite_xbar: fully-connected AXI4-Lite crossbar.axi_lite_demux: AXI4-Lite demultiplexer from one slave port to a configurable number of master ports.axi_lite_mux: AXI4-Lite multiplexer from a configurable number of slave ports to one master port.
axi_test: Extended package with random AXI4-Lite master and slave test bench classes.
axi_pkg: Fix value ofCUT_ALL_PORTS(inxbar_latency_e) in Vivado synthesis.
axi_decerr_slv: Fix parameter to be UpperCamelCase
axi_test: Constrained randomizing AXI master (rand_axi_master) and slave (rand_axi_slave).rand_axi_masterissues a configurable number of read and write transactions to configurable memory regions (address ranges with associated memory types) and with random properties within constraints (e.g., burst length, exclusive accesses, atomic operations).rand_axi_slaveresponds to transactions with random delays and data.
axi_pkg: AXI memory types (mem_type_t) and functionsget_arcacheandget_awcacheto calculateAxCACHEbits for a given memory type.- Add
axi_decerr_slv. - Add
axi_id_prepend. - Add fully compliant
axi_xbar. - Add documentation on
axi_mux,axi_demuxandaxi_xbar - Module overview to
README.md
axi_test: Theresettasks inaxi_driverandaxi_lite_driverare now functions.- Bump
common_cellsto1.16.0which contains the address decoding logic used inaxi_xbar.
axi_intfmove import into interface bodies.axi_pkgmake functions automatic, fixing a problem with Synopsys.
src_files.yml: Addonly_localflag foraxi_test.axi_test:- Add missing default parameters to
axi_lite_driver. - Move wildcard import from
axi_testinto package to prevent pollution of compilation unit.
- Add missing default parameters to
axi_pkg: Functions to calculate addresses and byte positions within a beat.
All modules have been changed from SystemVerilog interfaces to struct ports. Thus, all modules in
this repository are now available in tools that do not support interfaces. Interfaces are now
opt-in: every module has a variant with _intf suffix that is functionally equivalent but has
interfaces instead of struct ports. If you would like to keep using interfaces, please add an
_intf suffix to any module you are using from this repository. Some _intf variants require more
parameters (e.g., to define the ID width) than the module prior to this release, but otherwise the
_intf variants are drop-in replacements.
We encourage the use of structs to build AXI infrastructure, and we have added a set of typdef
macros and have extended the assign macros to keep designers productive and prevent mismatches.
Additionally, we have removed a set of modules that had known issues. We will provide new implementations for these modules in near-term releases and no longer support the removed modules.
The individual changes for each module follow.
assign.svh:- Macros for setting an AXI or AXI-Lite interface from channel or request/response structs inside
a process (
AXI_SET_FROM_*andAXI_LITE_SET_FROM_*) and outside a process like an assignment (AXI_ASSIGN_FROM_*andAXI_LITE_ASSIGN_FROM_*). - Macros for setting channel or request/response structs to the signals of an AXI or AXI-Lite
interface inside a process (
AXI_SET_TO_*andAXI_LITE_SET_TO_*) and outside a process like an assignment (AXI_ASSIGN_TO_*,AXI_LITE_ASSIGN_TO_*).
- Macros for setting an AXI or AXI-Lite interface from channel or request/response structs inside
a process (
typedef.svh: Macros for defining AXI or AXI-Lite channel (AXI_TYPEDEF_*_CHAN_TandAXI_LITE_TYPEDEF_*_CHAN_T) and request/response structs (AXI_TYPEDEF_RE{Q,SP}_TandAXI_LITE_TYPEDEF_RE{Q,SP}_T).
axi_atop_filterhas been changed from interfaces to struct ports. Please use the newly addedaxi_atop_filter_intfmodule if you prefer interfaces.axi_cuthas been changed from interfaces to struct ports. Please use the newly addedaxi_cut_intfmodule if you prefer interfaces.axi_delayerhas been changed from interfaces to struct ports. Please use the newly addedaxi_delayer_intfmodule if you prefer interfaces.axi_joinhas been renamed toaxi_join_intf, andaxi_lite_joinhas been renamed toaxi_lite_join_intf. To join two structs, simply assign them instead.axi_multicuthas been changed from interfaces to struct ports. Please use the newly addedaxi_multicut_intfmodule if you prefer interfaces.axi_modify_addresshas been changed from interfaces to struct ports. Please use the newly addedaxi_modify_address_intfmodule if you prefer interfaces.axi_lite_to_axihas been changed from interfaces to struct ports. Please use the newly addedaxi_lite_to_axi_intfmodule if you prefer interfaces.
axi_lite_xbar: This interconnect module was not a full crossbar and its routing rules interface no longer fits our demands. A replacement will be provided in a near-term release.axi_address_resolverwas used together withaxi_lite_xbarand is removed along with it. If a standalone replacement for this module is required, please useaddr_decoderfromcommon_cells.axi_arbiterwas used together withaxi_lite_xbarand is removed along with it. If a standalone replacement of this module is required, please userr_arb_treefromcommon_cells. A near-term release will introduce an AXI multiplexer and demultiplexer to suit protocol-specific needs.axi_id_remaphad problems with ordering and ATOPs. A new, correct implementation will be provided in a near-term release.axi_lite_cuthas been rendered unnecessary by changingaxi_cutto struct ports. To get a cut with AXI-Lite ports, simply pass AXI-Lite channels and request/response structs as parameters. If you prefer interfaces, please replace anyaxi_lite_cutwith the newly addedaxi_lite_cut_intfmodule.axi_lite_multicut: same rationale and transition procedure as foraxi_lite_cut.- In
axi_pkg, the*Widthlocalparams and theid_t,addr_t, etc.typedefs have been removed. There is no one-fits-all value of these parameters, so we cannot provide a generic definition for them in this package. Please use the added macros intypedef.svhto define your own types with a few lines of code (which you can put into your own package, for example).
- axi_to_axi_lite: Fix underflow in internal buffers.
- axi_to_axi_lite: Remove restriction on size of internal buffers.
- axi_multicut: Simplified implementation without changing I/O behavior.
- src_files: Removed
axi_test.svfrom synthesized files. - tb_axi_lite_xbar: Fixed AW->W dependency.
- The
inandoutmodports have been removed from the interface definition of both AXI and AXI Lite. These modports were "aliases" ofSlaveandMaster, respectively, and caused problems because many tools did not recognize the aliases as being identical toSlaveandMaster.
- AXI interfaces now include the
aw_atopsignal. Interfaces, macros, and existing modules and TBs in this repository have been updated. The ReadMe has been updated to guide users of this repository on how to deal with theaw_atopsignal.
- Add AXI atomic operations (ATOPs) filter.
- Replace non-ASCII characters in Solderpad license text.
- Add a trailing semicolon to the
AXI_ASSIGN()andAXI_LITE_ASSIGN()macros inassign.svh(#8). Those macros can now be used without a semicolon. Existing code that uses the macros with a semicolon do not break.
- Add axi channel delayer
- Remove clock from
AXI_BUSandAXI_LITE. Such a clock signal is useful for testing purposes but confusing (or even harmful) in hardware designs. For testing purposes, theAXI_BUS_DVandAXI_LITE_DV(suffix for "design verification") interfaces have been defined instead.
- Update
src_files.ymlto matchBender.yml. - Add missing
axi_testto compile script.
- Fix
common_cellsdependency to open-source repo
- Make
axi_cutandaxi_multicutverilator compatible
- Add license file and adjust copyright headers.
- Add test mode signal to
axi_to_axi_liteadapter, used in the FIFOs. - Remove
axi_find_first_onefrom src_files.yml - Fix release ID issue in ID
axi_id_remap
- Remove time unit from test package. Fixes an issue in the AXI driver.
- Add AXI ID remapper.
- Fixed typos in the AXI and AXI-Lite multicuts.
- Fixed ID width in AXI ID remapper.
- AXI join now asserts if width of outgoing ID is larger or equal to width of incoming ID.
- AXI and AXI-Lite multicuts
- Remove
axi_find_first_one.svfrom manifest
- AXI cut
- Initial release with various interfaces, drivers for testbenches, and utility modules.