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

Merge branch 'L2SDP-704' into L2SDP-705

parents 87f7fbe5 dff2da7d
Branches
No related tags found
1 merge request!238Resolve L2SDP-705
...@@ -86,6 +86,7 @@ ARCHITECTURE str OF ddrctrl IS ...@@ -86,6 +86,7 @@ ARCHITECTURE str OF ddrctrl IS
CONSTANT c_io_ddr_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr ); CONSTANT c_io_ddr_data_w : NATURAL := func_tech_ddr_ctlr_data_w( g_tech_ddr );
CONSTANT c_wr_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 and independent of wr burst size, default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K CONSTANT c_wr_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 and independent of wr burst size, default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K
CONSTANT c_rd_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 AND > max number of rd burst sizes (so > c_rd_fifo_af_margin), default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K CONSTANT c_rd_fifo_depth : NATURAL := 256; -- defined at DDR side of the FIFO, >=16 AND > max number of rd burst sizes (so > c_rd_fifo_af_margin), default >= 256 because 32b*256 fits in 1 M9K so c_ctlr_data_w=256b will require 8 M9K
CONSTANT c_rd_fifo_uw_w : NATURAL := ceil_log2(c_rd_fifo_depth*(func_tech_ddr_ctlr_data_w(g_tech_ddr)/c_io_ddr_data_w));
-- signals for connecting the components -- signals for connecting the components
SIGNAL ctrl_clk : STD_LOGIC; SIGNAL ctrl_clk : STD_LOGIC;
...@@ -99,7 +100,7 @@ ARCHITECTURE str OF ddrctrl IS ...@@ -99,7 +100,7 @@ ARCHITECTURE str OF ddrctrl IS
SIGNAL rd_siso : t_dp_siso := c_dp_siso_rst; SIGNAL rd_siso : t_dp_siso := c_dp_siso_rst;
SIGNAL rd_sosi : t_dp_sosi := c_dp_sosi_init; SIGNAL rd_sosi : t_dp_sosi := c_dp_sosi_init;
SIGNAL stop : STD_LOGIC; SIGNAL stop : STD_LOGIC;
SIGNAL rd_fifo_usedw: STD_LOGIC_VECTOR(ceil_log2(c_rd_fifo_depth*(func_tech_ddr_ctlr_data_w(g_tech_ddr)/c_io_ddr_data_w) )-1 DOWNTO 0); SIGNAL rd_fifo_usedw: STD_LOGIC_VECTOR(c_rd_fifo_uw_w-1 DOWNTO 0);
SIGNAL rd_ready : STD_LOGIC; SIGNAL rd_ready : STD_LOGIC;
SIGNAL inp_ds : NATURAL; SIGNAL inp_ds : NATURAL;
SIGNAL inp_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0); SIGNAL inp_bsn : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
...@@ -239,7 +240,11 @@ BEGIN ...@@ -239,7 +240,11 @@ BEGIN
g_wr_data_w => c_io_ddr_data_w, g_wr_data_w => c_io_ddr_data_w,
g_rd_fifo_depth => c_rd_fifo_depth, g_rd_fifo_depth => c_rd_fifo_depth,
g_rd_data_w => c_io_ddr_data_w, g_rd_data_w => c_io_ddr_data_w,
<<<<<<< HEAD
g_block_size => g_block_size g_block_size => g_block_size
=======
g_rd_fifo_uw_w => c_rd_fifo_uw_w
>>>>>>> L2SDP-704
) )
PORT MAP( PORT MAP(
clk => clk, clk => clk,
......
...@@ -45,7 +45,8 @@ ENTITY ddrctrl_controller IS ...@@ -45,7 +45,8 @@ ENTITY ddrctrl_controller IS
g_wr_data_w : NATURAL; g_wr_data_w : NATURAL;
g_rd_fifo_depth : NATURAL; g_rd_fifo_depth : NATURAL;
g_rd_data_w : NATURAL; g_rd_data_w : NATURAL;
g_block_size : NATURAL g_block_size : NATURAL;
g_rd_fifo_uw_w : NATURAL
); );
PORT ( PORT (
clk : IN STD_LOGIC; clk : IN STD_LOGIC;
...@@ -63,7 +64,7 @@ ENTITY ddrctrl_controller IS ...@@ -63,7 +64,7 @@ ENTITY ddrctrl_controller IS
dvr_mosi : OUT t_mem_ctlr_mosi; dvr_mosi : OUT t_mem_ctlr_mosi;
dvr_miso : IN t_mem_ctlr_miso; dvr_miso : IN t_mem_ctlr_miso;
wr_sosi : OUT t_dp_sosi; wr_sosi : OUT t_dp_sosi;
rd_fifo_usedw : IN STD_LOGIC_VECTOR(ceil_log2(g_rd_fifo_depth * (func_tech_ddr_ctlr_data_w(g_tech_ddr)/g_rd_data_w) )-1 DOWNTO 0); rd_fifo_usedw : IN STD_LOGIC_VECTOR(g_rd_fifo_uw_w-1 DOWNTO 0);
-- ddrctrl_output -- ddrctrl_output
outp_ds : OUT NATURAL; outp_ds : OUT NATURAL;
...@@ -97,7 +98,7 @@ ARCHITECTURE rtl OF ddrctrl_controller IS ...@@ -97,7 +98,7 @@ ARCHITECTURE rtl OF ddrctrl_controller IS
-- state of program -- state of program
state : t_state; state : t_state;
-- stoppping signals -- stopping signals
stop_adr : STD_LOGIC_VECTOR(c_adr_w-1 DOWNTO 0); stop_adr : STD_LOGIC_VECTOR(c_adr_w-1 DOWNTO 0);
stopped : STD_LOGIC; stopped : STD_LOGIC;
...@@ -132,22 +133,11 @@ BEGIN ...@@ -132,22 +133,11 @@ BEGIN
v := q_reg; v := q_reg;
CASE q_reg.state IS CASE q_reg.state IS
WHEN RESET => WHEN RESET =>
v := c_t_reg_init; v := c_t_reg_init;
IF rst = '1' THEN
v.state := RESET;
ELSIF stop_in = '1' THEN
v.state := SET_STOP;
ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
v.state := STOP_WRITING;
ELSIF v.stopped = '1' THEN
v.state := IDLE;
ELSE
v.state := WRITING;
END IF;
WHEN WRITING => WHEN WRITING =>
-- if adr mod c_burstsize = 0 -- if adr mod c_burstsize = 0
...@@ -168,20 +158,6 @@ BEGIN ...@@ -168,20 +158,6 @@ BEGIN
v.wr_sosi := inp_sosi; v.wr_sosi := inp_sosi;
IF rst = '1' THEN
v.state := RESET;
ELSIF stop_in = '1' THEN
v.state := SET_STOP;
ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
v.state := STOP_WRITING;
ELSIF v.stopped = '1' THEN
v.state := IDLE;
ELSE
v.state := WRITING;
END IF;
WHEN SET_STOP => WHEN SET_STOP =>
--setting a stop address dependend on the g_stop_percentage --setting a stop address dependend on the g_stop_percentage
IF inp_adr+c_pof_ma >= c_max_adr THEN IF inp_adr+c_pof_ma >= c_max_adr THEN
...@@ -210,20 +186,6 @@ BEGIN ...@@ -210,20 +186,6 @@ BEGIN
v.wr_sosi := inp_sosi; v.wr_sosi := inp_sosi;
IF rst = '1' THEN
v.state := RESET;
ELSIF stop_in = '1' THEN
v.state := SET_STOP;
ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
v.state := STOP_WRITING;
ELSIF v.stopped = '1' THEN
v.state := IDLE;
ELSE
v.state := WRITING;
END IF;
WHEN STOP_WRITING => WHEN STOP_WRITING =>
v.dvr_mosi.burstbegin := '0'; v.dvr_mosi.burstbegin := '0';
-- wait until the write burst is finished -- wait until the write burst is finished
...@@ -237,11 +199,6 @@ BEGIN ...@@ -237,11 +199,6 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN
v.state := RESET;
END IF;
WHEN START_READING => WHEN START_READING =>
v.rd_burst_en := '1'; v.rd_burst_en := '1';
v.dvr_mosi.wr := '0'; v.dvr_mosi.wr := '0';
...@@ -255,15 +212,8 @@ BEGIN ...@@ -255,15 +212,8 @@ BEGIN
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_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_bsn), c_dp_stream_bsn_w); -- WRONG, wil be fixed after L2SDP-705, 706, 707 and 708
IF rst = '1' THEN
v.state := RESET;
ELSE
v.state := READING; v.state := READING;
END IF;
WHEN READING => WHEN READING =>
...@@ -286,9 +236,7 @@ BEGIN ...@@ -286,9 +236,7 @@ BEGIN
v.rd_burst_en := '1'; v.rd_burst_en := '1';
END IF; END IF;
IF rst = '1' THEN IF q_reg.read_cnt >= c_max_read_cnt THEN
v.state := RESET;
ELSIF q_reg.read_cnt >= c_max_read_cnt THEN
v.state := IDLE; v.state := IDLE;
ELSE ELSE
v.state := READING; v.state := READING;
...@@ -298,27 +246,17 @@ BEGIN ...@@ -298,27 +246,17 @@ BEGIN
WHEN IDLE => WHEN IDLE =>
-- the statemachine goes to Idle when its finished or when its waiting on other components. -- the statemachine goes to Idle when its finished or when its waiting on other components.
IF rst = '1' THEN
v.state := RESET;
ELSIF stop_in = '1' THEN
v.state := SET_STOP;
ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
v.state := STOP_WRITING;
ELSIF v.stopped = '1' THEN
v.state := IDLE;
ELSE
v.state := WRITING;
END IF;
WHEN OTHERS => WHEN OTHERS =>
v := c_t_reg_init; v := c_t_reg_init;
END CASE;
IF rst = '1' THEN
v.state := RESET; IF q_reg.state = RESET OR q_reg.state = WRITING OR q_reg.state = SET_STOP OR q_reg.state = IDLE THEN
ELSIF stop_in = '1' THEN IF stop_in = '1' THEN
v.state := SET_STOP; v.state := SET_STOP;
ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN ELSIF v.stop_adr = TO_UVEC(inp_adr, c_adr_w) AND v.stop_adr(c_bitshift_adr-1 DOWNTO 0) = c_zeros(c_bitshift_adr-1 DOWNTO 0) AND q_reg.stopped = '0' THEN
v.state := STOP_WRITING; v.state := STOP_WRITING;
...@@ -327,11 +265,12 @@ BEGIN ...@@ -327,11 +265,12 @@ BEGIN
ELSE ELSE
v.state := WRITING; v.state := WRITING;
END IF; END IF;
END IF;
END CASE; IF rst = '1' THEN
v.state := RESET;
END IF;
d_reg <= v; d_reg <= v;
......
...@@ -115,9 +115,7 @@ BEGIN ...@@ -115,9 +115,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := RESET;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := OVER_HALF; v.state := OVER_HALF;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
v.state := IDLE; v.state := IDLE;
...@@ -150,9 +148,7 @@ BEGIN ...@@ -150,9 +148,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := RESET;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := OVER_HALF; v.state := OVER_HALF;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
v.state := IDLE; v.state := IDLE;
...@@ -178,9 +174,7 @@ BEGIN ...@@ -178,9 +174,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF v.dd_fresh = '1' THEN
v.state := RESET;
ELSIF v.dd_fresh = '1' THEN
v.state := SECOND_READ; v.state := SECOND_READ;
ELSE ELSE
v.state := IDLE; v.state := IDLE;
...@@ -203,9 +197,7 @@ BEGIN ...@@ -203,9 +197,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := RESET;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' THEN
v.state := OVER_HALF; v.state := OVER_HALF;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '0' THEN
v.state := IDLE; v.state := IDLE;
...@@ -221,13 +213,8 @@ BEGIN ...@@ -221,13 +213,8 @@ BEGIN
v.delay_data(g_in_data_w-1 DOWNTO 0) := in_sosi.data(g_in_data_w-1 DOWNTO 0); v.delay_data(g_in_data_w-1 DOWNTO 0) := in_sosi.data(g_in_data_w-1 DOWNTO 0);
v.dd_fresh := '1'; v.dd_fresh := '1';
END IF; END IF;
IF rst = '1' THEN
v.state := RESET;
ELSE
v.state := OFF; v.state := OFF;
END IF;
WHEN IDLE => WHEN IDLE =>
-- the statemachine goes to Idle when its finished or when its waiting on other components. -- the statemachine goes to Idle when its finished or when its waiting on other components.
...@@ -240,9 +227,7 @@ BEGIN ...@@ -240,9 +227,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '1' THEN
v.state := RESET;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '1' THEN
v.state := OVER_HALF; v.state := OVER_HALF;
ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '0' THEN ELSIF (g_out_data_w*(v.op_data_cnt+1))+q_reg.a_of >= g_in_data_w AND v.dd_fresh = '1' AND q_reg.sr_done = '0' THEN
v.state := SECOND_READ; v.state := SECOND_READ;
...@@ -263,9 +248,7 @@ BEGIN ...@@ -263,9 +248,7 @@ BEGIN
END IF; END IF;
IF rst = '1' THEN IF in_sosi.valid = '1' THEN
v.state := RESET;
ELSIF in_sosi.valid = '1' THEN
v.state := FIRST_READ; v.state := FIRST_READ;
ELSE ELSE
v.state := OFF; v.state := OFF;
...@@ -275,6 +258,9 @@ BEGIN ...@@ -275,6 +258,9 @@ BEGIN
END CASE; END CASE;
IF rst = '1' THEN
v.state := RESET;
END IF;
d_reg <= v; d_reg <= v;
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