Radical Computer Technologies
Debug / entity

RadILA

Documentation version: 0.2.1 / Subpackage: radila / Source package: radila

Integrated logic analyzer capture core for RadHDL debug builds. Samples an application bus in the sample clock domain, captures event metadata, and exposes captured data through an AXI-facing read path.

Use Cases

Block Diagram

RadILA radhdl entity axi_clk axi_rstn sample_clk sample_rstn sample_i event_i cmd_data_i cmd_toggle_i rd_index_i cmd_ack_toggle_o rd_data_o sample_now_o event_now_o armed_o capturing_o done_o overflow_o count_o
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.debug.all;

Component Declaration

component RadILA is
  generic (
    SAMPLE_WIDTH : integer := 32;
    EVENT_WIDTH : integer := 8;
    DEPTH : integer := 1024;
    ADDR_WIDTH : integer := 10;
    CMD_LANES : integer := 4;
    VENDOR_TAG : string := "XILINX";
    PRODUCT_SERIES_TAG : string := "7SERIES"
  );
  port (
    axi_clk : in std_logic;
    axi_rstn : in std_logic;
    sample_clk : in std_logic;
    sample_rstn : in std_logic;
    sample_i : in std_logic_vector(SAMPLE_WIDTH - 1 downto 0);
    event_i : in std_logic_vector(EVENT_WIDTH - 1 downto 0);
    cmd_data_i : in std_logic_vector(CMD_LANES - 1 downto 0);
    cmd_toggle_i : in std_logic;
    cmd_ack_toggle_o : out std_logic;
    rd_index_i : in unsigned(ADDR_WIDTH - 1 downto 0);
    rd_data_o : out std_logic_vector(SAMPLE_WIDTH - 1 downto 0);
    sample_now_o : out std_logic_vector(SAMPLE_WIDTH - 1 downto 0);
    event_now_o : out std_logic_vector(EVENT_WIDTH - 1 downto 0);
    armed_o : out std_logic;
    capturing_o : out std_logic;
    done_o : out std_logic;
    overflow_o : out std_logic;
    count_o : out unsigned(ADDR_WIDTH downto 0)
  );
end component;

Direct Entity Instantiation

u_radila : entity radhdl.RadILA
  generic map (
    SAMPLE_WIDTH       => 32,
    EVENT_WIDTH        => 8,
    DEPTH              => 1024,
    ADDR_WIDTH         => 10,
    CMD_LANES          => 4,
    VENDOR_TAG         => "XILINX",
    PRODUCT_SERIES_TAG => "7SERIES"
  )
  port map (
    axi_clk          => <axi_clk_signal>,
    axi_rstn         => <axi_rstn_signal>,
    sample_clk       => <sample_clk_signal>,
    sample_rstn      => <sample_rstn_signal>,
    sample_i         => <sample_i_signal>,
    event_i          => <event_i_signal>,
    cmd_data_i       => <cmd_data_i_signal>,
    cmd_toggle_i     => <cmd_toggle_i_signal>,
    cmd_ack_toggle_o => <cmd_ack_toggle_o_signal>,
    rd_index_i       => <rd_index_i_signal>,
    rd_data_o        => <rd_data_o_signal>,
    sample_now_o     => <sample_now_o_signal>,
    event_now_o      => <event_now_o_signal>,
    armed_o          => <armed_o_signal>,
    capturing_o      => <capturing_o_signal>,
    done_o           => <done_o_signal>,
    overflow_o       => <overflow_o_signal>,
    count_o          => <count_o_signal>
  );

Generics

NameTypeDefaultDescription
SAMPLE_WIDTHinteger32Sets the bit width for SAMPLE WIDTH values carried by this module.
EVENT_WIDTHinteger8Sets the bit width for EVENT WIDTH values carried by this module.
DEPTHinteger1024Sets the storage depth, frame length, or number of buffered samples used internally.
ADDR_WIDTHinteger10Sets the bit width for ADDR WIDTH values carried by this module.
CMD_LANESinteger4Sets the number of parallel sample lanes processed per handshake beat.
VENDOR_TAGstring"XILINX"Selects the vendor-specific implementation path, usually XILINX for DSP48/XPM-backed builds or generic for portable RTL.
PRODUCT_SERIES_TAGstring"7SERIES"Identifies the target FPGA family so wrappers can choose the correct primitive or conservative portable behavior.

Ports

NameDirectionTypeDescription
axi_clkinstd_logicClock for the associated synchronous logic and handshake domain.
axi_rstninstd_logicActive-low reset for this clock domain.
sample_clkinstd_logicClock for the associated synchronous logic and handshake domain.
sample_rstninstd_logicActive-low reset for this clock domain.
sample_iinstd_logic_vector(SAMPLE_WIDTH - 1 downto 0)Input sample vector captured or processed by the datapath.
event_iinstd_logic_vector(EVENT_WIDTH - 1 downto 0)Event or trigger metadata associated with the current sample stream.
cmd_data_iinstd_logic_vector(CMD_LANES - 1 downto 0)Command/control input used to configure or trigger the block.
cmd_toggle_iinstd_logicCommand/control input used to configure or trigger the block.
cmd_ack_toggle_ooutstd_logicCommand/control acknowledgement or status output.
rd_index_iinunsigned(ADDR_WIDTH - 1 downto 0)Readback control or data signal for host-visible captured state.
rd_data_ooutstd_logic_vector(SAMPLE_WIDTH - 1 downto 0)Readback control or data signal for host-visible captured state.
sample_now_ooutstd_logic_vector(SAMPLE_WIDTH - 1 downto 0)Output sample vector or current sample status from the datapath.
event_now_ooutstd_logic_vector(EVENT_WIDTH - 1 downto 0)Event or trigger metadata associated with the current sample stream.
armed_ooutstd_logicOutput armed o signal generated by this module.
capturing_ooutstd_logicOutput capturing o signal generated by this module.
done_ooutstd_logicOutput done o signal generated by this module.
overflow_ooutstd_logicOutput overflow o signal generated by this module.
count_ooutunsigned(ADDR_WIDTH downto 0)Output count o signal generated by this module.

Register Interfaces

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

InterfaceDirectionsSignalsRepresentative ports
Register control/statusin, out2rd_index_i, rd_data_o

Testbenches

tb_radila_core captured waveform

Source: debug/radila/hdl/radila/testbenches/tb_radila_core.vhd

Self-checking or stimulus-focused testbench for radila core. Exercises representative handshakes, reset behavior, frame boundaries, and numeric corner cases for regression runs.

Artifacts: status, vcd

Captured GHDL Waveform

Source: debug/radila/hdl/radila/testbenches/tb_radila_core.vhd

sample_clk
reg_clk
sample_rstn
reg_rstn
sample[31:0]
event_v[7:0]
irq
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
reg_error
sample_i[31:0]
event_i[7:0]
irq_o
control[31:0]
trig_mask[7:0]
trig_value[7:0]
pretrig[5:0]
posttrig[5:0]
data_index[5:0]
cmd_frame[25:0]
cmd_bit
cmd_pending
cmd_req[2:0]
cmd_data_reg[3:0]
cmd_toggle_reg
cmd_ack_reg
cmd_ack_seen
cmd_data_sample[3:0]
cmd_toggle_sample
cmd_ack_sample
cmd_data_meta1[3:0]
cmd_data_meta2[3:0]
cmd_toggle_meta1
cmd_toggle_meta2
cmd_ack_meta1
cmd_ack_meta2
sample_data[31:0]
sample_now_s[31:0]
event_now_s[7:0]
sample_now_reg[31:0]
event_now_reg[7:0]
armed_s
capturing_s
done_s
overflow_s
count_s[6:0]
status_s[10:0]
status_reg[10:0]
status_meta1[10:0]
status_meta2[10:0]
sample_now_meta1[31:0]
sample_now_meta2[31:0]
event_now_meta1[7:0]
event_now_meta2[7:0]
armed
capturing
done
overflow
count[6:0]
rd_data_r[31:0]
wr_valid_r
rd_valid_r
error_r
axi_clk
axi_rstn
cmd_data_i[3:0]
cmd_toggle_i
cmd_ack_toggle_o
rd_index_i[5:0]
rd_data_o[31:0]
sample_now_o[31:0]
event_now_o[7:0]
armed_o
capturing_o
done_o
overflow_o
count_o[6:0]
wr_ptr[5:0]
sample_cnt[6:0]
post_cnt[6:0]
captured[6:0]
ram_we[0:0]
ram_web_zero[0:0]
wr_addr[5:0]
rd_addr[5:0]
ram_dinb_zero[31:0]
unused_douta[31:0]
trigger_match

Sources