From 9f797bc8e4234e71f17927f1b24024d157b83fdb Mon Sep 17 00:00:00 2001 From: hadeshyp Date: Fri, 13 Mar 2009 15:33:34 +0000 Subject: [PATCH] added dirty work-around for status registers, Jan --- optical_link/flexi_PCS_synch.vhd | 6 +- optical_link/hub.vhd | 134 ++++++++++++------------------- 2 files changed, 55 insertions(+), 85 deletions(-) diff --git a/optical_link/flexi_PCS_synch.vhd b/optical_link/flexi_PCS_synch.vhd index cc29378..cf80c15 100644 --- a/optical_link/flexi_PCS_synch.vhd +++ b/optical_link/flexi_PCS_synch.vhd @@ -29,7 +29,6 @@ entity flexi_PCS_synch is MED_PACKET_NUM_OUT : out std_logic_vector(HOW_MANY_CHANNELS*c_NUM_WIDTH-1 downto 0); MED_READ_IN : in std_logic_vector(HOW_MANY_CHANNELS-1 downto 0); MED_READ_OUT : out std_logic_vector(HOW_MANY_CHANNELS-1 downto 0); - MED_ERROR_OUT : out std_logic_vector(HOW_MANY_CHANNELS*3-1 downto 0); MED_STAT_OP : out std_logic_vector (HOW_MANY_CHANNELS*16-1 downto 0); MED_CTRL_OP : in std_logic_vector (HOW_MANY_CHANNELS*16-1 downto 0) ); @@ -57,10 +56,13 @@ architecture flexi_PCS_synch of flexi_PCS_synch is MED_READ_IN : in std_logic ); end component; + signal med_error : std_logic_vector(HOW_MANY_CHANNELS*3-1 downto 0); begin CHANNEL_GENERATE : for bit_index in 0 to HOW_MANY_CHANNELS-1 generate begin MED_READ_OUT <= (others => '1'); + MED_STAT_OP(bit_index*16+15 downto bit_index*16) <= "0000000000000" & med_error((bit_index*3+2) downto bit_index*3); + SYNCH :flexi_PCS_channel_synch port map ( @@ -80,7 +82,7 @@ begin DATA_VALID_OUT => MED_DATAREADY_OUT(bit_index), FLEXI_PCS_STATUS => FLEXI_PCS_SYNCH_STATUS((bit_index*16+15) downto bit_index*16), MED_PACKET_NUM_OUT => MED_PACKET_NUM_OUT(((bit_index+1)*c_NUM_WIDTH-1) downto bit_index*c_NUM_WIDTH), - MED_ERROR_OUT => MED_ERROR_OUT((bit_index*3+2) downto bit_index*3), + MED_ERROR_OUT => med_error((bit_index*3+2) downto bit_index*3), MED_READ_IN => MED_READ_IN(bit_index) ); end generate; diff --git a/optical_link/hub.vhd b/optical_link/hub.vhd index 7287a5f..f4d6eb1 100644 --- a/optical_link/hub.vhd +++ b/optical_link/hub.vhd @@ -229,7 +229,6 @@ architecture hub of hub is MED_PACKET_NUM_OUT : out std_logic_vector(HOW_MANY_CHANNELS*c_NUM_WIDTH-1 downto 0); MED_READ_IN : in std_logic_vector(HOW_MANY_CHANNELS-1 downto 0); MED_READ_OUT : out std_logic_vector(HOW_MANY_CHANNELS-1 downto 0); - MED_ERROR_OUT : out std_logic_vector(HOW_MANY_CHANNELS*3-1 downto 0); MED_STAT_OP : out std_logic_vector (HOW_MANY_CHANNELS*16-1 downto 0); MED_CTRL_OP : in std_logic_vector (HOW_MANY_CHANNELS*16-1 downto 0) ); @@ -244,29 +243,24 @@ architecture hub of hub is component trb_net16_hub_base is generic ( --hub control - HUB_CTRL_CHANNELNUM : integer range 0 to 3 := 3;--c_SLOW_CTRL_CHANNEL; + HUB_CTRL_CHANNELNUM : integer range 0 to 3 := c_SLOW_CTRL_CHANNEL; HUB_CTRL_DEPTH : integer range 0 to 6 := c_FIFO_BRAM; - HUB_USED_CHANNELS : hub_channel_config_t := (c_YES,c_YES,c_YES,c_YES); - USE_CHECKSUM : hub_channel_config_t := (c_YES,c_YES,c_YES,c_YES); + HUB_USED_CHANNELS : hub_channel_config_t := (c_YES,c_YES,c_NO,c_YES); + USE_CHECKSUM : hub_channel_config_t := (c_NO,c_YES,c_YES,c_YES); + USE_VENDOR_CORES : integer range 0 to 1 := c_YES; IBUF_SECURE_MODE : integer range 0 to 1 := c_NO; INIT_ADDRESS : std_logic_vector(15 downto 0) := x"F004"; INIT_UNIQUE_ID : std_logic_vector(63 downto 0) := (others => '0'); - COMPILE_TIME : std_logic_vector(31 downto 0) := x"00000000"; - COMPILE_VERSION : std_logic_vector(15 downto 0) := x"0001"; - HARDWARE_VERSION : std_logic_vector(31 downto 0) := x"12345678"; + COMPILE_TIME : std_logic_vector(31 downto 0) := x"00000000"; + COMPILE_VERSION : std_logic_vector(15 downto 0) := x"0001"; + HARDWARE_VERSION : std_logic_vector(31 downto 0) := x"12345678"; --media interfaces - MII_NUMBER : integer range 2 to c_MAX_MII_PER_HUB := 4; + MII_NUMBER : integer range 2 to c_MAX_MII_PER_HUB := 3; MII_IBUF_DEPTH : hub_iobuf_config_t := std_HUB_IBUF_DEPTH; - -- settings for apis - API_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 0; - API_CHANNELS : hub_api_config_t := (3,3,3,3,3,3,3,3); - API_TYPE : hub_api_config_t := (0,0,0,0,0,0,0,0); - API_FIFO_TO_INT_DEPTH : hub_api_config_t := (1,1,1,1,1,1,1,1); - API_FIFO_TO_APL_DEPTH : hub_api_config_t := (1,1,1,1,1,1,1,1); - --trigger reading interfaces - TRG_NUMBER : integer range 0 to c_MAX_TRG_PER_HUB := 0; - TRG_SECURE_MODE : integer range 0 to 1 := c_NO; - TRG_CHANNELS : hub_api_config_t := (0,1,0,0,0,0,0,0) + -- settings for external api connections + INT_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 0; + INT_CHANNELS : hub_api_config_t := (3,3,3,3,3,3,3,3); + INT_IBUF_DEPTH : hub_api_config_t := (6,6,6,6,6,6,6,6) ); port ( CLK : in std_logic; @@ -282,34 +276,25 @@ architecture hub of hub is MED_DATA_IN : in std_logic_vector (MII_NUMBER*c_DATA_WIDTH-1 downto 0); MED_PACKET_NUM_IN : in std_logic_vector (MII_NUMBER*c_NUM_WIDTH-1 downto 0); MED_READ_OUT : out std_logic_vector (MII_NUMBER-1 downto 0); - MED_ERROR_IN : in std_logic_vector (MII_NUMBER*3-1 downto 0); MED_STAT_OP : in std_logic_vector (MII_NUMBER*16-1 downto 0); MED_CTRL_OP : out std_logic_vector (MII_NUMBER*16-1 downto 0); - --API: interfaces - APL_DATA_IN : in std_logic_vector (VAL(API_NUMBER*c_DATA_WIDTH) downto 0); - APL_PACKET_NUM_IN : in std_logic_vector (VAL(API_NUMBER*c_NUM_WIDTH) downto 0); - APL_DATAREADY_IN : in std_logic_vector (VAL(API_NUMBER) downto 0); - APL_READ_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0); - APL_SHORT_TRANSFER_IN : in std_logic_vector (VAL(API_NUMBER) downto 0); - APL_DTYPE_IN : in std_logic_vector (VAL(API_NUMBER*4) downto 0); - APL_ERROR_PATTERN_IN : in std_logic_vector (VAL(API_NUMBER*32) downto 0); - APL_SEND_IN : in std_logic_vector (VAL(API_NUMBER) downto 0); - APL_TARGET_ADDRESS_IN : in std_logic_vector (VAL(API_NUMBER*16) downto 0); - APL_DATA_OUT : out std_logic_vector (VAL(API_NUMBER*c_DATA_WIDTH) downto 0); - APL_PACKET_NUM_OUT : out std_logic_vector (VAL(API_NUMBER*c_NUM_WIDTH) downto 0); - APL_TYP_OUT : out std_logic_vector (VAL(API_NUMBER*3) downto 0); - APL_DATAREADY_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0); - APL_READ_IN : in std_logic_vector (VAL(API_NUMBER) downto 0); - APL_RUN_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0); - APL_MY_ADDRESS_IN : in std_logic_vector (VAL(API_NUMBER*16) downto 0); - APL_SEQNR_OUT : out std_logic_vector (VAL(API_NUMBER*8) downto 0); - --TRG interfaces - TRG_GOT_TRIGGER_OUT : out std_logic_vector (VAL(TRG_NUMBER) downto 0); - TRG_ERROR_PATTERN_OUT : out std_logic_vector (VAL(TRG_NUMBER*32) downto 0); - TRG_DTYPE_OUT : out std_logic_vector (VAL(TRG_NUMBER*4) downto 0); - TRG_SEQNR_OUT : out std_logic_vector (VAL(TRG_NUMBER*8) downto 0); - TRG_ERROR_PATTERN_IN : in std_logic_vector (VAL(TRG_NUMBER*32) downto 0); - TRG_RELEASE_IN : in std_logic_vector (VAL(TRG_NUMBER) downto 0); + --INT: interfaces to connect APIs + INT_INIT_DATAREADY_OUT : out std_logic_vector (INT_NUMBER downto 0); + INT_INIT_DATA_OUT : out std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0); + INT_INIT_PACKET_NUM_OUT : out std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0); + INT_INIT_READ_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0'); + INT_INIT_DATAREADY_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0'); + INT_INIT_DATA_IN : in std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0) := (others => '0'); + INT_INIT_PACKET_NUM_IN : in std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0) := (others => '0'); + INT_INIT_READ_OUT : out std_logic_vector (INT_NUMBER downto 0); + INT_REPLY_DATAREADY_OUT : out std_logic_vector (INT_NUMBER downto 0); + INT_REPLY_DATA_OUT : out std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0); + INT_REPLY_PACKET_NUM_OUT : out std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0); + INT_REPLY_READ_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0'); + INT_REPLY_DATAREADY_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0'); + INT_REPLY_DATA_IN : in std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0) := (others => '0'); + INT_REPLY_PACKET_NUM_IN : in std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0) := (others => '0'); + INT_REPLY_READ_OUT : out std_logic_vector (INT_NUMBER downto 0); ONEWIRE : inout std_logic; --Fixed status and control ports HUB_STAT_CHANNEL : out std_logic_vector (2**(c_MUX_WIDTH-1)*16-1 downto 0); @@ -331,6 +316,7 @@ architecture hub of hub is CTRL_DEBUG : in std_logic_vector (31 downto 0) --free control regs for debugging ); end component; + component simpleupcounter_16bit port ( QOUT : out std_logic_vector(15 downto 0); @@ -345,20 +331,6 @@ architecture hub of hub is CLK : in std_logic; CLR : in std_logic); end component; - component trb_net_onewire - generic ( - USE_TEMPERATURE_READOUT : integer range 0 to 1; - CLK_PERIOD : integer); - port ( - CLK : in std_logic; - RESET : in std_logic; - ONEWIRE : inout std_logic; - DATA_OUT : out std_logic_vector(15 downto 0); - ADDR_OUT : out std_logic_vector(2 downto 0); - WRITE_OUT : out std_logic; - TEMP_OUT : out std_logic_vector(11 downto 0); - STAT : out std_logic_vector(31 downto 0)); - end component; component edge_to_pulse port ( clock : in std_logic; @@ -741,10 +713,10 @@ begin MED_PACKET_NUM_OUT => med_packet_num_out_i, MED_READ_IN => med_read_in_i, MED_READ_OUT => med_read_out_i, - MED_ERROR_OUT => med_error_out_i, MED_STAT_OP => med_stat_op_i, MED_CTRL_OP => med_ctrl_op_i ); + ADO_TTL(34 downto 19) <= flexi_pcs_synch_status_i(2 downto 0) & med_packet_num_out_i(1 downto 0) & rx_k_i(1 downto 0) & rxd_i(3 downto 0) & med_dataready_out_i(0) & med_data_out_i(3 downto 0); -- ADO_TTL(34 downto 19) <= med_dataready_out_i(0)& med_data_out_i(14 downto 0); ADO_TTL(15 downto 0) <= med_read_out_i(0) & flexi_pcs_synch_status_i(7 downto 6) & med_packet_num_in_i(1 downto 0) & tx_k_i(1 downto 0) & txd_synch_i(3 downto 0) & med_dataready_in_i(0) & med_data_in_i(3 downto 0); @@ -754,6 +726,9 @@ begin HUB_API: trb_net16_hub_base + generic map( + MII_NUMBER => HOW_MANY_CHANNELS + ) port map ( CLK => LVDS_CLK_200P, RESET => global_reset_i, @@ -766,32 +741,24 @@ begin MED_DATA_IN => med_data_out_i, MED_PACKET_NUM_IN => med_packet_num_out_i, MED_READ_OUT => med_read_in_i, - MED_ERROR_IN => med_error_out_i, MED_STAT_OP => med_stat_op_i, MED_CTRL_OP => med_ctrl_op_i, - APL_DATA_IN => (others => '0'), - APL_PACKET_NUM_IN => (others => '0'), - APL_DATAREADY_IN => (others => '0'), - APL_READ_OUT => open, - APL_SHORT_TRANSFER_IN => (others => '0'), - APL_DTYPE_IN => (others => '0'), - APL_ERROR_PATTERN_IN => (others => '0'), - APL_SEND_IN => (others => '0'), - APL_TARGET_ADDRESS_IN => (others => '0'), - APL_DATA_OUT => open, - APL_PACKET_NUM_OUT => open, - APL_TYP_OUT => open, - APL_DATAREADY_OUT => open, - APL_READ_IN => (others => '0'), - APL_RUN_OUT => open, - APL_MY_ADDRESS_IN => (others => '0'), - APL_SEQNR_OUT => open, - TRG_GOT_TRIGGER_OUT => open, - TRG_ERROR_PATTERN_OUT => open, - TRG_DTYPE_OUT => open, - TRG_SEQNR_OUT => open, - TRG_ERROR_PATTERN_IN => (others => '0'), - TRG_RELEASE_IN => (others => '0'), + INT_INIT_DATAREADY_OUT => open, + INT_INIT_DATA_OUT => open, + INT_INIT_PACKET_NUM_OUT => open, + INT_INIT_READ_IN => (others => '1'), + INT_INIT_DATAREADY_IN => (others => '0'), + INT_INIT_DATA_IN => (others => '0'), + INT_INIT_PACKET_NUM_IN => (others => '0'), + INT_INIT_READ_OUT => open, + INT_REPLY_DATAREADY_OUT => open, + INT_REPLY_DATA_OUT => open, + INT_REPLY_PACKET_NUM_OUT => open, + INT_REPLY_READ_IN => (others => '1'), + INT_REPLY_DATAREADY_IN => (others => '0'), + INT_REPLY_DATA_IN => (others => '0'), + INT_REPLY_PACKET_NUM_IN => (others => '0'), + INT_REPLY_READ_OUT => open, ONEWIRE => FS_PE_11, HUB_STAT_CHANNEL => hub_stat_channel_i, HUB_STAT_GEN => hub_stat_gen_i, @@ -805,6 +772,7 @@ begin CTRL_DEBUG => HUB_CTRL_DEBUG ); + TRB_HUB_INT : trb_hub_interface port map ( CLK => LVDS_CLK_200P, -- 2.43.0