Skip to content
Snippets Groups Projects
Commit d15d573f authored by Job van Wee's avatar Job van Wee
Browse files

Merge branch 'L2SDP-666' into L2SDP-667

parents 7b566c5e b789855a
No related branches found
No related tags found
1 merge request!232Resolve L2SDP-667
...@@ -103,7 +103,7 @@ BEGIN ...@@ -103,7 +103,7 @@ BEGIN
CASE q_reg.state IS CASE q_reg.state IS
WHEN RESET => WHEN RESET =>
v.s_adr := c_max_adr-1; v.s_adr := c_max_adr-1; -- when there is a reset the fifo in io_ddr always needs the first out_sosi.valid to stop flushing the data so the first data word always gets lost. if s_adr is set to 0 after a restart the word from s_adr 1 will be put at address 0 in memory.
WHEN COUNTING => WHEN COUNTING =>
v.s_adr := q_reg.s_adr+1; v.s_adr := q_reg.s_adr+1;
......
...@@ -39,7 +39,6 @@ ENTITY tb_ddrctrl IS ...@@ -39,7 +39,6 @@ ENTITY tb_ddrctrl IS
GENERIC ( GENERIC (
g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m; -- type of memory g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m; -- type of memory
g_sim_model : BOOLEAN := TRUE; -- determens if this is a simulation
g_nof_streams : POSITIVE := 12; -- number of input streams g_nof_streams : POSITIVE := 12; -- number of input streams
g_data_w : NATURAL := 14; -- data with of input data vectors g_data_w : NATURAL := 14; -- data with of input data vectors
g_sim_length : NATURAL := 16500; -- close to the amount of word that gets put into the memory g_sim_length : NATURAL := 16500; -- close to the amount of word that gets put into the memory
...@@ -53,6 +52,7 @@ END tb_ddrctrl; ...@@ -53,6 +52,7 @@ END tb_ddrctrl;
ARCHITECTURE tb OF tb_ddrctrl IS ARCHITECTURE tb OF tb_ddrctrl IS
-- constants for testbench -- constants for testbench
CONSTANT c_sim_model : BOOLEAN := TRUE; -- determens if this is a simulation
CONSTANT c_clk_freq : NATURAL := 200; -- clock frequency in MHz CONSTANT c_clk_freq : NATURAL := 200; -- clock frequency in MHz
CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; -- clock priod, 5 ns CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; -- clock priod, 5 ns
CONSTANT c_mm_clk_freq : NATURAL := 100; -- mm clock frequency in MHz CONSTANT c_mm_clk_freq : NATURAL := 100; -- mm clock frequency in MHz
...@@ -62,7 +62,7 @@ ARCHITECTURE tb OF tb_ddrctrl IS ...@@ -62,7 +62,7 @@ ARCHITECTURE tb OF tb_ddrctrl IS
-- Select DDR3 or DDR4 dependent on the technology and sim model -- Select DDR3 or DDR4 dependent on the technology and sim model
CONSTANT c_mem_ddr : t_c_tech_ddr := func_tech_sel_ddr(g_technology, g_tech_ddr3, g_tech_ddr4); CONSTANT c_mem_ddr : t_c_tech_ddr := func_tech_sel_ddr(g_technology, g_tech_ddr3, g_tech_ddr4);
CONSTANT c_sim_ddr : t_c_tech_ddr := func_tech_sel_ddr(g_technology, c_tech_ddr3_sim_16k, c_tech_ddr4_sim_16k); CONSTANT c_sim_ddr : t_c_tech_ddr := func_tech_sel_ddr(g_technology, c_tech_ddr3_sim_16k, c_tech_ddr4_sim_16k);
CONSTANT c_tech_ddr : t_c_tech_ddr := func_tech_sel_ddr(g_sim_model, c_sim_ddr, c_mem_ddr); CONSTANT c_tech_ddr : t_c_tech_ddr := func_tech_sel_ddr(c_sim_model, c_sim_ddr, c_mem_ddr);
-- constants for readability -- constants for readability
...@@ -129,16 +129,9 @@ BEGIN ...@@ -129,16 +129,9 @@ BEGIN
wr_not_rd <= '1'; wr_not_rd <= '1';
WAIT FOR c_clk_period*1; WAIT FOR c_clk_period*1;
make_data_0 : FOR J IN 1 TO 40-1 LOOP
in_data_cnt <= in_data_cnt+1;
fill_in_sosi_arr_rest_0 : FOR I IN 0 TO g_nof_streams-1 LOOP
in_sosi_arr(I).data(g_data_w-1 DOWNTO 0) <= c_total_vector(g_data_w*(I+1)+J*c_in_data_w-1 DOWNTO g_data_w*I+J*c_in_data_w);
END LOOP;
WAIT FOR c_clk_period*1;
END LOOP;
-- filling the input data vectors with the corresponding numbers -- filling the input data vectors with the corresponding numbers
make_data : FOR J IN 40 TO c_sim_length-1 LOOP make_data : FOR J IN 0 TO c_sim_length-1 LOOP
in_data_cnt <= in_data_cnt+1; in_data_cnt <= in_data_cnt+1;
fill_in_sosi_arr_rest : FOR I IN 0 TO g_nof_streams-1 LOOP fill_in_sosi_arr_rest : FOR I IN 0 TO g_nof_streams-1 LOOP
in_sosi_arr(I).data(g_data_w-1 DOWNTO 0) <= c_total_vector(g_data_w*(I+1)+J*c_in_data_w-1 DOWNTO g_data_w*I+J*c_in_data_w); in_sosi_arr(I).data(g_data_w-1 DOWNTO 0) <= c_total_vector(g_data_w*(I+1)+J*c_in_data_w-1 DOWNTO g_data_w*I+J*c_in_data_w);
...@@ -161,7 +154,7 @@ BEGIN ...@@ -161,7 +154,7 @@ BEGIN
u_ddrctrl : ENTITY work.ddrctrl u_ddrctrl : ENTITY work.ddrctrl
GENERIC MAP ( GENERIC MAP (
g_tech_ddr => c_tech_ddr, g_tech_ddr => c_tech_ddr,
g_sim_model => g_sim_model, g_sim_model => c_sim_model,
g_technology => g_technology, g_technology => g_technology,
g_nof_streams => g_nof_streams, g_nof_streams => g_nof_streams,
g_data_w => g_data_w, g_data_w => g_data_w,
......
...@@ -36,7 +36,6 @@ ENTITY tb_ddrctrl_input IS ...@@ -36,7 +36,6 @@ ENTITY tb_ddrctrl_input IS
GENERIC ( GENERIC (
g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m; -- type of memory g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m; -- type of memory
g_sim_model : BOOLEAN := TRUE; -- determens if this is a simulation
g_nof_streams : POSITIVE := 12; -- number of input streams g_nof_streams : POSITIVE := 12; -- number of input streams
g_data_w : NATURAL := 14; -- data with of input data vectors g_data_w : NATURAL := 14; -- data with of input data vectors
g_sim_length : NATURAL := 52 g_sim_length : NATURAL := 52
...@@ -47,6 +46,7 @@ END tb_ddrctrl_input; ...@@ -47,6 +46,7 @@ END tb_ddrctrl_input;
ARCHITECTURE tb OF tb_ddrctrl_input IS ARCHITECTURE tb OF tb_ddrctrl_input IS
-- constants for testbench -- constants for testbench
CONSTANT c_sim_model : BOOLEAN := TRUE; -- determens if this is a simulation
CONSTANT c_clk_freq : NATURAL := 200; -- clock frequency in MHz CONSTANT c_clk_freq : NATURAL := 200; -- clock frequency in MHz
CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; -- clock priod, 5 ns CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; -- clock priod, 5 ns
...@@ -58,12 +58,12 @@ ARCHITECTURE tb OF tb_ddrctrl_input IS ...@@ -58,12 +58,12 @@ ARCHITECTURE tb OF tb_ddrctrl_input IS
-- function for making total data vector -- function for making total data vector
FUNCTION c_total_vector_init RETURN STD_LOGIC_VECTOR IS FUNCTION c_total_vector_init RETURN STD_LOGIC_VECTOR IS
VARIABLE temp : STD_LOGIC_VECTOR(c_in_data_w*g_sim_length-1 DOWNTO 0); VARIABLE v_total_vector : STD_LOGIC_VECTOR(c_in_data_w*g_sim_length-1 DOWNTO 0);
BEGIN BEGIN
FOR I IN 0 TO g_sim_length*g_nof_streams-1 LOOP FOR I IN 0 TO g_sim_length*g_nof_streams-1 LOOP
temp(g_data_w*(I+1)-1 DOWNTO g_data_w*I) := TO_UVEC(I, g_data_w); v_total_vector(g_data_w*(I+1)-1 DOWNTO g_data_w*I) := TO_UVEC(I, g_data_w);
END LOOP; END LOOP;
RETURN temp; RETURN v_total_vector;
END FUNCTION c_total_vector_init; END FUNCTION c_total_vector_init;
-- constant for running the test -- constant for running the test
...@@ -206,7 +206,7 @@ BEGIN ...@@ -206,7 +206,7 @@ BEGIN
u_ddrctrl_input : ENTITY work.ddrctrl_input u_ddrctrl_input : ENTITY work.ddrctrl_input
GENERIC MAP ( GENERIC MAP (
g_tech_ddr => g_tech_ddr, g_tech_ddr => g_tech_ddr,
g_sim_model => g_sim_model, g_sim_model => c_sim_model,
g_nof_streams => g_nof_streams, g_nof_streams => g_nof_streams,
g_data_w => g_data_w g_data_w => g_data_w
) )
......
...@@ -146,8 +146,8 @@ BEGIN ...@@ -146,8 +146,8 @@ BEGIN
BEGIN BEGIN
WAIT UNTIL rising_edge(clk); WAIT UNTIL rising_edge(clk);
IF rising_edge(clk) THEN IF rising_edge(clk) THEN
ASSERT q_q_in_data(c_data_w-1 DOWNTO 0) = out_sosi.data(c_data_w-1 DOWNTO 0) REPORT "in_sosi.data does not match out_sosi.wrdata" SEVERITY ERROR; ASSERT q_q_in_data(c_data_w-1 DOWNTO 0) = out_sosi.data(c_data_w-1 DOWNTO 0) REPORT "in_sosi.data does not match out_sosi.data" SEVERITY ERROR;
ASSERT q_q_in_data_enable = out_sosi.valid REPORT "in_sosi.valid does not match out_sosi.wr" SEVERITY ERROR; ASSERT q_q_in_data_enable = out_sosi.valid REPORT "in_sosi.valid does not match out_sosi.valid" SEVERITY ERROR;
ASSERT q_q_in_of = out_of REPORT "in_of does not match out_of" SEVERITY ERROR; ASSERT q_q_in_of = out_of REPORT "in_of does not match out_of" SEVERITY ERROR;
END IF; END IF;
END PROCESS; END PROCESS;
......
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