Radical Computer Technologies
DSP / entity

raddsp_axis_radfft

Documentation version: 0.2.0 / Subpackage: dsp_transform / Source package: raddsp

Top-level AXI-stream RadFFT block. Routes streaming frames through the configured RadDSP FFT implementation and returns ordered frequency-domain samples.

Use Cases

Block Diagram

raddsp_axis_radfft radhdl entity S_AXIS clk rst runtime_inverse_i twiddle_re_i twiddle_im_i M_AXIS twiddle_addr_o busy_o frame_done_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.dsp.all;
-- Narrower alternative: use radhdl.dsp_transform.all;

Component Declaration

component raddsp_axis_radfft is
  generic (
    VENDOR : string := "xilinx";
    DEVICE_FAMILY : string := "ultrascale+";
    G_POINTS : positive := 16;
    G_MAX_POINTS : positive := 2048;
    G_RADIX : positive := 2;
    G_PIPELINED_STREAMING : boolean := false;
    G_INVERSE_FFT : boolean := false;
    G_INPUT_WIDTH : positive := 16;
    G_TWIDDLE_WIDTH : positive := 16;
    G_OUTPUT_WIDTH : positive := 32;
    G_SCALE_EACH_STAGE : boolean := true;
    G_MEMORY_STYLE : string := "block";
    G_TWIDDLE_MEMORY_STYLE : string := "block";
    G_TWIDDLE_INIT_FILE : string := "none";
    G_EXTERNAL_TWIDDLES : boolean := false;
    G_MULTIPLIER_LANES : positive := 1;
    G_MAX_MULTIPLIER_LANES : positive := 8;
    G_MEMORY_WORD_SAMPLES : positive := 1
  );
  port (
    m_axis_tvalid : out std_logic;
    m_axis_tready : in std_logic;
    m_axis_tdata : out std_logic_vector((2 * G_OUTPUT_WIDTH) - 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((2 * G_INPUT_WIDTH) - 1 downto 0);
    s_axis_tlast : in std_logic;
    clk : in std_logic;
    rst : in std_logic;
    runtime_inverse_i : in std_logic := '0';
    twiddle_addr_o : out std_logic_vector(31 downto 0);
    twiddle_re_i : in std_logic_vector(G_TWIDDLE_WIDTH - 1 downto 0);
    twiddle_im_i : in std_logic_vector(G_TWIDDLE_WIDTH - 1 downto 0);
    busy_o : out std_logic;
    frame_done_o : out std_logic
  );
end component;

Direct Entity Instantiation

u_raddsp_axis_radfft : entity radhdl.raddsp_axis_radfft
  generic map (
    VENDOR                 => "xilinx",
    DEVICE_FAMILY          => "ultrascale+",
    G_POINTS               => 16,
    G_MAX_POINTS           => 2048,
    G_RADIX                => 2,
    G_PIPELINED_STREAMING  => false,
    G_INVERSE_FFT          => false,
    G_INPUT_WIDTH          => 16,
    G_TWIDDLE_WIDTH        => 16,
    G_OUTPUT_WIDTH         => 32,
    G_SCALE_EACH_STAGE     => true,
    G_MEMORY_STYLE         => "block",
    G_TWIDDLE_MEMORY_STYLE => "block",
    G_TWIDDLE_INIT_FILE    => "none",
    G_EXTERNAL_TWIDDLES    => false,
    G_MULTIPLIER_LANES     => 1,
    G_MAX_MULTIPLIER_LANES => 8,
    G_MEMORY_WORD_SAMPLES  => 1
  )
  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>,
    clk               => <clk_signal>,
    rst               => <rst_signal>,
    runtime_inverse_i => <runtime_inverse_i_signal>,
    twiddle_addr_o    => <twiddle_addr_o_signal>,
    twiddle_re_i      => <twiddle_re_i_signal>,
    twiddle_im_i      => <twiddle_im_i_signal>,
    busy_o            => <busy_o_signal>,
    frame_done_o      => <frame_done_o_signal>
  );

Generics

NameTypeDefaultDescription
VENDORstring"xilinx"Selects the vendor-specific implementation path, usually XILINX for DSP48/XPM-backed builds or generic for portable RTL.
DEVICE_FAMILYstring"ultrascale+"Identifies the target FPGA family so wrappers can choose the correct primitive or conservative portable behavior.
G_POINTSpositive16Sets the transform, frame, or vector size used by the datapath.
G_MAX_POINTSpositive2048Sets the transform, frame, or vector size used by the datapath.
G_RADIXpositive2Configures G RADIX for this instance.
G_PIPELINED_STREAMINGbooleanfalseConfigures G PIPELINED STREAMING for this instance.
G_INVERSE_FFTbooleanfalseSets the transform, frame, or vector size used by the datapath.
G_INPUT_WIDTHpositive16Sets the bit width for G INPUT WIDTH values carried by this module.
G_TWIDDLE_WIDTHpositive16Sets the bit width for G TWIDDLE WIDTH values carried by this module.
G_OUTPUT_WIDTHpositive32Sets the bit width for G OUTPUT WIDTH values carried by this module.
G_SCALE_EACH_STAGEbooleantrueConfigures G SCALE EACH STAGE for this instance.
G_MEMORY_STYLEstring"block"Configures G MEMORY STYLE for this instance.
G_TWIDDLE_MEMORY_STYLEstring"block"Configures G TWIDDLE MEMORY STYLE for this instance.
G_TWIDDLE_INIT_FILEstring"none"Configures G TWIDDLE INIT FILE for this instance.
G_EXTERNAL_TWIDDLESbooleanfalseConfigures G EXTERNAL TWIDDLES for this instance.
G_MULTIPLIER_LANESpositive1Sets the number of parallel sample lanes processed per handshake beat.
G_MAX_MULTIPLIER_LANESpositive8Sets the number of parallel sample lanes processed per handshake beat.
G_MEMORY_WORD_SAMPLESpositive1Sets the width or count of samples handled by the datapath.

Ports

NameDirectionTypeDescription
m_axis_tvalidoutstd_logicOutput AXI-stream valid qualifier for the current result beat.
m_axis_treadyinstd_logicOutput AXI-stream ready input from the downstream block.
m_axis_tdataoutstd_logic_vector((2 * G_OUTPUT_WIDTH) - 1 downto 0)Output AXI-stream payload containing packed processed result lanes.
m_axis_tlastoutstd_logicOutput AXI-stream frame marker aligned with the processed result beat.
s_axis_tvalidinstd_logicInput AXI-stream valid qualifier for the current sample beat.
s_axis_treadyoutstd_logicInput AXI-stream ready response indicating this block can accept a beat.
s_axis_tdatainstd_logic_vector((2 * G_INPUT_WIDTH) - 1 downto 0)Input AXI-stream payload containing packed sample or feature lanes.
s_axis_tlastinstd_logicInput AXI-stream frame marker for the final beat of a frame.
clkinstd_logicClock for the associated synchronous logic and handshake domain.
rstinstd_logicActive-high synchronous reset for this clock domain.
runtime_inverse_iinstd_logic := '0'Input runtime inverse i signal for this module.
twiddle_addr_ooutstd_logic_vector(31 downto 0)Output twiddle addr o signal generated by this module.
twiddle_re_iinstd_logic_vector(G_TWIDDLE_WIDTH - 1 downto 0)Input twiddle re i signal for this module.
twiddle_im_iinstd_logic_vector(G_TWIDDLE_WIDTH - 1 downto 0)Input twiddle im i signal for this module.
busy_ooutstd_logicOutput busy o signal generated by this module.
frame_done_ooutstd_logicOutput frame done 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
M_AXISin, out4m_axis_tvalid, m_axis_tready, m_axis_tdata, m_axis_tlast
S_AXISin, out4s_axis_tvalid, s_axis_tready, s_axis_tdata, s_axis_tlast

Testbenches

tb_raddsp_axis_radfft reference plots

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft.vhd

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

Interface Timing Diagram

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft.vhd

clk
rst
frame_done_o
twiddle_addr_o
busy_o
runtime_inverse_i
twiddle_im_i
twiddle_re_i
M_AXIS
S_AXIS
M_AXIS interface signals

M_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft.vhd

m_axis_tlast
m_axis_tready
m_axis_tvalid
m_axis_tdata
S_AXIS interface signals

S_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft.vhd

s_axis_tlast
s_axis_tready
s_axis_tvalid
s_axis_tdata
tb_raddsp_axis_radfft_ddr interface timing diagram

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr.vhd

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

Interface Timing Diagram

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr.vhd

clk
rst
frame_done_o
twiddle_addr_o
busy_o
runtime_inverse_i
twiddle_im_i
twiddle_re_i
M_AXIS
S_AXIS
M_AXIS interface signals

M_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr.vhd

m_axis_tlast
m_axis_tready
m_axis_tvalid
m_axis_tdata
S_AXIS interface signals

S_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr.vhd

s_axis_tlast
s_axis_tready
s_axis_tvalid
s_axis_tdata
tb_raddsp_axis_radfft_ddr_xcorr_1024 interface timing diagram

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr_xcorr_1024.vhd

Self-checking or stimulus-focused testbench for axis radfft ddr xcorr 1024. Exercises representative handshakes, reset behavior, frame boundaries, and numeric corner cases for regression runs.

Interface Timing Diagram

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr_xcorr_1024.vhd

clk
rst
frame_done_o
twiddle_addr_o
busy_o
runtime_inverse_i
twiddle_im_i
twiddle_re_i
M_AXIS
S_AXIS
M_AXIS interface signals

M_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr_xcorr_1024.vhd

m_axis_tlast
m_axis_tready
m_axis_tvalid
m_axis_tdata
S_AXIS interface signals

S_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_axis_radfft_ddr_xcorr_1024.vhd

s_axis_tlast
s_axis_tready
s_axis_tvalid
s_axis_tdata

Sources