From 8f0857e17c0deb3fa9de954a80df9c5703850571 Mon Sep 17 00:00:00 2001
From: Pepping <pepping>
Date: Fri, 16 Jan 2015 10:53:14 +0000
Subject: [PATCH] -Update the library section - Added tech generics - Removed
 old ddr3 generics - Updated porttypes - replaced ddr3 by io_ddr

---
 .../reorder/src/vhdl/reorder_transpose.vhd    | 206 +++++++++---------
 1 file changed, 106 insertions(+), 100 deletions(-)

diff --git a/libraries/base/reorder/src/vhdl/reorder_transpose.vhd b/libraries/base/reorder/src/vhdl/reorder_transpose.vhd
index ec3b2f0468..b0745a0984 100644
--- a/libraries/base/reorder/src/vhdl/reorder_transpose.vhd
+++ b/libraries/base/reorder/src/vhdl/reorder_transpose.vhd
@@ -20,17 +20,21 @@
 --
 --------------------------------------------------------------------------------
 
-LIBRARY IEEE, common_lib, dp_lib, ss_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;  
+LIBRARY IEEE, technology_lib, common_lib, dp_lib, io_ddr_lib, tech_ddr_lib;                   
+USE IEEE.STD_LOGIC_1164.ALL;    
+USE IEEE.numeric_std.ALL;
+USE technology_lib.technology_select_pkg.ALL;
+USE common_lib.common_pkg.ALL;
 USE common_lib.common_mem_pkg.ALL;
-USE work.ddr3_pkg.ALL;
 USE dp_lib.dp_stream_pkg.ALL;
+USE tech_ddr_lib.tech_ddr_pkg.ALL;
+USE work.reorder_pkg.ALL;
 
-ENTITY ddr3_transpose IS
+ENTITY reorder_transpose IS
   GENERIC(
-    g_sim              : BOOLEAN := FALSE;
+    g_sim              : BOOLEAN := FALSE;  
+    g_technology       : NATURAL := c_tech_select_default;  
+    g_tech_ddr         : t_c_tech_ddr;                      
     g_nof_streams      : NATURAL := 4;
     g_in_dat_w         : NATURAL := 8;
     g_frame_size_in    : NATURAL := 256;
@@ -38,9 +42,7 @@ ENTITY ddr3_transpose IS
     g_nof_blk_per_sync : NATURAL := 16;
     g_use_complex      : BOOLEAN := TRUE;
     g_ena_pre_transp   : BOOLEAN := TRUE;
-    g_phy              : NATURAL := 1;   -- 0: ALTMEMPHY  1: UNIPHY_MASTER 2: UNIPHY_SLAVE
-    g_mts              : NATURAL := 800; -- Megatransfers per second
-    g_ddr3_seq         : t_ddr3_seq := c_ddr3_seq;
+    g_reorder_seq      : t_reorder_seq := c_reorder_seq;
     g_select_file      : STRING := "UNUSED"
   );                      
   PORT (
@@ -66,47 +68,47 @@ ENTITY ddr3_transpose IS
     ser_term_ctrl_in      : IN  STD_LOGIC_VECTOR(13 DOWNTO 0) := (OTHERS => '0');
     par_term_ctrl_in      : IN  STD_LOGIC_VECTOR(13 DOWNTO 0) := (OTHERS => '0');
                           
-    phy_in                : IN    t_ddr3_phy_in;
-    phy_io                : INOUT t_ddr3_phy_io;
-    phy_ou                : OUT   t_ddr3_phy_ou
-   );                     https://kickass.so/the-tracker-2002-x264-aac-t5162938.html
-END ddr3_transpose;
+    phy_in                : IN    t_tech_ddr_phy_in := c_tech_ddr_phy_in_x;  
+    phy_io                : INOUT t_tech_ddr_phy_io;                         
+    phy_ou                : OUT   t_tech_ddr_phy_ou                          
+   );
+END reorder_transpose;
 
 
-ARCHITECTURE str OF ddr3_transpose IS  
+ARCHITECTURE str OF reorder_transpose IS  
   
   CONSTANT c_min_fifo_size    : POSITIVE := 256;
-  CONSTANT c_blocksize        : POSITIVE := g_ddr3_seq.wr_nof_chunks * g_ddr3_seq.wr_chunksize;  
+  CONSTANT c_blocksize        : POSITIVE := g_reorder_seq.wr_nof_chunks * (g_reorder_seq.wr_chunksize + g_reorder_seq.gapsize);
+  CONSTANT c_pagesize         : POSITIVE := g_reorder_seq.nof_blocks * c_blocksize;  
+  CONSTANT c_mem_size         : POSITIVE := 2*c_pagesize;
+  CONSTANT c_mem_size_w       : POSITIVE := ceil_log2(c_mem_size);
+  
   CONSTANT c_wr_fifo_depth    : NATURAL  := sel_a_b(c_blocksize > c_min_fifo_size, c_blocksize, c_min_fifo_size);--c_blocksize * 2;
   CONSTANT c_rd_fifo_depth    : NATURAL  := sel_a_b(c_blocksize > c_min_fifo_size, c_blocksize, c_min_fifo_size);--c_blocksize * 2;
   
-  CONSTANT c_total_data_w     : NATURAL := g_nof_streams*g_in_dat_w;
-  CONSTANT c_complex_data_w   : NATURAL := c_total_data_w*c_nof_complex;
-  CONSTANT c_data_w           : NATURAL := sel_a_b(g_use_complex, c_complex_data_w, c_total_data_w);
-                              
-  CONSTANT c_nof_ch_in        : NATURAL := g_frame_size_in*g_ddr3_seq.rd_chunksize;
-  CONSTANT c_nof_ch_sel       : NATURAL := c_nof_ch_in;
-  
-  CONSTANT c_cnt_sop_w        : NATURAL := ceil_log2(g_nof_blk_per_sync)+1;
+  CONSTANT c_total_data_w     : NATURAL  := g_nof_streams*g_in_dat_w;
+  CONSTANT c_complex_data_w   : NATURAL  := c_total_data_w*c_nof_complex;
+  CONSTANT c_data_w           : NATURAL  := sel_a_b(g_use_complex, c_complex_data_w, c_total_data_w);
+                                         
+  CONSTANT c_nof_ch_in        : NATURAL  := g_frame_size_in*g_reorder_seq.rd_chunksize;
+  CONSTANT c_nof_ch_sel       : NATURAL  := c_nof_ch_in;
+                                         
+  CONSTANT c_cnt_sop_w        : NATURAL  := ceil_log2(g_nof_blk_per_sync)+1;
+
+  CONSTANT c_ctlr_data_w      : NATURAL := func_tech_ddr_ctlr_data_w(g_tech_ddr);
+  CONSTANT c_data_w_ratio     : POSITIVE := c_ctlr_data_w/c_data_w;
                               
   SIGNAL ss_in_sosi           : t_dp_sosi;          
   SIGNAL ss_in_siso           : t_dp_siso;          
   
     -- ctrl & status DDR3 driver
-  SIGNAL dvr_start_addr       : t_ddr3_addr;
-  SIGNAL dvr_end_addr         : t_ddr3_addr; 
-                              
+  SIGNAL dvr_done             : STD_LOGIC;
   SIGNAL dvr_en               : STD_LOGIC;
   SIGNAL dvr_wr_not_rd        : STD_LOGIC;
-  SIGNAL dvr_done             : STD_LOGIC;        
+  SIGNAL dvr_start_address    : STD_LOGIC_VECTOR(c_mem_size_w-1 DOWNTO 0); 
+  SIGNAL dvr_nof_data         : STD_LOGIC_VECTOR(c_mem_size_w-1 DOWNTO 0);
+  SIGNAL dvr_wr_flush_en      : STD_LOGIC;
   
-  SIGNAL flush_ena            : STD_LOGIC;
-  
-  -- DDR3 controller status
-  SIGNAL ctlr_init_done       : STD_LOGIC;    
-  SIGNAL ctlr_rdy             : STD_LOGIC; 
-  SIGNAL init_done_data_start : STD_LOGIC;  
-                                          
   SIGNAL transpose_in_sosi    : t_dp_sosi;          
   SIGNAL transpose_in_siso    : t_dp_siso;          
                               
@@ -115,6 +117,9 @@ ARCHITECTURE str OF ddr3_transpose IS
   SIGNAL block_gen_out_sosi   : t_dp_sosi;
   SIGNAL pipeline_out_sosi    : t_dp_sosi;  
   
+  SIGNAL ctlr_dvr_miso        : t_mem_ctlr_miso;
+  SIGNAL ctlr_dvr_mosi        : t_mem_ctlr_mosi;
+  
   SIGNAL sync_bsn             : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
   SIGNAL wr_req               : STD_LOGIC;
   SIGNAL rd_req_i             : STD_LOGIC;
@@ -127,6 +132,9 @@ ARCHITECTURE str OF ddr3_transpose IS
   SIGNAL nxt_mon_nof_sop      : STD_LOGIC_VECTOR(c_cnt_sop_w-1 DOWNTO 0);
   SIGNAL sync_ok_in           : STD_LOGIC;
   SIGNAL sync_ok_out          : STD_LOGIC;  
+
+  SIGNAL ctlr_clk             : STD_LOGIC;
+  SIGNAL ctlr_rst             : STD_LOGIC;  
     
 BEGIN 
 
@@ -152,7 +160,7 @@ BEGIN
 --    END GENERATE;  
 
   gen_pre_transpose : IF g_ena_pre_transp = TRUE GENERATE 
-    u_single_ss : ENTITY ss_lib.ss
+    u_single_ss : ENTITY work.ss
     GENERIC MAP (
       g_dsp_data_w         => c_total_data_w,
       g_nof_ch_in          => c_nof_ch_in,
@@ -188,75 +196,75 @@ BEGIN
     snk_out_arr(J) <= ss_in_siso;
   END GENERATE;
    
-  u_ddr3: ENTITY work.ddr3
-  GENERIC MAP(
-    g_ddr                     => c_ddr3_phy_4g, 
-    g_phy                     => g_phy,
-    g_mts                     => g_mts,
-    g_wr_data_w               => c_data_w,
-    g_wr_use_ctrl             => TRUE,
-    g_wr_fifo_depth           => c_wr_fifo_depth,
-    g_rd_fifo_depth           => c_rd_fifo_depth,
-    g_rd_data_w               => c_data_w,
-    g_flush_wr_fifo           => TRUE,  
-    g_flush_ext_ena           => TRUE,
-    g_flush_sop               => TRUE,
-    g_flush_sop_sync          => TRUE,
-    g_flush_sop_channel       => FALSE,
-    g_flush_sop_start_channel => 0,    
-    g_flush_nof_channels      => 0     
+  u_ddr3: ENTITY io_ddr_lib.io_ddr
+  GENERIC MAP( 
+    g_sim                    => g_sim,
+    g_technology             => g_technology,    --  : NATURAL := c_tech_select_default;
+    g_tech_ddr               => g_tech_ddr,      --  : t_c_tech_ddr;
+    g_cross_domain_dvr_ctlr  => FALSE, --TRUE,            --  : BOOLEAN := TRUE;
+    g_wr_data_w              => c_data_w,        --  : NATURAL := 32;  
+    g_wr_fifo_depth          => c_wr_fifo_depth, --  : NATURAL := 128;     -- >=16                             , defined at DDR side of the FIFO.
+    g_rd_fifo_depth          => c_rd_fifo_depth, --  : NATURAL := 256;     -- >=16 AND >g_tech_ddr.maxburstsize, defined at DDR side of the FIFO. 
+    g_rd_data_w              => c_data_w,        --  : NATURAL := 32;
+    g_wr_flush_mode          => "SYN",           --  : STRING := "VAL";  -- "VAL", "SOP", "SYN"
+    g_wr_flush_use_channel   => FALSE,           --  : BOOLEAN := FALSE;
+    g_wr_flush_start_channel => 0,               --  : NATURAL := 0;
+    g_wr_flush_nof_channels  => 1                --  : POSITIVE := 1
   )                          
-  PORT MAP (                      
-    ctlr_ref_clk       => dp_clk,
-    ctlr_rst           => dp_rst,
+  PORT MAP ( 
+    -- DDR reference clock
+    ctlr_ref_clk  => dp_clk,
+    ctlr_ref_rst  => dp_rst,
 
-    phy_in             => phy_in,
-    phy_io             => phy_io,  
-    phy_ou             => phy_ou,
-
-    ctlr_gen_clk       => OPEN,
-    ctlr_gen_rst       => OPEN,      
-
-    ctlr_init_done     => ctlr_init_done,
-
-    ctlr_rdy           => ctlr_rdy,
-    dvr_start_addr     => dvr_start_addr,
-    dvr_end_addr       => dvr_end_addr,
-
-    dvr_done           => dvr_done,
-    dvr_wr_not_rd      => dvr_wr_not_rd,
-    dvr_en             => dvr_en,
+    -- DDR controller clock domain
+    ctlr_clk_out  => ctlr_clk,
+    ctlr_rst_out  => ctlr_rst,
     
-    wr_clk             => dp_clk,
-    wr_rst             => dp_rst,
+    ctlr_clk_in   => ctlr_clk,  -- connect ctlr_clk_out to ctlr_clk_in at top level to avoid potential delta-cycle differences between the same clock
+    ctlr_rst_in   => ctlr_rst,  -- connect ctlr_rst_out to ctlr_rst_in at top level
 
-    wr_sosi            => transpose_in_sosi,
-    wr_siso            => transpose_in_siso,
+    -- Driver clock domain
+    dvr_clk       => dp_clk,
+    dvr_rst       => dp_rst,
     
-    flush_ena          => flush_ena,
-  
-    rd_sosi            => transpose_out_sosi, 
-    rd_siso            => src_in_arr(0),      
+    dvr_miso      => ctlr_dvr_miso,
+    dvr_mosi      => ctlr_dvr_mosi,
 
-    rd_clk             => dp_clk,
-    rd_rst             => dp_rst,    
+    -- Write FIFO clock domain
+    wr_clk        => dp_clk,
+    wr_rst        => dp_rst,
 
-    ser_term_ctrl_out  => ser_term_ctrl_out,
-    par_term_ctrl_out  => par_term_ctrl_out,
-
-    ser_term_ctrl_in   => ser_term_ctrl_in, 
-    par_term_ctrl_in   => par_term_ctrl_in, 
+    wr_fifo_usedw => OPEN,
+    wr_sosi       => transpose_in_sosi,  
+    wr_siso       => transpose_in_siso,
+  
+    -- Read FIFO clock domain
+    rd_clk        => dp_clk,
+    rd_rst        => dp_rst,     
+    
+    rd_fifo_usedw => OPEN,
+    rd_sosi       => transpose_out_sosi,
+    rd_siso       => src_in_arr(0),     
 
-    rd_fifo_usedw      => OPEN
+    phy_in        => phy_in,
+    phy_io        => phy_io,  
+    phy_ou        => phy_ou
   );
   
-  flush_ena <= NOT(ctlr_init_done) OR NOT(sync_ok_out); 
-  init_done_data_start <= ctlr_init_done AND transpose_in_sosi.sync; 
+  -- Map original dvr interface signals to t_mem_ctlr_mosi/miso
+  dvr_done                   <= ctlr_dvr_miso.done;           -- Requested wr or rd sequence is done
+  ctlr_dvr_mosi.burstbegin   <= dvr_en;
+  ctlr_dvr_mosi.wr           <= dvr_wr_not_rd;           -- No need to use dvr_mosi.rd
+  ctlr_dvr_mosi.address      <= RESIZE_MEM_CTLR_ADDRESS(dvr_start_address);
+  ctlr_dvr_mosi.burstsize    <= RESIZE_MEM_CTLR_BURSTSIZE(dvr_nof_data);
+  ctlr_dvr_mosi.flush        <= dvr_wr_flush_en;
+
+  dvr_wr_flush_en <= NOT(sync_ok_out); 
 
-  u_ddr3_sequencer: ENTITY work.ddr3_seq
+  u_ddr_sequencer: ENTITY work.reorder_sequencer
   GENERIC MAP(
-    g_ddr      => c_ddr3_phy_4g, 
-    g_ddr3_seq => g_ddr3_seq
+    g_reorder_seq  => g_reorder_seq,
+    g_data_w_ratio => c_data_w_ratio
   )                      
   PORT MAP (       
     dp_rst      => dp_rst,
@@ -265,12 +273,10 @@ BEGIN
     en_evt      => dvr_en, 
     wr_not_rd   => dvr_wr_not_rd,
                 
-    start_addr  => dvr_start_addr,
-    end_addr    => dvr_end_addr,
+    address     => dvr_start_address,
+    burstsize   => dvr_nof_data,
                 
-    done        => dvr_done,
-    init_done   => init_done_data_start,
-    ctlr_rdy    => ctlr_rdy,
+    done        =>  dvr_done,
                 
     sync_ok_in  => sync_ok_in,
     sync_ok_out => sync_ok_out
@@ -304,7 +310,7 @@ BEGIN
   ---------------------------------------------------------------
   -- FIFO FOR SYNC-BSN
   ---------------------------------------------------------------   
-  wr_req <= snk_in_arr(0).sync AND ctlr_init_done;
+  wr_req <= snk_in_arr(0).sync;
   
   u_sync_bsn_fifo : ENTITY common_lib.common_fifo_sc 
   GENERIC MAP (
-- 
GitLab