Standardized fifo types and names

This commit is contained in:
Adam 2025-04-16 16:50:34 +02:00
parent 554e3cadab
commit 48dff427d4
5 changed files with 22 additions and 25 deletions

View File

@ -9,7 +9,7 @@ use techmap.gencomp.all;
entity fifo_buffer is entity fifo_buffer is
generic ( generic (
data_width : natural := 32; data_width : natural := 8;
buffer_size : natural := 64; buffer_size : natural := 64;
tech : integer := nx tech : integer := nx
); );

View File

@ -29,9 +29,6 @@ architecture rtl of ganimede_toplevel is
signal manager_to_socbridge_driver : manager_to_socbridge_driver_t; signal manager_to_socbridge_driver : manager_to_socbridge_driver_t;
signal socbridge_driver_to_buffer : socbridge_driver_to_ip_t; signal socbridge_driver_to_buffer : socbridge_driver_to_ip_t;
signal buffer_to_socbridge_driver : ip_to_socbridge_driver_t; --TODO determine where we want to declare the IP signal buffer_to_socbridge_driver : ip_to_socbridge_driver_t; --TODO determine where we want to declare the IP
signal dummy_ready : std_logic;
signal dummy_valid : std_logic;
signal dummy_data : std_logic_vector(31 downto 0);
--signal gan_socbridge_WE_in : std_logic; --signal gan_socbridge_WE_in : std_logic;
--signal gan_socbridge_WE_out : std_logic; --signal gan_socbridge_WE_out : std_logic;
@ -80,24 +77,24 @@ begin
port map( port map(
clk => clk, clk => clk,
rst => rst, rst => rst,
ready_in => dummy_ready, ready_in => ip_to_ganimede.socbridge.ready,
ready_out => ip_to_ganimede.socbridge.is_full_in, ready_out => buffer_to_socbridge_driver.ready,
valid_in => ganimede_to_ip.socbridge.write_enable_in, valid_in => socbridge_driver_to_buffer.valid,
valid_out => dummy_valid, valid_out => ganimede_to_ip.socbridge.valid,
data_in => ganimede_to_ip.socbridge.payload, data_in => socbridge_driver_to_buffer.payload,
data_out => dummy_data data_out => ganimede_to_ip.socbridge.payload
); );
fifo_buffer_from_ip_inst : entity gan_buffer.fifo_buffer fifo_buffer_from_ip_inst : entity gan_buffer.fifo_buffer
port map( port map(
clk => clk, clk => clk,
rst => rst, rst => rst,
ready_in => ganimede_to_ip.socbridge.is_full_out, ready_in => socbridge_driver_to_buffer.ready,
ready_out => dummy_ready, ready_out => ganimede_to_ip.socbridge.ready,
valid_in => dummy_valid, valid_in => ip_to_ganimede.socbridge.valid,
valid_out => ip_to_ganimede.socbridge.write_enable_out, valid_out => buffer_to_socbridge_driver.valid,
data_in => dummy_data, data_in => ip_to_ganimede.socbridge.payload,
data_out => ip_to_ganimede.socbridge.payload data_out => buffer_to_socbridge_driver.payload
); );
--- LATER WE ADD OPTIMIZATIONS HERE --- --- LATER WE ADD OPTIMIZATIONS HERE ---

View File

@ -63,12 +63,12 @@ package io_types is
type socbridge_driver_to_ip_t is record type socbridge_driver_to_ip_t is record
payload : STD_LOGIC_VECTOR(interface_inst.socbridge.payload_width - 1 downto 0); payload : STD_LOGIC_VECTOR(interface_inst.socbridge.payload_width - 1 downto 0);
write_enable_in, is_full_out : std_logic; ready, valid : std_logic;
end record socbridge_driver_to_ip_t; end record socbridge_driver_to_ip_t;
type ip_to_socbridge_driver_t is record type ip_to_socbridge_driver_t is record
payload : STD_LOGIC_VECTOR(interface_inst.socbridge.payload_width - 1 downto 0); payload : STD_LOGIC_VECTOR(interface_inst.socbridge.payload_width - 1 downto 0);
write_enable_out, is_full_in : std_logic; ready, valid : std_logic;
end record ip_to_socbridge_driver_t; end record ip_to_socbridge_driver_t;
type controller_to_drivers_t is record type controller_to_drivers_t is record

View File

@ -212,8 +212,8 @@ begin
--- Combinatorial output based on current state --- --- Combinatorial output based on current state ---
local_next_data_out := (others => '0'); local_next_data_out := (others => '0');
socbridge_driver_to_ip.is_full_out <= '1'; socbridge_driver_to_ip.ready <= '0';
socbridge_driver_to_ip.write_enable_in <= '0'; socbridge_driver_to_ip.valid <= '0';
socbridge_driver_to_ip.payload <= (others => '0'); socbridge_driver_to_ip.payload <= (others => '0');
--- ### TX_STATE BASED OUTPUT ### --- --- ### TX_STATE BASED OUTPUT ### ---
case st.curr_tx_state is case st.curr_tx_state is
@ -226,7 +226,7 @@ begin
end if; end if;
when TX_W_BODY => when TX_W_BODY =>
if st.tx_stage > 0 then if st.tx_stage > 0 then
socbridge_driver_to_ip.is_full_out <= '0'; socbridge_driver_to_ip.ready <= '1';
local_next_data_out := ip_to_socbridge_driver.payload; local_next_data_out := ip_to_socbridge_driver.payload;
end if; end if;
when TX_R_BODY => when TX_R_BODY =>
@ -253,7 +253,7 @@ begin
when RX_W_BODY => when RX_W_BODY =>
when RX_R_BODY => when RX_R_BODY =>
socbridge_driver_to_ip.payload <= st.ext_to_socbridge_driver_reg.data; socbridge_driver_to_ip.payload <= st.ext_to_socbridge_driver_reg.data;
socbridge_driver_to_ip.write_enable_in <= '1'; socbridge_driver_to_ip.valid <= '1';
when RX_AWAIT => when RX_AWAIT =>
if st.curr_rx_transaction = WRITE or st.curr_rx_transaction = WRITE_ADD then if st.curr_rx_transaction = WRITE or st.curr_rx_transaction = WRITE_ADD then
socbridge_driver_to_manager.data <= st.curr_write_data; socbridge_driver_to_manager.data <= st.curr_write_data;

View File

@ -92,13 +92,13 @@ begin
internal_stimulus: process internal_stimulus: process
variable count : integer := 1; variable count : integer := 1;
begin begin
ip_to_socbridge_driver.is_full_in <= '0'; ip_to_socbridge_driver.ready <= '0';
ip_to_socbridge_driver.write_enable_out <= '0'; ip_to_socbridge_driver.valid <= '1';
wait until rst = '0'; wait until rst = '0';
-- stimulus goes here -- stimulus goes here
while not done loop while not done loop
wait until (rising_edge(socbridge_driver_to_ext.control(1)) or falling_edge(socbridge_driver_to_ext.control(1))) and socbridge_driver_to_ip.is_full_out = '0'; wait until (rising_edge(socbridge_driver_to_ext.control(1)) or falling_edge(socbridge_driver_to_ext.control(1))) and socbridge_driver_to_ip.ready = '1';
ip_to_socbridge_driver.payload <= std_logic_vector(to_unsigned(count, 8)); ip_to_socbridge_driver.payload <= std_logic_vector(to_unsigned(count, 8));
count := count + 1; count := count + 1;
end loop; end loop;