From 707c5630ab4b8753020f0c17173c560da82ab215 Mon Sep 17 00:00:00 2001 From: hadeshyp Date: Thu, 22 Nov 2007 13:32:22 +0000 Subject: [PATCH] new hub version, Jan --- trb_net16_hub_base.vhd | 346 +++++++++++++++++++++++++++++++--------- trb_net16_hub_func.vhd | 137 ++++++++++++++++ trb_net16_hub_logic.vhd | 16 +- trb_net_std.vhd | 17 +- 4 files changed, 414 insertions(+), 102 deletions(-) create mode 100644 trb_net16_hub_func.vhd diff --git a/trb_net16_hub_base.vhd b/trb_net16_hub_base.vhd index e59541c..f27bf80 100644 --- a/trb_net16_hub_base.vhd +++ b/trb_net16_hub_base.vhd @@ -1,9 +1,10 @@ LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; -USE IEEE.std_logic_UNSIGNED.ALL; USE IEEE.numeric_std.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; use work.trb_net_std.all; +use work.trb_net16_hub_func.all; entity trb_net16_hub_base is @@ -16,20 +17,51 @@ entity trb_net16_hub_base is NUM_WIDTH : integer range 2 to 2 := 2; --media interfaces MII_NUMBER : integer range 2 to 16 := 2; - MII_INIT_DEPTH : std_logic_vector(MII_NUMBER*2**(MUX_WIDTH-1)*4-1 downto 0) := x"66110000"; - MII_REPLY_DEPTH : std_logic_vector(MII_NUMBER*2**(MUX_WIDTH-1)*4-1 downto 0) := x"66110000"; +--each row is one media interface and each column is one channel. starting with 0,0, ending with 15,15 + MII_INIT_DEPTH : hub_iobuf_config_t := (1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1); + MII_REPLY_DEPTH : hub_iobuf_config_t := (1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1); -- settings for apis API_NUMBER : integer range 0 to 16 := 1; - API_CHANNELS : bit_vector(API_NUMBER*4-1 downto 0) := x"3"; + API_CHANNELS : hub_api_config_t := (3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3); --channel, each api is connected to - API_TYPE : bit_vector(API_NUMBER*4-1 downto 0) := x"1"; - API_INIT_DEPTH : bit_vector(API_NUMBER*4-1 downto 0) := x"1"; - API_REPLY_DEPTH : bit_vector(API_NUMBER*4-1 downto 0) := x"1"; - API_FIFO_TO_INT_DEPTH : bit_vector(API_NUMBER*4-1 downto 0) := x"1"; - API_FIFO_TO_APL_DEPTH : bit_vector(API_NUMBER*4-1 downto 0) := x"1"; + API_TYPE : hub_api_config_t := (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + API_INIT_DEPTH : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + API_REPLY_DEPTH : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + API_FIFO_TO_INT_DEPTH : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); + API_FIFO_TO_APL_DEPTH : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); --trigger reading interfaces TRG_NUMBER : integer range 0 to 16 := 1; - TRG_CHANNELS : bit_vector(TRG_NUMBER*4-1 downto 0) := x"0" + TRG_CHANNELS : hub_api_config_t := (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) ); port ( CLK : in std_logic; @@ -73,58 +105,76 @@ entity trb_net16_hub_base is TRG_ERROR_PATTERN_IN : in std_logic_vector (TRG_NUMBER*32 downto 0); TRG_RELEASE_IN : in std_logic_vector (TRG_NUMBER downto 0); --Status ports (for debugging) - HUB_STAT_CHANNEL : out std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); - HUB_STAT_GEN : out std_logic_vector (31 downto 0); - HUB_CTRL_CHANNEL : in std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); - HUB_CTRL_activepoints : in std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); - HUB_CTRL_GEN : in std_logic_vector (31 downto 0); - MPLEX_CTRL : in std_logic_vector (MII_NUMBER*32-1 downto 0); - MPLEX_STAT : out std_logic_vector (MII_NUMBER*32-1 downto 0); - IOBUF_STAT_GEN : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_STAT_LOCKED : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_STAT_INIT_BUFFER : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_STAT_REPLY_BUFFER : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_CTRL_GEN : in std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_CTRL_LOCKED : in std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_STAT_CTRL_INIT_BUFFER : in std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0); - IOBUF_STAT_CTRL_REPLY_BUFFER : in std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0) + HUB_STAT_CHANNEL : out std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); + HUB_STAT_GEN : out std_logic_vector (31 downto 0); + HUB_CTRL_CHANNEL : in std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); + HUB_CTRL_activepoints : in std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0); + HUB_CTRL_GEN : in std_logic_vector (31 downto 0); + MPLEX_CTRL : in std_logic_vector (MII_NUMBER*32-1 downto 0); + MPLEX_STAT : out std_logic_vector (MII_NUMBER*32-1 downto 0); + IOBUF_STAT_GEN : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_STAT_LOCKED : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_STAT_INIT_BUFFER : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_STAT_REPLY_BUFFER : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_CTRL_GEN : in std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_CTRL_LOCKED : in std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_STAT_CTRL_INIT_BUFFER : in std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0); + IOBUF_STAT_CTRL_REPLY_BUFFER : in std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0) ); end entity; architecture trb_net16_hub_base_arch of trb_net16_hub_base is + constant total_point_num : integer := MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER; + signal m_DATAREADY_OUT : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0); + signal m_DATA_OUT : std_logic_vector (total_point_num*DATA_WIDTH*2**MUX_WIDTH-1 downto 0); + signal m_PACKET_NUM_OUT: std_logic_vector (total_point_num*NUM_WIDTH*2**MUX_WIDTH-1 downto 0); + signal m_READ_IN : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0); + signal m_DATAREADY_IN : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0); + signal m_DATA_IN : std_logic_vector (total_point_num*DATA_WIDTH*2**MUX_WIDTH-1 downto 0); + signal m_PACKET_NUM_IN : std_logic_vector (total_point_num*NUM_WIDTH*2**MUX_WIDTH-1 downto 0); + signal m_READ_OUT : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0); + signal m_ERROR_IN : std_logic_vector (total_point_num*3*2**MUX_WIDTH-1 downto 0); - signal m_DATAREADY_OUT : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0); - signal m_DATA_OUT : std_logic_vector (MII_NUMBER*DATA_WIDTH*2**MUX_WIDTH-1 downto 0); - signal m_PACKET_NUM_OUT: std_logic_vector (MII_NUMBER*NUM_WIDTH*2**MUX_WIDTH-1 downto 0); - signal m_READ_IN : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0); - signal m_DATAREADY_IN : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0); - signal m_DATA_IN : std_logic_vector (MII_NUMBER*DATA_WIDTH*2**MUX_WIDTH-1 downto 0); - signal m_PACKET_NUM_IN : std_logic_vector (MII_NUMBER*NUM_WIDTH*2**MUX_WIDTH-1 downto 0); - signal m_READ_OUT : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0); - signal m_ERROR_IN : std_logic_vector (MII_NUMBER*3*2**MUX_WIDTH-1 downto 0); + signal hub_to_buf_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal hub_to_buf_INIT_DATA : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal hub_to_buf_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal hub_to_buf_INIT_READ : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); - signal hub_to_buf_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal hub_to_buf_INIT_DATA : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0); - signal hub_to_buf_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0); - signal hub_to_buf_INIT_READ : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); + signal buf_to_hub_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal buf_to_hub_INIT_DATA : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal buf_to_hub_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal buf_to_hub_INIT_READ : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); - signal buf_to_hub_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal buf_to_hub_INIT_DATA : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0); - signal buf_to_hub_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0); - signal buf_to_hub_INIT_READ : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - - signal hub_to_buf_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal hub_to_buf_REPLY_DATA : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0); - signal hub_to_buf_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0); - signal hub_to_buf_REPLY_READ : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal hub_to_buf_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - - signal buf_to_hub_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal buf_to_hub_REPLY_DATA : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0); - signal buf_to_hub_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0); - signal buf_to_hub_REPLY_READ : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); - signal buf_to_hub_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0); + signal hub_to_buf_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal hub_to_buf_REPLY_DATA : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal hub_to_buf_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal hub_to_buf_REPLY_READ : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal hub_to_buf_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal buf_to_hub_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal buf_to_hub_REPLY_DATA : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal buf_to_hub_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal buf_to_hub_REPLY_READ : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal buf_to_hub_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + + signal HUB_INIT_DATAREADY_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_INIT_DATA_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal HUB_INIT_PACKET_NUM_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal HUB_INIT_READ_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_INIT_DATAREADY_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_INIT_DATA_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal HUB_INIT_PACKET_NUM_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal HUB_INIT_READ_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_REPLY_DATAREADY_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_REPLY_DATA_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal HUB_REPLY_PACKET_NUM_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal HUB_REPLY_READ_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_REPLY_DATAREADY_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_REPLY_DATA_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0); + signal HUB_REPLY_PACKET_NUM_IN : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0); + signal HUB_REPLY_READ_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + signal HUB_REPLY_SEND_HEADER_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0); + component trb_net16_hub_logic is generic ( --media interfaces @@ -359,11 +409,11 @@ begin end generate; --generate IOBufs for MII - gen_iobufs: for i in 0 to 2**(MUX_WIDTH-1)*MII_NUMBER-1 generate + gen_iobufs: for i in 0 to total_point_num-1 generate IOBUF: trb_net16_iobuf generic map ( - INIT_DEPTH => 1, --conv_integer(MII_INIT_DEPTH((i+1)*4-1 downto i*4)), - REPLY_DEPTH => 1 --conv_integer(MII_REPLY_DEPTH((i+1)*4-1 downto i*4)) + INIT_DEPTH => calc_depth(i,MII_INIT_DEPTH, API_INIT_DEPTH, MII_NUMBER, API_NUMBER, MUX_WIDTH), + REPLY_DEPTH => calc_depth(i,MII_REPLY_DEPTH, API_REPLY_DEPTH, MII_NUMBER, API_NUMBER, MUX_WIDTH) ) port map ( -- Misc @@ -427,12 +477,152 @@ begin STAT_CTRL_REPLY_BUFFER => IOBUF_STAT_CTRL_REPLY_BUFFER((i+1)*32-1 downto i*32) ); end generate; + +--rearrange vectors for hub logic + gen_rearrange : for CHANNEL in 0 to 2**(MUX_WIDTH-1)-1 generate + constant api_num : integer := calc_special_number(CHANNEL, API_NUMBER, API_CHANNELS); + constant trg_num : integer := calc_special_number(CHANNEL, TRG_NUMBER, TRG_CHANNELS); + constant first_point_num : integer := calc_first_point_number(MII_NUMBER, CHANNEL, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS); + begin + gen_hublogicsignals1 : for mii in 0 to MII_NUMBER-1 generate + constant buf_to_hub_num : integer := mii*2**(MUX_WIDTH-1)+CHANNEL; + constant hublogic_num : integer := first_point_num + mii; + begin + HUB_INIT_DATAREADY_IN (hublogic_num) + <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num); + HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_INIT_READ(buf_to_hub_num) + <= HUB_INIT_READ_OUT(hublogic_num); + + hub_to_buf_INIT_DATAREADY(buf_to_hub_num) + <= HUB_INIT_DATAREADY_OUT(hublogic_num); + hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_INIT_READ_IN (hublogic_num) + <= hub_to_buf_INIT_READ(buf_to_hub_num); + + HUB_REPLY_DATAREADY_IN (hublogic_num) + <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num); + HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_REPLY_READ(buf_to_hub_num) + <= HUB_REPLY_READ_OUT(hublogic_num); + + hub_to_buf_REPLY_DATAREADY(buf_to_hub_num) + <= HUB_REPLY_DATAREADY_OUT(hublogic_num); + hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_REPLY_READ_IN (hublogic_num) + <= hub_to_buf_REPLY_READ(buf_to_hub_num); + end generate; + + gen_hublogicsignals2 : for api in 0 to api_num-1 generate + constant hublogic_num : integer := first_point_num + 2**(MUX_WIDTH-1) + calc_special_number(CHANNEL, api, API_CHANNELS); + constant buf_to_hub_num : integer := 2**(MUX_WIDTH-1)*MII_NUMBER + calc_special_number(CHANNEL, api, API_CHANNELS); + begin + h1: if API_CHANNELS(api) = CHANNEL generate + HUB_INIT_DATAREADY_IN (hublogic_num) + <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num); + HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_INIT_READ(buf_to_hub_num) + <= HUB_INIT_READ_OUT(hublogic_num); + + hub_to_buf_INIT_DATAREADY(buf_to_hub_num) + <= HUB_INIT_DATAREADY_OUT(hublogic_num); + hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_INIT_READ_IN (hublogic_num) + <= hub_to_buf_INIT_READ(buf_to_hub_num); + HUB_REPLY_DATAREADY_IN (hublogic_num) + <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num); + HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_REPLY_READ(buf_to_hub_num) + <= HUB_REPLY_READ_OUT(hublogic_num); + + hub_to_buf_REPLY_DATAREADY(buf_to_hub_num) + <= HUB_REPLY_DATAREADY_OUT(hublogic_num); + hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_REPLY_READ_IN (hublogic_num) + <= hub_to_buf_REPLY_READ(buf_to_hub_num); + end generate; + end generate; + g3: if trg_num /= 0 generate + gen_hublogicsignals3 : for trg in 0 to trg_num-1 generate + constant hublogic_num : integer := first_point_num + 2**(MUX_WIDTH-1) + api_num + calc_special_number(CHANNEL, trg, TRG_CHANNELS); + constant buf_to_hub_num : integer := 2**(MUX_WIDTH-1)*MII_NUMBER + api_num + calc_special_number(CHANNEL, trg, TRG_CHANNELS); + begin + h1: if TRG_CHANNELS(trg) = CHANNEL generate + HUB_INIT_DATAREADY_IN (hublogic_num) + <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num); + HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_INIT_READ(buf_to_hub_num) + <= HUB_INIT_READ_OUT(hublogic_num); + + hub_to_buf_INIT_DATAREADY(buf_to_hub_num) + <= HUB_INIT_DATAREADY_OUT(hublogic_num); + hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_INIT_READ_IN (hublogic_num) + <= hub_to_buf_INIT_READ(buf_to_hub_num); + + HUB_REPLY_DATAREADY_IN (hublogic_num) + <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num); + HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16) + <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16); + HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2) + <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2); + buf_to_hub_REPLY_READ(buf_to_hub_num) + <= HUB_REPLY_READ_OUT(hublogic_num); + + hub_to_buf_REPLY_DATAREADY(buf_to_hub_num) + <= HUB_REPLY_DATAREADY_OUT(hublogic_num); + hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16) + <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16); + hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2) + <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2); + HUB_REPLY_READ_IN (hublogic_num) + <= hub_to_buf_REPLY_READ(buf_to_hub_num); + end generate; + end generate; + end generate; + end generate; + +--generate hub logic gen_hub_logic: for i in 0 to 2**(MUX_WIDTH-1)-1 generate + constant point_num : integer := calc_point_number (MII_NUMBER, i, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS); + constant first_point_num : integer := calc_first_point_number(MII_NUMBER, i, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS); + constant next_point_num : integer := first_point_num + point_num; + begin HUBLOGIC : trb_net16_hub_logic generic map ( --media interfaces - POINT_NUMBER => MII_NUMBER, + POINT_NUMBER => point_num, --general settings DATA_WIDTH => DATA_WIDTH, NUM_WIDTH => NUM_WIDTH @@ -441,26 +631,26 @@ begin CLK => CLK, RESET => RESET, CLK_EN => CLK_EN, - INIT_DATAREADY_IN => buf_to_hub_INIT_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - INIT_DATA_IN => buf_to_hub_INIT_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER), - INIT_PACKET_NUM_IN => buf_to_hub_INIT_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER), - INIT_READ_OUT => buf_to_hub_INIT_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - INIT_DATAREADY_OUT => hub_to_buf_INIT_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - INIT_DATA_OUT => hub_to_buf_INIT_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER), - INIT_PACKET_NUM_OUT => hub_to_buf_INIT_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER), - INIT_READ_IN => hub_to_buf_INIT_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - REPLY_HEADER_OUT => hub_to_buf_REPLY_SEND_HEADER((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - REPLY_DATAREADY_IN => buf_to_hub_REPLY_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - REPLY_DATA_IN => buf_to_hub_REPLY_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER), - REPLY_PACKET_NUM_IN => buf_to_hub_REPLY_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER), - REPLY_READ_OUT => buf_to_hub_REPLY_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - REPLY_DATAREADY_OUT => hub_to_buf_REPLY_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - REPLY_DATA_OUT => hub_to_buf_REPLY_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER), - REPLY_PACKET_NUM_OUT => hub_to_buf_REPLY_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER), - REPLY_READ_IN => hub_to_buf_REPLY_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER), - STAT => HUB_STAT_CHANNEL((i+1)*32-1 downto i*32), - CTRL => HUB_CTRL_CHANNEL((i+1)*32-1 downto i*32), - CTRL_activepoints => HUB_CTRL_activepoints((i+1)*32-1 downto i*32) + INIT_DATAREADY_IN => HUB_INIT_DATAREADY_IN(next_point_num-1 downto first_point_num), + INIT_DATA_IN => HUB_INIT_DATA_IN(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH), + INIT_PACKET_NUM_IN => HUB_INIT_PACKET_NUM_IN(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH), + INIT_READ_OUT => HUB_INIT_READ_OUT(next_point_num-1 downto first_point_num), + INIT_DATAREADY_OUT => HUB_INIT_DATAREADY_OUT(next_point_num-1 downto first_point_num), + INIT_DATA_OUT => HUB_INIT_DATA_OUT(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH), + INIT_PACKET_NUM_OUT => HUB_INIT_PACKET_NUM_OUT(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH), + INIT_READ_IN => HUB_INIT_READ_IN(next_point_num-1 downto first_point_num), + REPLY_HEADER_OUT => HUB_REPLY_SEND_HEADER_OUT(next_point_num-1 downto first_point_num), + REPLY_DATAREADY_IN => HUB_REPLY_DATAREADY_IN(next_point_num-1 downto first_point_num), + REPLY_DATA_IN => HUB_REPLY_DATA_IN(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH), + REPLY_PACKET_NUM_IN => HUB_REPLY_PACKET_NUM_IN(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH), + REPLY_READ_OUT => HUB_REPLY_READ_OUT(next_point_num-1 downto first_point_num), + REPLY_DATAREADY_OUT => HUB_REPLY_DATAREADY_OUT(next_point_num-1 downto first_point_num), + REPLY_DATA_OUT => HUB_REPLY_DATA_OUT(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH), + REPLY_PACKET_NUM_OUT => HUB_REPLY_PACKET_NUM_OUT(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH), + REPLY_READ_IN => HUB_REPLY_READ_IN(next_point_num-1 downto first_point_num), + STAT => HUB_STAT_CHANNEL((i+1)*32-1 downto i*32), + CTRL => HUB_CTRL_CHANNEL((i+1)*32-1 downto i*32), + CTRL_activepoints => HUB_CTRL_activepoints((i+1)*32-1 downto i*32) ); end generate; diff --git a/trb_net16_hub_func.vhd b/trb_net16_hub_func.vhd new file mode 100644 index 0000000..cb5687d --- /dev/null +++ b/trb_net16_hub_func.vhd @@ -0,0 +1,137 @@ +library ieee; +use ieee.std_logic_1164.all; +USE IEEE.numeric_std.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; +use work.trb_net_std.all; + +package trb_net16_hub_func is + + type hub_iobuf_config_t is array(0 to 255) of integer; + type hub_api_config_t is array(0 to 15) of integer; + + function calc_point_number (MII_NUMBER : integer; + CHANNEL : integer; + API_NUMBER : integer; + API_CHANNELS : hub_api_config_t; + TRG_NUMBER : integer; + TRG_CHANNELS : hub_api_config_t) + return integer; + + function calc_depth(POINT : integer; + MII_DEPTH : hub_iobuf_config_t; + API_DEPTH : hub_api_config_t; + MII_NUMBER : integer; + API_NUMBER : integer; + MUX_WIDTH : integer) + return integer; + + function calc_first_point_number (MII_NUMBER : integer; + CHANNEL : integer; + API_NUMBER : integer; + API_CHANNELS : hub_api_config_t; + TRG_NUMBER : integer; + TRG_CHANNELS : hub_api_config_t) + return integer; + + function calc_special_number(CHANNEL : integer; + NUMBER : integer; + CHANNELS : hub_api_config_t) + return integer; + + + function reportint(i : integer) + return integer; + + +end package trb_net16_hub_func; + +package body trb_net16_hub_func is + + function reportint(i : integer) + return integer is + begin + report integer'image(i); + return i; + end function; + + function calc_point_number (MII_NUMBER : integer; + CHANNEL : integer; + API_NUMBER : integer; + API_CHANNELS : hub_api_config_t; + TRG_NUMBER : integer; + TRG_CHANNELS : hub_api_config_t) + return integer is + variable tmp : integer := 0; + begin + tmp := MII_NUMBER; + report "MII"&integer'image(tmp); + for i in 0 to API_NUMBER-1 loop + if(API_CHANNELS(i) = CHANNEL) then + tmp := tmp + 1; + end if; + end loop; + report "API"&integer'image(tmp); + if TRG_NUMBER /= 0 then + for i in 0 to TRG_NUMBER-1 loop + if(TRG_CHANNELS(i) = CHANNEL) then + tmp := tmp + 1; + end if; + end loop; + end if; + report "ALL"&integer'image(tmp); + return tmp; + end function; + + function calc_special_number(CHANNEL : integer; + NUMBER : integer; + CHANNELS : hub_api_config_t) + return integer is + variable tmp : integer := 0; + begin + if NUMBER /= 0 then + for i in 0 to NUMBER-1 loop + if(CHANNELS(i) = CHANNEL) then + tmp := tmp + 1; + end if; + end loop; + end if; + return tmp; + end function; + + function calc_depth(POINT : integer; + MII_DEPTH : hub_iobuf_config_t; + API_DEPTH : hub_api_config_t; + MII_NUMBER : integer; + API_NUMBER : integer; + MUX_WIDTH : integer) + return integer is + begin + if(POINT < MII_NUMBER*2**(MUX_WIDTH-1)) then + return MII_DEPTH((POINT / MII_NUMBER)*16 + (POINT mod MII_NUMBER)); + elsif POINT < MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER then + return API_DEPTH(POINT-(MII_NUMBER*2**(MUX_WIDTH-1))); + else + return 0; + end if; + end function; + + + function calc_first_point_number (MII_NUMBER : integer; + CHANNEL : integer; + API_NUMBER : integer; + API_CHANNELS : hub_api_config_t; + TRG_NUMBER : integer; + TRG_CHANNELS : hub_api_config_t) + return integer is + variable tmp : integer := 0; + begin + if CHANNEL = 0 then + return 0; + end if; + for i in 0 to CHANNEL-1 loop + tmp := tmp + calc_point_number(MII_NUMBER,i,API_NUMBER,API_CHANNELS,TRG_NUMBER,TRG_CHANNELS); + end loop; + return tmp; + end function; + +end package body; \ No newline at end of file diff --git a/trb_net16_hub_logic.vhd b/trb_net16_hub_logic.vhd index 47d3693..7a7302b 100644 --- a/trb_net16_hub_logic.vhd +++ b/trb_net16_hub_logic.vhd @@ -9,7 +9,7 @@ use work.trb_net_std.all; entity trb_net16_hub_logic is generic ( --media interfaces - POINT_NUMBER : integer range 2 to 16 := 5; + POINT_NUMBER : integer range 2 to 32 := 5; --general settings DATA_WIDTH : integer range 16 to 16 := 16; @@ -215,7 +215,7 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; buf_INIT_READ_OUT <= init_arbiter_read_out when init_locked = '0' else (others => '0'); gen_init_pool_data0: for i in 0 to DATA_WIDTH-1 generate - process(INIT_DATA_IN) + process(INIT_DATA_IN, buf_INIT_READ_OUT) variable VAR_INIT_POOL_DATA : std_logic; begin VAR_INIT_POOL_DATA := '0'; @@ -227,7 +227,7 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; end generate; gen_init_pool_data2: for i in 0 to NUM_WIDTH-1 generate - process(INIT_PACKET_NUM_IN) + process(INIT_PACKET_NUM_IN, buf_INIT_READ_OUT) variable VAR_INIT_POOL_PACKET_NUM : std_logic; begin VAR_INIT_POOL_PACKET_NUM := '0'; @@ -473,11 +473,11 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; -- release is currently done after first packet of TRM gen_reply_point_lock : process(comb_REPLY_POOL_PACKET_NUM, comb_REPLY_POOL_DATAREADY, saved_REPLY_TYPE, comb_REPLY_muxed_PACKET_NUM, comb_REPLY_muxed_DATAREADY, - comb_REPLY_muxed_DATA) + comb_REPLY_muxed_DATA, buf_REPLY_READ_OUT, REPLY_MUX_reading) begin release_point_lock <= '0'; get_point_lock <= '0'; - if comb_REPLY_muxed_PACKET_NUM = "00" and or_all(buf_REPLY_READ_OUT and REPLY_MUX_reading) = '1' then + if comb_REPLY_muxed_PACKET_NUM = "00" and or_all(REPLY_MUX_reading and REPLY_DATAREADY_IN) = '1' then if comb_REPLY_muxed_DATA(2 downto 0) = TYPE_TRM then release_point_lock <= '1'; else @@ -558,9 +558,6 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; if current_state = SENDING_REPLY_TRM then comb_REPLY_POOL_DATAREADY <= REPLY_POOL_next_read; case packet_counter is - when "00" => - comb_REPLY_POOL_DATA <= (others => '0'); - comb_REPLY_POOL_DATA(2 downto 0) <= TYPE_TRM; when "01" => comb_REPLY_POOL_DATA <= REPLY_combined_trm_F1; when "10" => @@ -573,7 +570,8 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2; end if; when others => comb_REPLY_POOL_DATA <= (others => '0'); - end case; + comb_REPLY_POOL_DATA(2 downto 0) <= TYPE_TRM; + end case; end if; end process; diff --git a/trb_net_std.vhd b/trb_net_std.vhd index 65b224a..eb365cc 100644 --- a/trb_net_std.vhd +++ b/trb_net_std.vhd @@ -3,6 +3,8 @@ library ieee; use ieee.std_logic_1164.all; +USE IEEE.numeric_std.ALL; +USE IEEE.std_logic_UNSIGNED.ALL; package trb_net_std is @@ -15,7 +17,6 @@ package trb_net_std is function xor_all (arg : std_logic_vector) return std_logic; - subtype TYPE_POSITION is integer range 50 downto 48; constant TYPE_DAT : std_logic_vector(2 downto 0) := "000"; constant TYPE_HDR : std_logic_vector(2 downto 0) := "001"; @@ -49,24 +50,10 @@ package trb_net_std is constant F1_CHECK_ACK : std_logic_vector(15 downto 0) := x"0000"; subtype BUFFER_SIZE_POSITION is integer range 19 downto 16; - type mii_d51 is - record - INT_DATAREADY_OUT: STD_LOGIC; - INT_DATA_OUT: STD_LOGIC_VECTOR (51 downto 0); -- Data word - INT_READ_IN: STD_LOGIC; - INT_ERROR_OUT: STD_LOGIC_VECTOR (2 downto 0); -- Status bits - INT_DATAREADY_IN: STD_LOGIC; - INT_DATA_IN: STD_LOGIC_VECTOR (51 downto 0); -- Data word - INT_READ_OUT: STD_LOGIC; - INT_ERROR_IN: STD_LOGIC_VECTOR (2 downto 0); -- Status bits - end record; - - end package trb_net_std; package body trb_net_std is - function and_all (arg : std_logic_vector) return std_logic is variable tmp : std_logic := '1'; -- 2.43.0