Skip to content
Snippets Groups Projects
Commit ee3ef017 authored by Daniel van der Schuur's avatar Daniel van der Schuur
Browse files

-Added MM bus for dp_offload_tx instance;

-Set working default header fields;
-Added gen_ip_header_checksum.
parent 32430ac1
Branches
No related tags found
No related merge requests found
...@@ -70,7 +70,7 @@ ARCHITECTURE wrap OF apertif_unb1_fn_beamformer_udp_offload IS ...@@ -70,7 +70,7 @@ ARCHITECTURE wrap OF apertif_unb1_fn_beamformer_udp_offload IS
CONSTANT c_nof_offload_streams : NATURAL := 1; CONSTANT c_nof_offload_streams : NATURAL := 1;
-- Override ('1') only the Ethernet fields so we can use MM defaults there. -- Override ('1') only the Ethernet fields so we can use MM defaults there.
CONSTANT c_hdr_field_ovr_init : STD_LOGIC_VECTOR(c_apertif_udp_offload_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111101"&"0011"&"100"; CONSTANT c_hdr_field_ovr_init : STD_LOGIC_VECTOR(c_apertif_udp_offload_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111111"&"1111"&"100";
CONSTANT c_bf_out_compl_dat_w : NATURAL := 8; CONSTANT c_bf_out_compl_dat_w : NATURAL := 8;
CONSTANT c_data_w : NATURAL := 64; -- 4 BF units * 8b complex CONSTANT c_data_w : NATURAL := 64; -- 4 BF units * 8b complex
......
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
type = "String"; type = "String";
} }
} }
element reg_wdi.mem element rom_system_info.mem
{ {
datum _lockedAddress datum _lockedAddress
{ {
...@@ -101,89 +101,84 @@ ...@@ -101,89 +101,84 @@
} }
datum baseAddress datum baseAddress
{ {
value = "12288"; value = "4096";
type = "long"; type = "long";
} }
} }
element reg_diag_bg.mem element pio_pps.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "256"; value = "440";
type = "long"; type = "long";
} }
} }
element reg_tr_xaui.mem element pio_system_info.mem
{
datum _lockedAddress
{ {
value = "1";
type = "boolean";
}
datum baseAddress datum baseAddress
{ {
value = "32768"; value = "0";
type = "long"; type = "long";
} }
} }
element pio_pps.mem element reg_tr_10GbE.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "440"; value = "262144";
type = "long"; type = "long";
} }
} }
element reg_mdio_2.mem element ram_diag_bg.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "352"; value = "32768";
type = "long"; type = "long";
} }
} }
element pio_system_info.mem element reg_tr_xaui.mem
{
datum _lockedAddress
{ {
value = "1";
type = "boolean";
}
datum baseAddress datum baseAddress
{ {
value = "0"; value = "32768";
type = "long"; type = "long";
} }
} }
element reg_mdio_1.mem element reg_diag_bg.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "320"; value = "256";
type = "long"; type = "long";
} }
} }
element rom_system_info.mem element reg_dp_offload_tx_hdr_dat.mem
{
datum _lockedAddress
{ {
value = "1";
type = "boolean";
}
datum baseAddress datum baseAddress
{ {
value = "4096"; value = "512";
type = "long"; type = "long";
} }
} }
element ram_diag_bg.mem element reg_mdio_0.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "32768"; value = "288";
type = "long"; type = "long";
} }
} }
element reg_tr_10GbE.mem element reg_mdio_1.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "262144"; value = "320";
type = "long"; type = "long";
} }
} }
...@@ -195,11 +190,24 @@ ...@@ -195,11 +190,24 @@
type = "long"; type = "long";
} }
} }
element reg_mdio_0.mem element reg_mdio_2.mem
{ {
datum baseAddress datum baseAddress
{ {
value = "288"; value = "352";
type = "long";
}
}
element reg_wdi.mem
{
datum _lockedAddress
{
value = "1";
type = "boolean";
}
datum baseAddress
{
value = "12288";
type = "long"; type = "long";
} }
} }
...@@ -311,6 +319,14 @@ ...@@ -311,6 +319,14 @@
type = "int"; type = "int";
} }
} }
element reg_dp_offload_tx_hdr_dat
{
datum _sortIndex
{
value = "21";
type = "int";
}
}
element reg_mdio_0 element reg_mdio_0
{ {
datum _sortIndex datum _sortIndex
...@@ -388,32 +404,32 @@ ...@@ -388,32 +404,32 @@
type = "long"; type = "long";
} }
} }
element onchip_memory2_0.s1 element timer_0.s1
{
datum _lockedAddress
{ {
value = "1";
type = "boolean";
}
datum baseAddress datum baseAddress
{ {
value = "131072"; value = "192";
type = "long"; type = "long";
} }
} }
element timer_0.s1 element pio_debug_wave.s1
{ {
datum baseAddress datum baseAddress
{ {
value = "192"; value = "400";
type = "long"; type = "long";
} }
} }
element pio_debug_wave.s1 element onchip_memory2_0.s1
{ {
datum _lockedAddress
{
value = "1";
type = "boolean";
}
datum baseAddress datum baseAddress
{ {
value = "400"; value = "131072";
type = "long"; type = "long";
} }
} }
...@@ -445,10 +461,10 @@ ...@@ -445,10 +461,10 @@
<parameter name="globalResetBus" value="true" /> <parameter name="globalResetBus" value="true" />
<parameter name="hdlLanguage" value="VHDL" /> <parameter name="hdlLanguage" value="VHDL" />
<parameter name="maxAdditionalLatency" value="0" /> <parameter name="maxAdditionalLatency" value="0" />
<parameter name="projectName" value="" /> <parameter name="projectName">apertif_unb1_fn_bf_emu.qpf</parameter>
<parameter name="sopcBorderPoints" value="true" /> <parameter name="sopcBorderPoints" value="true" />
<parameter name="systemHash" value="-29495268338" /> <parameter name="systemHash" value="-32699227954" />
<parameter name="timeStamp" value="1467364000854" /> <parameter name="timeStamp" value="1477552867077" />
<parameter name="useTestBenchNamingPattern" value="false" /> <parameter name="useTestBenchNamingPattern" value="false" />
<module kind="clock_source" version="11.1" enabled="1" name="clk_0"> <module kind="clock_source" version="11.1" enabled="1" name="clk_0">
<parameter name="clockFrequency" value="25000000" /> <parameter name="clockFrequency" value="25000000" />
...@@ -549,7 +565,7 @@ ...@@ -549,7 +565,7 @@
<parameter name="dcache_numTCDM" value="_0" /> <parameter name="dcache_numTCDM" value="_0" />
<parameter name="dcache_lineSize" value="_32" /> <parameter name="dcache_lineSize" value="_32" />
<parameter name="dcache_bursts" value="false" /> <parameter name="dcache_bursts" value="false" />
<parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='avs_eth_0.mms_reg' start='0x80' end='0xC0' /><slave name='timer_0.s1' start='0xC0' end='0xE0' /><slave name='reg_unb_sens.mem' start='0xE0' end='0x100' /><slave name='reg_diag_bg.mem' start='0x100' end='0x120' /><slave name='reg_mdio_0.mem' start='0x120' end='0x140' /><slave name='reg_mdio_1.mem' start='0x140' end='0x160' /><slave name='reg_mdio_2.mem' start='0x160' end='0x180' /><slave name='altpll_0.pll_slave' start='0x180' end='0x190' /><slave name='pio_debug_wave.s1' start='0x190' end='0x1A0' /><slave name='pio_wdi.s1' start='0x1A0' end='0x1B0' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x1B0' end='0x1B8' /><slave name='pio_pps.mem' start='0x1B8' end='0x1C0' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='reg_tr_xaui.mem' start='0x8000' end='0x10000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /><slave name='reg_tr_10GbE.mem' start='0x40000' end='0x60000' /></address-map>]]></parameter> <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='avs_eth_0.mms_reg' start='0x80' end='0xC0' /><slave name='timer_0.s1' start='0xC0' end='0xE0' /><slave name='reg_unb_sens.mem' start='0xE0' end='0x100' /><slave name='reg_diag_bg.mem' start='0x100' end='0x120' /><slave name='reg_mdio_0.mem' start='0x120' end='0x140' /><slave name='reg_mdio_1.mem' start='0x140' end='0x160' /><slave name='reg_mdio_2.mem' start='0x160' end='0x180' /><slave name='altpll_0.pll_slave' start='0x180' end='0x190' /><slave name='pio_debug_wave.s1' start='0x190' end='0x1A0' /><slave name='pio_wdi.s1' start='0x1A0' end='0x1B0' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x1B0' end='0x1B8' /><slave name='pio_pps.mem' start='0x1B8' end='0x1C0' /><slave name='reg_dp_offload_tx_hdr_dat.mem' start='0x200' end='0x280' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='reg_tr_xaui.mem' start='0x8000' end='0x10000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /><slave name='reg_tr_10GbE.mem' start='0x40000' end='0x60000' /></address-map>]]></parameter>
<parameter name="dataAddrWidth" value="19" /> <parameter name="dataAddrWidth" value="19" />
<parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" /> <parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" />
<parameter name="cpuReset" value="false" /> <parameter name="cpuReset" value="false" />
...@@ -883,6 +899,15 @@ q]]></parameter> ...@@ -883,6 +899,15 @@ q]]></parameter>
<parameter name="g_dat_w" value="32" /> <parameter name="g_dat_w" value="32" />
<parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" /> <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
</module> </module>
<module
kind="avs_common_mm"
version="1.0"
enabled="1"
name="reg_dp_offload_tx_hdr_dat">
<parameter name="g_adr_w" value="5" />
<parameter name="g_dat_w" value="32" />
<parameter name="AUTO_SYSTEM_CLOCK_RATE" value="50000000" />
</module>
<connection <connection
kind="avalon" kind="avalon"
version="11.1" version="11.1"
...@@ -1164,4 +1189,17 @@ q]]></parameter> ...@@ -1164,4 +1189,17 @@ q]]></parameter>
<parameter name="arbitrationPriority" value="1" /> <parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x01b8" /> <parameter name="baseAddress" value="0x01b8" />
</connection> </connection>
<connection
kind="clock"
version="11.1"
start="altpll_0.c0"
end="reg_dp_offload_tx_hdr_dat.system" />
<connection
kind="avalon"
version="11.1"
start="cpu_0.data_master"
end="reg_dp_offload_tx_hdr_dat.mem">
<parameter name="arbitrationPriority" value="1" />
<parameter name="baseAddress" value="0x0200" />
</connection>
</system> </system>
###############################################################################
#
# Copyright (C) 2013
# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from eth import *
################################################################################
# Constants
###############################################################################
# Header lengths in bytes
IP_HEADER_LENGTH = 20
UDP_HEADER_LENGTH = 8
DP_HEADER_LENGTH = 14
# NOF_PAYLOAD_BYTES derived from nof signal paths and dp_offload_tx settings
NOF_BEAMLETS_PER_PACKET = 176
NOF_PAYLOAD_BYTES = NOF_BEAMLETS_PER_PACKET * 64 / c_byte_w # 1408B
###############################################################################
# The IP header field values. All fixed except ip_src_addr
# (and concequently the ip_header_checksum).
###############################################################################
ip_version = 4
ip_header_length = 5 # 5 32b words
ip_services = 0
ip_total_length = IP_HEADER_LENGTH+UDP_HEADER_LENGTH+DP_HEADER_LENGTH+NOF_PAYLOAD_BYTES
print ip_total_length
ip_identification = 0
ip_flags = 2
ip_fragment_offset = 0
ip_time_to_live = 127
ip_protocol = 17
ip_header_checksum = 0 # to be calculated
ip_src_addr = 0xc0a80009 # 192.168.0.9
ip_dst_addr = 0xc0a80001 # 192.168.0.1
###############################################################################
# Calculate and print the IP header checksum
###############################################################################
hdr_bits = CommonBits(ip_version ,4) & \
CommonBits(ip_header_length ,4) & \
CommonBits(ip_services ,8) & \
CommonBits(ip_total_length ,16) & \
CommonBits(ip_identification ,16) & \
CommonBits(ip_flags ,3) & \
CommonBits(ip_fragment_offset ,13) & \
CommonBits(ip_time_to_live ,8) & \
CommonBits(ip_protocol ,8) & \
CommonBits(ip_header_checksum ,16) & \
CommonBits(ip_src_addr ,32) & \
CommonBits(ip_dst_addr ,32)
hdr_bytes = CommonBytes(hdr_bits.data, 20)
print ip_hdr_checksum(hdr_bytes)
...@@ -204,6 +204,8 @@ ARCHITECTURE str OF apertif_unb1_fn_bf_emu IS ...@@ -204,6 +204,8 @@ ARCHITECTURE str OF apertif_unb1_fn_bf_emu IS
SIGNAL reg_tr_xaui_miso : t_mem_miso := c_mem_miso_rst; SIGNAL reg_tr_xaui_miso : t_mem_miso := c_mem_miso_rst;
SIGNAL reg_mdio_mosi_arr : t_mem_mosi_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); SIGNAL reg_mdio_mosi_arr : t_mem_mosi_arr(c_unb1_board_nof_mdio-1 DOWNTO 0);
SIGNAL reg_mdio_miso_arr : t_mem_miso_arr(c_unb1_board_nof_mdio-1 DOWNTO 0); SIGNAL reg_mdio_miso_arr : t_mem_miso_arr(c_unb1_board_nof_mdio-1 DOWNTO 0);
SIGNAL reg_dp_offload_tx_hdr_dat_mosi_arr : t_mem_mosi_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0);
SIGNAL reg_dp_offload_tx_hdr_dat_miso_arr : t_mem_miso_arr(c_nof_10GbE_offload_streams-1 DOWNTO 0);
BEGIN BEGIN
...@@ -270,8 +272,8 @@ BEGIN ...@@ -270,8 +272,8 @@ BEGIN
reg_dp_offload_tx_mosi => c_mem_mosi_rst, reg_dp_offload_tx_mosi => c_mem_mosi_rst,
reg_dp_offload_tx_miso => OPEN, reg_dp_offload_tx_miso => OPEN,
reg_dp_offload_tx_hdr_dat_mosi => c_mem_mosi_rst, reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi_arr(i),
reg_dp_offload_tx_hdr_dat_miso => OPEN reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso_arr(i)
); );
END GENERATE; END GENERATE;
...@@ -432,6 +434,9 @@ BEGIN ...@@ -432,6 +434,9 @@ BEGIN
reg_tr_xaui_mosi => reg_tr_xaui_mosi, reg_tr_xaui_mosi => reg_tr_xaui_mosi,
reg_tr_xaui_miso => reg_tr_xaui_miso, reg_tr_xaui_miso => reg_tr_xaui_miso,
reg_dp_offload_tx_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi_arr(0),
reg_dp_offload_tx_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso_arr(0),
-- eth1g -- eth1g
eth1g_tse_clk => eth1g_tse_clk, eth1g_tse_clk => eth1g_tse_clk,
eth1g_mm_rst => eth1g_mm_rst, eth1g_mm_rst => eth1g_mm_rst,
......
...@@ -96,6 +96,9 @@ ENTITY mmm_apertif_unb1_fn_bf_emu IS ...@@ -96,6 +96,9 @@ ENTITY mmm_apertif_unb1_fn_bf_emu IS
reg_tr_xaui_mosi : OUT t_mem_mosi; reg_tr_xaui_mosi : OUT t_mem_mosi;
reg_tr_xaui_miso : IN t_mem_miso := c_mem_miso_rst; reg_tr_xaui_miso : IN t_mem_miso := c_mem_miso_rst;
reg_dp_offload_tx_hdr_dat_mosi : OUT t_mem_mosi;
reg_dp_offload_tx_hdr_dat_miso : IN t_mem_miso := c_mem_miso_rst;
-- eth1g -- eth1g
eth1g_tse_clk : OUT STD_LOGIC; eth1g_tse_clk : OUT STD_LOGIC;
eth1g_mm_rst : OUT STD_LOGIC; eth1g_mm_rst : OUT STD_LOGIC;
...@@ -124,6 +127,7 @@ ARCHITECTURE str OF mmm_apertif_unb1_fn_bf_emu IS ...@@ -124,6 +127,7 @@ ARCHITECTURE str OF mmm_apertif_unb1_fn_bf_emu IS
CONSTANT c_xaui_mosi_addr_w : NATURAL := ceil_log2(3*(2**9)); --2^9 = range of 512 addresses CONSTANT c_xaui_mosi_addr_w : NATURAL := ceil_log2(3*(2**9)); --2^9 = range of 512 addresses
CONSTANT c_max_nof_xaui_inst : NATURAL := 4; CONSTANT c_max_nof_xaui_inst : NATURAL := 4;
CONSTANT c_reg_tr_xaui_addr_w : NATURAL := ceil_log2(c_max_nof_xaui_inst* pow2(c_xaui_mosi_addr_w)); -- 4* 512 = 2048 addresses -> 11 address bits. CONSTANT c_reg_tr_xaui_addr_w : NATURAL := ceil_log2(c_max_nof_xaui_inst* pow2(c_xaui_mosi_addr_w)); -- 4* 512 = 2048 addresses -> 11 address bits.
CONSTANT c_reg_dp_offload_tx_hdr_dat_addr_w : NATURAL := 5;
-- Simulation -- Simulation
CONSTANT c_mm_clk_period : TIME := 800 ns; CONSTANT c_mm_clk_period : TIME := 800 ns;
...@@ -403,7 +407,17 @@ BEGIN ...@@ -403,7 +407,17 @@ BEGIN
coe_readdata_export_to_the_reg_tr_xaui => reg_tr_xaui_miso.rddata(c_word_w-1 DOWNTO 0), coe_readdata_export_to_the_reg_tr_xaui => reg_tr_xaui_miso.rddata(c_word_w-1 DOWNTO 0),
coe_waitrequest_export_to_the_reg_tr_xaui => reg_tr_xaui_miso.waitrequest, coe_waitrequest_export_to_the_reg_tr_xaui => reg_tr_xaui_miso.waitrequest,
coe_write_export_from_the_reg_tr_xaui => reg_tr_xaui_mosi.wr, coe_write_export_from_the_reg_tr_xaui => reg_tr_xaui_mosi.wr,
coe_writedata_export_from_the_reg_tr_xaui => reg_tr_xaui_mosi.wrdata(c_word_w-1 DOWNTO 0) coe_writedata_export_from_the_reg_tr_xaui => reg_tr_xaui_mosi.wrdata(c_word_w-1 DOWNTO 0),
-- the_reg_dp_offload_tx_hdr_dat
coe_clk_export_from_the_reg_dp_offload_tx_hdr_dat => OPEN,
coe_reset_export_from_the_reg_dp_offload_tx_hdr_dat => OPEN,
coe_address_export_from_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_mosi.address(c_reg_dp_offload_tx_hdr_dat_addr_w-1 DOWNTO 0),
coe_read_export_from_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_mosi.rd,
coe_readdata_export_to_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_miso.rddata(c_word_w-1 DOWNTO 0),
-- coe_waitrequest_export_to_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_miso.waitrequest,
coe_write_export_from_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_mosi.wr,
coe_writedata_export_from_the_reg_dp_offload_tx_hdr_dat => reg_dp_offload_tx_hdr_dat_mosi.wrdata(c_word_w-1 DOWNTO 0)
); );
END GENERATE; END GENERATE;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment