From ec6fc443f7e6c75bfa1566585f71d55eb0da361b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Bron=C3=A8s?= <romain.brones@synchrotron-soleil.fr> Date: Fri, 28 Apr 2023 15:43:48 +0200 Subject: [PATCH] fix for external mem access from desyrdl record * There are always a couple of bits more on the address bus. * Use a constant for data serializer ram --- hdl/data_serializer.vhd | 6 +++--- hdl/matrix_mul.vhd | 6 +++--- hdl/orbit_error.vhd | 4 ++-- hdl/pkg_corrmatrixpi.vhd | 3 +++ rdl/corr_matrixpi.rdl | 4 ++-- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/hdl/data_serializer.vhd b/hdl/data_serializer.vhd index 91b80f1..b3f4924 100644 --- a/hdl/data_serializer.vhd +++ b/hdl/data_serializer.vhd @@ -42,7 +42,7 @@ architecture rtl of data_serializer is ------------------------ -- SIGNAL DECLARATION -- ------------------------ - signal cnt : unsigned(pscid_table_i.addr'length-1 downto 0); + signal cnt : unsigned(C_W_SER_CNT-1 downto 0); signal run_serial : std_logic; signal pscid : std_logic_vector(C_W_PSCID-1 downto 0); @@ -118,14 +118,14 @@ begin -- Port A is read write from AXI controller, Port B is read only from logic inst_refx_table: entity desy.ram_tdp generic map( - G_ADDR => pscid_table_i.addr'length, + G_ADDR => C_W_SER_CNT, G_DATA => C_W_PSCID ) port map( pi_clk_a => clk, pi_en_a => pscid_table_i.en, pi_we_a => pscid_table_i.we, - pi_addr_a => pscid_table_i.addr, + pi_addr_a => pscid_table_i.addr(C_W_SER_CNT-1 downto 0), pi_data_a => pscid_table_i.data, po_data_a => pscid_table_o.data, pi_clk_b => clk, diff --git a/hdl/matrix_mul.vhd b/hdl/matrix_mul.vhd index 0f8a665..47f2076 100644 --- a/hdl/matrix_mul.vhd +++ b/hdl/matrix_mul.vhd @@ -118,7 +118,7 @@ begin -- MATRIX MULTIPLICATION -- --------------------------- -- Generate matrix line multiplication, two planes by loop iteration - G_MATRIX:for I in 0 to C_N_MM_PSC/2 generate + G_MATRIX:for I in 0 to C_N_MM_PSC/2-1 generate signal mult_x : signed(C_W_MM_MULT-1 downto 0); signal mult_y : signed(C_W_MM_MULT-1 downto 0); signal accu_x : signed(C_W_MM_ACCU-1 downto 0); @@ -140,7 +140,7 @@ begin pi_clk_a => clk, pi_en_a => mm_coef_i(2*I).en, pi_we_a => mm_coef_i(2*I).we, - pi_addr_a => mm_coef_i(2*I).addr, + pi_addr_a => mm_coef_i(2*I).addr(C_W_MM_IDCNT-1 downto 0), pi_data_a => mm_coef_i(2*I).data, po_data_a => mm_coef_o(2*I).data, pi_clk_b => clk, @@ -160,7 +160,7 @@ begin pi_clk_a => clk, pi_en_a => mm_coef_i(2*I+1).en, pi_we_a => mm_coef_i(2*I+1).we, - pi_addr_a => mm_coef_i(2*I+1).addr, + pi_addr_a => mm_coef_i(2*I+1).addr(C_W_MM_IDCNT-1 downto 0), pi_data_a => mm_coef_i(2*I+1).data, po_data_a => mm_coef_o(2*I+1).data, pi_clk_b => clk, diff --git a/hdl/orbit_error.vhd b/hdl/orbit_error.vhd index 6d82b6d..d612782 100644 --- a/hdl/orbit_error.vhd +++ b/hdl/orbit_error.vhd @@ -76,7 +76,7 @@ begin pi_clk_a => clk, pi_en_a => reforbitx_i.en, pi_we_a => reforbitx_i.we, - pi_addr_a => reforbitx_i.addr, + pi_addr_a => reforbitx_i.addr(C_W_BPMID-1 downto 0), pi_data_a => reforbitx_i.data, po_data_a => reforbitx_o.data, pi_clk_b => clk, @@ -96,7 +96,7 @@ begin pi_clk_a => clk, pi_en_a => reforbity_i.en, pi_we_a => reforbity_i.we, - pi_addr_a => reforbity_i.addr, + pi_addr_a => reforbity_i.addr(C_W_BPMID-1 downto 0), pi_data_a => reforbity_i.data, po_data_a => reforbity_o.data, pi_clk_b => clk, diff --git a/hdl/pkg_corrmatrixpi.vhd b/hdl/pkg_corrmatrixpi.vhd index 44388e6..79988bf 100644 --- a/hdl/pkg_corrmatrixpi.vhd +++ b/hdl/pkg_corrmatrixpi.vhd @@ -52,6 +52,9 @@ package pkg_corr_matrixpi is constant C_W_COR : natural := 16; -- C_W_COR_SUM-C_N_COR_SAT-C_N_COR_RND + -- Serializer + constant C_W_SER_CNT : natural := 7; -- natural(ceil(log2(real(C_N_MM_PSC)))); + ---------------------- -- TYPE DECLARATION -- ---------------------- diff --git a/rdl/corr_matrixpi.rdl b/rdl/corr_matrixpi.rdl index 351efe4..67803fb 100644 --- a/rdl/corr_matrixpi.rdl +++ b/rdl/corr_matrixpi.rdl @@ -51,13 +51,13 @@ addrmap corr_matrixpi { mem { desc = "X Reference orbit."; memwidth = `C_W_BPMPOS; - mementries = `C_N_MM_BPM; + mementries = 2**`C_W_BPMID-1; } external REFORBITX; mem { desc = "Y Reference orbit."; memwidth = `C_W_BPMPOS; - mementries = `C_N_MM_BPM; + mementries = 2**`C_W_BPMID-1; } external REFORBITY; mem { -- GitLab