Radical Computer Technologies
Primitives / entity

radhdl_fifo_bram_async

Documentation version: 0.2.2-beta.1 / Subpackage: primitive_fifo / Source package: radprimitive

RAD separate-clock FIFO built from explicit vendor RAM wrappers and Gray pointer CDC. This is the ECP5 path and the generic fallback for families without vendor FIFO IP.

Use Cases

Block Diagram

radhdl_fifo_bram_async radhdl entity wr_clk rd_clk rst wr_en rd_en din dout empty full data_valid wr_data_count rd_data_count
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.

Component Declaration

component radhdl_fifo_bram_async is
  generic (
    VENDOR : string := "generic";
    DEVICE_FAMILY : string := "generic";
    DATA_WIDTH : positive := 32;
    ADDR_WIDTH : positive := 4;
    DEPTH : positive := 16;
    CDC_STAGES : positive := 2;
    SIMULATION : boolean := false
  );
  port (
    wr_clk : in std_logic;
    rd_clk : in std_logic;
    rst : in std_logic;
    wr_en : in std_logic;
    rd_en : in std_logic;
    din : in std_logic_vector(DATA_WIDTH - 1 downto 0);
    dout : out std_logic_vector(DATA_WIDTH - 1 downto 0);
    empty : out std_logic;
    full : out std_logic;
    data_valid : out std_logic;
    wr_data_count : out unsigned(ADDR_WIDTH downto 0);
    rd_data_count : out unsigned(ADDR_WIDTH downto 0)
  );
end component;

Direct Entity Instantiation

u_radhdl_fifo_bram_async : entity radhdl.radhdl_fifo_bram_async
  generic map (
    VENDOR        => "generic",
    DEVICE_FAMILY => "generic",
    DATA_WIDTH    => 32,
    ADDR_WIDTH    => 4,
    DEPTH         => 16,
    CDC_STAGES    => 2,
    SIMULATION    => false
  )
  port map (
    wr_clk        => <wr_clk_signal>,
    rd_clk        => <rd_clk_signal>,
    rst           => <rst_signal>,
    wr_en         => <wr_en_signal>,
    rd_en         => <rd_en_signal>,
    din           => <din_signal>,
    dout          => <dout_signal>,
    empty         => <empty_signal>,
    full          => <full_signal>,
    data_valid    => <data_valid_signal>,
    wr_data_count => <wr_data_count_signal>,
    rd_data_count => <rd_data_count_signal>
  );

Generics

NameTypeDefaultDescription
VENDORstring"generic"
DEVICE_FAMILYstring"generic"
DATA_WIDTHpositive32
ADDR_WIDTHpositive4
DEPTHpositive16
CDC_STAGESpositive2
SIMULATIONbooleanfalse

Ports

NameDirectionTypeDescription
wr_clkinstd_logic
rd_clkinstd_logic
rstinstd_logic
wr_eninstd_logic
rd_eninstd_logic
dininstd_logic_vector(DATA_WIDTH - 1 downto 0)
doutoutstd_logic_vector(DATA_WIDTH - 1 downto 0)
emptyoutstd_logic
fulloutstd_logic
data_validoutstd_logic
wr_data_countoutunsigned(ADDR_WIDTH downto 0)
rd_data_countoutunsigned(ADDR_WIDTH downto 0)

Register Interfaces

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

InterfaceDirectionsSignalsRepresentative ports
Register control/statusin, out6wr_clk, rd_clk, wr_en, rd_en, wr_data_count, rd_data_count

Testbenches

tb_radhdl_fifo_bram_async interface timing diagram

Source: projects/colorlight_i9_primitive_smoke/testbenches/tb_radhdl_fifo_bram_async.vhd

No testbench description has been written yet.

Interface Timing Diagram

Source: projects/colorlight_i9_primitive_smoke/testbenches/tb_radhdl_fifo_bram_async.vhd

rd_clk
wr_clk
rst
data_valid
rd_data_count
wr_data_count
din
dout
empty
full
rd_en
wr_en

Sources