1 ------------------------------------------------------------------------------- 2 -- File : AxiI2cSfpReg.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2014-04-18 5 -- Last update: 2015-07-20 6 ------------------------------------------------------------------------------- 7 -- Description: AXI-Lite Register Acess Module 8 ------------------------------------------------------------------------------- 9 -- This file is part of 'SLAC Firmware Standard Library'. 10 -- It is subject to the license terms in the LICENSE.txt file found in the 11 -- top-level directory of this distribution and at: 12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 13 -- No part of 'SLAC Firmware Standard Library', including this file, 14 -- may be copied, modified, propagated, or distributed except according to 15 -- the terms contained in the LICENSE.txt file. 16 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.std_logic_unsigned.
all;
21 use ieee.std_logic_arith.
all;
29 --! @ingroup devices_transceivers_sfp 37 -- I2C Register Interface 40 -- AXI-Lite Register Interface 45 -- Register Inputs/Outputs 47 config :
out AxiI2cSfpConfigType;
56 0 => MakeI2cAxiLiteDevType( 61 1 => MakeI2cAxiLiteDevType( 62 i2cAddress => "1010001", -- Diagnostic Monitoring 67 constant NUM_WRITE_REG_C : positive := 4;
68 constant STATUS_SIZE_C : positive := 3;
69 constant NUM_READ_REG_C : positive := (STATUS_SIZE_C+1);
71 constant WRITE_REG_INIT_C : Slv32Array(0 to NUM_WRITE_REG_C-1) := ( 72 0 => x"00000000", -- config.txDisable 73 1 => x"00000003", -- config.rateSel 74 2 => x"00000000", -- rollOverEn 75 3 => x"00000000");
-- cntRst 78 signal rollOverEn : slv(STATUS_SIZE_C-1 downto 0);
83 signal readRegister : Slv32Array(0 to NUM_READ_REG_C-1) := (others => x"00000000");
84 signal writeRegister : Slv32Array(0 to NUM_WRITE_REG_C-1) := (others => x"00000000");
100 -- AXI-Lite Register Interface 105 -- Optional User Read/Write Register Interface 113 ------------------------------- 114 -- Synchronization: Outputs 115 ------------------------------- 116 config.txDisable <= writeRegister(
0)(
0)
when(ALLOW_TX_DISABLE_G = true)
else '0';
117 config.rateSel <= writeRegister(
1)(
1 downto 0);
118 rollOverEn <= writeRegister(2)(STATUS_SIZE_C-1 downto 0);
119 cntRst <= writeRegister(3)(0);
121 ------------------------------- 122 -- Synchronization: Inputs 123 ------------------------------- 133 -- Input Status bit Signals (wrClk domain) 134 statusIn
(2) => status.txFault,
135 statusIn
(1) => status.moduleDetL,
136 statusIn
(0) => status.rxLoss,
137 -- Output Status bit Signals (rdClk domain) 138 statusOut
(2) => regIn.txFault,
139 statusOut
(1) => regIn.moduleDetL,
140 statusOut
(0) => regIn.rxLoss,
141 -- Status Bit Counters Signals (rdClk domain) 145 -- Clocks and Reset Ports 149 readRegister(3)(2) <= regIn.txFault;
151 readRegister(3)(0) <= regIn.rxLoss;
153 readRegister(2)(STATUS_CNT_WIDTH_G-1 downto 0) <= muxSlVectorArray(cntOut, 2);
-- txFaultCnt 154 readRegister(1)(STATUS_CNT_WIDTH_G-1 downto 0) <= muxSlVectorArray(cntOut, 1);
-- moduleDetCnt 155 readRegister(0)(STATUS_CNT_WIDTH_G-1 downto 0) <= muxSlVectorArray(cntOut, 0);
-- rxLossCnt
out axiReadSlaveAxiLiteReadSlaveType
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
array(natural range <> ) of slv( 31 downto 0) Slv32Array
in axiWriteMasterAxiLiteWriteMasterType
out axiWriteSlaveAxiLiteWriteSlaveType
in axiReadMasterAxiLiteReadMasterType
array(natural range <> ,natural range <> ) of sl SlVectorArray
array(natural range <> ) of I2cAxiLiteDevType I2cAxiLiteDevArray
COMMON_CLK_Gboolean := false
DEVICE_MAP_GI2cAxiLiteDevArray := I2C_AXIL_DEV_ARRAY_DEFAULT_C
in i2cRegMasterOutI2cRegMasterOutType
in axiWriteMasterAxiLiteWriteMasterType
out cntOutSlVectorArray ( WIDTH_G- 1 downto 0, CNT_WIDTH_G- 1 downto 0)
out axiReadSlaveAxiLiteReadSlaveType
CNT_WIDTH_Gpositive := 32
slv( 1 downto 0) := "10" AXI_RESP_SLVERR_C
STATUS_CNT_WIDTH_Gnatural range 1 to 32:= 32
in axiReadMasterAxiLiteReadMasterType
in rollOverEnInslv( WIDTH_G- 1 downto 0) :=( others => '0')
NUM_WRITE_REG_Ginteger range 1 to 128:= 1
slv( 9 downto 0) i2cAddress
in writeRegisterInitSlv32Array( 0 to NUM_WRITE_REG_G) :=( others => x"00000000")
out writeRegisterSlv32Array( 0 to NUM_WRITE_REG_G)
out axiWriteSlaveAxiLiteWriteSlaveType
in i2cRegMasterOutI2cRegMasterOutType
CNT_RST_EDGE_Gboolean := true
out i2cRegMasterInI2cRegMasterInType
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_SLVERR_C
NUM_READ_REG_Ginteger range 1 to 128:= 1
EN_USER_REG_Gboolean := false
out i2cRegMasterInI2cRegMasterInType
in readRegisterSlv32Array( 0 to NUM_READ_REG_G) :=( others => x"00000000")
ALLOW_TX_DISABLE_Gboolean := false
in statusAxiI2cSfpStatusType