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

Merge branch 'L2SDP-639' into L2SDP-644

parents 70c127f0 b294259e
No related branches found
No related tags found
1 merge request!215Resolve L2SDP-660
...@@ -5,11 +5,11 @@ hdl_lib_uses_sim = ...@@ -5,11 +5,11 @@ hdl_lib_uses_sim =
hdl_lib_technology = hdl_lib_technology =
synth_files = synth_files =
src/vhdl/address_counter.vhd src/vhdl/ddrctrl_address_counter.vhd
src/vhdl/pack.vhd src/vhdl/pack.vhd
test_bench_files = test_bench_files =
tb/vhdl/tb_address_counter.vhd tb/vhdl/tb_ddrctrl_address_counter.vhd
tb/vhdl/tb_pack.vhd tb/vhdl/tb_pack.vhd
regression_test_vhdl = regression_test_vhdl =
......
...@@ -29,8 +29,6 @@ ...@@ -29,8 +29,6 @@
-- https://support.astron.nl/confluence/display/SBe/VHDL+design+patterns+for+RTL+coding -- https://support.astron.nl/confluence/display/SBe/VHDL+design+patterns+for+RTL+coding
-- The maximum value of the address is determend by g_tech_ddr. -- The maximum value of the address is determend by g_tech_ddr.
LIBRARY IEEE, technology_lib, tech_ddr_lib, common_lib, dp_lib; LIBRARY IEEE, technology_lib, tech_ddr_lib, common_lib, dp_lib;
USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL; USE IEEE.numeric_std.ALL;
...@@ -40,7 +38,8 @@ USE common_lib.common_pkg.ALL; ...@@ -40,7 +38,8 @@ USE common_lib.common_pkg.ALL;
USE common_lib.common_mem_pkg.ALL; USE common_lib.common_mem_pkg.ALL;
USE dp_lib.dp_stream_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL;
ENTITY address_counter IS
ENTITY ddrctrl_address_counter IS
GENERIC ( GENERIC (
g_tech_ddr : t_c_tech_ddr; g_tech_ddr : t_c_tech_ddr;
g_sim_model : BOOLEAN := TRUE g_sim_model : BOOLEAN := TRUE
...@@ -51,12 +50,14 @@ ENTITY address_counter IS ...@@ -51,12 +50,14 @@ ENTITY address_counter IS
in_sosi : IN t_dp_sosi; in_sosi : IN t_dp_sosi;
out_mosi : OUT t_mem_ctlr_mosi out_mosi : OUT t_mem_ctlr_mosi
); );
END address_counter; END ddrctrl_address_counter;
ARCHITECTURE rtl OF address_counter IS ARCHITECTURE rtl OF ddrctrl_address_counter IS
CONSTANT c_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); --576 CONSTANT c_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); --576
CONSTANT c_adr_w : NATURAL := sel_a_b(g_sim_model, 4, func_tech_ddr_ctlr_address_w( g_tech_ddr )); --27; CONSTANT c_adr_w : NATURAL := sel_a_b(g_sim_model, 4, func_tech_ddr_ctlr_address_w( g_tech_ddr )); --27;
CONSTANT c_max_adr: NATURAL := 2**(c_adr_w) - 1;
SIGNAL s_adr : NATURAL range 0 to 2**(c_adr_w)-1 := 0; SIGNAL s_adr : NATURAL range 0 to 2**(c_adr_w)-1 := 0;
...@@ -72,7 +73,7 @@ BEGIN ...@@ -72,7 +73,7 @@ BEGIN
IF rst = '1' THEN IF rst = '1' THEN
s_adr <= 0; s_adr <= 0;
ELSIF in_sosi.valid = '1' THEN ELSIF in_sosi.valid = '1' THEN
IF (s_adr = 2**(c_adr_w) - 1) THEN IF (s_adr = c_max_adr) THEN
s_adr <= 0; s_adr <= 0;
ELSE ELSE
s_adr <= s_adr + 1; s_adr <= s_adr + 1;
......
...@@ -30,22 +30,23 @@ USE dp_lib.dp_stream_pkg.ALL; ...@@ -30,22 +30,23 @@ USE dp_lib.dp_stream_pkg.ALL;
USE common_lib.common_mem_pkg.ALL; USE common_lib.common_mem_pkg.ALL;
USE common_lib.common_pkg.ALL; USE common_lib.common_pkg.ALL;
ENTITY tb_address_counter IS ENTITY tb_ddrctrl_address_counter IS
GENERIC ( GENERIC (
g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m; g_tech_ddr : t_c_tech_ddr := c_tech_ddr4_8g_1600m;
g_sim_model : BOOLEAN := TRUE g_sim_model : BOOLEAN := TRUE
); );
END tb_address_counter; END tb_ddrctrl_address_counter;
ARCHITECTURE tb OF tb_address_counter IS ARCHITECTURE tb OF tb_ddrctrl_address_counter IS
CONSTANT c_clk_freq : NATURAL := 200; -- MHz CONSTANT c_clk_freq : NATURAL := 200; -- MHz
CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps; CONSTANT c_clk_period : TIME := (10**6 / c_clk_freq) * 1 ps;
CONSTANT c_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); -- 576 CONSTANT c_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); -- 576
CONSTANT c_adr_w : NATURAL := 4; CONSTANT c_adr_w : NATURAL := 4;
CONSTANT c_max_adr : NATURAL := 2**c_adr_w;
SIGNAL tb_end : STD_LOGIC := '0'; SIGNAL tb_end : STD_LOGIC := '0';
...@@ -80,11 +81,12 @@ BEGIN ...@@ -80,11 +81,12 @@ BEGIN
WAIT UNTIL rising_edge(clk); -- align to rising edge WAIT UNTIL rising_edge(clk); -- align to rising edge
WAIT FOR c_clk_period*10; WAIT FOR c_clk_period*10;
ASSERT in_sosi.data(c_data_w - 1 DOWNTO 0) = out_mosi.wrdata(c_data_w - 1 DOWNTO 0) REPORT "Wrong wrdata 1" SEVERITY ERROR;
ASSERT in_sosi.valid = out_mosi.wr REPORT "Wrong wr 1" SEVERITY ERROR;
FOR I IN 0 TO 6 LOOP FOR I IN 0 TO 6 LOOP
in_data_enable <= '1'; in_data_enable <= '1';
in_data <= NOT in_data; in_data <= NOT in_data;
ASSERT in_data(c_data_w - 1 DOWNTO 0) = out_mosi.wrdata(c_data_w - 1 DOWNTO 0) REPORT "Wrong wrdata 1" SEVERITY ERROR;
ASSERT in_data_enable = out_mosi.wr REPORT "Wrong wr 1" SEVERITY ERROR;
ASSERT I = TO_UINT(out_mosi.address) REPORT "Wrong address 1" SEVERITY ERROR; ASSERT I = TO_UINT(out_mosi.address) REPORT "Wrong address 1" SEVERITY ERROR;
WAIT FOR c_clk_period*1; WAIT FOR c_clk_period*1;
in_data_enable <= '0'; in_data_enable <= '0';
...@@ -98,9 +100,7 @@ BEGIN ...@@ -98,9 +100,7 @@ BEGIN
WAIT FOR c_clk_period*1; WAIT FOR c_clk_period*1;
FOR I IN 0 TO 20 LOOP FOR I IN 0 TO 20 LOOP
ASSERT in_data(c_data_w - 1 DOWNTO 0) = out_mosi.wrdata(c_data_w - 1 DOWNTO 0) REPORT "Wrong wrdata 2" SEVERITY ERROR; ASSERT I = TO_UINT(out_mosi.address) OR I - c_max_adr = TO_UINT(out_mosi.address) REPORT "Wrong address, I = " & NATURAL'image(I) SEVERITY ERROR;
ASSERT in_data_enable = out_mosi.wr REPORT "Wrong wr 2" SEVERITY ERROR;
ASSERT I = TO_UINT(out_mosi.address) OR I - 16 = TO_UINT(out_mosi.address) REPORT "Wrong address, I = " & NATURAL'image(I) SEVERITY ERROR;
in_data_enable <= '1'; in_data_enable <= '1';
in_data <= NOT in_data; in_data <= NOT in_data;
WAIT FOR c_clk_period*1; WAIT FOR c_clk_period*1;
...@@ -115,7 +115,7 @@ BEGIN ...@@ -115,7 +115,7 @@ BEGIN
WAIT; WAIT;
END PROCESS; END PROCESS;
u_address_counter : ENTITY work.address_counter u_address_counter : ENTITY work.ddrctrl_address_counter
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 => g_sim_model
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment