Radical Computer Technologies
Interfaces / entity

radif_reg_bank

Documentation version: 0.2.1 / Subpackage: radif_regbank / Source package: radif

Configurable RadIF register bank with software-visible storage. Provides ready/valid read and write responses for a parameterized set of memory-mapped control/status registers.

Use Cases

Block Diagram

radif_reg_bank radhdl entity clk rstn wr_addr rd_addr wr_en rd_en data_in read_only_regs_i data_out read_write_regs_o wr_rdy rd_rdy wr_valid rd_valid error
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_regbank.all;

Component Declaration

component radif_reg_bank is
  generic (
    DATA_WIDTH : integer := 32;
    ADDR_WIDTH : integer := 16;
    READ_ONLY_REG_COUNT : integer := 8;
    READ_WRITE_REG_COUNT : integer := 64;
    VENDOR_TAG : string := "XILINX";
    PRODUCT_SERIES_TAG : string := "GENERIC"
  );
  port (
    clk : in std_logic;
    rstn : in std_logic;
    wr_addr : in std_logic_vector(ADDR_WIDTH - 1 downto 0);
    rd_addr : in std_logic_vector(ADDR_WIDTH - 1 downto 0);
    wr_en : in std_logic;
    rd_en : in std_logic;
    data_in : in std_logic_vector(DATA_WIDTH - 1 downto 0);
    data_out : out std_logic_vector(DATA_WIDTH - 1 downto 0);
    read_only_regs_i : in radif_reg_array_t(0 to READ_ONLY_REG_COUNT - 1)(DATA_WIDTH - 1 downto 0);
    read_write_regs_o : out radif_reg_array_t(0 to READ_WRITE_REG_COUNT - 1)(DATA_WIDTH - 1 downto 0);
    wr_rdy : out std_logic;
    rd_rdy : out std_logic;
    wr_valid : out std_logic;
    rd_valid : out std_logic;
    error : out std_logic
  );
end component;

Direct Entity Instantiation

u_radif_reg_bank : entity radhdl.radif_reg_bank
  generic map (
    DATA_WIDTH           => 32,
    ADDR_WIDTH           => 16,
    READ_ONLY_REG_COUNT  => 8,
    READ_WRITE_REG_COUNT => 64,
    VENDOR_TAG           => "XILINX",
    PRODUCT_SERIES_TAG   => "GENERIC"
  )
  port map (
    clk               => <clk_signal>,
    rstn              => <rstn_signal>,
    wr_addr           => <wr_addr_signal>,
    rd_addr           => <rd_addr_signal>,
    wr_en             => <wr_en_signal>,
    rd_en             => <rd_en_signal>,
    data_in           => <data_in_signal>,
    data_out          => <data_out_signal>,
    read_only_regs_i  => <read_only_regs_i_signal>,
    read_write_regs_o => <read_write_regs_o_signal>,
    wr_rdy            => <wr_rdy_signal>,
    rd_rdy            => <rd_rdy_signal>,
    wr_valid          => <wr_valid_signal>,
    rd_valid          => <rd_valid_signal>,
    error             => <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.
READ_ONLY_REG_COUNTinteger8Configures READ ONLY REG COUNT for this instance.
READ_WRITE_REG_COUNTinteger64Configures READ WRITE REG COUNT for this instance.
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
clkinstd_logicClock for the associated synchronous logic and handshake domain.
rstninstd_logicActive-low reset for this clock domain.
wr_addrinstd_logic_vector(ADDR_WIDTH - 1 downto 0)Wr addr interface signal.
rd_addrinstd_logic_vector(ADDR_WIDTH - 1 downto 0)Readback control or data signal for host-visible captured state.
wr_eninstd_logicWr en interface signal.
rd_eninstd_logicReadback control or data signal for host-visible captured state.
data_ininstd_logic_vector(DATA_WIDTH - 1 downto 0)Data in interface signal.
data_outoutstd_logic_vector(DATA_WIDTH - 1 downto 0)Data out interface signal.
read_only_regs_iinradif_reg_array_t(0 to READ_ONLY_REG_COUNT - 1)(DATA_WIDTH - 1 downto 0)Input read only regs i signal for this module.
read_write_regs_ooutradif_reg_array_t(0 to READ_WRITE_REG_COUNT - 1)(DATA_WIDTH - 1 downto 0)Output read write regs o signal generated by this module.
wr_rdyoutstd_logicWr rdy interface signal.
rd_rdyoutstd_logicReadback control or data signal for host-visible captured state.
wr_validoutstd_logicWr valid interface signal.
rd_validoutstd_logicReadback control or data signal for host-visible captured state.
erroroutstd_logicError interface signal.

Register Interfaces

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

InterfaceDirectionsSignalsRepresentative ports
Register control/statusin, out8wr_addr, rd_addr, wr_en, rd_en, wr_rdy, rd_rdy, wr_valid, rd_valid

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
tb_radif_reg_bank captured waveform

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

Self-checking or stimulus-focused testbench for reg bank. 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_reg_bank.vhd

clk
rstn
wr_addr[15:0]
rd_addr[15:0]
wr_en
rd_en
din[31:0]
dout[31:0]
wr_rdy
rd_rdy
wr_valid
rd_valid
error
data_in[31:0]
data_out[31:0]
rd_data_r[31:0]
wr_v_r
rd_v_r
err_r
tb_radif_reg_interconnect captured waveform

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

Self-checking or stimulus-focused testbench for reg interconnect. 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_reg_interconnect.vhd

clk
rstn
wr_addr[15:0]
rd_addr[15:0]
wr_en
rd_en
data_in[31:0]
data_out[31:0]
wr_rdy
rd_rdy
wr_valid
rd_valid
error
s_wr_addr[31:0]
s_rd_addr[31:0]
s_wr_en[1:0]
s_rd_en[1:0]
s_data_in[63:0]
s_data_out[63:0]
s_wr_rdy[1:0]
s_rd_rdy[1:0]
s_wr_valid[1:0]
s_rd_valid[1:0]
s_error[1:0]
wr_addr_i[15:0]
rd_addr_i[15:0]
wr_en_i
rd_en_i
data_in_i[31:0]
data_out_o[31:0]
wr_rdy_o
rd_rdy_o
wr_valid_o
rd_valid_o
error_o
s_wr_addr_o[31:0]
s_rd_addr_o[31:0]
s_wr_en_o[1:0]
s_rd_en_o[1:0]
s_data_in_o[63:0]
s_data_out_i[63:0]
s_wr_rdy_i[1:0]
s_rd_rdy_i[1:0]
s_wr_valid_i[1:0]
s_rd_valid_i[1:0]
s_error_i[1:0]
wr_sel
rd_sel
wr_hit
rd_hit
wr_resp_sel_r
rd_resp_sel_r
wr_miss_r
rd_miss_r
rd_data_r[31:0]
wr_v_r
rd_v_r
err_r
tb_radif_smi16_to_reg captured waveform

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

Self-checking or stimulus-focused testbench for smi16 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_smi16_to_reg.vhd

clk
rstn
cs_n
rd_n
wr_n
wr_addr[15:0]
rd_addr[15:0]
wr_en
rd_en
reg_din[63:0]
reg_dout[63: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[63:0]
reg_data_out[63:0]
reg_wr_rdy
reg_rd_rdy
reg_wr_valid
reg_rd_valid
cs_meta
cs_sync
rd_meta
rd_sync
rd_prev
wr_meta
wr_sync
wr_prev
wr_addr_r[15:0]
rd_addr_r[15:0]
wr_data_r[63:0]
rd_cache_r[63:0]
rd_data_r[15:0]
wr_lane_valid[3:0]
wr_base_addr[15:0]
rd_cache_addr[15:0]
pending_lane
rd_cache_v
wr_en_r
rd_en_r
ack_r
data_in[63:0]
data_out[63:0]
error
rd_data_r[63:0]
wr_v_r
rd_v_r
err_r
SMI
SMI interface signals

SMI Interface Waveform

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

smi_addr[7:0]
smi_din[15:0]
smi_dout[15:0]
smi_oen
smi_ack
smi_cs_n_i
smi_rd_n_i
smi_wr_n_i
smi_addr_i[7:0]
smi_data_i[15:0]
smi_data_o[15:0]
smi_data_oen
smi_ack_o

Sources