Radical Computer Technologies
Interfaces / entity

radif_axi_lite_to_reg

Documentation version: 0.2.1 / 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 captured waveform

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.

Artifacts: status, vcd

Captured GHDL Waveform

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

clk
rstn
awaddr[15:0]
awprot[2:0]
awvalid
awready
wdata[31:0]
wstrb[3:0]
wvalid
wready
bresp[1:0]
bvalid
bready
araddr[15:0]
arprot[2:0]
arvalid
arready
rdata[31:0]
rresp[1:0]
rvalid
rready
wr_addr[15:0]
rd_addr[15:0]
wr_en
rd_en
reg_din[31:0]
reg_dout[31:0]
wr_rdy
rd_rdy
wr_valid
rd_valid
reg_error
reg_wr_addr[15:0]
reg_rd_addr[15:0]
reg_wr_en
reg_rd_en
reg_data_in[31:0]
reg_data_out[31:0]
reg_wr_rdy
reg_rd_rdy
reg_wr_valid
reg_rd_valid
awready_r
wready_r
bvalid_r
arready_r
rvalid_r
bresp_r[1:0]
rresp_r[1:0]
rdata_r[31:0]
reg_wr_addr_r[15:0]
reg_rd_addr_r[15:0]
reg_wdata_r[31:0]
wr_pulse
rd_pulse
data_in[31:0]
data_out[31:0]
error
rd_data_r[31:0]
wr_v_r
rd_v_r
err_r
S_AXI
S_AXI interface signals

S_AXI Interface Waveform

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

s_axi_awaddr[15:0]
s_axi_awprot[2:0]
s_axi_awvalid
s_axi_awready
s_axi_wdata[31:0]
s_axi_wstrb[3:0]
s_axi_wvalid
s_axi_wready
s_axi_bresp[1:0]
s_axi_bvalid
s_axi_bready
s_axi_araddr[15:0]
s_axi_arprot[2:0]
s_axi_arvalid
s_axi_arready
s_axi_rdata[31:0]
s_axi_rresp[1:0]
s_axi_rvalid
s_axi_rready

Sources