From 7ff3bbb1db8193d6fad173824701fd9750768191 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Romain=20Bron=C3=A8s?= <romain.brones@synchrotron-soleil.fr>
Date: Thu, 1 Jun 2023 09:41:50 +0200
Subject: [PATCH] Behavioral fixes on valid signals

* Fix delay on matmul valid signal
* Fix length of validity for correction output
---
 hdl/data_serializer.vhd | 2 +-
 hdl/matrix_mul.vhd      | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/hdl/data_serializer.vhd b/hdl/data_serializer.vhd
index 040fe00..6592884 100644
--- a/hdl/data_serializer.vhd
+++ b/hdl/data_serializer.vhd
@@ -80,7 +80,7 @@ begin
                 if corrout_valid= '1' then
                     -- start on valid
                     run_serial <= '1';
-                    cnt <= to_unsigned(C_N_MM_PSC, cnt'length);
+                    cnt <= to_unsigned(C_N_MM_PSC-1, cnt'length);
 
                 end if;
 
diff --git a/hdl/matrix_mul.vhd b/hdl/matrix_mul.vhd
index dacbc77..c410766 100644
--- a/hdl/matrix_mul.vhd
+++ b/hdl/matrix_mul.vhd
@@ -58,6 +58,7 @@ architecture rtl of matrix_mul is
 
     signal new_seq : std_logic;
     signal mul_done : std_logic;
+    signal r_mul_done : std_logic;
 
 begin
 
@@ -101,7 +102,9 @@ begin
         if rst_n = '0' then
             id_cnt <= (others => '1');
             mul_done <= '0';
+            r_mul_done <= '0';
         elsif rising_edge(clk) then
+            r_mul_done <= mul_done;
             if id_cnt = 0 then
                 id_cnt <= unsigned(id_cnt_load);
                 mul_done <= '1';
@@ -217,7 +220,7 @@ begin
     --------------------
     -- OUTPUT CONNECT --
     --------------------
-    matmult_tvalid   <= mul_done;
+    matmult_tvalid  <= r_mul_done;
     matmult_seq     <= r_seq;
 
 end architecture;
-- 
GitLab