From 43d0276a035ff42ccbd86b58cbf75cbb04a20ebe Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Tue, 31 May 2022 18:06:17 +0200
Subject: [PATCH] Explained that JESD2044 MM registers have 256 bytes, so
 span_w = 6 would be enough, but 8 is fine too.

---
 .../jesd204b/ip_arria10_e1sg_jesd204b.vhd         | 14 ++++++++------
 .../jesd204b/ip_arria10_e2sg_jesd204b.vhd         | 14 ++++++++------
 .../technology/jesd204b/tech_jesd204b_pkg.vhd     | 15 ++++++++++-----
 3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd
index 1046f9ee81..44858d8b7a 100644
--- a/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd
+++ b/libraries/technology/ip_arria10_e1sg/jesd204b/ip_arria10_e1sg_jesd204b.vhd
@@ -73,12 +73,14 @@ END ip_arria10_e1sg_jesd204b;
 ARCHITECTURE str OF ip_arria10_e1sg_jesd204b IS
 
   -- JESD IP constants
-  CONSTANT c_jesd204b_mm_addr_w            : NATURAL :=8;
-  CONSTANT c_jesd204b_rx_data_w            : NATURAL :=32;
-  CONSTANT c_jesd204b_rx_framer_data_w     : NATURAL :=c_jesd204b_rx_data_w/2; -- IP outputs two samples in parallel
-  CONSTANT c_jesd204b_rx_somf_w            : NATURAL :=c_jesd204b_rx_data_w/8; -- One somf bit per octet
-  CONSTANT c_jesd204b_rx_framer_somf_w     : NATURAL :=c_jesd204b_rx_somf_w/2; -- IP outputs two samples in parallel
-  CONSTANT c_nof_sync_n_per_group          : NATURAL :=sel_a_b(g_nof_streams / g_nof_sync_n = 0, 1, g_nof_streams / g_nof_sync_n);
+  -- . JESD204B MM has 256 bytes = 64 words, so mm_addr_w = 6 would be enough,
+  --   but using mm_addr_w = 8 and span = 256 words is fine too.
+  CONSTANT c_jesd204b_mm_addr_w            : NATURAL := 8;
+  CONSTANT c_jesd204b_rx_data_w            : NATURAL := 32;
+  CONSTANT c_jesd204b_rx_framer_data_w     : NATURAL := c_jesd204b_rx_data_w/2; -- IP outputs two samples in parallel
+  CONSTANT c_jesd204b_rx_somf_w            : NATURAL := c_jesd204b_rx_data_w/8; -- One somf bit per octet
+  CONSTANT c_jesd204b_rx_framer_somf_w     : NATURAL := c_jesd204b_rx_somf_w/2; -- IP outputs two samples in parallel
+  CONSTANT c_nof_sync_n_per_group          : NATURAL := sel_a_b(g_nof_streams / g_nof_sync_n = 0, 1, g_nof_streams / g_nof_sync_n);
 
   -- JESD204 control status registers
   SIGNAL jesd204b_mosi_arr          : t_mem_mosi_arr(g_nof_streams-1 DOWNTO 0);
diff --git a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd
index e49282da08..cf0fd6e3b4 100644
--- a/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd
+++ b/libraries/technology/ip_arria10_e2sg/jesd204b/ip_arria10_e2sg_jesd204b.vhd
@@ -73,12 +73,14 @@ END ip_arria10_e2sg_jesd204b;
 ARCHITECTURE str OF ip_arria10_e2sg_jesd204b IS
 
   -- JESD IP constants
-  CONSTANT c_jesd204b_mm_addr_w            : NATURAL :=8;
-  CONSTANT c_jesd204b_rx_data_w            : NATURAL :=32;
-  CONSTANT c_jesd204b_rx_framer_data_w     : NATURAL :=c_jesd204b_rx_data_w/2; -- IP outputs two samples in parallel
-  CONSTANT c_jesd204b_rx_somf_w            : NATURAL :=c_jesd204b_rx_data_w/8; -- One somf bit per octet
-  CONSTANT c_jesd204b_rx_framer_somf_w     : NATURAL :=c_jesd204b_rx_somf_w/2; -- IP outputs two samples in parallel
-  CONSTANT c_nof_sync_n_per_group          : NATURAL :=sel_a_b(g_nof_streams / g_nof_sync_n = 0, 1, g_nof_streams / g_nof_sync_n);
+  -- . JESD204B MM has 256 bytes = 64 words, so mm_addr_w = 6 would be enough,
+  --   but using mm_addr_w = 8 and span = 256 words is fine too.
+  CONSTANT c_jesd204b_mm_addr_w            : NATURAL := 8;
+  CONSTANT c_jesd204b_rx_data_w            : NATURAL := 32;
+  CONSTANT c_jesd204b_rx_framer_data_w     : NATURAL := c_jesd204b_rx_data_w/2; -- IP outputs two samples in parallel
+  CONSTANT c_jesd204b_rx_somf_w            : NATURAL := c_jesd204b_rx_data_w/8; -- One somf bit per octet
+  CONSTANT c_jesd204b_rx_framer_somf_w     : NATURAL := c_jesd204b_rx_somf_w/2; -- IP outputs two samples in parallel
+  CONSTANT c_nof_sync_n_per_group          : NATURAL := sel_a_b(g_nof_streams / g_nof_sync_n = 0, 1, g_nof_streams / g_nof_sync_n);
 
   -- JESD204 control status registers
   SIGNAL jesd204b_mosi_arr          : t_mem_mosi_arr(g_nof_streams-1 DOWNTO 0);
diff --git a/libraries/technology/jesd204b/tech_jesd204b_pkg.vhd b/libraries/technology/jesd204b/tech_jesd204b_pkg.vhd
index 0c8ab4246b..1279e699ba 100644
--- a/libraries/technology/jesd204b/tech_jesd204b_pkg.vhd
+++ b/libraries/technology/jesd204b/tech_jesd204b_pkg.vhd
@@ -22,7 +22,10 @@
 -- Purpose: Test bench parameters for the JESD204B IP.
 -- Description:
 -- Remark:
--- . From registermap-jesd-rx.xlsx
+-- . From:
+--   - registermap-jesd-rx.xlsx
+--   - JESD204B Intel® FPGA IP User Guide, Updated for Intel® Quartus® Prime
+--     Design Suite: 19.4, IP Version: 19.2.0
 -------------------------------------------------------------------------------
 
 LIBRARY IEEE, technology_lib;
@@ -31,13 +34,15 @@ USE IEEE.std_logic_1164.ALL;
 PACKAGE tech_jesd204b_pkg IS
 
   -- Intel ARRIA10 IP MM interface
+  -- . JESD204B MM has 256 bytes = 64 words, so span_w = 6 would be enough,
+  --   but using span_w = 8 and span = 256 words is fine too.
   CONSTANT tech_jesd204b_port_span_w             : NATURAL := 8;
   CONSTANT tech_jesd204b_port_span               : NATURAL := 2**tech_jesd204b_port_span_w;
 
-  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_adr         : NATURAL := 16#54# / 4;
-  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_link_reinit : NATURAL := 1;
-  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_singled     : NATURAL := 2;
-  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_alwayson    : NATURAL := 4;
+  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_adr             : NATURAL := 16#54# / 4;
+  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_link_reinit     : NATURAL := 1;
+  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_sysref_singled  : NATURAL := 2;
+  CONSTANT tech_jesd204b_field_rx_syncn_sysref_ctrl_sysref_alwayson : NATURAL := 4;
 
   CONSTANT tech_jesd204b_field_rx_err0_adr       : NATURAL := 16#60# / 4;
   CONSTANT tech_jesd204b_field_rx_err0_w         : NATURAL := 9;
-- 
GitLab