Skip to content
Snippets Groups Projects
Commit d83254c9 authored by Mikael Henriksson's avatar Mikael Henriksson :runner:
Browse files

codegen: add support for generic enable-delay in transposition testbench

parent a1eb2d3b
No related branches found
No related tags found
1 merge request!432NorCAS2023 changes
...@@ -10,9 +10,10 @@ use ieee.numeric_std.all; ...@@ -10,9 +10,10 @@ use ieee.numeric_std.all;
entity streaming_matrix_transposition_tester is entity streaming_matrix_transposition_tester is
generic( generic(
WL : integer; WL : integer;
ROWS : integer; ROWS : integer;
COLS : integer COLS : integer;
ENABLE_DEL_CC : integer := 0 -- CCs after enable to start feeding the circuit
); );
port( port(
clk, rst, en : out std_logic; clk, rst, en : out std_logic;
...@@ -40,6 +41,7 @@ begin ...@@ -40,6 +41,7 @@ begin
-- Input generation -- Input generation
input_gen_proc: process begin input_gen_proc: process begin
wait until en = '1'; wait until en = '1';
wait for ENABLE_DEL_CC*10 ns;
for i in 0 to 4*ROWS*COLS-1 loop for i in 0 to 4*ROWS*COLS-1 loop
wait until clk = '0'; wait until clk = '0';
input <= std_logic_vector(to_unsigned(i, input'length)); input <= std_logic_vector(to_unsigned(i, input'length));
...@@ -189,7 +191,8 @@ begin ...@@ -189,7 +191,8 @@ begin
dut : entity work.streaming_matrix_transposition_memory_4x4 dut : entity work.streaming_matrix_transposition_memory_4x4
generic map(WL=>WL) port map(clk, rst, en, input, output); generic map(WL=>WL) port map(clk, rst, en, input, output);
tb : entity work.streaming_matrix_transposition_tester tb : entity work.streaming_matrix_transposition_tester
generic map (WL=>WL, ROWS=>4, COLS=>4) port map(clk, rst, en, input, output, done); generic map (WL=>WL, ROWS=>4, COLS=>4, ENABLE_DEL_CC=>1)
port map(clk, rst, en, input, output, done);
end architecture behav; end architecture behav;
...@@ -226,7 +229,8 @@ begin ...@@ -226,7 +229,8 @@ begin
dut : entity work.streaming_matrix_transposition_memory_5x5 dut : entity work.streaming_matrix_transposition_memory_5x5
generic map(WL=>WL) port map(clk, rst, en, input, output); generic map(WL=>WL) port map(clk, rst, en, input, output);
tb : entity work.streaming_matrix_transposition_tester tb : entity work.streaming_matrix_transposition_tester
generic map (WL=>WL, ROWS=>5, COLS=>5) port map(clk, rst, en, input, output, done); generic map (WL=>WL, ROWS=>5, COLS=>5, ENABLE_DEL_CC=>2)
port map(clk, rst, en, input, output, done);
end architecture behav; end architecture behav;
...@@ -263,7 +267,8 @@ begin ...@@ -263,7 +267,8 @@ begin
dut : entity work.streaming_matrix_transposition_memory_7x7 dut : entity work.streaming_matrix_transposition_memory_7x7
generic map(WL=>WL) port map(clk, rst, en, input, output); generic map(WL=>WL) port map(clk, rst, en, input, output);
tb : entity work.streaming_matrix_transposition_tester tb : entity work.streaming_matrix_transposition_tester
generic map (WL=>WL, ROWS=>7, COLS=>7) port map(clk, rst, en, input, output, done); generic map (WL=>WL, ROWS=>7, COLS=>7, ENABLE_DEL_CC=>3)
port map(clk, rst, en, input, output, done);
end architecture behav; end architecture behav;
...@@ -301,7 +306,8 @@ begin ...@@ -301,7 +306,8 @@ begin
dut : entity work.streaming_matrix_transposition_memory_4x8 dut : entity work.streaming_matrix_transposition_memory_4x8
generic map(WL=>WL) port map(clk, rst, en, input, output); generic map(WL=>WL) port map(clk, rst, en, input, output);
tb : entity work.streaming_matrix_transposition_tester tb : entity work.streaming_matrix_transposition_tester
generic map (WL=>WL, ROWS=>4, COLS=>8) port map(clk, rst, en, input, output, done); generic map (WL=>WL, ROWS=>4, COLS=>8, ENABLE_DEL_CC=>2)
port map(clk, rst, en, input, output, done);
end architecture behav; end architecture behav;
......
...@@ -143,7 +143,7 @@ def memory_based_storage( ...@@ -143,7 +143,7 @@ def memory_based_storage(
f, f'read_port_{i}', 'std_logic_vector(MEM_WL-1 downto 0)', name_pad=18 f, f'read_port_{i}', 'std_logic_vector(MEM_WL-1 downto 0)', name_pad=18
) )
common.signal_declaration( common.signal_declaration(
f, f'read_adr_{i}', f'integer range 0 to {schedule_time}-1', name_pad=18 f, f'read_adr_{i}', 'integer range 0 to MEM_DEPTH-1', name_pad=18
) )
common.signal_declaration(f, f'read_en_{i}', 'std_logic', name_pad=18) common.signal_declaration(f, f'read_en_{i}', 'std_logic', name_pad=18)
for i in range(write_ports): for i in range(write_ports):
...@@ -151,7 +151,7 @@ def memory_based_storage( ...@@ -151,7 +151,7 @@ def memory_based_storage(
f, f'write_port_{i}', 'std_logic_vector(MEM_WL-1 downto 0)', name_pad=18 f, f'write_port_{i}', 'std_logic_vector(MEM_WL-1 downto 0)', name_pad=18
) )
common.signal_declaration( common.signal_declaration(
f, f'write_adr_{i}', f'integer range 0 to {schedule_time}-1', name_pad=18 f, f'write_adr_{i}', 'integer range 0 to MEM_DEPTH-1', name_pad=18
) )
common.signal_declaration(f, f'write_en_{i}', 'std_logic', name_pad=18) common.signal_declaration(f, f'write_en_{i}', 'std_logic', name_pad=18)
...@@ -163,7 +163,7 @@ def memory_based_storage( ...@@ -163,7 +163,7 @@ def memory_based_storage(
common.signal_declaration( common.signal_declaration(
f, f,
f'write_adr_{write_port_idx}_{depth}_{rom}', f'write_adr_{write_port_idx}_{depth}_{rom}',
signal_type=f'integer range 0 to {schedule_time}-1', signal_type='integer range 0 to MEM_DEPTH-1',
name_pad=18, name_pad=18,
) )
for write_port_idx in range(write_ports): for write_port_idx in range(write_ports):
...@@ -181,7 +181,7 @@ def memory_based_storage( ...@@ -181,7 +181,7 @@ def memory_based_storage(
common.signal_declaration( common.signal_declaration(
f, f,
f'read_adr_{read_port_idx}_{depth}_{rom}', f'read_adr_{read_port_idx}_{depth}_{rom}',
signal_type=f'integer range 0 to {schedule_time}-1', signal_type='integer range 0 to MEM_DEPTH-1',
name_pad=18, name_pad=18,
) )
...@@ -192,13 +192,6 @@ def memory_based_storage( ...@@ -192,13 +192,6 @@ def memory_based_storage(
common.signal_declaration( common.signal_declaration(
f, f'p_{i}_in_sync', 'std_logic_vector(WL-1 downto 0)', name_pad=18 f, f'p_{i}_in_sync', 'std_logic_vector(WL-1 downto 0)', name_pad=18
) )
for pipe_idx in range(adr_pipe_depth):
common.signal_declaration(
f,
f'p_{i}_{pipe_idx}',
'std_logic_vector(WL-1 downto 0)',
name_pad=18,
)
# #
# Architecture body begin # Architecture body begin
...@@ -245,11 +238,6 @@ def memory_based_storage( ...@@ -245,11 +238,6 @@ def memory_based_storage(
) )
for i in range(read_ports): for i in range(read_ports):
write(f, 3, f'p_{i}_in_sync <= p_{i}_in;') write(f, 3, f'p_{i}_in_sync <= p_{i}_in;')
for pipe_idx in range(adr_pipe_depth):
if pipe_idx == 0:
write(f, 3, f'p_{i}_{pipe_idx} <= p_{i}_in_sync;')
else:
write(f, 3, f'p_{i}_{pipe_idx} <= p_{i}_{pipe_idx-1};')
common.synchronous_process_epilogue( common.synchronous_process_epilogue(
f=f, f=f,
name='input_sync_proc', name='input_sync_proc',
...@@ -275,10 +263,7 @@ def memory_based_storage( ...@@ -275,10 +263,7 @@ def memory_based_storage(
write(f, 1, f'write_adr_0 <= write_adr_0_{adr_pipe_depth}_0;') write(f, 1, f'write_adr_0 <= write_adr_0_{adr_pipe_depth}_0;')
write(f, 1, f'write_en_0 <= write_en_0_{adr_pipe_depth}_0;') write(f, 1, f'write_en_0 <= write_en_0_{adr_pipe_depth}_0;')
if input_sync: if input_sync:
if adr_pipe_depth == 0: write(f, 1, 'write_port_0 <= p_0_in_sync;')
write(f, 1, 'write_port_0 <= p_0_in_sync;')
else:
write(f, 1, f'write_port_0 <= p_0_{adr_pipe_depth-1};')
else: else:
write(f, 1, 'write_port_0 <= p_0_in;') write(f, 1, 'write_port_0 <= p_0_in;')
...@@ -300,10 +285,7 @@ def memory_based_storage( ...@@ -300,10 +285,7 @@ def memory_based_storage(
write( write(
f, f,
4, 4,
( f'when {write_time}+{adr_pipe_depth} => p_0_out <= p_0_in_sync;',
f'when {write_time}+{adr_pipe_depth} => '
f'p_0_out <= p_0_{adr_pipe_depth-1};'
),
) )
else: else:
write(f, 4, f'when {write_time} => p_0_out <= p_0_in_sync;') write(f, 4, f'when {write_time} => p_0_out <= p_0_in_sync;')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment