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.
Data Plots
FFT Fingerprint Peak Tracking
Selected bin index and running peak magnitude during fingerprint extraction.
Fingerprint Match Count
Matcher-side count of accepted fingerprint hits in the small directed table.
Captured GHDL Waveform
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
