From 1bb1dd6ab7ef4795c9b86c84f4ce93947e30c7e1 Mon Sep 17 00:00:00 2001
From: Daniel van der Schuur <schuur@astron.nl>
Date: Fri, 19 Dec 2014 08:57:46 +0000
Subject: [PATCH] -Added MM register and bus for the filter coefficients.

---
 .../quartus/qsys_apertif_unb1_correlator.qsys | 170 +++++++++++++-----
 .../src/vhdl/apertif_unb1_correlator.vhd      |  14 +-
 .../src/vhdl/mmm_apertif_unb1_correlator.vhd  |  30 +++-
 3 files changed, 161 insertions(+), 53 deletions(-)

diff --git a/applications/apertif_unb1_correlator/quartus/qsys_apertif_unb1_correlator.qsys b/applications/apertif_unb1_correlator/quartus/qsys_apertif_unb1_correlator.qsys
index 3eb7807dc7..b8da7d49ac 100644
--- a/applications/apertif_unb1_correlator/quartus/qsys_apertif_unb1_correlator.qsys
+++ b/applications/apertif_unb1_correlator/quartus/qsys_apertif_unb1_correlator.qsys
@@ -52,14 +52,6 @@
          type = "int";
       }
    }
-   element c0
-   {
-      datum _sortIndex
-      {
-         value = "1";
-         type = "int";
-      }
-   }
    element altpll_0.c0
    {
       datum _clockDomain
@@ -68,6 +60,14 @@
          type = "String";
       }
    }
+   element c0
+   {
+      datum _sortIndex
+      {
+         value = "1";
+         type = "int";
+      }
+   }
    element altpll_0.c1
    {
       datum _clockDomain
@@ -104,7 +104,7 @@
    {
       datum baseAddress
       {
-         value = "14336";
+         value = "24576";
          type = "long";
       }
    }
@@ -129,19 +129,24 @@
          type = "long";
       }
    }
-   element pio_pps.mem
+   element ram_fil_coefs.mem
    {
       datum baseAddress
       {
-         value = "328";
+         value = "14336";
          type = "long";
       }
    }
-   element reg_diag_data_buf.mem
+   element reg_wdi.mem
    {
+      datum _lockedAddress
+      {
+         value = "1";
+         type = "boolean";
+      }
       datum baseAddress
       {
-         value = "336";
+         value = "12288";
          type = "long";
       }
    }
@@ -158,20 +163,23 @@
          type = "long";
       }
    }
-   element rom_system_info.mem
+   element reg_diag_data_buf.mem
    {
-      datum _lockedAddress
+      datum baseAddress
       {
-         value = "1";
-         type = "boolean";
+         value = "336";
+         type = "long";
       }
+   }
+   element reg_unb_sens.mem
+   {
       datum baseAddress
       {
-         value = "4096";
+         value = "224";
          type = "long";
       }
    }
-   element reg_wdi.mem
+   element rom_system_info.mem
    {
       datum _lockedAddress
       {
@@ -180,15 +188,15 @@
       }
       datum baseAddress
       {
-         value = "12288";
+         value = "4096";
          type = "long";
       }
    }
-   element reg_unb_sens.mem
+   element pio_pps.mem
    {
       datum baseAddress
       {
-         value = "224";
+         value = "328";
          type = "long";
       }
    }
@@ -266,14 +274,6 @@
          type = "String";
       }
    }
-   element altpll_1.pll_slave
-   {
-      datum baseAddress
-      {
-         value = "304";
-         type = "long";
-      }
-   }
    element altpll_0.pll_slave
    {
       datum _lockedAddress
@@ -287,6 +287,14 @@
          type = "long";
       }
    }
+   element altpll_1.pll_slave
+   {
+      datum baseAddress
+      {
+         value = "304";
+         type = "long";
+      }
+   }
    element ram_diag_data_buf
    {
       datum _sortIndex
@@ -295,6 +303,14 @@
          type = "int";
       }
    }
+   element ram_fil_coefs
+   {
+      datum _sortIndex
+      {
+         value = "19";
+         type = "int";
+      }
+   }
    element reg_diag_data_buf.read
    {
       datum _tags
@@ -335,27 +351,19 @@
          type = "int";
       }
    }
-   element pio_wdi.s1
-   {
-      datum baseAddress
-      {
-         value = "288";
-         type = "long";
-      }
-   }
-   element timer_0.s1
+   element pio_debug_wave.s1
    {
       datum baseAddress
       {
-         value = "192";
+         value = "272";
          type = "long";
       }
    }
-   element pio_debug_wave.s1
+   element pio_wdi.s1
    {
       datum baseAddress
       {
-         value = "272";
+         value = "288";
          type = "long";
       }
    }
@@ -372,6 +380,14 @@
          type = "long";
       }
    }
+   element timer_0.s1
+   {
+      datum baseAddress
+      {
+         value = "192";
+         type = "long";
+      }
+   }
    element timer_0
    {
       datum _sortIndex
@@ -400,10 +416,10 @@
  <parameter name="globalResetBus" value="false" />
  <parameter name="hdlLanguage" value="VHDL" />
  <parameter name="maxAdditionalLatency" value="0" />
- <parameter name="projectName" value="apertif_unb1_correlator.qpf" />
+ <parameter name="projectName" value="" />
  <parameter name="sopcBorderPoints" value="false" />
  <parameter name="systemHash" value="1" />
- <parameter name="timeStamp" value="1418396167104" />
+ <parameter name="timeStamp" value="1418978186377" />
  <parameter name="useTestBenchNamingPattern" value="false" />
  <instanceScript></instanceScript>
  <interface
@@ -1003,6 +1019,41 @@
    dir="end" />
  <interface name="altpll_1_c0" internal="altpll_1.c0" type="clock" dir="start" />
  <interface name="reset" internal="CLK.clk_in_reset" type="reset" dir="end" />
+ <interface
+   name="ram_fil_coefs_reset"
+   internal="ram_fil_coefs.reset"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_clk"
+   internal="ram_fil_coefs.clk"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_address"
+   internal="ram_fil_coefs.address"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_write"
+   internal="ram_fil_coefs.write"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_writedata"
+   internal="ram_fil_coefs.writedata"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_read"
+   internal="ram_fil_coefs.read"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ram_fil_coefs_readdata"
+   internal="ram_fil_coefs.readdata"
+   type="conduit"
+   dir="end" />
  <module kind="clock_source" version="11.1" enabled="1" name="clk_0">
   <parameter name="clockFrequency" value="25000000" />
   <parameter name="clockFrequencyKnown" value="true" />
@@ -1379,8 +1430,8 @@ q]]></parameter>
   <parameter name="tightlyCoupledInstructionMaster1AddrWidth" value="1" />
   <parameter name="tightlyCoupledInstructionMaster2AddrWidth" value="1" />
   <parameter name="tightlyCoupledInstructionMaster3AddrWidth" value="1" />
-  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
-  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='avs_eth_0.mms_reg' start='0x80' end='0xC0' /><slave name='timer_0.s1' start='0xC0' end='0xE0' /><slave name='reg_unb_sens.mem' start='0xE0' end='0x100' /><slave name='altpll_0.pll_slave' start='0x100' end='0x110' /><slave name='pio_debug_wave.s1' start='0x110' end='0x120' /><slave name='pio_wdi.s1' start='0x120' end='0x130' /><slave name='altpll_1.pll_slave' start='0x130' end='0x140' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x140' end='0x148' /><slave name='pio_pps.mem' start='0x148' end='0x150' /><slave name='reg_diag_data_buf.mem' start='0x150' end='0x158' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='ram_diag_data_buf.mem' start='0x5000' end='0x6000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
+  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='cpu_0.jtag_debug_module' start='0x6000' end='0x6800' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
+  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='avs_eth_0.mms_reg' start='0x80' end='0xC0' /><slave name='timer_0.s1' start='0xC0' end='0xE0' /><slave name='reg_unb_sens.mem' start='0xE0' end='0x100' /><slave name='altpll_0.pll_slave' start='0x100' end='0x110' /><slave name='pio_debug_wave.s1' start='0x110' end='0x120' /><slave name='pio_wdi.s1' start='0x120' end='0x130' /><slave name='altpll_1.pll_slave' start='0x130' end='0x140' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x140' end='0x148' /><slave name='pio_pps.mem' start='0x148' end='0x150' /><slave name='reg_diag_data_buf.mem' start='0x150' end='0x158' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='ram_fil_coefs.mem' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='ram_diag_data_buf.mem' start='0x5000' end='0x6000' /><slave name='cpu_0.jtag_debug_module' start='0x6000' end='0x6800' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /></address-map>]]></parameter>
   <parameter name="clockFrequency" value="50000000" />
   <parameter name="deviceFamilyName" value="Stratix IV" />
   <parameter name="internalIrqMaskSystemInfo" value="7" />
@@ -1591,13 +1642,18 @@ q]]></parameter>
   <parameter name="inputClockFrequency" value="0" />
   <parameter name="resetSynchronousEdges" value="NONE" />
  </module>
+ <module kind="avs_common_mm" version="1.0" enabled="1" name="ram_fil_coefs">
+  <parameter name="g_adr_w" value="9" />
+  <parameter name="g_dat_w" value="32" />
+  <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
+ </module>
  <connection
    kind="avalon"
    version="11.1"
    start="cpu_0.instruction_master"
    end="cpu_0.jtag_debug_module">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x3800" />
+  <parameter name="baseAddress" value="0x6000" />
  </connection>
  <connection
    kind="avalon"
@@ -1605,7 +1661,7 @@ q]]></parameter>
    start="cpu_0.data_master"
    end="cpu_0.jtag_debug_module">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x3800" />
+  <parameter name="baseAddress" value="0x6000" />
  </connection>
  <connection
    kind="avalon"
@@ -1966,4 +2022,22 @@ q]]></parameter>
    version="11.1"
    start="CLK.clk"
    end="altpll_1.inclk_interface" />
+ <connection
+   kind="clock"
+   version="11.1"
+   start="altpll_0.c0"
+   end="ram_fil_coefs.system" />
+ <connection
+   kind="reset"
+   version="11.1"
+   start="cpu_0.jtag_debug_module_reset"
+   end="ram_fil_coefs.system_reset" />
+ <connection
+   kind="avalon"
+   version="11.1"
+   start="cpu_0.data_master"
+   end="ram_fil_coefs.mem">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x3800" />
+ </connection>
 </system>
diff --git a/applications/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd b/applications/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd
index 9e1577e623..0ddc40de8e 100644
--- a/applications/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd
+++ b/applications/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd
@@ -177,6 +177,9 @@ ARCHITECTURE str OF apertif_unb1_correlator IS
   SIGNAL correlator_snk_in_arr      : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0);
   SIGNAL correlator_src_out_arr     : t_dp_sosi_arr(1-1 DOWNTO 0);
 
+  SIGNAL ram_fil_coefs_mosi         : t_mem_mosi;
+  SIGNAL ram_fil_coefs_miso         : t_mem_miso;
+
   SIGNAL ram_diag_data_buf_mosi     : t_mem_mosi;
   SIGNAL ram_diag_data_buf_miso     : t_mem_miso;
   SIGNAL reg_diag_data_buf_mosi     : t_mem_mosi;
@@ -225,8 +228,8 @@ BEGIN
     dp_clk             => dp_clk,
     mm_rst             => mm_rst,
     mm_clk             => mm_clk,  
-    ram_fil_coefs_mosi => c_mem_mosi_rst,
-    ram_fil_coefs_miso => OPEN,
+    ram_fil_coefs_mosi => ram_fil_coefs_mosi,
+    ram_fil_coefs_miso => ram_fil_coefs_miso,
     ram_st_sst_mosi    => c_mem_mosi_rst,
     ram_st_sst_miso    => OPEN, 
     reg_bg_ctrl_mosi   => c_mem_mosi_rst,
@@ -379,7 +382,8 @@ BEGIN
   GENERIC MAP (
     g_sim         => g_sim,
     g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr
+    g_sim_node_nr => g_sim_node_nr,
+    g_wpfb        => c_wpfb   
    )
   PORT MAP(  
     xo_clk                   => xo_clk,       
@@ -421,6 +425,10 @@ BEGIN
 
     ram_diag_data_buf_mosi   => ram_diag_data_buf_mosi,
     ram_diag_data_buf_miso   => ram_diag_data_buf_miso,    
+
+    -- Filter coefficients
+    ram_fil_coefs_mosi       => ram_fil_coefs_mosi,
+    ram_fil_coefs_miso       => ram_fil_coefs_miso,
   
     -- eth1g
     eth1g_tse_clk            => eth1g_tse_clk,
diff --git a/applications/apertif_unb1_correlator/src/vhdl/mmm_apertif_unb1_correlator.vhd b/applications/apertif_unb1_correlator/src/vhdl/mmm_apertif_unb1_correlator.vhd
index 6caf7d50fb..8fbfa86708 100644
--- a/applications/apertif_unb1_correlator/src/vhdl/mmm_apertif_unb1_correlator.vhd
+++ b/applications/apertif_unb1_correlator/src/vhdl/mmm_apertif_unb1_correlator.vhd
@@ -19,7 +19,7 @@
 --
 -------------------------------------------------------------------------------
 
-LIBRARY IEEE, common_lib, unb1_board_lib, mm_lib;
+LIBRARY IEEE, common_lib, unb1_board_lib, mm_lib, wpfb_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
 USE IEEE.NUMERIC_STD.ALL;
 USE common_lib.common_pkg.ALL;
@@ -28,12 +28,14 @@ USE unb1_board_lib.unb1_board_pkg.ALL;
 USE unb1_board_lib.unb1_board_peripherals_pkg.ALL;
 USE mm_lib.mm_file_pkg.ALL;
 USE mm_lib.mm_file_unb_pkg.ALL;
+USE wpfb_lib.wpfb_pkg.ALL;
 
 ENTITY mmm_apertif_unb1_correlator IS
   GENERIC (
     g_sim         : BOOLEAN := FALSE; --FALSE: use SOPC; TRUE: use mm_file I/O
     g_sim_unb_nr  : NATURAL := 0;
-    g_sim_node_nr : NATURAL := 0
+    g_sim_node_nr : NATURAL := 0;
+    g_wpfb        : t_wpfb
   );
   PORT (
     xo_clk                   : IN  STD_LOGIC;
@@ -69,6 +71,10 @@ ENTITY mmm_apertif_unb1_correlator IS
     reg_diag_data_buf_miso   : IN  t_mem_miso;
     ram_diag_data_buf_mosi   : OUT t_mem_mosi;
     ram_diag_data_buf_miso   : IN  t_mem_miso;
+
+    -- Filter coefficients
+    ram_fil_coefs_mosi       : OUT t_mem_mosi;
+    ram_fil_coefs_miso       : IN  t_mem_miso;
                              
     -- eth1g
     eth1g_tse_clk            : OUT STD_LOGIC;
@@ -92,6 +98,9 @@ END mmm_apertif_unb1_correlator;
 
 ARCHITECTURE str OF mmm_apertif_unb1_correlator IS
 
+  --                                                    (        64        *        8        /       1         )
+  CONSTANT c_ram_fil_coefs_addr_w : natural := ceil_log2(g_wpfb.nof_points * g_wpfb.nof_taps / g_wpfb.wb_factor); 
+
   CONSTANT c_mm_clk_period   : TIME := 8 ns;   -- 125 MHz
 
   CONSTANT c_sim_node_type : STRING(1 TO 2):= sel_a_b(g_sim_node_nr<4, "FN", "BN");
@@ -202,6 +211,15 @@ ARCHITECTURE str OF mmm_apertif_unb1_correlator IS
           reg_diag_data_buf_address_export              : out std_logic_vector(9 downto 0);                     -- export
           reg_diag_data_buf_clk_export                  : out std_logic;                                        -- export
           reg_diag_data_buf_reset_export                : out std_logic;                                        -- export
+
+          ram_fil_coefs_readdata_export                 : in  std_logic_vector(31 downto 0) := (others => 'X'); -- export
+          ram_fil_coefs_read_export                     : out std_logic;                                        -- export
+          ram_fil_coefs_writedata_export                : out std_logic_vector(31 downto 0);                    -- export
+          ram_fil_coefs_write_export                    : out std_logic;                                        -- export
+          ram_fil_coefs_address_export                  : out std_logic_vector(8 downto 0);                     -- export
+          ram_fil_coefs_clk_export                      : out std_logic;                                        -- export
+          ram_fil_coefs_reset_export                    : out std_logic;                                        -- export
+
           clk_clk                  : in std_logic;
           reset_reset_n : in std_logic;
           altpll_1_c0_clk          : out std_logic;
@@ -354,6 +372,14 @@ BEGIN
       reg_diag_data_buf_clk_export                  => OPEN,
       reg_diag_data_buf_reset_export                => OPEN,
 
+      ram_fil_coefs_readdata_export                 => ram_fil_coefs_miso.rddata(c_word_w-1 DOWNTO 0),       
+      ram_fil_coefs_read_export                     => ram_fil_coefs_mosi.rd,        
+      ram_fil_coefs_writedata_export                => ram_fil_coefs_mosi.wrdata(c_word_w-1 DOWNTO 0),       
+      ram_fil_coefs_write_export                    => ram_fil_coefs_mosi.wr,       
+      ram_fil_coefs_address_export                  => ram_fil_coefs_mosi.address(c_ram_fil_coefs_addr_w-1 DOWNTO 0),       
+      ram_fil_coefs_clk_export                      => OPEN,
+      ram_fil_coefs_reset_export                    => OPEN,
+
       clk_clk                    => clk_clk,
       reset_reset_n   => clk_clk_in_reset_reset_n,
       altpll_1_c0_clk            => altpll_1_c0_clk,
-- 
GitLab