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

feat(daq): Change data path

* All data packets (bpm, psc, trigger) in one region: region 0
  continuous
* Data are merge with AXIS interconnect
* New data source: trigger
* Temporary trigger: send current time when new sequence.
* Another region in DAQ: same as region 0 but pulsed mode
parent 3842e05d
No related branches found
No related tags found
No related merge requests found
......@@ -72,23 +72,23 @@ package pkg_app_config is
constant C_DAQ_BURST_LEN_ARRAY : t_natural_vector := (16,16,16);
constant C_DAQ_FIFO_DEPTH_ARRAY : t_natural_vector := (1024,1024,1024);
-- Region 0 is BPM data
-- Region 0 is continuous data
constant C_DAQ0_IS_CONTINUOUS : natural := 1;
constant C_DAQ0_MAX_SAMPLES : natural := 16#01000000#; -- Buffer size / 16 bytes
constant C_DAQ0_CHANNELS_IN_TAB : natural := 4;
constant C_DAQ0_MAX_SAMPLES : natural := 16#02000000#; -- Buffer size / 8 bytes
constant C_DAQ0_CHANNELS_IN_TAB : natural := 2;
constant C_DAQ0_TAB_COUNT : natural := 1;
constant C_DAQ0_TAB_CONTENTS : t_natural_vector := (3, 2, 1, 0);
constant C_DAQ0_TAB_CONTENTS : t_natural_vector := (1, 0);
constant C_DAQ0_BUF0_OFFSET : natural := 16#00000000#;
constant C_DAQ0_BUF1_OFFSET : natural := 16#10000000#;
-- Region 1 is Correction data
constant C_DAQ1_IS_CONTINUOUS : natural := 1;
constant C_DAQ1_MAX_SAMPLES : natural := 16#02000000#; -- Buffer size / 4 bytes
constant C_DAQ1_CHANNELS_IN_TAB : natural := 1;
-- Region 1 is pulsed data
constant C_DAQ1_IS_CONTINUOUS : natural := 0;
constant C_DAQ1_MAX_SAMPLES : natural := 16#04000000#; -- Buffer size / 8 bytes
constant C_DAQ1_CHANNELS_IN_TAB : natural := 2;
constant C_DAQ1_TAB_COUNT : natural := 1;
constant C_DAQ1_TAB_CONTENTS : t_natural_vector := (0=>3);
constant C_DAQ1_TAB_CONTENTS : t_natural_vector := (1, 0);
constant C_DAQ1_BUF0_OFFSET : natural := 16#20000000#;
constant C_DAQ1_BUF1_OFFSET : natural := 16#30000000#;
constant C_DAQ1_BUF1_OFFSET : natural := 16#20000000#; -- Won't be used
-- not used, only two regions
constant C_DAQ2_IS_CONTINUOUS : natural := 0;
......
......@@ -168,6 +168,20 @@ architecture struct of bsp_fmc2zup_payload is
signal r_daq_trigger : std_logic_vector(1 downto 0);
signal daq_data : t_32b_slv_vector(3 downto 0);
signal daq_irq : std_logic_vector(C_DAQ_REGIONS-1 downto 0);
signal r_last_seq : std_logic_vector(7 downto 0);
signal axis_daqs00_tdata : std_logic_vector(63 downto 0);
signal axis_daqs00_tvalid : std_logic;
signal axis_daqs01_tdata : std_logic_vector(63 downto 0);
signal axis_daqs01_tvalid : std_logic;
signal axis_daqs02_tdata : std_logic_vector(63 downto 0);
signal axis_daqs02_tvalid : std_logic;
signal axis_daqs03_tdata : std_logic_vector(63 downto 0);
signal axis_daqs03_tvalid : std_logic;
signal axis_daqm00_tdata : std_logic_vector(63 downto 0);
signal axis_daqm00_tvalid : std_logic;
signal axis_daqm00_tready : std_logic;
-- Other signals
signal rst : std_logic;
......@@ -645,6 +659,97 @@ begin
-- ============================================================================= --
-- == DAQ SYSTEM == --
-- ============================================================================= --
-- Temporary source: trigger on new bpm seq
p_trig_seq:process(axis_clk, axis_rstn)
begin
if axis_rstn = '0' then
r_last_seq <= (others => '0');
axis_daqs00_tvalid <= '0';
elsif rising_edge(axis_clk) then
if (axis_pkt_rx_tvalid and axis_pkt_rx_tready) = '1' then
r_last_seq <= axis_pkt_rx_tuser(7 downto 0);
if r_last_seq /= axis_pkt_rx_tuser(7 downto 0) then
axis_daqs00_tvalid <= '1';
else
axis_daqs00_tvalid <= '0';
end if;
else
axis_daqs00_tvalid <= '0';
end if;
end if;
end process;
axis_daqs00_tdata(63 downto 48) <= x"8005"; -- Trigger source, new bpm seq event
axis_daqs00_tdata(47 downto 32) <= x"00"&axis_pkt_rx_tuser(7 downto 0); -- Ancillary is seq num
axis_daqs00_tdata(31 downto 0) <= timeref(31 downto 0); -- Timestamp
axis_daqs01_tdata(63 downto 56) <= x"40"; -- BPM x source
axis_daqs01_tdata(55 downto 48) <= axis_pkt_rx_tdata(71 downto 64); -- BPM id
axis_daqs01_tdata(47 downto 32) <= x"00"&axis_pkt_rx_tuser(7 downto 0); -- Ancillary is seq num
axis_daqs01_tdata(31 downto 0) <= axis_pkt_rx_tdata(31 downto 0); -- Position
axis_daqs01_tvalid <= axis_pkt_rx_tvalid and axis_pkt_rx_tready;
axis_daqs02_tdata(63 downto 56) <= x"42"; -- BPM y source
axis_daqs02_tdata(55 downto 48) <= axis_pkt_rx_tdata(71 downto 64); -- BPM id
axis_daqs02_tdata(47 downto 32) <= x"00"&axis_pkt_rx_tuser(7 downto 0); -- Ancillary is seq num
axis_daqs02_tdata(31 downto 0) <= axis_pkt_rx_tdata(63 downto 32); -- Position
axis_daqs02_tvalid <= axis_pkt_rx_tvalid and axis_pkt_rx_tready;
axis_daqs03_tdata(63 downto 56) <= x"B0"; -- PSC source
axis_daqs03_tdata(55 downto 48) <= axis_pscgen_tdata_pscid; -- PSC id
axis_daqs03_tdata(47 downto 32) <= x"00"&axis_pscgen_tuser; -- Ancillary is seq num
axis_daqs03_tdata(31 downto 16) <= (others => axis_pscgen_tdata_value(15)); -- Sign extension
axis_daqs03_tdata(15 downto 0) <= axis_pscgen_tdata_value; -- Value
axis_daqs03_tvalid <= axis_pscgen_tvalid;
-- DAQ interconnect data source
inst_daq_axis_ic: entity work.axis_ic_capt
port map (
aclk => axis_clk,
s00_axis_aclk => axis_clk,
s01_axis_aclk => axis_clk,
s02_axis_aclk => axis_clk,
s03_axis_aclk => axis_clk,
m00_axis_aclk => axis_clk,
aresetn => axis_rstn,
s00_axis_aresetn => axis_rstn,
s01_axis_aresetn => axis_rstn,
s02_axis_aresetn => axis_rstn,
s03_axis_aresetn => axis_rstn,
m00_axis_aresetn => axis_rstn,
s00_axis_tvalid => axis_daqs00_tvalid,
s00_axis_tready => open, --no back pressure
s00_axis_tdata => axis_daqs00_tdata,
s01_axis_tvalid => axis_daqs01_tvalid,
s01_axis_tready => open, --no back pressure
s01_axis_tdata => axis_daqs01_tdata,
s02_axis_tvalid => axis_daqs02_tvalid,
s02_axis_tready => open, --no back pressure
s02_axis_tdata => axis_daqs02_tdata,
s03_axis_tvalid => axis_daqs03_tvalid,
s03_axis_tready => open, --no back pressure
s03_axis_tdata => axis_daqs03_tdata,
m00_axis_tvalid => axis_daqm00_tvalid,
m00_axis_tready => axis_daqm00_tready,
m00_axis_tdata => axis_daqm00_tdata,
s00_arb_req_suppress => C_LOGIC_ZERO,
s01_arb_req_suppress => C_LOGIC_ZERO,
s02_arb_req_suppress => C_LOGIC_ZERO,
s03_arb_req_suppress => C_LOGIC_ZERO
);
axis_daqm00_tready <= '1'; -- no back pressure from DAQ
inst_daq: entity work.daq_top
generic map (
g_fifo_arch => "ULTRASCALE",
......@@ -679,32 +784,10 @@ begin
m_axi4_daq_s2m <= f_common_to_bsp(pi_payload.s_axi4_daq);
po_payload.s_axi4_daq <= f_common_to_bsp(m_axi4_daq_m2s);
-------------------------------------------------------
-- Mapping data channel
-- Region 0
-- 2*4 bytes for a xy position data
-- 1 byte for bpmid
-- 1 byte for seq
-- Region 1
-- 2 bytes for a correction data
-- 1 byte for pscid
-- 1 byte for seq
--
daq_data(0) <= axis_pkt_rx_tdata(31 downto 0);
--
daq_data(1) <= axis_pkt_rx_tdata(63 downto 32);
--
daq_data(2)(7 downto 0) <= axis_pkt_rx_tdata(71 downto 64);
daq_data(2)(15 downto 8) <= (others => '0');
daq_data(2)(23 downto 16) <= axis_pkt_rx_tuser;
daq_data(2)(31 downto 24) <= (others => '0');
--
daq_data(3)(15 downto 0) <= axis_pscgen_tdata_value;
daq_data(3)(23 downto 16) <= axis_pscgen_tdata_pscid;
daq_data(3)(31 downto 24) <= axis_pscgen_tuser;
daq_data(0) <= axis_daqm00_tdata(31 downto 0);
daq_data(1) <= axis_daqm00_tdata(63 downto 32);
daq_strobe(0) <= axis_pkt_rx_tvalid and axis_pkt_rx_tready;
daq_strobe(1) <= axis_pscgen_tvalid;
daq_strobe(0) <= axis_daqm00_tvalid;
daq_stop <= addrmap_o.daq_control.stop.data(0);
......
......@@ -107,3 +107,51 @@ generate_target all [get_files ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipN
export_ip_user_files -of_objects [get_files ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipName.xci] -no_script -sync -force -quiet
create_ip_run [get_files -of_objects [get_fileset sources_1] ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipName.xci]
## ------------------------------------- ##
## CAPTURE INTERCONNECT
## ------------------------------------- ##
set ipName "axis_ic_capt"
set xcipath [create_ip \
-name axis_interconnect \
-vendor xilinx.com \
-library ip -version 1.1 \
-module_name $ipName]
set_property -dict [list \
CONFIG.C_NUM_SI_SLOTS {4} \
CONFIG.SWITCH_TDATA_NUM_BYTES {8} \
CONFIG.HAS_TSTRB {false} \
CONFIG.HAS_TKEEP {false} \
CONFIG.HAS_TLAST {false} \
CONFIG.HAS_TID {false} \
CONFIG.HAS_TDEST {false} \
CONFIG.HAS_TUSER {false} \
CONFIG.ARBITER_TYPE {Fixed} \
CONFIG.S00_AXIS_FIFO_MODE {1_(Normal)} \
CONFIG.C_S00_AXIS_FIFO_DEPTH {128} \
CONFIG.S01_AXIS_FIFO_MODE {1_(Normal)} \
CONFIG.C_S01_AXIS_FIFO_DEPTH {128} \
CONFIG.S02_AXIS_FIFO_MODE {1_(Normal)} \
CONFIG.C_S02_AXIS_FIFO_DEPTH {128} \
CONFIG.S03_AXIS_FIFO_MODE {1_(Normal)} \
CONFIG.C_S03_AXIS_FIFO_DEPTH {128} \
CONFIG.SWITCH_PACKET_MODE {false} \
CONFIG.C_SWITCH_MAX_XFERS_PER_ARB {1} \
CONFIG.C_SWITCH_NUM_CYCLES_TIMEOUT {0} \
CONFIG.M00_AXIS_TDATA_NUM_BYTES {8} \
CONFIG.S00_AXIS_TDATA_NUM_BYTES {8} \
CONFIG.S01_AXIS_TDATA_NUM_BYTES {8} \
CONFIG.S02_AXIS_TDATA_NUM_BYTES {8} \
CONFIG.S03_AXIS_TDATA_NUM_BYTES {8} \
CONFIG.M00_S01_CONNECTIVITY {true} \
CONFIG.M00_S02_CONNECTIVITY {true} \
CONFIG.M00_S03_CONNECTIVITY {true} \
] [get_ips $ipName]
generate_target all [get_files ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipName.xci]
export_ip_user_files -of_objects [get_files ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipName.xci] -no_script -sync -force -quiet
create_ip_run [get_files -of_objects [get_fileset sources_1] ${ProjectDirPath}.srcs/sources_1/ip/$ipName/$ipName.xci]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment