diff --git a/applications/lofar2/libraries/ddrctrl/hdllib.cfg b/applications/lofar2/libraries/ddrctrl/hdllib.cfg index 1f31cda7082550a92970d81752672dc90f5a3128..0e403b02febd38781f129a332a9128e7f1b455b1 100644 --- a/applications/lofar2/libraries/ddrctrl/hdllib.cfg +++ b/applications/lofar2/libraries/ddrctrl/hdllib.cfg @@ -6,11 +6,11 @@ hdl_lib_technology = synth_files = src/vhdl/ddrctrl_address_counter.vhd - src/vhdl/pack.vhd + src/vhdl/ddrctrl_pack.vhd test_bench_files = tb/vhdl/tb_ddrctrl_address_counter.vhd - tb/vhdl/tb_pack.vhd + tb/vhdl/tb_ddrctrl_pack.vhd regression_test_vhdl = diff --git a/applications/lofar2/libraries/ddrctrl/src/vhdl/pack.vhd b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_pack.vhd similarity index 92% rename from applications/lofar2/libraries/ddrctrl/src/vhdl/pack.vhd rename to applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_pack.vhd index a986050bbc914f2323ba8f3565d83bab91675e9a..af4debebfbf77ccd11549c9d9fef80edc9c68fd2 100644 --- a/applications/lofar2/libraries/ddrctrl/src/vhdl/pack.vhd +++ b/applications/lofar2/libraries/ddrctrl/src/vhdl/ddrctrl_pack.vhd @@ -34,7 +34,7 @@ LIBRARY IEEE, dp_lib; USE IEEE.std_logic_1164.ALL; USE dp_lib.dp_stream_pkg.ALL; -ENTITY pack IS +ENTITY ddrctrl_pack IS GENERIC ( g_nof_streams : POSITIVE := 12; @@ -48,9 +48,9 @@ ENTITY pack IS out_data : OUT STD_LOGIC_VECTOR((g_nof_streams*g_data_w)-1 DOWNTO 0) ); -END pack; +END ddrctrl_pack; -ARCHITECTURE rtl OF pack IS +ARCHITECTURE rtl OF ddrctrl_pack IS BEGIN diff --git a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_pack.vhd b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl_pack.vhd similarity index 59% rename from applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_pack.vhd rename to applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl_pack.vhd index 2dc8d1b65dec93400cf528922d98713e8b96d7ae..fa86f4db9a598f114b6355726f69bb6cd1e4d1d2 100644 --- a/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_pack.vhd +++ b/applications/lofar2/libraries/ddrctrl/tb/vhdl/tb_ddrctrl_pack.vhd @@ -18,7 +18,7 @@ -- ------------------------------------------------------------------------------- -- Author: Job van Wee --- Purpose: Self checking and self-stopping tb for pack.vhd +-- Purpose: Self checking and self-stopping tb for ddrctrl_pack.vhd -- Usage: -- > run -a @@ -32,29 +32,37 @@ USE dp_lib.dp_stream_pkg.ALL; USE common_lib.common_mem_pkg.ALL; USE common_lib.common_pkg.ALL; -ENTITY tb_pack IS +ENTITY tb_ddrctrl_pack IS GENERIC ( - - g_nof_streams : POSITIVE := 12; - g_data_w : NATURAL := 14; - g_sim_model : BOOLEAN := TRUE + + g_nof_streams : POSITIVE := 12; + g_data_w : NATURAL := 14; + g_sim_model : BOOLEAN := TRUE ); -END tb_pack; +END tb_ddrctrl_pack; + +ARCHITECTURE tb OF tb_ddrctrl_pack IS -ARCHITECTURE tb OF tb_pack IS + CONSTANT c_clk_freq : NATURAL := 200; -- MHz + CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; - CONSTANT c_clk_freq : NATURAL := 200; -- MHz - CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; + CONSTANT c_data_w : NATURAL := g_nof_streams * g_data_w; -- 168 - CONSTANT c_data_w : NATURAL := g_nof_streams * g_data_w; -- 168 + FUNCTION c_testv_init RETURN STD_LOGIC_VECTOR IS + VARIABLE temp : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0); + BEGIN + FOR I IN 0 TO g_nof_streams-1 LOOP + temp(g_data_w*(I+1)-1 DOWNTO g_data_w*I) := TO_UVEC(I, g_data_w); + END LOOP; + RETURN temp; + END FUNCTION c_testv_init; + CONSTANT c_testv : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0) := c_testv_init; - CONSTANT c_testv : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0) := "111111111111111111111111110011111111110000111111110000001111110000000011110000000000110000000000000000000000000000000000000011000000000011110000000011111100000011111111"; - - SIGNAL tb_end : STD_LOGIC := '0'; + SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL clk : STD_LOGIC := '1'; + SIGNAL clk : STD_LOGIC := '1'; SIGNAL in_sosi_arr : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0) := (OTHERS => c_dp_sosi_init); SIGNAL out_data : STD_LOGIC_VECTOR(c_data_w-1 DOWNTO 0); @@ -63,10 +71,6 @@ BEGIN clk <= NOT clk OR tb_end AFTER c_clk_period/2; - check_data : FOR I IN 0 TO g_nof_streams - 1 GENERATE - ASSERT out_data(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I) = in_sosi_arr(I).data(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I) REPORT "Data does not match" SEVERITY ERROR; - END GENERATE; - p_mm : PROCESS BEGIN @@ -76,7 +80,7 @@ BEGIN WAIT FOR c_clk_period*2; fill_in_sosi_arr : FOR I IN 0 TO g_nof_streams-1 LOOP - in_sosi_arr(I).data(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I) <= c_testv(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I); + in_sosi_arr(I).data(g_data_w - 1 DOWNTO 0) <= c_testv(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I); END LOOP; @@ -85,7 +89,7 @@ BEGIN in_sosi_arr(0).data(g_data_w - 1 DOWNTO 0) <= in_sosi_arr(g_nof_streams-1).data(g_data_w - 1 DOWNTO 0); gen_switch_data : FOR I IN 1 TO g_nof_streams-1 LOOP in_sosi_arr(I).data(g_data_w - 1 DOWNTO 0) <= in_sosi_arr(I-1).data(g_data_w - 1 DOWNTO 0); - END LOOP; + END LOOP; END LOOP; WAIT FOR c_clk_period*4; @@ -95,7 +99,17 @@ BEGIN WAIT; END PROCESS; - u_pack : ENTITY work.pack + p_verify : PROCESS + BEGIN + WAIT UNTIL rising_edge(clk); + IF rising_edge(clk) THEN + check_data : FOR I IN 0 TO g_nof_streams - 1 LOOP + ASSERT out_data(g_data_w * (I + 1) - 1 DOWNTO g_data_w * I) = in_sosi_arr(I).data(g_data_w-1 DOWNTO 0) REPORT "Data does not match, I = " & NATURAL'image(I) SEVERITY ERROR; + END LOOP; + END IF; + END PROCESS; + + u_pack : ENTITY work.ddrctrl_pack GENERIC MAP ( g_nof_streams => g_nof_streams, g_data_w => g_data_w