Skip to content
Snippets Groups Projects
Commit 89d7b5dd authored by BRONES Romain's avatar BRONES Romain
Browse files

feat: PSCGEN is a signal adder

* Give the possibility to add waveform over an input signal.
* TIDX are retreived in the input stream.
* Also change AXIS naming, name field in TDATA. Unused sync info are let
  in TUSER.
parent 021608df
No related branches found
No related tags found
No related merge requests found
......@@ -26,9 +26,14 @@ entity MultiPhaseTable is
-- Configuration
ticker_enable : in std_logic;
input_enable : in std_logic;
ticker_rate : in std_logic_vector(31 downto 0);
table_depth : in std_logic_vector(C_W_TIDX-1 downto 0);
-- TIDX input
pi_phase_tidx : in std_logic_vector(C_W_TIDX-1 downto 0);
pi_phase_valid : in std_logic;
po_phase_incr : out std_logic_vector(C_W_PHASE-1 downto 0);
po_phase_offset : out std_logic_vector(C_W_PHASE-1 downto 0);
po_phase_reset : out std_logic;
......@@ -46,8 +51,11 @@ architecture rtl of MultiPhaseTable is
signal ticker_cnt : unsigned(31 downto 0);
signal ticker_tick : std_logic;
signal ticker_tidx : std_logic_vector(C_W_TIDX-1 downto 0);
signal ticker_tidx_cnt : unsigned(C_W_TIDX-1 downto 0);
signal ticker_tidx_valid : std_logic;
signal tidx : std_logic_vector(C_W_TIDX-1 downto 0);
signal tidx_cnt : unsigned(C_W_TIDX-1 downto 0);
signal tidx_valid : std_logic;
signal r_phase_tidx : std_logic_vector(C_W_TIDX-1 downto 0);
......@@ -78,33 +86,39 @@ begin
end if;
end process p_ticker;
-------------------------
-- TABLE IDX DECOUNTER --
-------------------------
p_tidx:process(clk, rstn)
--------------------------------
-- TICKER TABLE IDX DECOUNTER --
--------------------------------
p_ticker_tidx:process(clk, rstn)
begin
if rstn = '0' then
tidx_cnt <= (others => '0');
tidx_valid <= '0';
ticker_tidx_cnt <= (others => '0');
ticker_tidx_valid <= '0';
elsif rising_edge(clk) then
-- NID de-counter
if tidx_cnt = 0 then
if ticker_tidx_cnt = 0 then
if ticker_tick = '1' then
tidx_cnt <= unsigned(table_depth);
tidx_valid <= '1';
ticker_tidx_cnt <= unsigned(table_depth);
ticker_tidx_valid <= '1';
else
tidx_cnt <= (others => '0');
tidx_valid <= '0';
ticker_tidx_cnt <= (others => '0');
ticker_tidx_valid <= '0';
end if;
else
tidx_cnt <= tidx_cnt-1;
tidx_valid <= '1';
ticker_tidx_cnt <= ticker_tidx_cnt-1;
ticker_tidx_valid <= '1';
end if;
end if;
end process p_tidx;
end process p_ticker_tidx;
tidx <= std_logic_vector(ticker_tidx_cnt) when ticker_enable = '1' else
pi_phase_tidx when input_enable = '1' else
(others => '0');
tidx <= std_logic_vector(tidx_cnt);
tidx_valid <= ticker_tidx_valid when ticker_enable = '1' else
pi_phase_valid when input_enable = '1' else
'0';
----------------------
......
package pkg_pscgen is
constant C_W_PHASE : natural := 16;
constant C_W_VALUE : natural := 16;
constant C_W_PSCID : natural := 8;
constant C_W_TIDX : natural := 8;
constant C_W_SINE : natural := 26;
constant C_W_SIG : natural := 16;
......
......@@ -6,11 +6,17 @@ library desyrdl;
use desyrdl.common.all;
use desyrdl.pkg_pscgen.all;
library desy;
use desy.math_signed.f_sum_sat;
use work.pkg_pscgen.all;
use work.pkg_pscgen_version.all;
use work.pkg_pscgen_gen_ip.all;
entity top_pscgen is
generic(
G_W_TUSER : natural := 8
);
port(
clk : in std_logic;
rstn : in std_logic;
......@@ -19,15 +25,25 @@ entity top_pscgen is
s_axi_m2s : in t_pscgen_m2s;
s_axi_s2m : out t_pscgen_s2m;
-- AXIS input
s_axis_tdata_pscid : in std_logic_vector(C_W_PSCID-1 downto 0);
s_axis_tdata_value : in std_logic_vector(C_W_VALUE-1 downto 0);
s_axis_tuser : in std_logic_vector(G_W_TUSER-1 downto 0);
s_axis_tvalid : in std_logic;
-- AXIS output
m_axis_tdata : out std_logic_vector(C_W_SIG-1 downto 0);
m_axis_tuser : out std_logic_vector(C_W_TIDX-1 downto 0);
m_axis_tdata_pscid : out std_logic_vector(C_W_PSCID-1 downto 0);
m_axis_tdata_value : out std_logic_vector(C_W_VALUE-1 downto 0);
m_axis_tuser : out std_logic_vector(G_W_TUSER-1 downto 0);
m_axis_tvalid : out std_logic
);
end entity top_pscgen;
architecture struct of top_pscgen is
constant C_DELAY : natural := 14;
type aslv is array(0 to C_DELAY-1) of std_logic_vector(G_W_TUSER+C_W_VALUE-1 downto 0);
signal rst : std_logic;
signal addr_i : t_addrmap_pscgen_in;
......@@ -54,6 +70,8 @@ architecture struct of top_pscgen is
signal r_dds_tvalid : std_logic_vector(5 downto 0);
signal data_delay : aslv;
begin
rst <= not rstn;
......@@ -95,10 +113,14 @@ begin
po_table_offs_data => addr_i.table_phase_offs.data(C_W_PHASE downto 0),
-- Configuration
ticker_enable => addr_o.control.enable.data(0),
ticker_enable => addr_o.control.enable_ticker.data(0),
input_enable => addr_o.control.enable_input.data(0),
ticker_rate => addr_o.ticker_rate.data.data,
table_depth => addr_o.table_depth.data.data,
pi_phase_tidx => s_axis_tdata_pscid,
pi_phase_valid => s_axis_tvalid,
po_phase_incr => phase_incr,
po_phase_offset => phase_offset,
po_phase_reset => phase_reset,
......@@ -188,13 +210,43 @@ begin
addr_i.table_scale.data(31 downto C_W_SCALE+C_W_OFFSET-1) <= (others => '0');
end generate;
----------------------
-- INPUT DATA DELAY --
----------------------
p_data_delay:process(clk, rstn)
begin
if rstn = '0' then
data_delay <= (others => (others => '0'));
elsif rising_edge(clk) then
data_delay(0) <= s_axis_tuser & s_axis_tdata_value;
data_delay(1 to C_DELAY-1) <= data_delay(0 to C_DELAY-2);
end if;
end process;
------------------
-- TIDX MAPPING --
-- OUTPUT ADDER --
------------------
-- Temporary
m_axis_tdata <= wave;
m_axis_tuser <= wave_tidx;
p_output:process(clk, rstn)
begin
if rstn = '0' then
m_axis_tdata_pscid <= (others => '0');
m_axis_tdata_value <= (others => '0');
m_axis_tuser <= (others => '0');
m_axis_tvalid <= '0';
elsif rising_edge(clk) then
m_axis_tdata_pscid <= wave_tidx;
m_axis_tdata_value <= std_logic_vector(f_sum_sat(
signed(data_delay(C_DELAY-1)(C_W_VALUE-1 downto 0)),
signed(wave)
));
m_axis_tuser <= data_delay(C_DELAY-1)(G_W_TUSER+C_W_VALUE-1 downto C_W_VALUE);
m_axis_tvalid <= wave_valid;
end if;
end process;
end architecture struct;
......@@ -30,7 +30,8 @@ addrmap pscgen {
desc = "Control register";
default sw = rw;
default hw = r;
field {} enable;
field {} enable_ticker;
field {} enable_input;
} CONTROL ;
reg {
......
......@@ -6,6 +6,9 @@
<db_ref path="tb_pscgen_behav.wdb" id="1">
<top_modules>
<top_module name="common" />
<top_module name="common_logic_utils" />
<top_module name="math_signed" />
<top_module name="math_utils" />
<top_module name="pkg_pscgen" />
<top_module name="pkg_pscgen" />
<top_module name="pkg_pscgen_gen_ip" />
......@@ -15,15 +18,15 @@
</db_ref>
</db_ref_list>
<zoom_setting>
<ZoomStartTime time="1243766fs"></ZoomStartTime>
<ZoomEndTime time="1365367fs"></ZoomEndTime>
<Cursor1Time time="1345100fs"></Cursor1Time>
<ZoomStartTime time="8363800fs"></ZoomStartTime>
<ZoomEndTime time="8788800fs"></ZoomEndTime>
<Cursor1Time time="8653017fs"></Cursor1Time>
</zoom_setting>
<column_width_setting>
<NameColumnWidth column_width="328"></NameColumnWidth>
<ValueColumnWidth column_width="239"></ValueColumnWidth>
<ValueColumnWidth column_width="235"></ValueColumnWidth>
</column_width_setting>
<WVObjectSize size="11" />
<WVObjectSize size="13" />
<wvobject type="logic" fp_name="/tb_pscgen/tb_clk">
<obj_property name="ElementShortName">tb_clk</obj_property>
<obj_property name="ObjectShortName">tb_clk</obj_property>
......@@ -32,6 +35,27 @@
<obj_property name="ElementShortName">tb_rstn</obj_property>
<obj_property name="ObjectShortName">tb_rstn</obj_property>
</wvobject>
<wvobject type="group" fp_name="group46">
<obj_property name="label">AXIS input</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/s_axis_tdata_pscid">
<obj_property name="ElementShortName">s_axis_tdata_pscid[7:0]</obj_property>
<obj_property name="ObjectShortName">s_axis_tdata_pscid[7:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/s_axis_tdata_value">
<obj_property name="ElementShortName">s_axis_tdata_value[15:0]</obj_property>
<obj_property name="ObjectShortName">s_axis_tdata_value[15:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_s_axis_tuser">
<obj_property name="ElementShortName">tb_s_axis_tuser[7:0]</obj_property>
<obj_property name="ObjectShortName">tb_s_axis_tuser[7:0]</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_pscgen/inst_dut/s_axis_tvalid">
<obj_property name="ElementShortName">s_axis_tvalid</obj_property>
<obj_property name="ObjectShortName">s_axis_tvalid</obj_property>
</wvobject>
</wvobject>
<wvobject type="group" fp_name="group6">
<obj_property name="label">AXI4L Write</obj_property>
<obj_property name="DisplayName">label</obj_property>
......@@ -63,7 +87,6 @@
<wvobject type="group" fp_name="group10">
<obj_property name="label">Config Registers</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_aximm/po_addrmap.TICKER_RATE.data.data">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">.data[31:0]</obj_property>
......@@ -76,12 +99,6 @@
<obj_property name="ObjectShortName">.data[7:0]</obj_property>
<obj_property name="label">table_depth</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_aximm/po_addrmap.CONTROL.enable.data">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">.data[0:0]</obj_property>
<obj_property name="ObjectShortName">.data[0:0]</obj_property>
<obj_property name="label">enable</obj_property>
</wvobject>
</wvobject>
<wvobject type="group" fp_name="group284">
<obj_property name="label">Ticker</obj_property>
......@@ -90,10 +107,6 @@
<obj_property name="ElementShortName">ticker_cnt[31:0]</obj_property>
<obj_property name="ObjectShortName">ticker_cnt[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_table/tidx_cnt">
<obj_property name="ElementShortName">tidx_cnt[7:0]</obj_property>
<obj_property name="ObjectShortName">tidx_cnt[7:0]</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_pscgen/inst_dut/inst_phase_table/ticker_tick">
<obj_property name="ElementShortName">ticker_tick</obj_property>
<obj_property name="ObjectShortName">ticker_tick</obj_property>
......@@ -102,34 +115,22 @@
<wvobject type="group" fp_name="group285">
<obj_property name="label">Phase Table</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_table/tidx">
<obj_property name="ElementShortName">tidx[7:0]</obj_property>
<obj_property name="ObjectShortName">tidx[7:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_table/inst_phase_table/memory">
<obj_property name="DisplayName">label</obj_property>
<obj_property name="ElementShortName">memory[0:255][30:0]</obj_property>
<obj_property name="ObjectShortName">memory[0:255][30:0]</obj_property>
<obj_property name="label">Mem</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_table/table_data">
<obj_property name="ElementShortName">table_data[30:0]</obj_property>
<obj_property name="ObjectShortName">table_data[30:0]</obj_property>
</wvobject>
</wvobject>
<wvobject type="group" fp_name="group14">
<obj_property name="label">Phase Accu Input</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_accu/pi_phase_incr">
<obj_property name="ElementShortName">pi_phase_incr[14:0]</obj_property>
<obj_property name="ObjectShortName">pi_phase_incr[14:0]</obj_property>
<obj_property name="ElementShortName">pi_phase_incr[15:0]</obj_property>
<obj_property name="ObjectShortName">pi_phase_incr[15:0]</obj_property>
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_accu/pi_phase_offset">
<obj_property name="ElementShortName">pi_phase_offset[14:0]</obj_property>
<obj_property name="ObjectShortName">pi_phase_offset[14:0]</obj_property>
<obj_property name="ElementShortName">pi_phase_offset[15:0]</obj_property>
<obj_property name="ObjectShortName">pi_phase_offset[15:0]</obj_property>
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_pscgen/inst_dut/inst_phase_accu/pi_phase_valid">
......@@ -149,8 +150,8 @@
<obj_property name="label">Phase Accu Output</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_accu/po_phase">
<obj_property name="ElementShortName">po_phase[14:0]</obj_property>
<obj_property name="ObjectShortName">po_phase[14:0]</obj_property>
<obj_property name="ElementShortName">po_phase[15:0]</obj_property>
<obj_property name="ObjectShortName">po_phase[15:0]</obj_property>
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_phase_accu/po_phase_tidx">
......@@ -165,7 +166,6 @@
<wvobject type="group" fp_name="group41">
<obj_property name="label">DDS</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_dds/m_axis_data_tdata">
<obj_property name="ElementShortName">m_axis_data_tdata[31:0]</obj_property>
<obj_property name="ObjectShortName">m_axis_data_tdata[31:0]</obj_property>
......@@ -183,10 +183,9 @@
<wvobject type="group" fp_name="group45">
<obj_property name="label">Scaler</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_scaler/po_wave">
<obj_property name="ElementShortName">po_wave[31:0]</obj_property>
<obj_property name="ObjectShortName">po_wave[31:0]</obj_property>
<obj_property name="ElementShortName">po_wave[15:0]</obj_property>
<obj_property name="ObjectShortName">po_wave[15:0]</obj_property>
<obj_property name="Radix">SIGNEDDECRADIX</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/inst_dut/inst_scaler/po_wave_tidx">
......@@ -201,10 +200,9 @@
<wvobject type="group" fp_name="group49">
<obj_property name="label">Result</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/tb_result_std[0]">
<obj_property name="ElementShortName">[0][31:0]</obj_property>
<obj_property name="ObjectShortName">[0][31:0]</obj_property>
<obj_property name="ElementShortName">[0][15:0]</obj_property>
<obj_property name="ObjectShortName">[0][15:0]</obj_property>
<obj_property name="Radix">REALRADIX</obj_property>
<obj_property name="WaveformStyle">STYLE_ANALOG</obj_property>
<obj_property name="CellHeight">100</obj_property>
......@@ -219,8 +217,8 @@
<obj_property name="AnalogHorizLine">0.000000</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_result_std[1]">
<obj_property name="ElementShortName">[1][31:0]</obj_property>
<obj_property name="ObjectShortName">[1][31:0]</obj_property>
<obj_property name="ElementShortName">[1][15:0]</obj_property>
<obj_property name="ObjectShortName">[1][15:0]</obj_property>
<obj_property name="Radix">REALRADIX</obj_property>
<obj_property name="WaveformStyle">STYLE_ANALOG</obj_property>
<obj_property name="CellHeight">100</obj_property>
......@@ -235,8 +233,8 @@
<obj_property name="AnalogHorizLine">0.000000</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_result_std[2]">
<obj_property name="ElementShortName">[2][31:0]</obj_property>
<obj_property name="ObjectShortName">[2][31:0]</obj_property>
<obj_property name="ElementShortName">[2][15:0]</obj_property>
<obj_property name="ObjectShortName">[2][15:0]</obj_property>
<obj_property name="Radix">REALRADIX</obj_property>
<obj_property name="WaveformStyle">STYLE_ANALOG</obj_property>
<obj_property name="CellHeight">100</obj_property>
......@@ -251,8 +249,8 @@
<obj_property name="AnalogHorizLine">0.000000</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_result_std[3]">
<obj_property name="ElementShortName">[3][31:0]</obj_property>
<obj_property name="ObjectShortName">[3][31:0]</obj_property>
<obj_property name="ElementShortName">[3][15:0]</obj_property>
<obj_property name="ObjectShortName">[3][15:0]</obj_property>
<obj_property name="Radix">REALRADIX</obj_property>
<obj_property name="WaveformStyle">STYLE_ANALOG</obj_property>
<obj_property name="CellHeight">100</obj_property>
......@@ -267,8 +265,8 @@
<obj_property name="AnalogHorizLine">0.000000</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_result_std[4]">
<obj_property name="ElementShortName">[4][31:0]</obj_property>
<obj_property name="ObjectShortName">[4][31:0]</obj_property>
<obj_property name="ElementShortName">[4][15:0]</obj_property>
<obj_property name="ObjectShortName">[4][15:0]</obj_property>
<obj_property name="Radix">REALRADIX</obj_property>
<obj_property name="WaveformStyle">STYLE_ANALOG</obj_property>
<obj_property name="CellHeight">100</obj_property>
......@@ -283,4 +281,25 @@
<obj_property name="AnalogHorizLine">0.000000</obj_property>
</wvobject>
</wvobject>
<wvobject type="group" fp_name="group50">
<obj_property name="label">AXIS output</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="array" fp_name="/tb_pscgen/tb_m_axis_tdata_value">
<obj_property name="ElementShortName">tb_m_axis_tdata_value[15:0]</obj_property>
<obj_property name="ObjectShortName">tb_m_axis_tdata_value[15:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_m_axis_tdata_pscid">
<obj_property name="ElementShortName">tb_m_axis_tdata_pscid[7:0]</obj_property>
<obj_property name="ObjectShortName">tb_m_axis_tdata_pscid[7:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_pscgen/tb_m_axis_tuser">
<obj_property name="ElementShortName">tb_m_axis_tuser[7:0]</obj_property>
<obj_property name="ObjectShortName">tb_m_axis_tuser[7:0]</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_pscgen/tb_m_axis_tvalid">
<obj_property name="ElementShortName">tb_m_axis_tvalid</obj_property>
<obj_property name="ObjectShortName">tb_m_axis_tvalid</obj_property>
</wvobject>
</wvobject>
</wave_config>
......@@ -18,8 +18,13 @@ architecture testbench of tb_pscgen is
signal tb_s_axi_m2s : t_pscgen_m2s;
signal tb_s_axi_s2m : t_pscgen_s2m;
signal tb_m_axis_tdata : std_logic_vector(C_W_SIG-1 downto 0);
signal tb_m_axis_tuser : std_logic_vector(C_W_TIDX-1 downto 0);
signal tb_s_axis_tdata_value : std_logic_vector(C_W_SIG-1 downto 0);
signal tb_s_axis_tdata_pscid : std_logic_vector(C_W_TIDX-1 downto 0);
signal tb_s_axis_tuser : std_logic_vector(7 downto 0);
signal tb_s_axis_tvalid : std_logic;
signal tb_m_axis_tdata_value : std_logic_vector(C_W_SIG-1 downto 0);
signal tb_m_axis_tdata_pscid : std_logic_vector(C_W_TIDX-1 downto 0);
signal tb_m_axis_tuser : std_logic_vector(7 downto 0);
signal tb_m_axis_tvalid : std_logic;
-- AXI4L helpers
......@@ -41,14 +46,22 @@ begin
-- DUT --
---------
inst_dut: entity work.top_pscgen
generic map(
G_W_TUSER => 8
)
port map(
clk => tb_clk,
rstn => tb_rstn,
s_axi_m2s => tb_s_axi_m2s,
s_axi_s2m => tb_s_axi_s2m,
m_axis_tdata => tb_m_axis_tdata,
m_axis_tdata_pscid => tb_m_axis_tdata_pscid,
m_axis_tdata_value => tb_m_axis_tdata_value,
m_axis_tuser => tb_m_axis_tuser,
m_axis_tvalid => tb_m_axis_tvalid
m_axis_tvalid => tb_m_axis_tvalid,
s_axis_tdata_pscid => tb_s_axis_tdata_pscid,
s_axis_tdata_value => tb_s_axis_tdata_value,
s_axis_tuser => tb_s_axis_tuser,
s_axis_tvalid => tb_s_axis_tvalid
);
------------------
......@@ -111,6 +124,8 @@ begin
tb_s_axi_m2s.bready <= '1';
tb_s_axi_m2s.rready <= '1';
tb_s_axis_tvalid <= '0';
wait for 40 ns;
wait until rising_edge(tb_clk);
tb_rstn <= '1';
......@@ -173,6 +188,33 @@ begin
end loop;
wait for 3 us;
wait until rising_edge(tb_clk);
-- Test with INPUT
v_axi4l_data := (1=> '1', others => '0');
write_axi4l(std_logic_vector(C_REGISTER_INFO(C_CONTROL_ID).address),
v_axi4l_data);
wait for 1 us;
wait until rising_edge(tb_clk);
for I in 0 to 6 loop
for J in 1 to 20 loop
tb_s_axis_tdata_value <= std_logic_vector(to_signed(I*200 + J, C_W_PHASE));
tb_s_axis_tdata_pscid <= std_logic_vector(to_unsigned(J, C_W_TIDX));
tb_s_axis_tuser <= std_logic_vector(to_unsigned(100+J, 8));
tb_s_axis_tvalid <= '1';
wait until rising_edge(tb_clk);
end loop;
tb_s_axis_tvalid <= '0';
wait for 1 us;
wait until rising_edge(tb_clk);
end loop;
-- infinite wait at the end
wait;
......@@ -196,9 +238,9 @@ begin
tb_result_std <= (others => (others=>'0'));
elsif rising_edge(tb_clk) then
if tb_m_axis_tvalid = '1' then
pscid := to_integer(unsigned(tb_m_axis_tuser));
tb_result_std(pscid) <= tb_m_axis_tdata;
tb_result(pscid) <= to_integer(signed(tb_m_axis_tdata));
pscid := to_integer(unsigned(tb_m_axis_tdata_pscid));
tb_result_std(pscid) <= tb_m_axis_tdata_value;
tb_result(pscid) <= to_integer(signed(tb_m_axis_tdata_value));
end if;
end if;
end process p_axis_rx;
......
......@@ -30,6 +30,9 @@ proc setSources {} {
lappend Sources {"../hdl/MultiScaler.vhd" "VHDL"}
lappend Sources {"../hdl/top_pscgen.vhd" "VHDL"}
lappend Sources [list "${::fwfwk::LibPath}/desy_vhdl/hdl/memory/ram/ram_tdp.vhd" "VHDL 2008" "desy"]
lappend Sources [list "${::fwfwk::LibPath}/desy_vhdl/hdl/math/pkg_math_utils.vhd" "VHDL 2008" "desy"]
lappend Sources [list "${::fwfwk::LibPath}/desy_vhdl/hdl/math/pkg_math_signed.vhd" "VHDL 2008" "desy"]
lappend Sources [list "${::fwfwk::LibPath}/desy_vhdl/hdl/common/pkg_common_logic_utils.vhd" "VHDL 2008" "desy"]
# Simulation sources
lappend Sources {"../sim/tb_pscgen.vhd" "VHDL 2008" "" "simulation"}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment