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