Skip to content
Snippets Groups Projects
Commit ad27eed6 authored by Pieter Donker's avatar Pieter Donker
Browse files

Merge branch 'L2SDP-207' into 'master'

Resolve L2SDP-207

Closes L2SDP-207

See merge request desp/hdl!79
parents aa32538e 288fdfa7
No related branches found
No related tags found
2 merge requests!100Removed text for XSub that is now written in Confluence Subband correlator...,!79Resolve L2SDP-207
...@@ -239,17 +239,18 @@ PACKAGE sdp_pkg is ...@@ -239,17 +239,18 @@ PACKAGE sdp_pkg is
CONSTANT c_sdp_bst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D1"; -- TBC CONSTANT c_sdp_bst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D1"; -- TBC
CONSTANT c_sdp_xst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D2"; -- TBC CONSTANT c_sdp_xst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D2"; -- TBC
CONSTANT c_sdp_stat_nof_hdr_fields : NATURAL := 3+12+4+20+1; -- 592b; 9.25 64b words CONSTANT c_sdp_stat_nof_hdr_fields : NATURAL := 1+3+12+4+20+1; -- 592b; 18.5 32b words
CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"01000000000000000000"&"0"; -- 0=data path, 1=MM controlled TODO CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111111111101"&"0111"&"01000000000000000100"&"0"; -- 0=data path, 1=MM controlled TODO
CONSTANT c_sdp_stat_hdr_field_arr : t_common_field_arr(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := ( CONSTANT c_sdp_stat_hdr_field_arr : t_common_field_arr(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := (
( field_name_pad("word_align" ), "RW", 16, field_default(0) ),
( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"001B217176B9") ), -- 001B217176B9 = DOP36-enp2s0 ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"001B217176B9") ), -- 001B217176B9 = DOP36-enp2s0
( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ),
( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ),
( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ),
( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ),
( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ),
( field_name_pad("ip_total_length" ), "RW", 16, field_default(7868) ), ( field_name_pad("ip_total_length" ), "RW", 16, field_default(4156) ),
( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ),
( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ),
( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ),
...@@ -260,7 +261,7 @@ PACKAGE sdp_pkg is ...@@ -260,7 +261,7 @@ PACKAGE sdp_pkg is
( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(x"0A6300FE") ), -- 0A6300FE = DOP36-enp2s0 '10.99.0.254' ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(x"0A6300FE") ), -- 0A6300FE = DOP36-enp2s0 '10.99.0.254'
( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ),
( field_name_pad("udp_dst_port" ), "RW", 16, field_default(5001) ), ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(5001) ),
( field_name_pad("udp_total_length" ), "RW", 16, field_default(7848) ), ( field_name_pad("udp_total_length" ), "RW", 16, field_default(4136) ),
( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ),
( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ), ( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ),
( field_name_pad("sdp_version_id" ), "RW", 8, field_default(5) ), ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(5) ),
......
...@@ -130,7 +130,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS ...@@ -130,7 +130,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS
SIGNAL nxt_r : t_reg; SIGNAL nxt_r : t_reg;
SIGNAL trigger : STD_LOGIC := '0'; SIGNAL trigger : STD_LOGIC := '0';
SIGNAL mm_done : STD_LOGIC := '0'; SIGNAL done : STD_LOGIC := '0';
SIGNAL dp_block_from_mm_src_out : t_dp_sosi; SIGNAL dp_block_from_mm_src_out : t_dp_sosi;
SIGNAL dp_block_from_mm_src_in : t_dp_siso; SIGNAL dp_block_from_mm_src_in : t_dp_siso;
...@@ -182,7 +182,7 @@ BEGIN ...@@ -182,7 +182,7 @@ BEGIN
END IF; END IF;
END PROCESS; END PROCESS;
p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, mm_done, dp_header_info) p_control_packet_offload : PROCESS(r, gn_index, in_sosi, trigger, done, dp_header_info)
VARIABLE v: t_reg; VARIABLE v: t_reg;
BEGIN BEGIN
v := r; v := r;
...@@ -221,8 +221,8 @@ BEGIN ...@@ -221,8 +221,8 @@ BEGIN
v.start_pulse := '1'; v.start_pulse := '1';
v.start_address := 0; v.start_address := 0;
v.block_count := 1; v.block_count := 1;
ELSIF mm_done = '1' THEN ELSIF done = '1' THEN
-- Use mm_done to start next packets -- Use done to start next packets
IF r.block_count < c_nof_packets THEN IF r.block_count < c_nof_packets THEN
IF r.block_count MOD c_nof_data_per_step = 0 THEN IF r.block_count MOD c_nof_data_per_step = 0 THEN
v.start_address := r.start_address + c_data_size; -- step to next packet within block v.start_address := r.start_address + c_data_size; -- step to next packet within block
...@@ -239,7 +239,7 @@ BEGIN ...@@ -239,7 +239,7 @@ BEGIN
END IF; END IF;
-- Release header info per packet offload -- Release header info per packet offload
IF trigger = '1' OR mm_done = '1' THEN IF trigger = '1' OR done = '1' THEN
v.dp_header_info := dp_header_info; v.dp_header_info := dp_header_info;
END IF; END IF;
nxt_r <= v; nxt_r <= v;
...@@ -261,18 +261,20 @@ BEGIN ...@@ -261,18 +261,20 @@ BEGIN
trigger_dly => trigger trigger_dly => trigger
); );
u_dp_block_from_mm : ENTITY dp_lib.dp_block_from_mm u_dp_block_from_mm : ENTITY dp_lib.dp_block_from_mm_dc
GENERIC MAP ( GENERIC MAP (
g_data_size => c_data_size, g_data_size => c_data_size,
g_step_size => c_step_size, g_step_size => c_step_size,
g_nof_data => c_nof_data g_nof_data => c_nof_data
) )
PORT MAP( PORT MAP(
rst => dp_rst, dp_rst => dp_rst,
clk => dp_clk, dp_clk => dp_clk,
mm_rst => mm_rst,
mm_clk => mm_clk,
start_pulse => r.start_pulse, start_pulse => r.start_pulse,
start_address => r.start_address, start_address => r.start_address,
mm_done => mm_done, done => done,
mm_mosi => master_mosi, mm_mosi => master_mosi,
mm_miso => master_miso, mm_miso => master_miso,
out_sosi => dp_block_from_mm_src_out, out_sosi => dp_block_from_mm_src_out,
......
...@@ -74,6 +74,7 @@ synth_files = ...@@ -74,6 +74,7 @@ synth_files =
src/vhdl/dp_block_gen.vhd src/vhdl/dp_block_gen.vhd
src/vhdl/dp_block_gen_valid_arr.vhd src/vhdl/dp_block_gen_valid_arr.vhd
src/vhdl/dp_block_from_mm.vhd src/vhdl/dp_block_from_mm.vhd
src/vhdl/dp_block_from_mm_dc.vhd
src/vhdl/dp_block_to_mm.vhd src/vhdl/dp_block_to_mm.vhd
src/vhdl/dp_bsn_source.vhd src/vhdl/dp_bsn_source.vhd
src/vhdl/dp_bsn_source_v2.vhd src/vhdl/dp_bsn_source_v2.vhd
......
-- --------------------------------------------------------------------------
-- Copyright 2020
-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-- --------------------------------------------------------------------------
-- --------------------------------------------------------------------------
-- Author:
-- . Pieter Donker
-- Purpose:
-- . Read a block of data from memory mapped (MM) location and stream it as a block of data,
-- this is a dual-clock wrapper around dp_block_from_mm.vhd
-- Description:
-- . https://support.astron.nl/confluence/display/L2M/L5+SDPFW+Design+Document%3A+Subband+filterbank
-- --------------------------------------------------------------------------
LIBRARY IEEE,common_lib;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
USE common_lib.common_pkg.ALL;
USE common_lib.common_mem_pkg.ALL;
USE work.dp_stream_pkg.ALL;
ENTITY dp_block_from_mm_dc IS
GENERIC (
g_data_size : NATURAL;
g_step_size : NATURAL;
g_nof_data : NATURAL
);
PORT (
-- mm_clk domain
mm_rst : IN STD_LOGIC;
mm_clk : IN STD_LOGIC;
mm_mosi : OUT t_mem_mosi;
mm_miso : IN t_mem_miso;
-- dp_clk domain
dp_rst : IN STD_LOGIC;
dp_clk : IN STD_LOGIC;
start_pulse : IN STD_LOGIC;
start_address : IN NATURAL;
done : OUT STD_LOGIC;
out_sosi : OUT t_dp_sosi;
out_siso : IN t_dp_siso
);
END dp_block_from_mm_dc;
ARCHITECTURE str OF dp_block_from_mm_dc IS
CONSTANT c_packet_size : NATURAL := g_nof_data * g_data_size; -- 512 * 2 = 1024 words.
CONSTANT c_fifo_size : NATURAL := c_packet_size * 2;
CONSTANT c_start_addr_w : NATURAL := c_natural_w;
SIGNAL mm_fifo_sosi : t_dp_sosi := c_dp_sosi_rst;
SIGNAL mm_fifo_siso : t_dp_siso;
SIGNAL mm_start_pulse : STD_LOGIC := '0';
SIGNAL mm_done : STD_LOGIC := '0';
SIGNAL start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0');
SIGNAL mm_start_address_slv : STD_LOGIC_VECTOR(c_start_addr_w-1 DOWNTO 0) := (OTHERS => '0');
SIGNAL mm_start_address : NATURAL := 0;
BEGIN
p_common_spulse_start_pulse : ENTITY common_lib.common_spulse
PORT MAP (
in_rst => dp_rst,
in_clk => dp_clk,
in_pulse => start_pulse,
out_rst => mm_rst,
out_clk => mm_clk,
out_pulse => mm_start_pulse
);
p_common_spulse_mm_done : ENTITY common_lib.common_spulse
PORT MAP (
in_rst => mm_rst,
in_clk => mm_clk,
in_pulse => mm_done,
out_rst => dp_rst,
out_clk => dp_clk,
out_pulse => done
);
start_address_slv <= TO_UVEC(start_address, c_start_addr_w);
mm_start_address <= TO_UINT(mm_start_address_slv);
p_common_async_slv_start_address : ENTITY common_lib.common_async_slv
PORT MAP (
rst => dp_rst,
clk => dp_clk,
din => start_address_slv,
dout => mm_start_address_slv
);
p_dp_fifo_fill_eop : ENTITY work.dp_fifo_fill_eop
GENERIC MAP (
g_use_dual_clock => TRUE,
g_data_w => c_word_w,
g_fifo_fill => c_packet_size,
g_fifo_size => c_fifo_size
)
PORT MAP (
wr_rst => mm_rst,
wr_clk => mm_clk,
rd_rst => dp_rst,
rd_clk => dp_clk,
-- ST sink
snk_in => mm_fifo_sosi,
snk_out => mm_fifo_siso,
-- ST source
src_out => out_sosi,
src_in => out_siso
);
p_dp_block_from_mm : ENTITY work.dp_block_from_mm
GENERIC MAP (
g_data_size => g_data_size,
g_step_size => g_step_size,
g_nof_data => g_nof_data
)
PORT MAP (
clk => mm_clk,
rst => mm_rst,
start_pulse => mm_start_pulse,
start_address => mm_start_address,
mm_done => mm_done,
mm_mosi => mm_mosi,
mm_miso => mm_miso,
out_sosi => mm_fifo_sosi,
out_siso => mm_fifo_siso
);
END str;
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment