diff --git a/hdl/pkg_pscgen.vhd b/hdl/pkg_pscgen.vhd index 22befd4cc1324afbb037acfc9d280e78ec60832f..9ebbd1cfbc1532ece3cfe0eddde8244fe3b2ef21 100644 --- a/hdl/pkg_pscgen.vhd +++ b/hdl/pkg_pscgen.vhd @@ -1,6 +1,6 @@ package pkg_pscgen is - constant C_W_PHASE : natural := 20; + constant C_W_PHASE : natural := 16; constant C_W_TIDX : natural := 8; constant C_W_SINE : natural := 26; constant C_W_SIG : natural := 16; diff --git a/hdl/top_pscgen.vhd b/hdl/top_pscgen.vhd index 42a2d5e9d662e6b930041caec0d12117b93f2730..bc67fa2fcf49981c5df13d4fbea1a2aec2131be3 100644 --- a/hdl/top_pscgen.vhd +++ b/hdl/top_pscgen.vhd @@ -86,13 +86,13 @@ begin pi_table_incr_en => addr_o.table_phase_incr.en, pi_table_incr_we => addr_o.table_phase_incr.we, pi_table_incr_addr => addr_o.table_phase_incr.addr(C_W_TIDX-1 downto 0), - pi_table_incr_data => addr_o.table_phase_incr.data, - po_table_incr_data => addr_i.table_phase_incr.data, + pi_table_incr_data => addr_o.table_phase_incr.data(C_W_PHASE-1 downto 0), + po_table_incr_data => addr_i.table_phase_incr.data(C_W_PHASE-1 downto 0), pi_table_offs_en => addr_o.table_phase_offs.en, pi_table_offs_we => addr_o.table_phase_offs.we, pi_table_offs_addr => addr_o.table_phase_offs.addr(C_W_TIDX-1 downto 0), - pi_table_offs_data => addr_o.table_phase_offs.data, - po_table_offs_data => addr_i.table_phase_offs.data, + pi_table_offs_data => addr_o.table_phase_offs.data(C_W_PHASE downto 0), + po_table_offs_data => addr_i.table_phase_offs.data(C_W_PHASE downto 0), -- Configuration ticker_enable => addr_o.control.enable.data(0), @@ -107,6 +107,9 @@ begin ); + addr_i.table_phase_incr.data(31 downto C_W_PHASE) <= (others => '0'); + addr_i.table_phase_offs.data(31 downto C_W_PHASE+1) <= (others => '0'); + ---------------- -- PHASE ACCU -- ---------------- @@ -137,7 +140,6 @@ begin aclk => clk, aresetn => rstn, s_axis_phase_tvalid => '1', -- otherwise DDS get stuck... - s_axis_phase_tdata(C_W_EXT_PHASE-1 downto C_W_PHASE) => (others => '0'), -- unused s_axis_phase_tdata(C_W_PHASE-1 downto 0) => phase, s_axis_phase_tuser => phase_tidx, m_axis_data_tvalid => sine_valid, @@ -168,8 +170,8 @@ begin pi_table_en => addr_o.table_scale.en, pi_table_we => addr_o.table_scale.we, pi_table_addr => addr_o.table_scale.addr(C_W_TIDX-1 downto 0), - pi_table_data => addr_o.table_scale.data, - po_table_data => addr_i.table_scale.data, + pi_table_data => addr_o.table_scale.data(C_W_SCALE+C_W_OFFSET-1 downto 0), + po_table_data => addr_i.table_scale.data(C_W_SCALE+C_W_OFFSET-1 downto 0), -- Sine in pi_sine => sine(C_W_SINE-1 downto 0), @@ -182,6 +184,9 @@ begin po_wave_valid => wave_valid ); + gen_fixmsb:if C_W_SCALE+C_W_OFFSET < 32 generate + addr_i.table_scale.data(31 downto C_W_SCALE+C_W_OFFSET-1) <= (others => '0'); + end generate; ------------------ -- TIDX MAPPING -- diff --git a/rdl/pscgen.rdl b/rdl/pscgen.rdl index 885ce6eaf489626b35e16b0bdfd10a627a286d31..b60eb6114756e4ec86d9f4e223848834929ed4f6 100644 --- a/rdl/pscgen.rdl +++ b/rdl/pscgen.rdl @@ -49,20 +49,20 @@ addrmap pscgen { external mem { desc = "Phase increment table"; - memwidth = `C_W_PHASE; + memwidth = 32; mementries = 2**`C_W_TIDX; } TABLE_PHASE_INCR; external mem { desc = "Phase offset and reset table"; - memwidth = `C_W_PHASE+1; + memwidth = 32; mementries = 2**`C_W_TIDX; } TABLE_PHASE_OFFS; external mem { desc = "Signal scale and offset table"; - memwidth = `C_W_SCALE+`C_W_OFFSET; + memwidth = 32; mementries = 2**`C_W_TIDX; } TABLE_SCALE; diff --git a/tcl/main.tcl b/tcl/main.tcl index abe20a450370bcfdaecb3ab135a467273597f3aa..adce393a6a37c0aad43c1e58d648d9f5d8780530 100644 --- a/tcl/main.tcl +++ b/tcl/main.tcl @@ -45,11 +45,9 @@ proc setAddressSpace {} { # ============================================================================== proc doOnCreate {} { - variable Vhdl + variable Sources variable Config - addSources Vhdl - addSources "Sources" # Generate Xilinx IPs