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

Ready for review.

parent 33da6671
No related branches found
No related tags found
Loading
Pipeline #29127 passed
...@@ -164,7 +164,7 @@ BEGIN ...@@ -164,7 +164,7 @@ BEGIN
v.dvr_mosi.burstsize := TO_UVEC(g_last_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.burstsize := TO_UVEC(g_last_burstsize, dvr_mosi.burstsize'length);
ELSE ELSE
v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length); v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length);
v.dvr_mosi.address(c_bitshift_adr-1 DOWNTO 0) := c_zeros(c_bitshift_adr-1 DOWNTO 0); v.dvr_mosi.address(c_bitshift_adr-1 DOWNTO 0) := c_zeros(c_bitshift_adr-1 DOWNTO 0); -- makes sure that a burst is only started on a multiple of g_burstsize
v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length);
END IF; END IF;
ELSE ELSE
...@@ -188,17 +188,23 @@ BEGIN ...@@ -188,17 +188,23 @@ BEGIN
-- still a write cyle -- still a write cyle
-- if adr mod g_burstsize = 0 -- if adr mod g_burstsize = 0
-- this makes sure that only ones every 64 writes a writeburst is started. -- this makes sure that only ones every 64 writes a writeburst is started.
IF TO_UVEC(inp_adr, c_adr_w)(c_bitshift_adr-1 DOWNTO 0) = c_zeros THEN IF TO_UVEC(inp_adr, c_adr_w)(c_bitshift_adr-1 DOWNTO 0) = c_zeros AND q_reg.dvr_mosi.burstbegin = '0'THEN
v.need_burst := '1';
END IF;
IF dvr_miso.done = '1' AND q_reg.need_burst = '1' THEN
v.dvr_mosi.burstbegin := '1'; v.dvr_mosi.burstbegin := '1';
IF inp_adr = 0 THEN v.need_burst := '0';
v.dvr_mosi.address := TO_UVEC(g_max_adr-g_burstsize, dvr_mosi.address'length); IF inp_adr < g_burstsize-1 THEN
v.dvr_mosi.address := TO_UVEC(g_max_adr-g_last_burstsize, dvr_mosi.address'length);
v.dvr_mosi.burstsize := TO_UVEC(g_last_burstsize, dvr_mosi.burstsize'length);
ELSE ELSE
v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length); v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length);
v.dvr_mosi.address(c_bitshift_adr-1 DOWNTO 0) := c_zeros(c_bitshift_adr-1 DOWNTO 0); -- makes sure that a burst is only started on a multiple of g_burstsize
v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length);
END IF; END IF;
ELSE ELSE
v.dvr_mosi.burstbegin := '0'; v.dvr_mosi.burstbegin := '0';
END IF; END IF;
v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length);
v.dvr_mosi.wr := '1'; v.dvr_mosi.wr := '1';
v.dvr_mosi.rd := '0'; v.dvr_mosi.rd := '0';
v.wr_sosi := inp_sosi; v.wr_sosi := inp_sosi;
...@@ -232,7 +238,7 @@ BEGIN ...@@ -232,7 +238,7 @@ BEGIN
v.dvr_mosi.burstsize := TO_UVEC(g_last_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.burstsize := TO_UVEC(g_last_burstsize, dvr_mosi.burstsize'length);
ELSE ELSE
v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length); v.dvr_mosi.address := TO_UVEC(inp_adr-g_burstsize, dvr_mosi.address'length);
v.dvr_mosi.address(c_bitshift_adr-1 DOWNTO 0) := c_zeros(c_bitshift_adr-1 DOWNTO 0); v.dvr_mosi.address(c_bitshift_adr-1 DOWNTO 0) := c_zeros(c_bitshift_adr-1 DOWNTO 0); -- makes sure that a burst is only started on a multiple of g_burstsize
v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length); v.dvr_mosi.burstsize := TO_UVEC(g_burstsize, dvr_mosi.burstsize'length);
END IF; END IF;
ELSE ELSE
...@@ -249,14 +255,14 @@ BEGIN ...@@ -249,14 +255,14 @@ BEGIN
v.dvr_mosi.rd := '1'; v.dvr_mosi.rd := '1';
v.outp_ds := inp_ds; v.outp_ds := inp_ds;
FOR I IN 0 TO inp_bsn_adr+(g_max_adr-TO_UINT(q_reg.stop_adr)) LOOP -- takes a while WRONG, wil be fixed after L2SDP-705, 706, 707 and 708 FOR I IN 0 TO inp_bsn_adr+(g_max_adr-TO_UINT(q_reg.stop_adr)) LOOP -- takes a while WRONG, wil be fixed after L2SDP-705, 706 and 70
IF v.outp_ds-c_rest <= 0 THEN IF v.outp_ds-c_rest <= 0 THEN
v.outp_ds := v.outp_ds+c_rd_data_w-c_rest; v.outp_ds := v.outp_ds+c_rd_data_w-c_rest;
ELSE ELSE
v.outp_ds := v.outp_ds-c_rest; v.outp_ds := v.outp_ds-c_rest;
END IF; END IF;
END LOOP; END LOOP;
v.outp_bsn := TO_UVEC(TO_UINT(inp_sosi.bsn), c_dp_stream_bsn_w); -- WRONG, wil be fixed after L2SDP-705, 706, 707 and 708 v.outp_bsn := TO_UVEC(TO_UINT(inp_sosi.bsn), c_dp_stream_bsn_w); -- WRONG, wil be fixed after L2SDP-705, 706 and 707
v.state := READING; v.state := READING;
......
...@@ -105,7 +105,7 @@ BEGIN ...@@ -105,7 +105,7 @@ BEGIN
CASE q_reg.state IS CASE q_reg.state IS
WHEN RESET => WHEN RESET =>
v.s_adr := 0; -- 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. v.s_adr := 0;
IF q_reg.s_in_sosi.sop = '1' THEN IF q_reg.s_in_sosi.sop = '1' THEN
v.out_bsn_adr := v.s_adr; v.out_bsn_adr := v.s_adr;
...@@ -129,10 +129,12 @@ BEGIN ...@@ -129,10 +129,12 @@ BEGIN
WHEN IDLE => WHEN IDLE =>
-- after a reset skip the first data block so the ddr memory can calm down.
IF NOT(q_reg.s_in_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0) = in_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0)) THEN IF NOT(q_reg.s_in_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0) = in_sosi.bsn(c_dp_stream_bsn_w-1 DOWNTO 0)) THEN
v.bsn_passed := '1'; v.bsn_passed := '1';
END IF; END IF;
END CASE; END CASE;
IF rst = '1' THEN IF rst = '1' THEN
......
...@@ -45,7 +45,7 @@ ENTITY tb_ddrctrl IS ...@@ -45,7 +45,7 @@ ENTITY tb_ddrctrl IS
g_tech_ddr3 : t_c_tech_ddr := c_tech_ddr3_4g_800m_master; g_tech_ddr3 : t_c_tech_ddr := c_tech_ddr3_4g_800m_master;
g_tech_ddr4 : t_c_tech_ddr := c_tech_ddr4_4g_1600m; g_tech_ddr4 : t_c_tech_ddr := c_tech_ddr4_4g_1600m;
g_stop_percentage : NATURAL := 80; -- percentage there needs to be already written in the ddr memory when a stop gets triggered g_stop_percentage : NATURAL := 80; -- percentage there needs to be already written in the ddr memory when a stop gets triggered
g_block_size : NATURAL := 1023 -- amount of samples that goes into one bsn g_block_size : NATURAL := 1024 -- amount of samples that goes into one bsn
); );
END tb_ddrctrl; END tb_ddrctrl;
...@@ -96,7 +96,7 @@ ARCHITECTURE tb OF tb_ddrctrl IS ...@@ -96,7 +96,7 @@ ARCHITECTURE tb OF tb_ddrctrl IS
RETURN temp; RETURN temp;
END FUNCTION c_of_after_nof_adr_init; END FUNCTION c_of_after_nof_adr_init;
-- the amount of overflow into the address: c_nof_adr -- the amount of overflow into the address: c_nof_adr NOT YET USED DELETE AFTER L2SDP-706
CONSTANT c_of_after_nof_adr : NATURAL := c_of_after_nof_adr_init; CONSTANT c_of_after_nof_adr : NATURAL := c_of_after_nof_adr_init;
-- function for making total data vector -- function for making total data vector
...@@ -217,7 +217,7 @@ BEGIN ...@@ -217,7 +217,7 @@ BEGIN
-- stopping the testbench -- stopping the testbench
WAIT FOR c_clk_period*1024; WAIT FOR c_clk_period*g_block_size;
tb_end <= '1'; tb_end <= '1';
ASSERT FALSE REPORT "Test: OK" SEVERITY FAILURE; ASSERT FALSE REPORT "Test: OK" SEVERITY FAILURE;
END PROCESS; END PROCESS;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment