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

Added address_cnt_is_0 register to easytiming closure.

parent 7df031dd
No related branches found
No related tags found
No related merge requests found
...@@ -94,6 +94,8 @@ ARCHITECTURE str OF io_ddr_driver IS ...@@ -94,6 +94,8 @@ ARCHITECTURE str OF io_ddr_driver IS
SIGNAL nxt_cur_address : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0); SIGNAL nxt_cur_address : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0);
SIGNAL address_cnt : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0) := (OTHERS=>'0'); -- count down nof addresses = nof ctlr data words SIGNAL address_cnt : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0) := (OTHERS=>'0'); -- count down nof addresses = nof ctlr data words
SIGNAL nxt_address_cnt : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0); SIGNAL nxt_address_cnt : STD_LOGIC_VECTOR(c_ctlr_address_w-1 DOWNTO 0);
SIGNAL address_cnt_is_0 : STD_LOGIC;
SIGNAL nxt_address_cnt_is_0 : STD_LOGIC;
BEGIN BEGIN
...@@ -110,13 +112,14 @@ BEGIN ...@@ -110,13 +112,14 @@ BEGIN
state <= s_init; state <= s_init;
prev_state <= s_init; prev_state <= s_init;
ELSIF rising_edge(clk) THEN ELSIF rising_edge(clk) THEN
state <= nxt_state; state <= nxt_state;
prev_state <= state; prev_state <= state;
burst_wr_cnt <= nxt_burst_wr_cnt; burst_wr_cnt <= nxt_burst_wr_cnt;
dvr_done <= nxt_dvr_done; dvr_done <= nxt_dvr_done;
cur_address <= nxt_cur_address; cur_address <= nxt_cur_address;
address_cnt <= nxt_address_cnt; address_cnt <= nxt_address_cnt;
burst_size <= nxt_burst_size; address_cnt_is_0 <= nxt_address_cnt_is_0;
burst_size <= nxt_burst_size;
END IF; END IF;
END PROCESS; END PROCESS;
...@@ -132,13 +135,15 @@ BEGIN ...@@ -132,13 +135,15 @@ BEGIN
END IF; END IF;
END PROCESS; END PROCESS;
nxt_address_cnt_is_0 <= '1' WHEN UNSIGNED(nxt_address_cnt) = 0 ELSE '0';
rd_src_out.valid <= ctlr_miso.rdval; rd_src_out.valid <= ctlr_miso.rdval;
rd_src_out.data <= RESIZE_DP_DATA(ctlr_miso.rddata); rd_src_out.data <= RESIZE_DP_DATA(ctlr_miso.rddata);
p_state : PROCESS(prev_state, state, p_state : PROCESS(prev_state, state,
dvr_en, dvr_wr_not_rd, dvr_start_address, dvr_nof_data, dvr_en, dvr_wr_not_rd, dvr_start_address, dvr_nof_data,
ctlr_miso, wr_snk_in, rd_src_in, ctlr_miso, wr_snk_in, rd_src_in,
burst_size, burst_wr_cnt, cur_address, address_cnt) burst_size, burst_wr_cnt, cur_address, address_cnt, address_cnt_is_0)
BEGIN BEGIN
nxt_state <= state; nxt_state <= state;
...@@ -164,15 +169,15 @@ BEGIN ...@@ -164,15 +169,15 @@ BEGIN
ctlr_mosi.wr <= '1'; ctlr_mosi.wr <= '1';
nxt_burst_wr_cnt <= burst_wr_cnt-1; nxt_burst_wr_cnt <= burst_wr_cnt-1;
IF burst_wr_cnt = 1 THEN -- check for the last cycle of this burst sequence IF burst_wr_cnt = 1 THEN -- check for the last cycle of this burst sequence
nxt_state <= s_wr_request; -- initiate a new wr burst or goto idle via the wr_request state nxt_state <= s_wr_request; -- initiate a new wr burst or goto idle via the wr_request state, simulation shows this does not cost a cycle
END IF; END IF;
END IF; END IF;
END IF; END IF;
WHEN s_wr_request => -- Performs 1 write access and goes into s_wr_burst when requested write words >1 WHEN s_wr_request => -- Performs 1 write access and goes into s_wr_burst when requested write words >1
IF UNSIGNED(address_cnt) = 0 THEN -- end address reached IF address_cnt_is_0 = '1' THEN -- end address reached
nxt_dvr_done <= '1'; nxt_dvr_done <= '1';
nxt_state <= s_idle; nxt_state <= s_idle;
ELSIF ctlr_miso.waitrequest_n = '1' THEN ELSIF ctlr_miso.waitrequest_n = '1' THEN
IF wr_snk_in.valid = '1' THEN IF wr_snk_in.valid = '1' THEN
-- Always perform 1st write here -- Always perform 1st write here
...@@ -192,7 +197,7 @@ BEGIN ...@@ -192,7 +197,7 @@ BEGIN
END IF; END IF;
WHEN s_rd_request => -- Posts a read request for a burst (1...g_tech_ddr.maxburstsize) WHEN s_rd_request => -- Posts a read request for a burst (1...g_tech_ddr.maxburstsize)
IF UNSIGNED(address_cnt) = 0 THEN -- end address reached IF address_cnt_is_0 = '1' THEN -- end address reached
nxt_dvr_done <= '1'; nxt_dvr_done <= '1';
nxt_state <= s_idle; nxt_state <= s_idle;
ELSE ELSE
......
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