diff --git a/hdl/matrix_mul.vhd b/hdl/matrix_mul.vhd index 4c890fbdadee07bc0e2ff31270ccb07bb3730f40..98935f3e61b87a5fa48afccd14cf6a3a782c2571 100644 --- a/hdl/matrix_mul.vhd +++ b/hdl/matrix_mul.vhd @@ -29,6 +29,10 @@ entity matrix_mul is pos_seq : in std_logic_vector(C_W_BPMSEQ-1 downto 0); pos_tvalid : in std_logic; + -- status + mult_rate : out std_logic_vector(15 downto 0); + pps : in std_logic; + -- Data out matmult : out signed_array(0 to C_N_MM_PSC-1)(C_W_MM-1 downto 0); matmult_tvalid : out std_logic; @@ -60,9 +64,33 @@ architecture rtl of matrix_mul is signal mul_done : std_logic; signal r_mul_done : std_logic; -begin + signal mul_cnt : unsigned(15 downto 0); + signal r_mul_cnt : std_logic_vector(15 downto 0); + signal pps_r : std_logic; +begin + ----------------------- + -- MULT RATE COUNTER -- + ----------------------- + p_mult_rate:process(clk, rst_n) + begin + if rst_n = '0' then + r_mul_cnt <= (others => '0'); + mul_cnt <= (others => '0'); + pps_r <= '0'; + elsif rising_edge(clk) then + pps_r <= pps; + if pps = '1' and pps_r = '0' then + r_mul_cnt <= std_logic_vector(mul_cnt); + mul_cnt <= (others => '0'); + else + if mul_done = '1' then + mul_cnt <= mul_cnt +1; + end if; + end if; + end if; + end process; --------------------- -- DELAY REGISTERS -- diff --git a/hdl/top_corr_matrix.vhd b/hdl/top_corr_matrix.vhd index 365b5c5f4c3d7db558becad244c45c089c396b79..b3a40d4b7da594989a6522c1fc2fc23bc6bb2e16 100644 --- a/hdl/top_corr_matrix.vhd +++ b/hdl/top_corr_matrix.vhd @@ -13,6 +13,8 @@ entity top_corr_matrix is clk : in std_logic; rst_n : in std_logic; + pps : in std_logic; + -- AXI-MM interface s_axi_m2s : in t_corr_matrix_m2s; s_axi_s2m : out t_corr_matrix_s2m; @@ -211,6 +213,9 @@ begin pos_seq => errbpm_seq, pos_tvalid => errbpm_tvalid, + pps => pps, + mult_rate => mm_l2a.MULT_RATE.data.data, + -- Data out matmult => matmult, matmult_tvalid => matmult_tvalid, diff --git a/rdl/corr_matrix.rdl b/rdl/corr_matrix.rdl index 84e53d76ae56360411ef18f296333a718a5526e9..88d515dd6abfc44c721740725337ca89d6999697 100644 --- a/rdl/corr_matrix.rdl +++ b/rdl/corr_matrix.rdl @@ -157,6 +157,11 @@ addrmap corr_matrix { field {sw = rw; hw = r;} data[`C_W_MM_IDCNT] = `C_N_MM_BPM; } MM_ID_CNT; + reg { + desc="Number of matric multiplication per seconds."; + field { sw=r; hw=w; } data[16]; + } MULT_RATE; + mem { desc = "X Reference orbit."; desyrdl_data_type="int32";