Skip to content
Snippets Groups Projects
Commit df1c1e28 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Register ctlr_wr_flush_en to ease timing closure.

parent 16a06c93
No related branches found
No related tags found
No related merge requests found
...@@ -77,6 +77,8 @@ ARCHITECTURE str OF io_ddr_driver_flush_ctrl IS ...@@ -77,6 +77,8 @@ ARCHITECTURE str OF io_ddr_driver_flush_ctrl IS
SIGNAL channel : NATURAL RANGE 0 TO g_nof_channels-1; SIGNAL channel : NATURAL RANGE 0 TO g_nof_channels-1;
SIGNAL flush_dis : STD_LOGIC; SIGNAL flush_dis : STD_LOGIC;
SIGNAL nxt_ctlr_wr_flush_en : STD_LOGIC;
BEGIN BEGIN
...@@ -98,30 +100,33 @@ BEGIN ...@@ -98,30 +100,33 @@ BEGIN
p_reg : PROCESS(rst, clk) p_reg : PROCESS(rst, clk)
BEGIN BEGIN
IF rst='1' THEN IF rst='1' THEN
state <= s_flush; -- default start in flush mode after power up state <= s_flush; -- default start in flush mode after power up,
ctlr_wr_flush_en <= '1'; -- so default write flush is enabled
ELSIF rising_edge(clk) THEN ELSIF rising_edge(clk) THEN
state <= nxt_state; state <= nxt_state;
ctlr_wr_flush_en <= nxt_ctlr_wr_flush_en;
END IF; END IF;
END PROCESS; END PROCESS;
p_state : PROCESS(state, dvr_wr_flush_en, dvr_done, dvr_en, dvr_wr_not_rd, flush_dis) p_state : PROCESS(state, dvr_wr_flush_en, dvr_done, dvr_en, dvr_wr_not_rd, flush_dis)
BEGIN BEGIN
nxt_state <= state; nxt_state <= state;
ctlr_wr_flush_en <= '0'; nxt_ctlr_wr_flush_en <= '0';
CASE state IS CASE state IS
WHEN s_idle => WHEN s_idle =>
IF dvr_wr_flush_en='1' AND dvr_done='1' THEN IF dvr_wr_flush_en='1' AND dvr_done='1' THEN
ctlr_wr_flush_en <= '1'; nxt_ctlr_wr_flush_en <= '1';
nxt_state <= s_flush; nxt_state <= s_flush;
END IF; END IF;
WHEN s_flush => WHEN s_flush =>
ctlr_wr_flush_en <= '1'; nxt_ctlr_wr_flush_en <= '1';
IF dvr_en='1' AND dvr_wr_not_rd='1' THEN IF dvr_en='1' AND dvr_wr_not_rd='1' THEN
nxt_state <= s_stop; nxt_state <= s_stop;
END IF; END IF;
WHEN OTHERS => -- s_stop WHEN OTHERS => -- s_stop
ctlr_wr_flush_en <= '1'; nxt_ctlr_wr_flush_en <= '1';
IF flush_dis = '1' THEN IF flush_dis = '1' THEN -- flush_dis comes from sosi control (valid, sop or sync) from look ahead (RL=0) write FIFO
nxt_ctlr_wr_flush_en <= '0';
nxt_state <= s_idle; nxt_state <= s_idle;
END IF; END IF;
END CASE; END CASE;
......
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