Radical Computer Technologies
DSP / entity

raddsp_sqrt_u32

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

Fully pipelined unsigned integer square-root core. raddsp_sqrt_u32 computes floor(sqrt(x_i)) with a restoring radix-2 algorithm. One bit of the result is resolved per pipeline stage, so the latency is OUTPUT_WIDTH enabled clock cycles and the block can accept one input sample per clock while the output side is ready. The implementation is vendor-independent RTL: only registers, shifts, compares, subtractors, and multiplexers are inferred.

Use Cases

Block Diagram

raddsp_sqrt_u32 radhdl entity s_axis_tvalid m_axis_tready clk rst x_i s_axis_tready m_axis_tvalid root_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_sqrt_u32 is
  generic (
    INPUT_WIDTH : positive := 32;
    OUTPUT_WIDTH : positive := 16
  );
  port (
    m_axis_tvalid : out std_logic;
    m_axis_tready : in std_logic;
    s_axis_tvalid : in std_logic;
    s_axis_tready : out std_logic;
    clk : in std_logic;
    rst : in std_logic;
    x_i : in std_logic_vector(INPUT_WIDTH - 1 downto 0);
    root_o : out std_logic_vector(OUTPUT_WIDTH - 1 downto 0)
  );
end component;

Direct Entity Instantiation

u_raddsp_sqrt_u32 : entity radhdl.raddsp_sqrt_u32
  generic map (
    INPUT_WIDTH  => 32,
    OUTPUT_WIDTH => 16
  )
  port map (
    m_axis_tvalid => <m_axis_tvalid_signal>,
    m_axis_tready => <m_axis_tready_signal>,
    s_axis_tvalid => <s_axis_tvalid_signal>,
    s_axis_tready => <s_axis_tready_signal>,
    clk           => <clk_signal>,
    rst           => <rst_signal>,
    x_i           => <x_i_signal>,
    root_o        => <root_o_signal>
  );

Generics

NameTypeDefaultDescription
INPUT_WIDTHpositive32Width of the unsigned radicand.
OUTPUT_WIDTHpositive16Width of the unsigned square-root result.

Ports

NameDirectionTypeDescription
m_axis_tvalidoutstd_logicOutput root valid.
m_axis_treadyinstd_logicOutput root ready.
s_axis_tvalidinstd_logicInput sample valid.
s_axis_treadyoutstd_logicInput sample ready. Deasserts only when output backpressure stalls the pipeline.
clkinstd_logicPipeline clock.
rstinstd_logicActive-high synchronous reset.
x_iinstd_logic_vector(INPUT_WIDTH - 1 downto 0)Unsigned radicand.
root_ooutstd_logic_vector(OUTPUT_WIDTH - 1 downto 0)Floor square-root result.

Register Interfaces

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

InterfaceDirectionsSignalsRepresentative ports
M_AXISin, out2m_axis_tvalid, m_axis_tready
S_AXISin, out2s_axis_tvalid, s_axis_tready

Testbenches

tb_raddsp_sqrt_u32 captured waveform

Source: dsp/hdl/testbenches/tb_raddsp_sqrt_u32.vhd

Verifies the pipelined raddsp_sqrt_u32 restoring square-root core. The sequence covers small exact squares, neighboring non-squares, wide 32-bit values, continuous input acceptance, and output backpressure stalls.

Artifacts: status, vcd

Data Plots

Unsigned Square-Root Sweep

Pipelined square-root output over the directed input sweep.

019.238.457.676.896500003750025000125000Root vs Output samplesqrt(x)

Captured GHDL Waveform

Source: dsp/hdl/testbenches/tb_raddsp_sqrt_u32.vhd

clk
rst
x_i[31:0]
root_o[15:0]
sent_count
recv_count
wr_index
rd_index
cycle_count
valid_pipe[0:16]
pipe_en
S_AXIS
M_AXIS
M_AXIS interface signals

M_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_sqrt_u32.vhd

m_axis_tvalid
m_axis_tready
S_AXIS interface signals

S_AXIS Interface Waveform

Source: dsp/hdl/testbenches/tb_raddsp_sqrt_u32.vhd

s_axis_tvalid
s_axis_tready

Sources