Use Cases
- AXI-Stream datapath integration where module boundaries need explicit ready/valid behavior.
- Reusable FPGA DSP pipelines that need fixed-point, timing-aware implementation.
- Memory-mapped control/status integration with software-visible register maps.
Block Diagram
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.dsp.all;
-- Narrower alternative: use radhdl.dsp_detection.all;Component Declaration
component raddsp_axis_fingerprint_matcher is
generic (
VENDOR : string := "xilinx";
DEVICE_FAMILY : string := "generic";
HASH_WIDTH : positive := 64;
META_WIDTH : positive := 32;
TABLE_ADDR_WIDTH : positive := 10;
AXI_ADDR_WIDTH : positive := 8;
AXI_DATA_WIDTH : positive := 32;
MEMORY_STYLE : string := "block"
);
port (
m_axis_tvalid : out std_logic;
m_axis_tready : in std_logic;
m_axis_tdata : out std_logic_vector(HASH_WIDTH + META_WIDTH + 32 - 1 downto 0);
m_axis_tlast : out std_logic;
s_axis_tvalid : in std_logic;
s_axis_tready : out std_logic;
s_axis_tdata : in std_logic_vector(HASH_WIDTH + 64 - 1 downto 0);
s_axis_tlast : in std_logic;
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(AXI_DATA_WIDTH - 1 downto 0);
s_axi_wstrb : in std_logic_vector((AXI_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(AXI_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;
rst : in std_logic;
match_irq_o : out std_logic
);
end component;Direct Entity Instantiation
u_raddsp_axis_fingerprint_matcher : entity radhdl.raddsp_axis_fingerprint_matcher
generic map (
VENDOR => "xilinx",
DEVICE_FAMILY => "generic",
HASH_WIDTH => 64,
META_WIDTH => 32,
TABLE_ADDR_WIDTH => 10,
AXI_ADDR_WIDTH => 8,
AXI_DATA_WIDTH => 32,
MEMORY_STYLE => "block"
)
port map (
m_axis_tvalid => <m_axis_tvalid_signal>,
m_axis_tready => <m_axis_tready_signal>,
m_axis_tdata => <m_axis_tdata_signal>,
m_axis_tlast => <m_axis_tlast_signal>,
s_axis_tvalid => <s_axis_tvalid_signal>,
s_axis_tready => <s_axis_tready_signal>,
s_axis_tdata => <s_axis_tdata_signal>,
s_axis_tlast => <s_axis_tlast_signal>,
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>,
rst => <rst_signal>,
match_irq_o => <match_irq_o_signal>
);Generics
| Name | Type | Default | Description |
|---|---|---|---|
| VENDOR | string | "xilinx" | Selects the vendor-specific implementation path, usually XILINX for DSP48/XPM-backed builds or generic for portable RTL. |
| DEVICE_FAMILY | string | "generic" | Identifies the target FPGA family so wrappers can choose the correct primitive or conservative portable behavior. |
| HASH_WIDTH | positive | 64 | Sets the bit width for HASH WIDTH values carried by this module. |
| META_WIDTH | positive | 32 | Sets the bit width for META WIDTH values carried by this module. |
| TABLE_ADDR_WIDTH | positive | 10 | Sets the bit width for TABLE ADDR WIDTH values carried by this module. |
| AXI_ADDR_WIDTH | positive | 8 | Sets the bit width for AXI ADDR WIDTH values carried by this module. |
| AXI_DATA_WIDTH | positive | 32 | Sets the bit width for AXI DATA WIDTH values carried by this module. |
| MEMORY_STYLE | string | "block" | Configures MEMORY STYLE for this instance. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
| m_axis_tvalid | out | std_logic | Output AXI-stream valid qualifier for the current result beat. |
| m_axis_tready | in | std_logic | Output AXI-stream ready input from the downstream block. |
| m_axis_tdata | out | std_logic_vector(HASH_WIDTH + META_WIDTH + 32 - 1 downto 0) | Output AXI-stream payload containing packed processed result lanes. |
| m_axis_tlast | out | std_logic | Output AXI-stream frame marker aligned with the processed result beat. |
| s_axis_tvalid | in | std_logic | Input AXI-stream valid qualifier for the current sample beat. |
| s_axis_tready | out | std_logic | Input AXI-stream ready response indicating this block can accept a beat. |
| s_axis_tdata | in | std_logic_vector(HASH_WIDTH + 64 - 1 downto 0) | Input AXI-stream payload containing packed sample or feature lanes. |
| s_axis_tlast | in | std_logic | Input AXI-stream frame marker for the final beat of a frame. |
| s_axi_awaddr | in | std_logic_vector(AXI_ADDR_WIDTH - 1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_awprot | in | std_logic_vector(2 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_awvalid | in | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_awready | out | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_wdata | in | std_logic_vector(AXI_DATA_WIDTH - 1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_wstrb | in | std_logic_vector((AXI_DATA_WIDTH / 8) - 1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_wvalid | in | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_wready | out | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_bresp | out | std_logic_vector(1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_bvalid | out | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_bready | in | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_araddr | in | std_logic_vector(AXI_ADDR_WIDTH - 1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_arprot | in | std_logic_vector(2 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_arvalid | in | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_arready | out | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_rdata | out | std_logic_vector(AXI_DATA_WIDTH - 1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_rresp | out | std_logic_vector(1 downto 0) | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_rvalid | out | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| s_axi_rready | in | std_logic | AXI4-Lite slave-channel signal used for host register access. |
| clk | in | std_logic | Clock for the associated synchronous logic and handshake domain. |
| rst | in | std_logic | Active-high synchronous reset for this clock domain. |
| match_irq_o | out | std_logic | Output match irq o signal generated by this module. |
Register Interfaces
Static register maps are rendered below for this module.
| Interface | Directions | Signals | Representative ports |
|---|---|---|---|
| M_AXIS | in, out | 4 | m_axis_tvalid, m_axis_tready, m_axis_tdata, m_axis_tlast |
| S_AXI | in, out | 19 | s_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 |
| S_AXIS | in, out | 4 | s_axis_tvalid, s_axis_tready, s_axis_tdata, s_axis_tlast |
Register Maps
raddsp_axis_fingerprint_matcher_inferred
Register map inferred from C_REG_* constants in the VHDL source. Use this as a software-visible register index until a hand-authored map adds per-bit access details.
| Register | Offset | Access | Reset | Description |
|---|---|---|---|---|
| ctrl | 0x00 | rw | Control register used to configure and control this block. | |
| load_addr | 0x04 | rw | Address or index register used by the software-visible control interface. | |
| load_hash_lo | 0x08 | rw | Data or comparison value register used by the software-visible control interface. | |
| load_hash_hi | 0x0C | rw | Data or comparison value register used by the software-visible control interface. | |
| load_meta | 0x10 | rw | Data or comparison value register used by the software-visible control interface. | |
| command | 0x14 | rw | Control register used to configure and control this block. | |
| mask_lo | 0x18 | rw | Data or comparison value register used by the software-visible control interface. | |
| mask_hi | 0x1C | rw | Data or comparison value register used by the software-visible control interface. | |
| status | 0x20 | rw | Status register exposing current hardware state and latched conditions. | |
| last_hash_lo | 0x24 | rw | Data or comparison value register used by the software-visible control interface. | |
| last_hash_hi | 0x28 | rw | Data or comparison value register used by the software-visible control interface. | |
| last_meta | 0x2C | rw | Data or comparison value register used by the software-visible control interface. | |
| last_bucket | 0x30 | rw | Register inferred from the module's VHDL register constant declarations. | |
| match_count | 0x34 | rw | Configuration or measurement register used by the software-visible control interface. | |
| table_size | 0x38 | rw | Configuration or measurement register used by the software-visible control interface. |
ctrl
Control register used to configure and control this block.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | Ctrl[31:0] | Full register value. |
load_addr
Address or index register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LoadAddr[31:0] | Full register value. |
load_hash_lo
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LoadHashLo[31:0] | Full register value. |
load_hash_hi
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LoadHashHi[31:0] | Full register value. |
load_meta
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LoadMeta[31:0] | Full register value. |
command
Control register used to configure and control this block.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | Command[31:0] | Full register value. |
mask_lo
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | MaskLo[31:0] | Full register value. |
mask_hi
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | MaskHi[31:0] | Full register value. |
status
Status register exposing current hardware state and latched conditions.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | Status[31:0] | Full register value. |
last_hash_lo
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LastHashLo[31:0] | Full register value. |
last_hash_hi
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LastHashHi[31:0] | Full register value. |
last_meta
Data or comparison value register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LastMeta[31:0] | Full register value. |
last_bucket
Register inferred from the module's VHDL register constant declarations.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | LastBucket[31:0] | Full register value. |
match_count
Configuration or measurement register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | MatchCount[31:0] | Full register value. |
table_size
Configuration or measurement register used by the software-visible control interface.
| Name | Register bit(s) | Description |
|---|---|---|
| VALUE | TableSize[31:0] | Full register value. |
Testbenches
tb_raddsp_axis_fingerprint
Self-checking or stimulus-focused testbench for axis fingerprint. Exercises representative handshakes, reset behavior, frame boundaries, and numeric corner cases for regression runs.
Interface Timing Diagram
M_AXIS interface signals
M_AXIS Interface Waveform
S_AXI interface signals
S_AXI Interface Waveform
S_AXIS interface signals
S_AXIS Interface Waveform
tb_raddsp_axis_fingerprint_audio
Self-checking or stimulus-focused testbench for axis fingerprint audio. Exercises representative handshakes, reset behavior, frame boundaries, and numeric corner cases for regression runs.
Interface Timing Diagram
M_AXIS interface signals
M_AXIS Interface Waveform
S_AXI interface signals
S_AXI Interface Waveform
S_AXIS interface signals
S_AXIS Interface Waveform
Sources
- dsp/hdl/raddsp/src/raddsp_axis_fingerprint_matcher.vhd
