From cb2d4423b682b38c05f4f675044761ef16ccca94 Mon Sep 17 00:00:00 2001
From: Pepping <pepping>
Date: Fri, 16 Jan 2015 10:49:38 +0000
Subject: [PATCH] -Removed diag_lib -Changed all ddr3 references to io_ddr
 -Renamed and removed some portnames -CHanged the ouptut definition of address
 and burstsize

---
 .../reorder/src/vhdl/reorder_sequencer.vhd    | 81 +++++++++----------
 1 file changed, 38 insertions(+), 43 deletions(-)

diff --git a/libraries/base/reorder/src/vhdl/reorder_sequencer.vhd b/libraries/base/reorder/src/vhdl/reorder_sequencer.vhd
index bc87974019..39042c2a84 100644
--- a/libraries/base/reorder/src/vhdl/reorder_sequencer.vhd
+++ b/libraries/base/reorder/src/vhdl/reorder_sequencer.vhd
@@ -18,18 +18,17 @@
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 --
 
-LIBRARY IEEE, common_lib, diag_lib;
+LIBRARY IEEE, common_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE common_lib.common_pkg.ALL;
 USE common_lib.common_mem_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE work.ddr3_pkg.ALL;
+USE work.reorder_pkg.ALL;
 
-ENTITY ddr3_seq IS
+ENTITY reorder_sequencer IS
   GENERIC (
-    g_ddr3_seq : t_ddr3_seq := c_ddr3_seq;
-    g_ddr      : t_c_ddr3_phy
- );
+    g_reorder_seq   : t_reorder_seq := c_reorder_seq;
+    g_data_w_ratio  : POSITIVE := 4                 -- (256/64) Ratio between datawidth at the output of the write fifo and the input of the writefifo. 
+ );                                                 -- Used to determine the c_address_w. 
   PORT (
     -- Clocks and reset
     dp_rst      : IN  STD_LOGIC;  -- reset synchronous with st_clk
@@ -38,25 +37,24 @@ ENTITY ddr3_seq IS
     en_evt      : OUT STD_LOGIC;
     wr_not_rd   : OUT STD_LOGIC;
                 
-    start_addr  : OUT t_ddr3_addr;
-    end_addr    : OUT t_ddr3_addr;
+    address     : OUT STD_LOGIC_VECTOR;
+    burstsize   : OUT STD_LOGIC_VECTOR;
                 
     done        : IN  STD_LOGIC;
-    init_done   : IN  STD_LOGIC;
-    ctlr_rdy    : IN  STD_LOGIC;
     
     sync_ok_in  : IN  STD_LOGIC;
     sync_ok_out : OUT STD_LOGIC
    );
-END ddr3_seq;
+END reorder_sequencer;
 
 
-ARCHITECTURE rtl OF ddr3_seq IS
+ARCHITECTURE rtl OF reorder_sequencer IS
   
-  CONSTANT c_blocksize     : POSITIVE := g_ddr3_seq.wr_nof_chunks * (g_ddr3_seq.wr_chunksize + g_ddr3_seq.gapsize);  
-  CONSTANT c_page_size     : POSITIVE := c_blocksize * g_ddr3_seq.nof_blocks;
-  CONSTANT c_nof_wr_access : POSITIVE := g_ddr3_seq.wr_nof_chunks * g_ddr3_seq.nof_blocks;
-  CONSTANT c_address_w     : POSITIVE := sel_a_b(ceil_log2(2*c_page_size) > g_ddr.a_col_w, ceil_log2(2*c_page_size), g_ddr.a_col_w);
+  CONSTANT c_blocksize       : POSITIVE := g_reorder_seq.wr_nof_chunks * (g_reorder_seq.wr_chunksize + g_reorder_seq.gapsize);  
+  CONSTANT c_page_size       : POSITIVE := c_blocksize * g_reorder_seq.nof_blocks;
+  CONSTANT c_nof_wr_access   : POSITIVE := g_reorder_seq.wr_nof_chunks * g_reorder_seq.nof_blocks;
+  CONSTANT c_address_w       : POSITIVE := ceil_log2(2*c_page_size);    
+  CONSTANT c_address_shift_w : POSITIVE := ceil_log2(g_data_w_ratio);    
   
   TYPE   state_type is (s_idle, s_write, s_first_write, s_wait_wr, s_read, s_wait_rd);
 
@@ -79,6 +77,7 @@ ARCHITECTURE rtl OF ddr3_seq IS
     sync_ok_out      : STD_LOGIC;
     start_addr       : STD_LOGIC_VECTOR(c_address_w - 1 DOWNTO 0);
     end_addr         : STD_LOGIC_VECTOR(c_address_w - 1 DOWNTO 0);
+    burstsize        : STD_LOGIC_VECTOR(c_address_w - 1 DOWNTO 0);
     state            : state_type;  -- The state machine. 
   END RECORD;
 
@@ -89,9 +88,9 @@ BEGIN
   ---------------------------------------------------------------
   -- CHECK IF PROVIDED GENERICS ARE ALLOWED. 
   ---------------------------------------------------------------
-  ASSERT NOT((g_ddr3_seq.wr_nof_chunks*g_ddr3_seq.wr_chunksize) /= (g_ddr3_seq.rd_nof_chunks*g_ddr3_seq.rd_chunksize) AND rising_edge(dp_clk)) REPORT "Total write configuration is different from total read configuration!!!" SEVERITY FAILURE;
+  ASSERT NOT((g_reorder_seq.wr_nof_chunks*g_reorder_seq.wr_chunksize) /= (g_reorder_seq.rd_nof_chunks*g_reorder_seq.rd_chunksize) AND rising_edge(dp_clk)) REPORT "Total write configuration is different from total read configuration!!!" SEVERITY FAILURE;
     
-  p_comb : PROCESS(r, dp_rst, init_done, done, ctlr_rdy, sync_ok_in)
+  p_comb : PROCESS(r, dp_rst, done, sync_ok_in)
     VARIABLE v : reg_type;
   BEGIN
    
@@ -100,7 +99,7 @@ BEGIN
     
     CASE r.state IS
       WHEN s_idle => 
-        IF(init_done = '1' AND sync_ok_in = '1') THEN     
+        IF(done = '1' AND sync_ok_in = '1') THEN     
           v.first_write := '1';
           v.sync_ok_out := sync_ok_in;
           v.state       := s_first_write;  
@@ -110,32 +109,34 @@ BEGIN
         v.wr_not_rd  := '1'; 
         v.ddr3_en    := '1'; 
         v.start_addr := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset, c_address_w);
-        v.end_addr   := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset + g_ddr3_seq.wr_chunksize-4, c_address_w);  
+        v.burstsize  := TO_UVEC(g_reorder_seq.wr_chunksize, c_address_w);
+        v.end_addr   := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset + g_reorder_seq.wr_chunksize-4, c_address_w);  
         v.switch_cnt := r.switch_cnt + 1;
         v.state      := s_wait_wr;
         
       WHEN s_write =>  
-        IF(done = '1' AND ctlr_rdy = '1') THEN 
+        IF(done = '1') THEN 
           v.wr_not_rd  := '1'; 
           IF(sync_ok_in = '1') THEN   -- Only write when good sync pattern on the input.
             v.ddr3_en    := '1';
           END IF;
           v.start_addr := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset, c_address_w);                   
-          v.end_addr   := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset + g_ddr3_seq.wr_chunksize-4, c_address_w);  
+          v.burstsize  := TO_UVEC(g_reorder_seq.wr_chunksize, c_address_w);
+          v.end_addr   := TO_UVEC(r.wr_page_offset + r.wr_block_offset + r.wr_chunks_offset + g_reorder_seq.wr_chunksize-4, c_address_w);  
           v.switch_cnt := r.switch_cnt + 1;
           v.state      := s_wait_wr; 
         END IF;
 
       WHEN s_wait_wr =>      
         v.page_cnt := r.page_cnt + 1;
-        IF(r.wr_block_cnt = g_ddr3_seq.nof_blocks-1 AND r.wr_chunks_cnt = g_ddr3_seq.wr_nof_chunks-1) THEN 
+        IF(r.wr_block_cnt = g_reorder_seq.nof_blocks-1 AND r.wr_chunks_cnt = g_reorder_seq.wr_nof_chunks-1) THEN 
           v.wr_block_offset  := 0;
           v.wr_chunks_offset := 0;
           v.wr_block_cnt     := 0;
           v.wr_chunks_cnt    := 0;
-        ELSIF(r.wr_block_cnt = g_ddr3_seq.nof_blocks-1) THEN 
+        ELSIF(r.wr_block_cnt = g_reorder_seq.nof_blocks-1) THEN 
           v.wr_block_offset  := 0;
-          v.wr_chunks_offset := r.wr_chunks_offset + g_ddr3_seq.wr_chunksize;
+          v.wr_chunks_offset := r.wr_chunks_offset + g_reorder_seq.wr_chunksize;
           v.wr_block_cnt     := 0; 
           v.wr_chunks_cnt    := r.wr_chunks_cnt + 1;
         ELSE 
@@ -143,7 +144,7 @@ BEGIN
           v.wr_block_cnt    := r.wr_block_cnt + 1;
         END IF;          
         
-        IF(r.switch_cnt = g_ddr3_seq.wr_nof_chunks) THEN
+        IF(r.switch_cnt = g_reorder_seq.wr_nof_chunks) THEN
           v.switch_cnt := 0; 
           v.state      := s_read;
         ELSE
@@ -151,27 +152,28 @@ BEGIN
         END IF;  
       
       WHEN s_read => 
-        IF(done = '1' AND ctlr_rdy = '1') THEN 
+        IF(done = '1') THEN 
           v.wr_not_rd := '0'; 
           IF( r.first_write = '0') THEN 
             v.ddr3_en := '1'; 
           END IF; 
           v.start_addr  := TO_UVEC(r.rd_page_offset + r.rd_block_offset + r.rd_chunks_offset, c_address_w); 
-          v.end_addr    := TO_UVEC(r.rd_page_offset + r.rd_block_offset + r.rd_chunks_offset + g_ddr3_seq.rd_chunksize-4, c_address_w);   
+          v.burstsize   := TO_UVEC(g_reorder_seq.rd_chunksize, c_address_w);
+          v.end_addr    := TO_UVEC(r.rd_page_offset + r.rd_block_offset + r.rd_chunks_offset + g_reorder_seq.rd_chunksize-4, c_address_w);   
           v.switch_cnt  := r.switch_cnt + 1; 
           v.state       := s_wait_rd;
           v.sync_ok_out := sync_ok_in;
         END IF;
   
       WHEN s_wait_rd => 
-        IF(r.switch_cnt = g_ddr3_seq.rd_nof_chunks) THEN 
+        IF(r.switch_cnt = g_reorder_seq.rd_nof_chunks) THEN 
           v.switch_cnt := 0; 
           v.state      := s_write;
         ELSE
           v.state := s_read;
         END IF;  
 
-        IF(r.rd_block_cnt = g_ddr3_seq.nof_blocks-1 AND r.rd_chunks_cnt = g_ddr3_seq.rd_nof_chunks-1) THEN 
+        IF(r.rd_block_cnt = g_reorder_seq.nof_blocks-1 AND r.rd_chunks_cnt = g_reorder_seq.rd_nof_chunks-1) THEN 
           v.rd_block_offset  := 0;
           v.rd_chunks_offset := 0;
           v.rd_block_cnt     := 0;
@@ -185,9 +187,9 @@ BEGIN
               v.state := s_idle;
             END IF;
           END IF; 
-        ELSIF(r.rd_block_cnt = g_ddr3_seq.nof_blocks-1) THEN 
+        ELSIF(r.rd_block_cnt = g_reorder_seq.nof_blocks-1) THEN 
           v.rd_block_offset  := 0;
-          v.rd_chunks_offset := r.rd_chunks_offset + g_ddr3_seq.rd_chunksize;
+          v.rd_chunks_offset := r.rd_chunks_offset + g_reorder_seq.rd_chunksize;
           v.rd_block_cnt     := 0; 
           v.rd_chunks_cnt    := r.rd_chunks_cnt + 1;         
         ELSE 
@@ -217,6 +219,7 @@ BEGIN
       v.rd_chunks_cnt    := 0;
       v.sync_ok_out      := '0';
       v.start_addr       := (OTHERS => '0');
+      v.burstsize        := (OTHERS => '0');
       v.end_addr         := (OTHERS => '0'); 
       v.first_write      := '1';
       v.state            := s_idle;
@@ -236,16 +239,8 @@ BEGIN
   en_evt      <= r.ddr3_en;
   wr_not_rd   <= r.wr_not_rd;
   sync_ok_out <= r.sync_ok_out;
-
-  address : PROCESS(r)
-  BEGIN
-    start_addr        <= c_ddr3_addr_lo;
-    end_addr          <= c_ddr3_addr_lo;
-    start_addr.column <= r.start_addr(c_ddr3_phy.a_col_w-1 DOWNTO 0);
-    end_addr.column   <= r.end_addr(c_ddr3_phy.a_col_w-1 DOWNTO 0);
-    start_addr.row(c_address_w-c_ddr3_phy.a_col_w-1 DOWNTO 0) <= r.start_addr(c_address_w-1 DOWNTO c_ddr3_phy.a_col_w);
-    end_addr.row(c_address_w-c_ddr3_phy.a_col_w-1 DOWNTO 0)   <= r.end_addr(c_address_w-1 DOWNTO c_ddr3_phy.a_col_w);
-  END PROCESS;
+  address     <= RESIZE_UVEC(r.start_addr(c_address_w-1 DOWNTO c_address_shift_w), address'LENGTH);
+  burstsize   <= RESIZE_UVEC(r.burstsize(c_address_w-1 DOWNTO c_address_shift_w),  burstsize'LENGTH);
 
 END rtl;
 
-- 
GitLab