From 371fa51d4337e4eddf599341a2f5f8687a7cd15e Mon Sep 17 00:00:00 2001
From: Romain Broucquart <romain.broucquart@synchrotron-soleil.fr>
Date: Wed, 22 Jun 2022 11:09:26 +0200
Subject: [PATCH] Increase counter bit width to 32

* Allow the possibility of counting above 65535
---
 hdl/combpm_protocol_electron.vhd | 16 ++++++++--------
 hdl/top_combpm_electron.vhd      | 16 ++++++++--------
 rdl/combpm_ctrl.rdl              | 16 ++++++++++------
 3 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/hdl/combpm_protocol_electron.vhd b/hdl/combpm_protocol_electron.vhd
index 8685057..ee7c9b1 100644
--- a/hdl/combpm_protocol_electron.vhd
+++ b/hdl/combpm_protocol_electron.vhd
@@ -31,10 +31,10 @@ entity combpm_protocol_electron is
         -- Status and control interface
         soft_reset         : in std_logic;
         frame_seq_cnt      : out std_logic_vector(15 downto 0);
-        frame_valid_cnt    : out std_logic_vector(15 downto 0);
-        frame_invalid_cnt  : out std_logic_vector(15 downto 0);
-        frame_valid_rate   : out std_logic_vector(15 downto 0);
-        frame_invalid_rate : out std_logic_vector(15 downto 0);
+        frame_valid_cnt    : out std_logic_vector(31 downto 0);
+        frame_invalid_cnt  : out std_logic_vector(31 downto 0);
+        frame_valid_rate   : out std_logic_vector(31 downto 0);
+        frame_invalid_rate : out std_logic_vector(31 downto 0);
         cnt_seq_mismatch   : out std_logic;
         seq_discontinuity  : out std_logic;
         frame_error        : out std_logic
@@ -85,10 +85,10 @@ architecture rtl of combpm_protocol_electron is
 
     signal last_cnt_seq_r    :  unsigned(15 downto 0);
     signal cnt_frame_seq_r   :  unsigned(15 downto 0);
-    signal cnt_valid_r       :  unsigned(15 downto 0);
-    signal cnt_invalid_r     :  unsigned(15 downto 0);
-    signal rate_valid_r      :  unsigned(15 downto 0);
-    signal rate_invalid_r    :  unsigned(15 downto 0);
+    signal cnt_valid_r       :  unsigned(31 downto 0);
+    signal cnt_invalid_r     :  unsigned(31 downto 0);
+    signal rate_valid_r      :  unsigned(31 downto 0);
+    signal rate_invalid_r    :  unsigned(31 downto 0);
 
     signal packet            : t_combpm_axis_packet;
 
diff --git a/hdl/top_combpm_electron.vhd b/hdl/top_combpm_electron.vhd
index 8b012fb..09d2150 100644
--- a/hdl/top_combpm_electron.vhd
+++ b/hdl/top_combpm_electron.vhd
@@ -168,10 +168,10 @@ architecture struct of top_combpm_electron is
     signal soft_reset    : std_logic;
 
     signal frame_seq_cnt      : std_logic_vector(15 downto 0);
-    signal frame_valid_cnt    : std_logic_vector(15 downto 0);
-    signal frame_invalid_cnt  : std_logic_vector(15 downto 0);
-    signal frame_valid_rate   : std_logic_vector(15 downto 0);
-    signal frame_invalid_rate : std_logic_vector(15 downto 0);
+    signal frame_valid_cnt    : std_logic_vector(31 downto 0);
+    signal frame_invalid_cnt  : std_logic_vector(31 downto 0);
+    signal frame_valid_rate   : std_logic_vector(31 downto 0);
+    signal frame_invalid_rate : std_logic_vector(31 downto 0);
     signal cnt_seq_mismatch   : std_logic;
     signal seq_discontinuity  : std_logic;
     signal frame_error        : std_logic;
@@ -256,10 +256,10 @@ begin
         protocol_frameerror_i => frame_error,
         protocol_seqframecnterror_i => cnt_seq_mismatch,
         protocol_seqframediscont_i => seq_discontinuity,
-        framecnt_validframecnt_i => frame_valid_cnt,
-        framecnt_invalidframecnt_i => frame_invalid_cnt,
-        framerate_validframerate_i => frame_valid_rate,
-        framerate_invalidframerate_i => frame_invalid_rate,
+        validframecnt_cnt_i => frame_valid_cnt,
+        invalidframecnt_cnt_i => frame_invalid_cnt,
+        validframerate_rate_i => frame_valid_rate,
+        invalidframerate_rate_i => frame_invalid_rate,
         frameseq_framecnt_i => frame_seq_cnt,
 
         clk                   => usrclk,
diff --git a/rdl/combpm_ctrl.rdl b/rdl/combpm_ctrl.rdl
index bb1345b..78d5f00 100644
--- a/rdl/combpm_ctrl.rdl
+++ b/rdl/combpm_ctrl.rdl
@@ -124,13 +124,15 @@ addrmap combpm_ctrl {
         field {
             desc="Valid frame counter";
             hw=w;sw=r;
-        } VALIDFRAMECNT[16];
+        } CNT[32];
+    } VALIDFRAMECNT;
 
+    reg {
         field {
             desc="Invalid frame counter";
             hw=w;sw=r;
-        } INVALIDFRAMECNT[16];
-    } FRAMECNT;
+        } CNT[32];
+    } INVALIDFRAMECNT;
 
     reg {
         name="Protocol frame rate";
@@ -138,13 +140,15 @@ addrmap combpm_ctrl {
         field {
             desc="Valid frame rate";
             hw=w;sw=r;
-        } VALIDFRAMERATE[16];
+        } RATE[32];
+    } VALIDFRAMERATE;
 
+    reg {
         field {
             desc="Invalid frame rate";
             hw=w;sw=r;
-        } INVALIDFRAMERATE[16];
-    } FRAMERATE;
+        } RATE[32];
+    } INVALIDFRAMERATE;
 
     reg {
         name="Protocol frame sequence";
-- 
GitLab