1 -------------------------------------------------------------------------------     2 -- File       : AxiI2cQsfpReg.vhd     3 -- Company    : SLAC National Accelerator Laboratory     4 -- Created    : 2014-04-24     5 -- Last update: 2015-07-20     6 -------------------------------------------------------------------------------     7 -- Description: AXI-Lite Register Access 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_qsfp    36       -- I2C Register Interface    39       -- AXI-Lite Register Interface    44       -- Register Inputs/Outputs    46       config          : 
out AxiI2cQsfpConfigType;
    55       0             => MakeI2cAxiLiteDevType(    60       1             => MakeI2cAxiLiteDevType(    61          i2cAddress => "1010001",    -- Diagnostic Monitoring     66    constant NUM_WRITE_REG_C : positive := 5;
    67    constant STATUS_SIZE_C   : positive := 2;
    68    constant NUM_READ_REG_C  : positive := (STATUS_SIZE_C+1);
    71    signal rollOverEn : slv(STATUS_SIZE_C-1 downto 0);
    76    signal readRegister  : Slv32Array(0 to NUM_READ_REG_C-1)  := (others => x"00000000");
    77    signal writeRegister : Slv32Array(0 to NUM_WRITE_REG_C-1) := (others => x"00000000");
    93          -- AXI-Lite Register Interface    98          -- Optional User Read/Write Register Interface   105    -------------------------------               106    -- Synchronization: Outputs   107    -------------------------------   108    config.modSel <= writeRegister(
0)(
0);
   109    config.rst    <= writeRegister(
1)(
0);
   110    config.lpMode <= writeRegister(
2)(
0);
   111    rollOverEn    <= writeRegister(3)(STATUS_SIZE_C-1 downto 0);
   112    cntRst        <= writeRegister(4)(0);
   114    -------------------------------   115    -- Synchronization: Inputs   116    -------------------------------    126          -- Input Status bit Signals (wrClk domain)      127          statusIn
(1)  => status.modPrst,
   128          statusIn
(0)  => status.interrupt,
   129          -- Output Status bit Signals (rdClk domain)    130          statusOut
(1) => regIn.modPrst,
   131          statusOut
(0) => regIn.interrupt,
   132          -- Status Bit Counters Signals (rdClk domain)    136          -- Clocks and Reset Ports   140    readRegister(2)(1) <= regIn.modPrst;
   143    readRegister(1)(STATUS_CNT_WIDTH_G-1 downto 0) <= muxSlVectorArray(cntOut, 1);
  -- modPrstCnt   144    readRegister(0)(STATUS_CNT_WIDTH_G-1 downto 0) <= muxSlVectorArray(cntOut, 0);
  -- interruptCnt 
out i2cRegMasterInI2cRegMasterInType  
 
AXI_ERROR_RESP_Gslv( 1 downto  0)  :=   AXI_RESP_SLVERR_C
 
array(natural range <> ) of slv( 31 downto  0)   Slv32Array
 
out axiWriteSlaveAxiLiteWriteSlaveType  
 
out axiWriteSlaveAxiLiteWriteSlaveType  
 
out axiReadSlaveAxiLiteReadSlaveType  
 
in axiReadMasterAxiLiteReadMasterType  
 
in i2cRegMasterOutI2cRegMasterOutType  
 
array(natural range <> ,natural range <> ) of sl   SlVectorArray
 
in axiWriteMasterAxiLiteWriteMasterType  
 
array(natural range <> ) of I2cAxiLiteDevType   I2cAxiLiteDevArray
 
in statusAxiI2cQsfpStatusType  
 
COMMON_CLK_Gboolean  :=   false
 
DEVICE_MAP_GI2cAxiLiteDevArray  :=   I2C_AXIL_DEV_ARRAY_DEFAULT_C
 
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
 
AXI_ERROR_RESP_Gslv( 1 downto  0)  :=   AXI_RESP_SLVERR_C
 
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
 
out writeRegisterSlv32Array( 0 to    NUM_WRITE_REG_G)  
 
in i2cRegMasterOutI2cRegMasterOutType  
 
CNT_RST_EDGE_Gboolean  :=   true
 
NUM_READ_REG_Ginteger   range  1 to  128:= 1
 
STATUS_CNT_WIDTH_Gnatural   range  1 to  32:= 32
 
EN_USER_REG_Gboolean  :=   false
 
out i2cRegMasterInI2cRegMasterInType  
 
in readRegisterSlv32Array( 0 to    NUM_READ_REG_G)  :=( others => x"00000000")