Radical Computer Technologies
Interfaces / entity

radif_axi_lite_to_reg

Documentation version: 0.2.0 / Subpackage: radif_axi / Source package: radif

AXI4-Lite slave bridge to the RadIF register transaction interface. Turns AXI read/write handshakes into one-cycle register request pulses and returns ready/valid responses to the bus.

Use Cases

Block Diagram

radif_axi_lite_to_reg radhdl entity S_AXI clk rstn reg_data_out reg_wr_rdy reg_rd_rdy reg_wr_valid reg_rd_valid reg_error reg_wr_addr reg_rd_addr reg_wr_en reg_rd_en reg_data_in
VHDL Include And Instantiation Template

File Header

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

library radhdl;
-- Direct entity instantiation below does not require importing the entity name.
use radhdl.interfaces.all;
-- Narrower alternative: use radhdl.interfaces_axi.all;

Component Declaration

component radif_axi_lite_to_reg is
  generic (
    DATA_WIDTH : integer := 32;
    ADDR_WIDTH : integer := 16;
    AXI_ADDR_WIDTH : integer := 16;
    VENDOR_TAG : string := "XILINX";
    PRODUCT_SERIES_TAG : string := "GENERIC"
  );
  port (
    s_axi_awaddr : in std_logic_vector(AXI_ADDR_WIDTH - 1 downto 0);
    s_axi_awprot : in std_logic_vector(2 downto 0);
    s_axi_awvalid : in std_logic;
    s_axi_awready : out std_logic;
    s_axi_wdata : in std_logic_vector(DATA_WIDTH - 1 downto 0);
    s_axi_wstrb : in std_logic_vector((DATA_WIDTH / 8) - 1 downto 0);
    s_axi_wvalid : in std_logic;
    s_axi_wready : out std_logic;
    s_axi_bresp : out std_logic_vector(1 downto 0);
    s_axi_bvalid : out std_logic;
    s_axi_bready : in std_logic;
    s_axi_araddr : in std_logic_vector(AXI_ADDR_WIDTH - 1 downto 0);
    s_axi_arprot : in std_logic_vector(2 downto 0);
    s_axi_arvalid : in std_logic;
    s_axi_arready : out std_logic;
    s_axi_rdata : out std_logic_vector(DATA_WIDTH - 1 downto 0);
    s_axi_rresp : out std_logic_vector(1 downto 0);
    s_axi_rvalid : out std_logic;
    s_axi_rready : in std_logic;
    clk : in std_logic;
    rstn : in std_logic;
    reg_wr_addr : out std_logic_vector(ADDR_WIDTH - 1 downto 0);
    reg_rd_addr : out std_logic_vector(ADDR_WIDTH - 1 downto 0);
    reg_wr_en : out std_logic;
    reg_rd_en : out std_logic;
    reg_data_in : out std_logic_vector(DATA_WIDTH - 1 downto 0);
    reg_data_out : in std_logic_vector(DATA_WIDTH - 1 downto 0);
    reg_wr_rdy : in std_logic;
    reg_rd_rdy : in std_logic;
    reg_wr_valid : in std_logic;
    reg_rd_valid : in std_logic;
    reg_error : in std_logic
  );
end component;

Direct Entity Instantiation

u_radif_axi_lite_to_reg : entity radhdl.radif_axi_lite_to_reg
  generic map (
    DATA_WIDTH         => 32,
    ADDR_WIDTH         => 16,
    AXI_ADDR_WIDTH     => 16,
    VENDOR_TAG         => "XILINX",
    PRODUCT_SERIES_TAG => "GENERIC"
  )
  port map (
    s_axi_awaddr  => <s_axi_awaddr_signal>,
    s_axi_awprot  => <s_axi_awprot_signal>,
    s_axi_awvalid => <s_axi_awvalid_signal>,
    s_axi_awready => <s_axi_awready_signal>,
    s_axi_wdata   => <s_axi_wdata_signal>,
    s_axi_wstrb   => <s_axi_wstrb_signal>,
    s_axi_wvalid  => <s_axi_wvalid_signal>,
    s_axi_wready  => <s_axi_wready_signal>,
    s_axi_bresp   => <s_axi_bresp_signal>,
    s_axi_bvalid  => <s_axi_bvalid_signal>,
    s_axi_bready  => <s_axi_bready_signal>,
    s_axi_araddr  => <s_axi_araddr_signal>,
    s_axi_arprot  => <s_axi_arprot_signal>,
    s_axi_arvalid => <s_axi_arvalid_signal>,
    s_axi_arready => <s_axi_arready_signal>,
    s_axi_rdata   => <s_axi_rdata_signal>,
    s_axi_rresp   => <s_axi_rresp_signal>,
    s_axi_rvalid  => <s_axi_rvalid_signal>,
    s_axi_rready  => <s_axi_rready_signal>,
    clk           => <clk_signal>,
    rstn          => <rstn_signal>,
    reg_wr_addr   => <reg_wr_addr_signal>,
    reg_rd_addr   => <reg_rd_addr_signal>,
    reg_wr_en     => <reg_wr_en_signal>,
    reg_rd_en     => <reg_rd_en_signal>,
    reg_data_in   => <reg_data_in_signal>,
    reg_data_out  => <reg_data_out_signal>,
    reg_wr_rdy    => <reg_wr_rdy_signal>,
    reg_rd_rdy    => <reg_rd_rdy_signal>,
    reg_wr_valid  => <reg_wr_valid_signal>,
    reg_rd_valid  => <reg_rd_valid_signal>,
    reg_error     => <reg_error_signal>
  );

Generics

NameTypeDefaultDescription
DATA_WIDTHinteger32Sets the bit width for DATA WIDTH values carried by this module.
ADDR_WIDTHinteger16Sets the bit width for ADDR WIDTH values carried by this module.
AXI_ADDR_WIDTHinteger16Sets the bit width for AXI ADDR WIDTH values carried by this module.
VENDOR_TAGstring"XILINX"Selects the vendor-specific implementation path, usually XILINX for DSP48/XPM-backed builds or generic for portable RTL.
PRODUCT_SERIES_TAGstring"GENERIC"Identifies the target FPGA family so wrappers can choose the correct primitive or conservative portable behavior.

Ports

NameDirectionTypeDescription
s_axi_awaddrinstd_logic_vector(AXI_ADDR_WIDTH - 1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_awprotinstd_logic_vector(2 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_awvalidinstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_awreadyoutstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_wdatainstd_logic_vector(DATA_WIDTH - 1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_wstrbinstd_logic_vector((DATA_WIDTH / 8) - 1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_wvalidinstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_wreadyoutstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_brespoutstd_logic_vector(1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_bvalidoutstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_breadyinstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_araddrinstd_logic_vector(AXI_ADDR_WIDTH - 1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_arprotinstd_logic_vector(2 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_arvalidinstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_arreadyoutstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_rdataoutstd_logic_vector(DATA_WIDTH - 1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_rrespoutstd_logic_vector(1 downto 0)AXI4-Lite slave-channel signal used for host register access.
s_axi_rvalidoutstd_logicAXI4-Lite slave-channel signal used for host register access.
s_axi_rreadyinstd_logicAXI4-Lite slave-channel signal used for host register access.
clkinstd_logicClock for the associated synchronous logic and handshake domain.
rstninstd_logicActive-low reset for this clock domain.
reg_wr_addroutstd_logic_vector(ADDR_WIDTH - 1 downto 0)Register write address issued to the internal RadIF register target.
reg_rd_addroutstd_logic_vector(ADDR_WIDTH - 1 downto 0)Register read address issued to the internal RadIF register target.
reg_wr_enoutstd_logicOne-cycle write request pulse for the internal register target.
reg_rd_enoutstd_logicOne-cycle read request pulse for the internal register target.
reg_data_inoutstd_logic_vector(DATA_WIDTH - 1 downto 0)Write data presented to the internal register target.
reg_data_outinstd_logic_vector(DATA_WIDTH - 1 downto 0)Read data returned by the internal register target.
reg_wr_rdyinstd_logicWrite-side ready indication from the internal register target.
reg_rd_rdyinstd_logicRead-side ready indication from the internal register target.
reg_wr_validinstd_logicWrite response valid indication from the internal register target.
reg_rd_validinstd_logicRead response valid indication from the internal register target.
reg_errorinstd_logicRegister target error flag converted into the external bus error response.

Register Interfaces

No fixed register map was found; this section documents the exposed register/control interface ports.

InterfaceDirectionsSignalsRepresentative ports
S_AXIin, out19s_axi_awaddr, s_axi_awprot, s_axi_awvalid, s_axi_awready, s_axi_wdata, s_axi_wstrb, s_axi_wvalid, s_axi_wready, +11 more
Register control/statusin, out11reg_wr_addr, reg_rd_addr, reg_wr_en, reg_rd_en, reg_data_in, reg_data_out, reg_wr_rdy, reg_rd_rdy, +3 more

Testbenches

tb_radif_axi_lite_to_reg interface timing diagram

Source: interfaces/hdl/radif/testbenches/tb_radif_axi_lite_to_reg.vhd

Self-checking or stimulus-focused testbench for axi lite to reg. Exercises representative handshakes, reset behavior, frame boundaries, and numeric corner cases for regression runs.

Interface Timing Diagram

Source: interfaces/hdl/radif/testbenches/tb_radif_axi_lite_to_reg.vhd

clk
rstn
reg_rd_valid
reg_wr_valid
reg_data_in
reg_data_out
reg_rd_addr
reg_wr_addr
reg_error
reg_rd_en
reg_rd_rdy
reg_wr_en
reg_wr_rdy
S_AXI
S_AXI interface signals

S_AXI Interface Waveform

Source: interfaces/hdl/radif/testbenches/tb_radif_axi_lite_to_reg.vhd

s_axi_arready
s_axi_arvalid
s_axi_awready
s_axi_awvalid
s_axi_bready
s_axi_bvalid
s_axi_rready
s_axi_rvalid
s_axi_wready
s_axi_wvalid
s_axi_araddr
s_axi_awaddr
s_axi_rdata
s_axi_wdata
s_axi_arprot
s_axi_awprot
s_axi_bresp
s_axi_rresp
s_axi_wstrb

Sources