From 40f5c43034ecba0b9c0e31d961524497156e8f4b Mon Sep 17 00:00:00 2001 From: Erik Kooistra <kooistra@astron.nl> Date: Mon, 21 Jul 2014 09:56:08 +0000 Subject: [PATCH] Use 'tech_tse' instead of only 'tse' in item names from tech_tse_pkg.vhd and tb_tech_tse_pkg.vhd. --- libraries/io/eth/src/vhdl/avs_eth.vhd | 4 +- libraries/io/eth/src/vhdl/avs_eth_coe.vhd | 4 +- libraries/io/eth/src/vhdl/eth.vhd | 10 +- libraries/io/eth/src/vhdl/eth_pkg.vhd | 10 +- libraries/io/eth/tb/vhdl/tb_eth.vhd | 74 +++--- .../io/eth/tb/vhdl/tb_eth_udp_offload.vhd | 10 +- libraries/io/eth/tb/vhdl/tb_tb_eth.vhd | 10 +- libraries/technology/tse/tb_tech_tse.vhd | 66 +++--- libraries/technology/tse/tb_tech_tse_pkg.vhd | 221 +++++++++--------- libraries/technology/tse/tech_tse.vhd | 8 +- libraries/technology/tse/tech_tse_pkg.vhd | 52 ++--- .../technology/tse/tech_tse_stratixiv.vhd | 60 ++--- 12 files changed, 263 insertions(+), 266 deletions(-) diff --git a/libraries/io/eth/src/vhdl/avs_eth.vhd b/libraries/io/eth/src/vhdl/avs_eth.vhd index 98c8d722e0..06e2ef3ca3 100644 --- a/libraries/io/eth/src/vhdl/avs_eth.vhd +++ b/libraries/io/eth/src/vhdl/avs_eth.vhd @@ -42,7 +42,7 @@ ENTITY avs_eth IS --------------------------------------------------------------------------- -- TSE MAC -- . MOSI - mms_tse_address : IN STD_LOGIC_VECTOR(c_tse_byte_addr_w-1 DOWNTO 0); + mms_tse_address : IN STD_LOGIC_VECTOR(c_tech_tse_byte_addr_w-1 DOWNTO 0); mms_tse_write : IN STD_LOGIC; mms_tse_read : IN STD_LOGIC; mms_tse_writedata : IN STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); @@ -109,7 +109,7 @@ ARCHITECTURE wrap OF avs_eth IS SIGNAL ram_sla_out : t_mem_miso; -- LED interface - SIGNAL tse_led : t_tse_led; + SIGNAL tse_led : t_tech_tse_led; BEGIN diff --git a/libraries/io/eth/src/vhdl/avs_eth_coe.vhd b/libraries/io/eth/src/vhdl/avs_eth_coe.vhd index 6a52b0d78c..d7d8807f00 100644 --- a/libraries/io/eth/src/vhdl/avs_eth_coe.vhd +++ b/libraries/io/eth/src/vhdl/avs_eth_coe.vhd @@ -42,7 +42,7 @@ ENTITY avs_eth_coe IS csi_mm_clk : IN STD_LOGIC; -- TSE MAC - mms_tse_address : IN STD_LOGIC_VECTOR(c_tse_byte_addr_w-1 DOWNTO 0); + mms_tse_address : IN STD_LOGIC_VECTOR(c_tech_tse_byte_addr_w-1 DOWNTO 0); mms_tse_write : IN STD_LOGIC; mms_tse_read : IN STD_LOGIC; mms_tse_writedata : IN STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); @@ -74,7 +74,7 @@ ENTITY avs_eth_coe IS coe_clk_export : OUT STD_LOGIC; -- TSE MAC - coe_tse_address_export : OUT STD_LOGIC_VECTOR(c_tse_byte_addr_w-1 DOWNTO 0); + coe_tse_address_export : OUT STD_LOGIC_VECTOR(c_tech_tse_byte_addr_w-1 DOWNTO 0); coe_tse_write_export : OUT STD_LOGIC; coe_tse_read_export : OUT STD_LOGIC; coe_tse_writedata_export : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); diff --git a/libraries/io/eth/src/vhdl/eth.vhd b/libraries/io/eth/src/vhdl/eth.vhd index c1f1c6f62b..077f4314e4 100644 --- a/libraries/io/eth/src/vhdl/eth.vhd +++ b/libraries/io/eth/src/vhdl/eth.vhd @@ -76,7 +76,7 @@ ENTITY eth IS eth_rxp : IN STD_LOGIC; -- LED interface - tse_led : OUT t_tse_led + tse_led : OUT t_tech_tse_led ); END eth; @@ -178,13 +178,13 @@ ARCHITECTURE str OF eth IS SIGNAL tse_tx_siso : t_dp_siso; SIGNAL tse_tx_sosi : t_dp_sosi; -- . MAC specific - SIGNAL tse_tx_mac_in : t_tse_tx_mac; - SIGNAL tse_tx_mac_out : t_tse_tx_mac; + SIGNAL tse_tx_mac_in : t_tech_tse_tx_mac; + SIGNAL tse_tx_mac_out : t_tech_tse_tx_mac; -- . MAC Receive Stream SIGNAL tse_rx_sosi : t_dp_sosi; SIGNAL tse_rx_siso : t_dp_siso; -- . MAC specific - SIGNAL tse_rx_mac_out : t_tse_rx_mac; + SIGNAL tse_rx_mac_out : t_tech_tse_rx_mac; BEGIN @@ -277,7 +277,7 @@ BEGIN clk => st_clk, -- Streaming Sink - snk_in_err => rx_adapt_sosi.err(c_tse_error_w-1 DOWNTO 0), -- preserve error field from TSE MAC stream + snk_in_err => rx_adapt_sosi.err(c_tech_tse_error_w-1 DOWNTO 0), -- preserve error field from TSE MAC stream snk_in => rx_adapt_sosi, snk_out => rx_adapt_siso, diff --git a/libraries/io/eth/src/vhdl/eth_pkg.vhd b/libraries/io/eth/src/vhdl/eth_pkg.vhd index de2a60c071..f8df9fb044 100644 --- a/libraries/io/eth/src/vhdl/eth_pkg.vhd +++ b/libraries/io/eth/src/vhdl/eth_pkg.vhd @@ -31,12 +31,12 @@ USE tech_tse_lib.tech_tse_pkg.ALL; PACKAGE eth_pkg IS - CONSTANT c_eth_data_w : NATURAL := c_tse_data_w; -- = c_word_w - CONSTANT c_eth_empty_w : NATURAL := c_tse_empty_w; -- = ceil_log2(c_word_sz) = 2; - CONSTANT c_eth_error_w : NATURAL := c_tse_error_w; -- = 6, but no error field, pass error info on via checksum or CRC /= 0 in packet word + CONSTANT c_eth_data_w : NATURAL := c_tech_tse_data_w; -- = c_word_w + CONSTANT c_eth_empty_w : NATURAL := c_tech_tse_empty_w; -- = ceil_log2(c_word_sz) = 2; + CONSTANT c_eth_error_w : NATURAL := c_tech_tse_error_w; -- = 6, but no error field, pass error info on via checksum or CRC /= 0 in packet word - CONSTANT c_eth_rx_ready_latency : NATURAL := c_tse_rx_ready_latency; -- = 2 = default when FIFO is used - CONSTANT c_eth_tx_ready_latency : NATURAL := c_tse_tx_ready_latency; -- = 0, c_tse_tx_ready_latency + 3 = TX_ALMOST_FULL + CONSTANT c_eth_rx_ready_latency : NATURAL := c_tech_tse_rx_ready_latency; -- = 2 = default when FIFO is used + CONSTANT c_eth_tx_ready_latency : NATURAL := c_tech_tse_tx_ready_latency; -- = 0, c_tech_tse_tx_ready_latency + 3 = TX_ALMOST_FULL CONSTANT c_eth_ready_latency : NATURAL := 1; -- = 1, fixed ETH module internal RL -- Maximum feasible frame size diff --git a/libraries/io/eth/tb/vhdl/tb_eth.vhd b/libraries/io/eth/tb/vhdl/tb_eth.vhd index ff9df48eb9..5454df686e 100644 --- a/libraries/io/eth/tb/vhdl/tb_eth.vhd +++ b/libraries/io/eth/tb/vhdl/tb_eth.vhd @@ -33,7 +33,7 @@ -- ------- ------- -- -- The tb is self checking based on: --- . proc_tse_rx_packet() for expected header and data type +-- . proc_tech_tse_rx_packet() for expected header and data type -- . tx_pkt_cnt=rx_pkt_cnt > 0 must be true at the tb_end. -- Usage: -- > as 10 @@ -57,12 +57,12 @@ USE tech_tse_lib.tb_tech_tse_pkg.ALL; ENTITY tb_eth IS -- Test bench control parameters GENERIC ( - -- g_data_type = c_tb_tse_data_type_symbols = 0 - -- g_data_type = c_tb_tse_data_type_counter = 1 - -- g_data_type = c_tb_tse_data_type_arp = 2 - -- g_data_type = c_tb_tse_data_type_ping = 3 - -- g_data_type = c_tb_tse_data_type_udp = 4 - g_data_type : NATURAL := c_tb_tse_data_type_udp + -- g_data_type = c_tb_tech_tse_data_type_symbols = 0 + -- g_data_type = c_tb_tech_tse_data_type_counter = 1 + -- g_data_type = c_tb_tech_tse_data_type_arp = 2 + -- g_data_type = c_tb_tech_tse_data_type_ping = 3 + -- g_data_type = c_tb_tech_tse_data_type_udp = 4 + g_data_type : NATURAL := c_tb_tech_tse_data_type_udp ); END tb_eth; @@ -78,7 +78,7 @@ ARCHITECTURE tb OF tb_eth IS -- TSE constants CONSTANT c_promis_en : BOOLEAN := FALSE; - CONSTANT c_tx_ready_latency : NATURAL := c_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tse_tx_ready_latency + CONSTANT c_tx_ready_latency : NATURAL := c_tech_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tech_tse_tx_ready_latency CONSTANT c_nof_tx_not_valid : NATURAL := 0; -- when > 0 then pull tx valid low for c_nof_tx_not_valid beats during tx -- Payload user data @@ -94,7 +94,7 @@ ARCHITECTURE tb OF tb_eth IS CONSTANT c_dut_src_mac_hi : NATURAL := TO_UINT(c_dut_src_mac(c_network_eth_mac_addr_w-1 DOWNTO c_word_w)); CONSTANT c_dut_src_mac_lo : NATURAL := TO_UINT(c_dut_src_mac( c_word_w-1 DOWNTO 0)); -- support only ARP and IPv4 over ETH - CONSTANT c_dut_ethertype : NATURAL := sel_a_b(g_data_type-c_tb_tse_data_type_arp, c_network_eth_type_ip, c_network_eth_type_arp); + CONSTANT c_dut_ethertype : NATURAL := sel_a_b(g_data_type-c_tb_tech_tse_data_type_arp, c_network_eth_type_ip, c_network_eth_type_arp); CONSTANT c_tx_eth_header : t_network_eth_header := (dst_mac => c_dut_src_mac, src_mac => c_lcu_src_mac, eth_type => TO_UVEC(c_dut_ethertype, c_network_eth_type_w)); @@ -106,7 +106,7 @@ ARCHITECTURE tb OF tb_eth IS CONSTANT c_lcu_ip_addr : NATURAL := 16#05060708#; -- = 05:06:07:08 CONSTANT c_dut_ip_addr : NATURAL := 16#01020304#; CONSTANT c_tb_ip_total_length : NATURAL := c_network_ip_total_length + c_tb_ip_nof_data; - CONSTANT c_tb_ip_protocol : NATURAL := sel_a_b(g_data_type-c_tb_tse_data_type_ping, c_network_ip_protocol_udp, c_network_ip_protocol_icmp); -- support only ping protocol or UDP protocol over IP + CONSTANT c_tb_ip_protocol : NATURAL := sel_a_b(g_data_type-c_tb_tech_tse_data_type_ping, c_network_ip_protocol_udp, c_network_ip_protocol_icmp); -- support only ping protocol or UDP protocol over IP CONSTANT c_tx_ip_header : t_network_ip_header := (version => TO_UVEC(c_network_ip_version, c_network_ip_version_w), header_length => TO_UVEC(c_network_ip_header_length, c_network_ip_header_length_w), @@ -210,7 +210,7 @@ ARCHITECTURE tb OF tb_eth IS SIGNAL eth_psc_access : STD_LOGIC; SIGNAL eth_txp : STD_LOGIC; SIGNAL eth_rxp : STD_LOGIC; - SIGNAL eth_led : t_tse_led; + SIGNAL eth_led : t_tech_tse_led; -- ETH MM registers interface SIGNAL eth_reg_miso : t_mem_miso; @@ -238,14 +238,14 @@ ARCHITECTURE tb OF tb_eth IS SIGNAL lcu_tx_en : STD_LOGIC := '1'; SIGNAL lcu_tx_siso : t_dp_siso; SIGNAL lcu_tx_sosi : t_dp_sosi; - SIGNAL lcu_tx_mac_in : t_tse_tx_mac; - SIGNAL lcu_tx_mac_out : t_tse_tx_mac; + SIGNAL lcu_tx_mac_in : t_tech_tse_tx_mac; + SIGNAL lcu_tx_mac_out : t_tech_tse_tx_mac; SIGNAL lcu_rx_sosi : t_dp_sosi; SIGNAL lcu_rx_siso : t_dp_siso; - SIGNAL lcu_rx_mac_out : t_tse_rx_mac; + SIGNAL lcu_rx_mac_out : t_tech_tse_rx_mac; SIGNAL lcu_txp : STD_LOGIC; SIGNAL lcu_rxp : STD_LOGIC; - SIGNAL lcu_led : t_tse_led; + SIGNAL lcu_led : t_tech_tse_led; -- Verification SIGNAL tx_pkt_cnt : NATURAL := 0; @@ -298,9 +298,9 @@ BEGIN -- Wait for ETH init WHILE dut_eth_init='1' LOOP WAIT UNTIL rising_edge(mm_clk); END LOOP; -- Setup the TSE MAC - proc_tse_setup(c_promis_en, c_tse_tx_fifo_depth, c_tse_rx_fifo_depth, c_tx_ready_latency, - c_dut_src_mac, eth_psc_access, - mm_clk, eth_tse_miso, eth_tse_mosi); + proc_tech_tse_setup(c_promis_en, c_tech_tse_tx_fifo_depth, c_tech_tse_rx_fifo_depth, c_tx_ready_latency, + c_dut_src_mac, eth_psc_access, + mm_clk, eth_tse_miso, eth_tse_mosi); dut_tse_init <= '0'; WAIT; END PROCESS; @@ -369,7 +369,7 @@ BEGIN -- write control register to enable tx IF c_tb_reply_payload=TRUE THEN -- . copy the received payload to the response payload (overwrite part of the default response header in case of raw ETH) - FOR I IN func_tb_tse_header_size(g_data_type) TO TO_UINT(eth_mm_reg_control.tx_nof_words)-1 LOOP + FOR I IN func_tech_tse_header_size(g_data_type) TO TO_UINT(eth_mm_reg_control.tx_nof_words)-1 LOOP proc_mem_mm_bus_rd(c_eth_ram_rx_offset+I, mm_clk, eth_ram_miso, eth_ram_mosi); proc_mem_mm_bus_rd_latency(c_mem_ram_rd_latency, mm_clk); proc_mem_mm_bus_wr(c_eth_ram_tx_offset+I, TO_SINT(eth_ram_miso.rddata(c_word_w-1 DOWNTO 0)), mm_clk, eth_ram_miso, eth_ram_mosi); @@ -399,9 +399,9 @@ BEGIN -- Wait for reset release WHILE mm_rst='1' LOOP WAIT UNTIL rising_edge(mm_clk); END LOOP; -- Setup the LCU TSE MAC - proc_tse_setup(c_promis_en, c_tse_tx_fifo_depth, c_tse_rx_fifo_depth, c_tx_ready_latency, - c_lcu_src_mac, lcu_psc_access, - mm_clk, lcu_tse_miso, lcu_tse_mosi); + proc_tech_tse_setup(c_promis_en, c_tech_tse_tx_fifo_depth, c_tech_tse_rx_fifo_depth, c_tx_ready_latency, + c_lcu_src_mac, lcu_psc_access, + mm_clk, lcu_tse_miso, lcu_tse_mosi); -- Wait for DUT init done WHILE dut_tse_init/='0' LOOP WAIT UNTIL rising_edge(mm_clk); END LOOP; lcu_init <= '0'; @@ -423,22 +423,22 @@ BEGIN WHILE lcu_init/='0' LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; FOR I IN 0 TO 9 LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; --- proc_tse_tx_packet(tx_total_header, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); FOR I IN 0 TO 40 LOOP - proc_tse_tx_packet(tx_total_header, I, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); + proc_tech_tse_tx_packet(tx_total_header, I, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --FOR J IN 0 TO 9 LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; END LOOP; --- proc_tse_tx_packet(tx_total_header, 104, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 105, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 1472, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 101, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 1000, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 102, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 1000, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 103, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 104, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); --- proc_tse_tx_packet(tx_total_header, 105, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 104, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 105, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 1472, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 101, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 1000, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 102, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 1000, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 103, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 104, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); +-- proc_tech_tse_tx_packet(tx_total_header, 105, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); FOR I IN 0 TO 1500 * 5 LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; tb_end <= '1'; @@ -455,12 +455,12 @@ BEGIN -- Verification of multiple rx packets is only supported when all packets -- are of the same g_data_type, because the rx process can only support - -- one expected result. The proc_tse_rx_packet does not (yet) interpret the + -- one expected result. The proc_tech_tse_rx_packet does not (yet) interpret the -- actually received packet, it relies on the preset expected total_header. -- Receive forever WHILE TRUE LOOP - proc_tse_rx_packet(exp_total_header, g_data_type, st_clk, lcu_rx_sosi, lcu_rx_siso); + proc_tech_tse_rx_packet(exp_total_header, g_data_type, st_clk, lcu_rx_sosi, lcu_rx_siso); END LOOP; WAIT; diff --git a/libraries/io/eth/tb/vhdl/tb_eth_udp_offload.vhd b/libraries/io/eth/tb/vhdl/tb_eth_udp_offload.vhd index c2063d4e3c..c847ea48c8 100644 --- a/libraries/io/eth/tb/vhdl/tb_eth_udp_offload.vhd +++ b/libraries/io/eth/tb/vhdl/tb_eth_udp_offload.vhd @@ -88,7 +88,7 @@ ARCHITECTURE tb OF tb_eth_udp_offload IS CONSTANT c_lcu_ip_addr : NATURAL := 16#05060708#; -- = 05:06:07:08 CONSTANT c_dut_ip_addr : NATURAL := 16#01020304#; CONSTANT c_tb_ip_total_length : NATURAL := c_network_ip_total_length + c_tb_ip_nof_data; - CONSTANT c_tb_ip_protocol : NATURAL := c_network_ip_protocol_udp; --sel_a_b(g_data_type-c_tb_tse_data_type_ping, c_network_ip_protocol_udp, c_network_ip_protocol_icmp); -- support only ping protocol or UDP protocol over IP + CONSTANT c_tb_ip_protocol : NATURAL := c_network_ip_protocol_udp; --sel_a_b(g_data_type-c_tb_tech_tse_data_type_ping, c_network_ip_protocol_udp, c_network_ip_protocol_icmp); -- support only ping protocol or UDP protocol over IP CONSTANT c_tx_ip_header : t_network_ip_header := (version => TO_UVEC(c_network_ip_version, c_network_ip_version_w), header_length => TO_UVEC(c_network_ip_header_length, c_network_ip_header_length_w), @@ -143,7 +143,7 @@ ARCHITECTURE tb OF tb_eth_udp_offload IS -- TSE constants CONSTANT c_promis_en : BOOLEAN := FALSE; - CONSTANT c_tx_ready_latency : NATURAL := c_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tse_tx_ready_latency + CONSTANT c_tx_ready_latency : NATURAL := c_tech_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tech_tse_tx_ready_latency -- ETH control CONSTANT c_dut_control_rx_en : NATURAL := 2**c_eth_mm_reg_control_bi.rx_en; @@ -258,9 +258,9 @@ BEGIN -- Wait for ETH init WHILE dut_eth_init='1' LOOP WAIT UNTIL rising_edge(mm_clk); END LOOP; -- Setup the TSE MAC - proc_tse_setup(c_promis_en, c_tse_tx_fifo_depth, c_tse_rx_fifo_depth, c_tx_ready_latency, - c_dut_src_mac, eth_psc_access, - mm_clk, eth_tse_miso, eth_tse_mosi); + proc_tech_tse_setup(c_promis_en, c_tech_tse_tx_fifo_depth, c_tech_tse_rx_fifo_depth, c_tx_ready_latency, + c_dut_src_mac, eth_psc_access, + mm_clk, eth_tse_miso, eth_tse_mosi); dut_tse_init <= '0'; WAIT; END PROCESS; diff --git a/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd b/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd index dfbcc715f9..3feea3077e 100644 --- a/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd +++ b/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd @@ -42,10 +42,10 @@ BEGIN -- Try ETH settings : GENERIC MAP (g_data_type => ) - u_use_symbols : ENTITY work.tb_eth GENERIC MAP (c_tb_tse_data_type_symbols); - u_use_counter : ENTITY work.tb_eth GENERIC MAP (c_tb_tse_data_type_counter); - u_use_arp : ENTITY work.tb_eth GENERIC MAP (c_tb_tse_data_type_arp ); - u_use_ping : ENTITY work.tb_eth GENERIC MAP (c_tb_tse_data_type_ping ); - u_use_udp : ENTITY work.tb_eth GENERIC MAP (c_tb_tse_data_type_udp ); + u_use_symbols : ENTITY work.tb_eth GENERIC MAP (c_tb_tech_tse_data_type_symbols); + u_use_counter : ENTITY work.tb_eth GENERIC MAP (c_tb_tech_tse_data_type_counter); + u_use_arp : ENTITY work.tb_eth GENERIC MAP (c_tb_tech_tse_data_type_arp ); + u_use_ping : ENTITY work.tb_eth GENERIC MAP (c_tb_tech_tse_data_type_ping ); + u_use_udp : ENTITY work.tb_eth GENERIC MAP (c_tb_tech_tse_data_type_udp ); END tb; diff --git a/libraries/technology/tse/tb_tech_tse.vhd b/libraries/technology/tse/tb_tech_tse.vhd index e000c9d7de..ac7f0d042f 100644 --- a/libraries/technology/tse/tb_tech_tse.vhd +++ b/libraries/technology/tse/tb_tech_tse.vhd @@ -22,7 +22,7 @@ -- Purpose: Testbench for tech_tse the Tripple Speed Ethernet IP technology wrapper. -- Description: -- The tb is self checking based on: --- . proc_tse_rx_packet() for expected header and data type +-- . proc_tech_tse_rx_packet() for expected header and data type -- . tx_pkt_cnt=rx_pkt_cnt > 0 must be true at the tb_end. -- Usage: -- > as 10 @@ -44,9 +44,9 @@ USE WORK.tb_tech_tse_pkg.ALL; ENTITY tb_tech_tse IS -- Test bench control parameters GENERIC ( - -- g_data_type = c_tb_tse_data_type_symbols = 0 - -- g_data_type = c_tb_tse_data_type_counter = 1 - g_data_type : NATURAL := c_tb_tse_data_type_symbols + -- g_data_type = c_tb_tech_tse_data_type_symbols = 0 + -- g_data_type = c_tb_tech_tse_data_type_counter = 1 + g_data_type : NATURAL := c_tb_tech_tse_data_type_symbols ); END tb_tech_tse; @@ -61,7 +61,7 @@ ARCHITECTURE tb OF tb_tech_tse IS CONSTANT cable_delay : TIME := 12 ns; CONSTANT c_promis_en : BOOLEAN := FALSE; - CONSTANT c_tx_ready_latency : NATURAL := c_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tse_tx_ready_latency + CONSTANT c_tx_ready_latency : NATURAL := c_tech_tse_tx_ready_latency; -- 0, 1 are supported, must match TSE MAC c_tech_tse_tx_ready_latency CONSTANT c_nof_tx_not_valid : NATURAL := 0; -- when > 0 then pull tx valid low for c_nof_tx_not_valid beats during tx CONSTANT c_dst_mac : STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE) := X"10FA01020300"; @@ -97,21 +97,21 @@ ARCHITECTURE tb OF tb_tech_tse IS SIGNAL tx_siso : t_dp_siso; SIGNAL tx_sosi : t_dp_sosi; -- . MAC specific - SIGNAL tx_mac_in : t_tse_tx_mac; - SIGNAL tx_mac_out : t_tse_tx_mac; + SIGNAL tx_mac_in : t_tech_tse_tx_mac; + SIGNAL tx_mac_out : t_tech_tse_tx_mac; -- TSE MAC receive interface -- . The tb is the ST sink SIGNAL rx_sosi : t_dp_sosi; SIGNAL rx_siso : t_dp_siso; -- . MAC specific - SIGNAL rx_mac_out : t_tse_rx_mac; + SIGNAL rx_mac_out : t_tech_tse_rx_mac; -- TSE PHY interface SIGNAL eth_txp : STD_LOGIC; SIGNAL eth_rxp : STD_LOGIC; - SIGNAL tse_led : t_tse_led; + SIGNAL tse_led : t_tech_tse_led; -- Verification SIGNAL tx_pkt_cnt : NATURAL := 0; @@ -143,9 +143,9 @@ BEGIN mm_rst <= '0'; FOR I IN 0 TO 9 LOOP WAIT UNTIL rising_edge(mm_clk); END LOOP; - proc_tse_setup(c_promis_en, c_tse_tx_fifo_depth, c_tse_rx_fifo_depth, c_tx_ready_latency, - c_src_mac, mm_psc_access, - mm_clk, mm_miso, mm_mosi); + proc_tech_tse_setup(c_promis_en, c_tech_tse_tx_fifo_depth, c_tech_tse_rx_fifo_depth, c_tx_ready_latency, + c_src_mac, mm_psc_access, + mm_clk, mm_miso, mm_mosi); mm_init <= '0'; WAIT; END PROCESS; @@ -175,28 +175,28 @@ BEGIN -- . For I=1 to 46 the payload length remains 46 with padding zeros, so empty = 2 -- . For I>46 the payload length is I and empty = 4 - (I mod 4) --- proc_tse_tx_packet(total_header_etherlen, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_etherlen, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 16, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); FOR I IN 0 TO 59 LOOP - proc_tse_tx_packet(total_header_loopback, I, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); + proc_tech_tse_tx_packet(total_header_loopback, I, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); END LOOP; --- proc_tse_tx_packet(total_header_loopback, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 101, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 102, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 103, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1499, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); -- verify st empty --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); --- proc_tse_tx_packet(total_header_loopback, 1501, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); -- verify c_eth_payload_max --- proc_tse_tx_packet(total_header_loopback, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 101, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 102, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 103, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1499, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); -- verify st empty +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1500, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); +-- proc_tech_tse_tx_packet(total_header_loopback, 1501, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); -- verify c_eth_payload_max +-- proc_tech_tse_tx_packet(total_header_loopback, 100, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, tx_en, tx_siso, tx_sosi); FOR I IN 0 TO 1500 * 2 LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; tb_end <= '1'; @@ -215,7 +215,7 @@ BEGIN -- Receive forever WHILE TRUE LOOP - proc_tse_rx_packet(total_header_loopback, g_data_type, st_clk, rx_sosi, rx_siso); + proc_tech_tse_rx_packet(total_header_loopback, g_data_type, st_clk, rx_sosi, rx_siso); END LOOP; WAIT; diff --git a/libraries/technology/tse/tb_tech_tse_pkg.vhd b/libraries/technology/tse/tb_tech_tse_pkg.vhd index 26a153f9cf..151e1826d3 100644 --- a/libraries/technology/tse/tb_tech_tse_pkg.vhd +++ b/libraries/technology/tse/tb_tech_tse_pkg.vhd @@ -36,91 +36,88 @@ USE WORK.tech_tse_pkg.ALL; PACKAGE tb_tech_tse_pkg IS -- Test bench supported packet data types - CONSTANT c_tb_tse_data_type_symbols : NATURAL := 0; - CONSTANT c_tb_tse_data_type_counter : NATURAL := 1; - CONSTANT c_tb_tse_data_type_arp : NATURAL := 2; - CONSTANT c_tb_tse_data_type_ping : NATURAL := 3; -- over IP/ICMP - CONSTANT c_tb_tse_data_type_udp : NATURAL := 4; -- over IP + CONSTANT c_tb_tech_tse_data_type_symbols : NATURAL := 0; + CONSTANT c_tb_tech_tse_data_type_counter : NATURAL := 1; + CONSTANT c_tb_tech_tse_data_type_arp : NATURAL := 2; + CONSTANT c_tb_tech_tse_data_type_ping : NATURAL := 3; -- over IP/ICMP + CONSTANT c_tb_tech_tse_data_type_udp : NATURAL := 4; -- over IP - FUNCTION func_tb_tse_header_size(data_type : NATURAL) RETURN NATURAL; -- raw ethernet: 4 header words, protocol ethernet: 11 header words + FUNCTION func_tech_tse_header_size(data_type : NATURAL) RETURN NATURAL; -- raw ethernet: 4 header words, protocol ethernet: 11 header words -- Configure the TSE MAC - PROCEDURE proc_tse_setup(CONSTANT c_promis_en : IN BOOLEAN; - CONSTANT c_tse_tx_fifo_depth : IN NATURAL; - CONSTANT c_tse_rx_fifo_depth : IN NATURAL; - CONSTANT c_tx_ready_latency : IN NATURAL; - CONSTANT src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE); - SIGNAL psc_access : OUT STD_LOGIC; - SIGNAL mm_clk : IN STD_LOGIC; - SIGNAL mm_miso : IN t_mem_miso; - SIGNAL mm_mosi : OUT t_mem_mosi); + PROCEDURE proc_tech_tse_setup(CONSTANT c_promis_en : IN BOOLEAN; + CONSTANT c_tse_tx_fifo_depth : IN NATURAL; + CONSTANT c_tse_rx_fifo_depth : IN NATURAL; + CONSTANT c_tx_ready_latency : IN NATURAL; + CONSTANT src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE); + SIGNAL psc_access : OUT STD_LOGIC; + SIGNAL mm_clk : IN STD_LOGIC; + SIGNAL mm_miso : IN t_mem_miso; + SIGNAL mm_mosi : OUT t_mem_mosi); - PROCEDURE proc_tse_tx_packet(CONSTANT total_header : IN t_network_total_header; - CONSTANT data_len : IN NATURAL; -- in symbols = octets = bytes - CONSTANT c_data_type : IN NATURAL; -- c_tb_tse_data_type_* - CONSTANT c_ready_latency : IN NATURAL; -- 0, 1 are supported by proc_dp_stream_ready_latency() - CONSTANT c_nof_not_valid : IN NATURAL; -- when > 0 then pull tx valid low for c_nof_not_valid beats during tx - SIGNAL ff_clk : IN STD_LOGIC; - SIGNAL ff_en : IN STD_LOGIC; -- similar purpose as c_nof_not_valid, but not used so pass on signal '1' - SIGNAL ff_src_in : IN t_dp_siso; - SIGNAL ff_src_out : OUT t_dp_sosi); + PROCEDURE proc_tech_tse_tx_packet(CONSTANT total_header : IN t_network_total_header; + CONSTANT data_len : IN NATURAL; -- in symbols = octets = bytes + CONSTANT c_data_type : IN NATURAL; -- c_tb_tech_tse_data_type_* + CONSTANT c_ready_latency : IN NATURAL; -- 0, 1 are supported by proc_dp_stream_ready_latency() + CONSTANT c_nof_not_valid : IN NATURAL; -- when > 0 then pull tx valid low for c_nof_not_valid beats during tx + SIGNAL ff_clk : IN STD_LOGIC; + SIGNAL ff_en : IN STD_LOGIC; -- similar purpose as c_nof_not_valid, but not used so pass on signal '1' + SIGNAL ff_src_in : IN t_dp_siso; + SIGNAL ff_src_out : OUT t_dp_sosi); -- Receive and verify packet from the TSE MAC - PROCEDURE proc_tse_rx_packet(CONSTANT total_header : IN t_network_total_header; - CONSTANT c_data_type : IN NATURAL; -- c_tb_tse_data_type_* - SIGNAL ff_clk : IN STD_LOGIC; - SIGNAL ff_snk_in : IN t_dp_sosi; - SIGNAL ff_snk_out : OUT t_dp_siso); + PROCEDURE proc_tech_tse_rx_packet(CONSTANT total_header : IN t_network_total_header; + CONSTANT c_data_type : IN NATURAL; -- c_tb_tech_tse_data_type_* + SIGNAL ff_clk : IN STD_LOGIC; + SIGNAL ff_snk_in : IN t_dp_sosi; + SIGNAL ff_snk_out : OUT t_dp_siso); END tb_tech_tse_pkg; PACKAGE BODY tb_tech_tse_pkg IS - -- LOCAL ITEMS --------------------------------------------------------------- + ------------------------------------------------------------------------------ + -- LOCAL ITEMS + ------------------------------------------------------------------------------ + CONSTANT c_nof_eth_beats : NATURAL := c_network_total_header_32b_eth_nof_words; -- nof words in eth part of the header CONSTANT c_nof_hdr_beats : NATURAL := c_network_total_header_32b_nof_words; -- nof words in the total header + -- Use default word addressing for MAC registers according to table 4.8, 4.9 + -- Use halfword addressing for PCS register to match table 4.17 + FUNCTION func_map_pcs_addr(pcs_addr : NATURAL) RETURN NATURAL IS + BEGIN + RETURN pcs_addr * 2 + c_tech_tse_byte_addr_pcs_offset; + END func_map_pcs_addr; + - -- GLOBAL ITEMS -------------------------------------------------------------- + ------------------------------------------------------------------------------ + -- GLOBAL ITEMS + ------------------------------------------------------------------------------ - FUNCTION func_tb_tse_header_size(data_type : NATURAL) RETURN NATURAL IS + FUNCTION func_tech_tse_header_size(data_type : NATURAL) RETURN NATURAL IS BEGIN CASE data_type IS - WHEN c_tb_tse_data_type_symbols => RETURN c_network_total_header_32b_eth_nof_words; - WHEN c_tb_tse_data_type_counter => RETURN c_network_total_header_32b_eth_nof_words; + WHEN c_tb_tech_tse_data_type_symbols => RETURN c_network_total_header_32b_eth_nof_words; + WHEN c_tb_tech_tse_data_type_counter => RETURN c_network_total_header_32b_eth_nof_words; WHEN OTHERS => NULL; END CASE; RETURN c_network_total_header_32b_nof_words; - END func_tb_tse_header_size; + END func_tech_tse_header_size; - ------------------------------------------------------------------------------ - -- MM bus - ------------------------------------------------------------------------------ - - -- Use default word addressing for MAC registers according to table 4.8, 4.9 - -- Use halfword addressing for PCS register to match table 4.17 - FUNCTION func_map_pcs_addr(pcs_addr : NATURAL) RETURN NATURAL IS - BEGIN - RETURN pcs_addr * 2 + c_tse_byte_addr_pcs_offset; - END func_map_pcs_addr; - - - ------------------------------------------------------------------------------ - -- Stream - ------------------------------------------------------------------------------ -- Configure the TSE MAC -- . The src_mac[47:0] = 0x123456789ABC for MAC address 12-34-56-78-9A-BC - PROCEDURE proc_tse_setup(CONSTANT c_promis_en : IN BOOLEAN; - CONSTANT c_tse_tx_fifo_depth : IN NATURAL; - CONSTANT c_tse_rx_fifo_depth : IN NATURAL; - CONSTANT c_tx_ready_latency : IN NATURAL; - CONSTANT src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE); - SIGNAL psc_access : OUT STD_LOGIC; - SIGNAL mm_clk : IN STD_LOGIC; - SIGNAL mm_miso : IN t_mem_miso; - SIGNAL mm_mosi : OUT t_mem_mosi) IS + PROCEDURE proc_tech_tse_setup(CONSTANT c_promis_en : IN BOOLEAN; + CONSTANT c_tse_tx_fifo_depth : IN NATURAL; + CONSTANT c_tse_rx_fifo_depth : IN NATURAL; + CONSTANT c_tx_ready_latency : IN NATURAL; + CONSTANT src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_slv'RANGE); + SIGNAL psc_access : OUT STD_LOGIC; + SIGNAL mm_clk : IN STD_LOGIC; + SIGNAL mm_miso : IN t_mem_miso; + SIGNAL mm_mosi : OUT t_mem_mosi) IS CONSTANT c_mac0 : INTEGER := TO_SINT(hton(src_mac(47 DOWNTO 16), 4)); CONSTANT c_mac1 : INTEGER := TO_SINT(hton(src_mac(15 DOWNTO 0), 2)); BEGIN @@ -210,32 +207,32 @@ PACKAGE BODY tb_tech_tse_pkg IS proc_mem_mm_bus_rd(16#0EC#, mm_clk, mm_miso, mm_mosi); -- RX_CMD_STAT --> 0x02000000 : [25]=1 RX_SHIFT16 WAIT UNTIL rising_edge(mm_clk); - END proc_tse_setup; + END proc_tech_tse_setup; -- Transmit user packet -- . Use word aligned payload data, so with half word inserted before the 14 byte header -- . Packets can be send immediately after eachother so new sop directly after last eop -- . The word rate is controlled by respecting ready from the MAC - PROCEDURE proc_tse_tx_packet(CONSTANT total_header : IN t_network_total_header; - CONSTANT data_len : IN NATURAL; -- in symbols = octets = bytes - CONSTANT c_data_type : IN NATURAL; -- c_tb_tse_data_type_* - CONSTANT c_ready_latency : IN NATURAL; -- 0, 1 are supported by proc_dp_stream_ready_latency() - CONSTANT c_nof_not_valid : IN NATURAL; -- when > 0 then pull tx valid low for c_nof_not_valid beats during tx - SIGNAL ff_clk : IN STD_LOGIC; - SIGNAL ff_en : IN STD_LOGIC; -- similar purpose as c_nof_not_valid, but not used so pass on signal '1' - SIGNAL ff_src_in : IN t_dp_siso; - SIGNAL ff_src_out : OUT t_dp_sosi) IS + PROCEDURE proc_tech_tse_tx_packet(CONSTANT total_header : IN t_network_total_header; + CONSTANT data_len : IN NATURAL; -- in symbols = octets = bytes + CONSTANT c_data_type : IN NATURAL; -- c_tb_tech_tse_data_type_* + CONSTANT c_ready_latency : IN NATURAL; -- 0, 1 are supported by proc_dp_stream_ready_latency() + CONSTANT c_nof_not_valid : IN NATURAL; -- when > 0 then pull tx valid low for c_nof_not_valid beats during tx + SIGNAL ff_clk : IN STD_LOGIC; + SIGNAL ff_en : IN STD_LOGIC; -- similar purpose as c_nof_not_valid, but not used so pass on signal '1' + SIGNAL ff_src_in : IN t_dp_siso; + SIGNAL ff_src_out : OUT t_dp_sosi) IS CONSTANT c_eth_header : t_network_eth_header := total_header.eth; CONSTANT c_arp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_arp( total_header.eth, total_header.arp); CONSTANT c_icmp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_icmp(total_header.eth, total_header.ip, total_header.icmp); CONSTANT c_udp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_udp( total_header.eth, total_header.ip, total_header.udp); - CONSTANT c_mod : NATURAL := data_len MOD c_tse_symbols_per_beat; - CONSTANT c_nof_data_beats : NATURAL := data_len / c_tse_symbols_per_beat + sel_a_b(c_mod, 1, 0); - CONSTANT c_empty : NATURAL := sel_a_b(c_mod, c_tse_symbols_per_beat - c_mod, 0); - VARIABLE v_sym : UNSIGNED(c_tse_symbol_w-1 DOWNTO 0) := (OTHERS=>'0'); - VARIABLE v_num : UNSIGNED(c_tse_data_w-1 DOWNTO 0) := (OTHERS=>'0'); + CONSTANT c_mod : NATURAL := data_len MOD c_tech_tse_symbols_per_beat; + CONSTANT c_nof_data_beats : NATURAL := data_len / c_tech_tse_symbols_per_beat + sel_a_b(c_mod, 1, 0); + CONSTANT c_empty : NATURAL := sel_a_b(c_mod, c_tech_tse_symbols_per_beat - c_mod, 0); + VARIABLE v_sym : UNSIGNED(c_tech_tse_symbol_w-1 DOWNTO 0) := (OTHERS=>'0'); + VARIABLE v_num : UNSIGNED(c_tech_tse_data_w-1 DOWNTO 0) := (OTHERS=>'0'); BEGIN ff_src_out.empty <= TO_DP_EMPTY(0); ---------------------------------------------------------------------------- @@ -250,7 +247,7 @@ PACKAGE BODY tb_tech_tse_pkg IS END LOOP; ---------------------------------------------------------------------------- -- ETH higher layer headers - IF c_data_type=c_tb_tse_data_type_arp THEN + IF c_data_type=c_tb_tech_tse_data_type_arp THEN FOR I IN c_nof_eth_beats TO c_nof_hdr_beats-2 LOOP proc_dp_stream_ready_latency(c_ready_latency, ff_clk, ff_src_in.ready, ff_en, '0', '1', '0', '0', ff_src_out.sync, ff_src_out.valid, ff_src_out.sop, ff_src_out.eop); ff_src_out.data <= RESIZE_DP_DATA(c_arp_words_arr(I)); @@ -259,31 +256,31 @@ PACKAGE BODY tb_tech_tse_pkg IS -- . eop ff_src_out.data <= RESIZE_DP_DATA(c_arp_words_arr(c_nof_hdr_beats-1)); proc_dp_stream_ready_latency(c_ready_latency, ff_clk, ff_src_in.ready, ff_en, '0', '1', '0', '1', ff_src_out.sync, ff_src_out.valid, ff_src_out.sop, ff_src_out.eop); - ELSIF c_data_type=c_tb_tse_data_type_ping OR c_data_type=c_tb_tse_data_type_udp THEN + ELSIF c_data_type=c_tb_tech_tse_data_type_ping OR c_data_type=c_tb_tech_tse_data_type_udp THEN FOR I IN c_nof_eth_beats TO c_nof_hdr_beats-1 LOOP proc_dp_stream_ready_latency(c_ready_latency, ff_clk, ff_src_in.ready, ff_en, '0', '1', '0', '0', ff_src_out.sync, ff_src_out.valid, ff_src_out.sop, ff_src_out.eop); CASE c_data_type IS - WHEN c_tb_tse_data_type_ping => ff_src_out.data <= RESIZE_DP_DATA(c_icmp_words_arr(I)); - WHEN c_tb_tse_data_type_udp => ff_src_out.data <= RESIZE_DP_DATA(c_udp_words_arr(I)); + WHEN c_tb_tech_tse_data_type_ping => ff_src_out.data <= RESIZE_DP_DATA(c_icmp_words_arr(I)); + WHEN c_tb_tech_tse_data_type_udp => ff_src_out.data <= RESIZE_DP_DATA(c_udp_words_arr(I)); WHEN OTHERS => NULL; END CASE; END LOOP; END IF; ---------------------------------------------------------------------------- -- Data - IF c_data_type/=c_tb_tse_data_type_arp THEN + IF c_data_type/=c_tb_tech_tse_data_type_arp THEN FOR I IN 0 TO c_nof_data_beats-1 LOOP proc_dp_stream_ready_latency(c_ready_latency, ff_clk, ff_src_in.ready, ff_en, '0', '1', '0', '0', ff_src_out.sync, ff_src_out.valid, ff_src_out.sop, ff_src_out.eop); CASE c_data_type IS - WHEN c_tb_tse_data_type_counter => + WHEN c_tb_tech_tse_data_type_counter => -- data : X"00000001", X"00000002", X"00000003", etc v_num := v_num + 1; ff_src_out.data <= RESIZE_DP_DATA(STD_LOGIC_VECTOR(v_num)); WHEN OTHERS => -- data : X"01020304", X"05060708", X"090A0B0C", etc - FOR J IN c_tse_symbols_per_beat-1 DOWNTO 0 LOOP + FOR J IN c_tech_tse_symbols_per_beat-1 DOWNTO 0 LOOP v_sym := v_sym + 1; - ff_src_out.data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w) <= STD_LOGIC_VECTOR(v_sym); + ff_src_out.data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w) <= STD_LOGIC_VECTOR(v_sym); END LOOP; END CASE; -- tb : pull valid low for some time during the middle of the payload @@ -299,7 +296,7 @@ PACKAGE BODY tb_tech_tse_pkg IS -- Overwrite empty data ff_src_out.empty <= TO_DP_EMPTY(c_empty); FOR J IN c_empty-1 DOWNTO 0 LOOP - ff_src_out.data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w) <= (OTHERS=>'0'); + ff_src_out.data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w) <= (OTHERS=>'0'); END LOOP; END IF; -- . eop @@ -311,7 +308,7 @@ PACKAGE BODY tb_tech_tse_pkg IS ff_src_out.valid <= '0'; ff_src_out.eop <= '0'; ff_src_out.empty <= TO_DP_EMPTY(0); - END proc_tse_tx_packet; + END proc_tech_tse_tx_packet; -- Receive packet @@ -320,21 +317,21 @@ PACKAGE BODY tb_tech_tse_pkg IS -- . The CRC32 is also passed on to the user at eop. -- . Note that when empty/=0 then the CRC32 is not word aligned, so therefore use prev_data to be able -- to handle part of last data word in case empty/=0 at eop - PROCEDURE proc_tse_rx_packet(CONSTANT total_header : IN t_network_total_header; - CONSTANT c_data_type : IN NATURAL; -- c_tb_tse_data_type_* - SIGNAL ff_clk : IN STD_LOGIC; - SIGNAL ff_snk_in : IN t_dp_sosi; - SIGNAL ff_snk_out : OUT t_dp_siso) IS + PROCEDURE proc_tech_tse_rx_packet(CONSTANT total_header : IN t_network_total_header; + CONSTANT c_data_type : IN NATURAL; -- c_tb_tech_tse_data_type_* + SIGNAL ff_clk : IN STD_LOGIC; + SIGNAL ff_snk_in : IN t_dp_sosi; + SIGNAL ff_snk_out : OUT t_dp_siso) IS CONSTANT c_eth_header : t_network_eth_header := total_header.eth; CONSTANT c_arp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_arp( total_header.eth, total_header.arp); CONSTANT c_icmp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_icmp(total_header.eth, total_header.ip, total_header.icmp); CONSTANT c_udp_words_arr : t_network_total_header_32b_arr := func_network_total_header_construct_udp( total_header.eth, total_header.ip, total_header.udp); - VARIABLE v_sym : UNSIGNED(c_tse_symbol_w-1 DOWNTO 0) := (OTHERS=>'0'); - VARIABLE v_num : UNSIGNED(c_tse_data_w-1 DOWNTO 0) := (OTHERS=>'0'); + VARIABLE v_sym : UNSIGNED(c_tech_tse_symbol_w-1 DOWNTO 0) := (OTHERS=>'0'); + VARIABLE v_num : UNSIGNED(c_tech_tse_data_w-1 DOWNTO 0) := (OTHERS=>'0'); VARIABLE v_empty : NATURAL; VARIABLE v_first : BOOLEAN := TRUE; - VARIABLE v_data : STD_LOGIC_VECTOR(c_tse_data_w-1 DOWNTO 0); - VARIABLE v_prev_data : STD_LOGIC_VECTOR(c_tse_data_w-1 DOWNTO 0); + VARIABLE v_data : STD_LOGIC_VECTOR(c_tech_tse_data_w-1 DOWNTO 0); + VARIABLE v_prev_data : STD_LOGIC_VECTOR(c_tech_tse_data_w-1 DOWNTO 0); BEGIN -- Keep ff_rx_snk_out.ready='1' and ff_rx_snk_out.xon='1' all the time ff_snk_out <= c_dp_siso_rdy; @@ -353,7 +350,7 @@ PACKAGE BODY tb_tech_tse_pkg IS ASSERT ff_snk_in.data(15 DOWNTO 0) = c_eth_header.eth_type REPORT "RX: Wrong ETH ethertype" SEVERITY ERROR; ---------------------------------------------------------------------------- -- Verify ETH higher layer headers - IF c_data_type=c_tb_tse_data_type_arp THEN + IF c_data_type=c_tb_tech_tse_data_type_arp THEN FOR I IN c_nof_eth_beats TO c_nof_hdr_beats-1 LOOP proc_dp_stream_valid(ff_clk, ff_snk_in.valid); ASSERT ff_snk_in.data(31 DOWNTO 0) = c_arp_words_arr(I) REPORT "RX: Wrong ARP response word" SEVERITY ERROR; @@ -362,13 +359,13 @@ PACKAGE BODY tb_tech_tse_pkg IS WHILE ff_snk_in.eop /= '1' LOOP proc_dp_stream_valid(ff_clk, ff_snk_in.valid); END LOOP; - ELSIF c_data_type=c_tb_tse_data_type_ping OR c_data_type=c_tb_tse_data_type_udp THEN + ELSIF c_data_type=c_tb_tech_tse_data_type_ping OR c_data_type=c_tb_tech_tse_data_type_udp THEN FOR I IN c_nof_eth_beats TO c_nof_hdr_beats-1 LOOP proc_dp_stream_valid(ff_clk, ff_snk_in.valid); IF I/=c_network_total_header_32b_ip_header_checksum_wi THEN -- do not verify tx ip header checksum CASE c_data_type IS - WHEN c_tb_tse_data_type_ping => ASSERT ff_snk_in.data(31 DOWNTO 0) = c_icmp_words_arr(I) REPORT "RX: Wrong IP/ICMP = PING response word" SEVERITY ERROR; - WHEN c_tb_tse_data_type_udp => ASSERT ff_snk_in.data(31 DOWNTO 0) = c_udp_words_arr(I) REPORT "RX: Wrong IP/UDP response word" SEVERITY ERROR; + WHEN c_tb_tech_tse_data_type_ping => ASSERT ff_snk_in.data(31 DOWNTO 0) = c_icmp_words_arr(I) REPORT "RX: Wrong IP/ICMP = PING response word" SEVERITY ERROR; + WHEN c_tb_tech_tse_data_type_udp => ASSERT ff_snk_in.data(31 DOWNTO 0) = c_udp_words_arr(I) REPORT "RX: Wrong IP/UDP response word" SEVERITY ERROR; WHEN OTHERS => NULL; END CASE; END IF; @@ -376,16 +373,16 @@ PACKAGE BODY tb_tech_tse_pkg IS END IF; ---------------------------------------------------------------------------- -- Verify DATA - IF c_data_type/=c_tb_tse_data_type_arp THEN + IF c_data_type/=c_tb_tech_tse_data_type_arp THEN -- . continue to eop v_first := TRUE; proc_dp_stream_valid(ff_clk, ff_snk_in.valid); WHILE ff_snk_in.eop /= '1' LOOP v_prev_data := v_data; - v_data := ff_snk_in.data(c_tse_data_w-1 DOWNTO 0); + v_data := ff_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0); IF v_first = FALSE THEN CASE c_data_type IS - WHEN c_tb_tse_data_type_counter => + WHEN c_tb_tech_tse_data_type_counter => -- data : X"00000001", X"00000002", X"00000003", etc v_num := v_num + 1; IF UNSIGNED(v_prev_data)/=0 THEN -- do not verify zero padding @@ -393,10 +390,10 @@ PACKAGE BODY tb_tech_tse_pkg IS END IF; WHEN OTHERS => -- data : X"01020304", X"05060708", X"090A0B0C", etc - FOR J IN c_tse_symbols_per_beat-1 DOWNTO 0 LOOP + FOR J IN c_tech_tse_symbols_per_beat-1 DOWNTO 0 LOOP v_sym := v_sym + 1; - IF UNSIGNED(v_prev_data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w))/=0 THEN -- do not verify zero padding - ASSERT UNSIGNED(v_prev_data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w)) = v_sym REPORT "RX: Wrong data symbol" SEVERITY ERROR; + IF UNSIGNED(v_prev_data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w))/=0 THEN -- do not verify zero padding + ASSERT UNSIGNED(v_prev_data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w)) = v_sym REPORT "RX: Wrong data symbol" SEVERITY ERROR; END IF; END LOOP; END CASE; @@ -407,34 +404,34 @@ PACKAGE BODY tb_tech_tse_pkg IS -------------------------------------------------------------------------- -- Verify last DATA and CRC32 if empty/=0 else the last word is only the CRC32 v_prev_data := v_data; - v_data := ff_snk_in.data(c_tse_data_w-1 DOWNTO 0); - v_empty := TO_INTEGER(UNSIGNED(ff_snk_in.empty(c_tse_empty_w-1 DOWNTO 0))); + v_data := ff_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0); + v_empty := TO_INTEGER(UNSIGNED(ff_snk_in.empty(c_tech_tse_empty_w-1 DOWNTO 0))); IF v_empty > 0 THEN FOR J IN v_empty-1 DOWNTO 0 LOOP - v_prev_data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w) := (OTHERS=>'0'); + v_prev_data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w) := (OTHERS=>'0'); END LOOP; CASE c_data_type IS - WHEN c_tb_tse_data_type_counter => + WHEN c_tb_tech_tse_data_type_counter => -- data : X"00000001", X"00000002", X"00000003", etc v_num := v_num + 1; FOR J IN v_empty-1 DOWNTO 0 LOOP - v_num((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w) := (OTHERS=>'0'); -- force CRC32 symbols in last data word to 0 + v_num((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w) := (OTHERS=>'0'); -- force CRC32 symbols in last data word to 0 END LOOP; IF UNSIGNED(v_prev_data)/=0 THEN -- do not verify zero padding ASSERT UNSIGNED(v_prev_data) = v_num REPORT "RX: Wrong empty data word" SEVERITY ERROR; END IF; WHEN OTHERS => -- data : X"01020304", X"05060708", X"090A0B0C", etc - FOR J IN c_tse_symbols_per_beat-1 DOWNTO v_empty LOOP -- ignore CRC32 symbols in last data word + FOR J IN c_tech_tse_symbols_per_beat-1 DOWNTO v_empty LOOP -- ignore CRC32 symbols in last data word v_sym := v_sym + 1; - IF UNSIGNED(v_prev_data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w))/=0 THEN -- do not verify zero padding - ASSERT UNSIGNED(v_prev_data((J+1)*c_tse_symbol_w-1 DOWNTO J*c_tse_symbol_w)) = v_sym REPORT "RX: Wrong empty data symbol" SEVERITY ERROR; + IF UNSIGNED(v_prev_data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w))/=0 THEN -- do not verify zero padding + ASSERT UNSIGNED(v_prev_data((J+1)*c_tech_tse_symbol_w-1 DOWNTO J*c_tech_tse_symbol_w)) = v_sym REPORT "RX: Wrong empty data symbol" SEVERITY ERROR; END IF; END LOOP; END CASE; END IF; END IF; -- No verify on CRC32 word - END proc_tse_rx_packet; + END proc_tech_tse_rx_packet; END tb_tech_tse_pkg; diff --git a/libraries/technology/tse/tech_tse.vhd b/libraries/technology/tse/tech_tse.vhd index f8c6f40ee1..dc647c7dae 100644 --- a/libraries/technology/tse/tech_tse.vhd +++ b/libraries/technology/tse/tech_tse.vhd @@ -55,21 +55,21 @@ ENTITY tech_tse IS tx_snk_in : IN t_dp_sosi; tx_snk_out : OUT t_dp_siso; -- . MAC specific - tx_mac_in : IN t_tse_tx_mac; - tx_mac_out : OUT t_tse_tx_mac; + tx_mac_in : IN t_tech_tse_tx_mac; + tx_mac_out : OUT t_tech_tse_tx_mac; -- MAC receive interface -- . ST Source rx_src_in : IN t_dp_siso; rx_src_out : OUT t_dp_sosi; -- . MAC specific - rx_mac_out : OUT t_tse_rx_mac; + rx_mac_out : OUT t_tech_tse_rx_mac; -- PHY interface eth_txp : OUT STD_LOGIC; eth_rxp : IN STD_LOGIC; - tse_led : OUT t_tse_led + tse_led : OUT t_tech_tse_led ); END tech_tse; diff --git a/libraries/technology/tse/tech_tse_pkg.vhd b/libraries/technology/tse/tech_tse_pkg.vhd index 996fb6f26b..030e0ea9f5 100644 --- a/libraries/technology/tse/tech_tse_pkg.vhd +++ b/libraries/technology/tse/tech_tse_pkg.vhd @@ -26,34 +26,34 @@ USE common_lib.common_pkg.ALL; PACKAGE tech_tse_pkg IS - CONSTANT c_tse_reg_addr_w : NATURAL := 8; -- = max 256 MAC registers - CONSTANT c_tse_byte_addr_w : NATURAL := c_tse_reg_addr_w + 2; - CONSTANT c_tse_byte_addr_pcs_offset : NATURAL := 16#200#; -- table 4.8, 4.9 in ug_ethernet.pdf - CONSTANT c_tse_data_w : NATURAL := c_word_w; -- = 32 + CONSTANT c_tech_tse_reg_addr_w : NATURAL := 8; -- = max 256 MAC registers + CONSTANT c_tech_tse_byte_addr_w : NATURAL := c_tech_tse_reg_addr_w + 2; + CONSTANT c_tech_tse_byte_addr_pcs_offset : NATURAL := 16#200#; -- table 4.8, 4.9 in ug_ethernet.pdf + CONSTANT c_tech_tse_data_w : NATURAL := c_word_w; -- = 32 - CONSTANT c_tse_symbol_w : NATURAL := c_byte_w; -- = 8 - CONSTANT c_tse_symbol_max : NATURAL := 2**c_tse_symbol_w-1; -- = 255 - CONSTANT c_tse_symbols_per_beat : NATURAL := c_tse_data_w / c_tse_symbol_w; -- = 4 + CONSTANT c_tech_tse_symbol_w : NATURAL := c_byte_w; -- = 8 + CONSTANT c_tech_tse_symbol_max : NATURAL := 2**c_tech_tse_symbol_w-1; -- = 255 + CONSTANT c_tech_tse_symbols_per_beat : NATURAL := c_tech_tse_data_w / c_tech_tse_symbol_w; -- = 4 - CONSTANT c_tse_pcs_reg_addr_w : NATURAL := 5; -- = max 32 PCS registers - CONSTANT c_tse_pcs_halfword_addr_w : NATURAL := c_tse_pcs_reg_addr_w + 1; -- table 4.17 in ug_ethernet.pdf - CONSTANT c_tse_pcs_byte_addr_w : NATURAL := c_tse_pcs_reg_addr_w + 2; - CONSTANT c_tse_pcs_data_w : NATURAL := c_halfword_w; -- = 16; + CONSTANT c_tech_tse_pcs_reg_addr_w : NATURAL := 5; -- = max 32 PCS registers + CONSTANT c_tech_tse_pcs_halfword_addr_w : NATURAL := c_tech_tse_pcs_reg_addr_w + 1; -- table 4.17 in ug_ethernet.pdf + CONSTANT c_tech_tse_pcs_byte_addr_w : NATURAL := c_tech_tse_pcs_reg_addr_w + 2; + CONSTANT c_tech_tse_pcs_data_w : NATURAL := c_halfword_w; -- = 16; - CONSTANT c_tse_empty_w : NATURAL := 2; - CONSTANT c_tse_tx_error_w : NATURAL := 1; - CONSTANT c_tse_rx_error_w : NATURAL := 6; - CONSTANT c_tse_error_w : NATURAL := largest(c_tse_tx_error_w, c_tse_rx_error_w); - CONSTANT c_tse_err_stat_w : NATURAL := 18; - CONSTANT c_tse_frm_type_w : NATURAL := 4; + CONSTANT c_tech_tse_empty_w : NATURAL := 2; + CONSTANT c_tech_tse_tx_error_w : NATURAL := 1; + CONSTANT c_tech_tse_rx_error_w : NATURAL := 6; + CONSTANT c_tech_tse_error_w : NATURAL := largest(c_tech_tse_tx_error_w, c_tech_tse_rx_error_w); + CONSTANT c_tech_tse_err_stat_w : NATURAL := 18; + CONSTANT c_tech_tse_frm_type_w : NATURAL := 4; - CONSTANT c_tse_rx_ready_latency : NATURAL := 2; -- 2 = default when FIFO is used - CONSTANT c_tse_tx_ready_latency : NATURAL := 1; -- c_tse_tx_ready_latency + 3 = TX_ALMOST_FULL + CONSTANT c_tech_tse_rx_ready_latency : NATURAL := 2; -- 2 = default when FIFO is used + CONSTANT c_tech_tse_tx_ready_latency : NATURAL := 1; -- c_tech_tse_tx_ready_latency + 3 = TX_ALMOST_FULL - CONSTANT c_tse_tx_fifo_depth : NATURAL := 256; -- nof words for Tx FIFO - CONSTANT c_tse_rx_fifo_depth : NATURAL := 256; -- nof words for Rx FIFO + CONSTANT c_tech_tse_tx_fifo_depth : NATURAL := 256; -- nof words for Tx FIFO + CONSTANT c_tech_tse_rx_fifo_depth : NATURAL := 256; -- nof words for Rx FIFO - TYPE t_tse_tx_mac IS RECORD + TYPE t_tech_tse_tx_mac IS RECORD -- Tx MAC inputs crc_fwd : STD_LOGIC; -- Tx MAC outputs @@ -63,17 +63,17 @@ PACKAGE tech_tse_pkg IS uflow : STD_LOGIC; END RECORD; - TYPE t_tse_rx_mac IS RECORD + TYPE t_tech_tse_rx_mac IS RECORD -- Rx MAC inputs -- Rx MAC outputs - ethertype: STD_LOGIC_VECTOR(c_tse_err_stat_w-1 DOWNTO 0); - frm_type : STD_LOGIC_VECTOR(c_tse_frm_type_w-1 DOWNTO 0); + ethertype: STD_LOGIC_VECTOR(c_tech_tse_err_stat_w-1 DOWNTO 0); + frm_type : STD_LOGIC_VECTOR(c_tech_tse_frm_type_w-1 DOWNTO 0); dsav : STD_LOGIC; a_full : STD_LOGIC; a_empty : STD_LOGIC; END RECORD; - TYPE t_tse_led IS RECORD + TYPE t_tech_tse_led IS RECORD an : STD_LOGIC; link : STD_LOGIC; disp_err : STD_LOGIC; diff --git a/libraries/technology/tse/tech_tse_stratixiv.vhd b/libraries/technology/tse/tech_tse_stratixiv.vhd index 4451d6637f..0b69c46c5c 100644 --- a/libraries/technology/tse/tech_tse_stratixiv.vhd +++ b/libraries/technology/tse/tech_tse_stratixiv.vhd @@ -55,27 +55,27 @@ ENTITY tech_tse_stratixiv IS tx_snk_in : IN t_dp_sosi; tx_snk_out : OUT t_dp_siso; -- . MAC specific - tx_mac_in : IN t_tse_tx_mac; - tx_mac_out : OUT t_tse_tx_mac; + tx_mac_in : IN t_tech_tse_tx_mac; + tx_mac_out : OUT t_tech_tse_tx_mac; -- MAC receive interface -- . ST Source rx_src_in : IN t_dp_siso; rx_src_out : OUT t_dp_sosi; -- . MAC specific - rx_mac_out : OUT t_tse_rx_mac; + rx_mac_out : OUT t_tech_tse_rx_mac; -- PHY interface eth_txp : OUT STD_LOGIC; eth_rxp : IN STD_LOGIC; - tse_led : OUT t_tse_led + tse_led : OUT t_tech_tse_led ); END tech_tse_stratixiv; ARCHITECTURE str OF tech_tse_stratixiv IS - SIGNAL ff_tx_mod : STD_LOGIC_VECTOR(c_tse_empty_w-1 DOWNTO 0); + SIGNAL ff_tx_mod : STD_LOGIC_VECTOR(c_tech_tse_empty_w-1 DOWNTO 0); SIGNAL ff_rx_out : t_dp_sosi := c_dp_sosi_rst; @@ -91,7 +91,7 @@ BEGIN tx_snk_out.xon <= '1'; -- Force empty = 0 when eop = '0' to avoid TSE MAC bug of missing two bytes when empty = 2 - ff_tx_mod <= tx_snk_in.empty(c_tse_empty_w-1 DOWNTO 0) WHEN tx_snk_in.eop='1' ELSE (OTHERS=>'0'); + ff_tx_mod <= tx_snk_in.empty(c_tech_tse_empty_w-1 DOWNTO 0) WHEN tx_snk_in.eop='1' ELSE (OTHERS=>'0'); -- Force unused bits and fields in rx_src_out to c_dp_sosi_rst to avoid confusing 'X' in wave window rx_src_out <= ff_rx_out; @@ -112,7 +112,7 @@ BEGIN -- . Avalon ST ff_tx_clk => tx_snk_clk, ff_tx_rdy => tx_snk_out.ready, - ff_tx_data => tx_snk_in.data(c_tse_data_w-1 DOWNTO 0), + ff_tx_data => tx_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0), ff_tx_wren => tx_snk_in.valid, ff_tx_sop => tx_snk_in.sop, ff_tx_eop => tx_snk_in.eop, @@ -128,17 +128,17 @@ BEGIN -- . Avalon ST ff_rx_clk => rx_src_clk, ff_rx_rdy => rx_src_in.ready, - ff_rx_data => ff_rx_out.data(c_tse_data_w-1 DOWNTO 0), + ff_rx_data => ff_rx_out.data(c_tech_tse_data_w-1 DOWNTO 0), ff_rx_dval => ff_rx_out.valid, ff_rx_sop => ff_rx_out.sop, ff_rx_eop => ff_rx_out.eop, - ff_rx_mod => ff_rx_out.empty(c_tse_empty_w-1 DOWNTO 0), - rx_err => ff_rx_out.err(c_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) - -- [4] PHY error on GMII - -- [3] receive frame truncated due to FIFO overflow - -- [2] CRC-32 error - -- [1] invalid length - -- [0] = OR of [1:5] + ff_rx_mod => ff_rx_out.empty(c_tech_tse_empty_w-1 DOWNTO 0), + rx_err => ff_rx_out.err(c_tech_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) + -- [4] PHY error on GMII + -- [3] receive frame truncated due to FIFO overflow + -- [2] CRC-32 error + -- [1] invalid length + -- [0] = OR of [1:5] -- . MAC specific rx_err_stat => rx_mac_out.ethertype, -- [17,16] VLAN info, [15:0] Ethernet lentgh/type field rx_frm_type => rx_mac_out.frm_type, -- [3]=VLAN, [2]=Broadcast, [1]=Multicast, [0]=Unicast @@ -149,10 +149,10 @@ BEGIN reset => mm_rst, -- asynchronous reset (choose synchronous to mm_clk) -- MM control interface clk => mm_clk, - address => mm_sla_in.address(c_tse_byte_addr_w-1 DOWNTO 2), - readdata => mm_sla_out.rddata(c_tse_data_w-1 DOWNTO 0), + address => mm_sla_in.address(c_tech_tse_byte_addr_w-1 DOWNTO 2), + readdata => mm_sla_out.rddata(c_tech_tse_data_w-1 DOWNTO 0), read => mm_sla_in.rd, - writedata => mm_sla_in.wrdata(c_tse_data_w-1 DOWNTO 0), + writedata => mm_sla_in.wrdata(c_tech_tse_data_w-1 DOWNTO 0), write => mm_sla_in.wr, waitrequest => mm_sla_out.waitrequest, -- Status LEDs @@ -187,7 +187,7 @@ BEGIN -- . Avalon ST ff_tx_clk => tx_snk_clk, ff_tx_rdy => tx_snk_out.ready, - ff_tx_data => tx_snk_in.data(c_tse_data_w-1 DOWNTO 0), + ff_tx_data => tx_snk_in.data(c_tech_tse_data_w-1 DOWNTO 0), ff_tx_wren => tx_snk_in.valid, ff_tx_sop => tx_snk_in.sop, ff_tx_eop => tx_snk_in.eop, @@ -203,17 +203,17 @@ BEGIN -- . Avalon ST ff_rx_clk => rx_src_clk, ff_rx_rdy => rx_src_in.ready, - ff_rx_data => ff_rx_out.data(c_tse_data_w-1 DOWNTO 0), + ff_rx_data => ff_rx_out.data(c_tech_tse_data_w-1 DOWNTO 0), ff_rx_dval => ff_rx_out.valid, ff_rx_sop => ff_rx_out.sop, ff_rx_eop => ff_rx_out.eop, - ff_rx_mod => ff_rx_out.empty(c_tse_empty_w-1 DOWNTO 0), - rx_err => ff_rx_out.err(c_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) - -- [4] PHY error on GMII - -- [3] receive frame truncated due to FIFO overflow - -- [2] CRC-32 error - -- [1] invalid length - -- [0] = OR of [1:5] + ff_rx_mod => ff_rx_out.empty(c_tech_tse_empty_w-1 DOWNTO 0), + rx_err => ff_rx_out.err(c_tech_tse_error_w-1 DOWNTO 0), -- [5] collision error (can only occur in half duplex mode) + -- [4] PHY error on GMII + -- [3] receive frame truncated due to FIFO overflow + -- [2] CRC-32 error + -- [1] invalid length + -- [0] = OR of [1:5] -- . MAC specific rx_err_stat => rx_mac_out.ethertype, -- [17,16] VLAN info, [15:0] Ethernet lentgh/type field rx_frm_type => rx_mac_out.frm_type, -- [3]=VLAN, [2]=Broadcast, [1]=Multicast, [0]=Unicast @@ -224,10 +224,10 @@ BEGIN reset => mm_rst, -- asynchronous reset (choose synchronous to mm_clk) -- MM control interface clk => mm_clk, - address => mm_sla_in.address(c_tse_byte_addr_w-1 DOWNTO 2), - readdata => mm_sla_out.rddata(c_tse_data_w-1 DOWNTO 0), + address => mm_sla_in.address(c_tech_tse_byte_addr_w-1 DOWNTO 2), + readdata => mm_sla_out.rddata(c_tech_tse_data_w-1 DOWNTO 0), read => mm_sla_in.rd, - writedata => mm_sla_in.wrdata(c_tse_data_w-1 DOWNTO 0), + writedata => mm_sla_in.wrdata(c_tech_tse_data_w-1 DOWNTO 0), write => mm_sla_in.wr, waitrequest => mm_sla_out.waitrequest, -- ALTGX_RECONFIG -- GitLab