diff --git a/packages/hw/aurora_drp_pkg/src/hdl/aurora_drp_pkg.vhd b/packages/hw/aurora_drp_pkg/src/hdl/aurora_drp_pkg.vhd index 3fd74db2d6f90792a6f25a0e92c4060c76e8d38a..7793741e21b156819644aa6e0e2486105e3a139b 100644 --- a/packages/hw/aurora_drp_pkg/src/hdl/aurora_drp_pkg.vhd +++ b/packages/hw/aurora_drp_pkg/src/hdl/aurora_drp_pkg.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.2 -- Description: DRP interface control signals for the Aurora phy. -- --- Last update: 2020-09-03 +-- Last update: 2020-10-12 -- --------------------------------------------------------------------------------- @@ -25,7 +25,7 @@ use ieee.numeric_std.all; package aurora_drp_pkg is - constant C_DRP_ADDR_SIZE : integer := 11; + constant C_DRP_ADDR_SIZE : integer := 9; constant C_DRP_DATA_SIZE : integer := 16; constant C_DRP_SEL_SIZE : integer := 2; constant C_DRP_SEL_NORTH : std_ulogic_vector((C_DRP_SEL_SIZE - 1) downto 0) := "00"; @@ -36,26 +36,28 @@ package aurora_drp_pkg is -- DRP Ports -- Master To Slave type t_drpm2s is record - DrpClkxC : std_logic; DrpAddrxD : std_ulogic_vector((C_DRP_ADDR_SIZE - 1) downto 0); DrpDIxD : std_ulogic_vector((C_DRP_DATA_SIZE - 1) downto 0); DrpEnxS : std_ulogic; DrpWExS : std_ulogic; end record t_drpm2s; + type t_drpm2s_vector is array (natural range <>) of t_drpm2s; + -- Slave To Master type t_drps2m is record DrpDOxD : std_ulogic_vector((C_DRP_DATA_SIZE - 1) downto 0); DrpRdyxS : std_ulogic; end record t_drps2m; + type t_drps2m_vector is array (natural range <>) of t_drps2m; + type t_drp is record M2S : t_drpm2s; S2M : t_drps2m; end record t_drp; - constant C_NO_DRP_M2S : t_drpm2s := (DrpClkxC => '0', - DrpAddrxD => (others => '0'), + constant C_NO_DRP_M2S : t_drpm2s := (DrpAddrxD => (others => '0'), DrpDIxD => (others => '0'), DrpEnxS => '0', DrpWExS => '0'); diff --git a/packages/hw/aurora_status_pkg/src/hdl/aurora_status_pkg.vhd b/packages/hw/aurora_status_pkg/src/hdl/aurora_status_pkg.vhd index 479d5a295206ce552acfc3683401f5e0f297ceeb..52f9349ed0544c0280ef4bc3b061b7d380ce45a2 100644 --- a/packages/hw/aurora_status_pkg/src/hdl/aurora_status_pkg.vhd +++ b/packages/hw/aurora_status_pkg/src/hdl/aurora_status_pkg.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.2 -- Description: Control and status signals for the Aurora phy. -- --- Last update: 2020-09-03 +-- Last update: 2020-10-06 -- --------------------------------------------------------------------------------- @@ -51,10 +51,10 @@ package aurora_status_pkg is end record t_aurora_gtp_diff_io_tx; constant C_AURORA_NO_GTP_DIFF_IO_RX : t_aurora_gtp_diff_io_rx := (RXPxD => (others => '0'), - RXNxD => (others => '0')); + RXNxD => (others => '0')); constant C_AURORA_NO_GTP_DIFF_IO_TX : t_aurora_gtp_diff_io_tx := (TXPxD => (others => '0'), - TXNxD => (others => '0')); + TXNxD => (others => '0')); type t_gtp_diff_ref_clk is record ClkPxC : std_ulogic; @@ -62,7 +62,7 @@ package aurora_status_pkg is end record t_gtp_diff_ref_clk; constant C_NO_GTP_DIFF_REF_CLK : t_gtp_diff_ref_clk := (ClkPxC => '0', - ClkNxC => '0'); + ClkNxC => '0'); type t_aurora_control is record LoopbackxD : std_ulogic_vector((C_LOOPBACK_SIZE - 1) downto 0); @@ -75,9 +75,9 @@ package aurora_status_pkg is constant C_MGTREFCLK1_SRC : std_ulogic := '1'; constant C_AURORA_NO_CONTROL : t_aurora_control := (LoopbackxD => (others => '0'), - PowerDownxS => '1', - GTPRefClkSrcxS => C_MGTREFCLK0_SRC, - InitClkLockedxS => '0'); + PowerDownxS => '1', + GTPRefClkSrcxS => C_MGTREFCLK0_SRC, + InitClkLockedxS => '0'); type t_laneup_vector is array (0 to (C_NB_GTP_CORE - 1)) of std_ulogic_vector((C_LANEUP_SIZE - 1) downto 0); @@ -94,24 +94,24 @@ package aurora_status_pkg is end record t_aurora_status; constant C_AURORA_NO_STATUS : t_aurora_status := (HardErrxD => (others => '0'), - SoftErrxD => (others => '0'), - FrameErrxD => (others => '0'), - LaneUpxD => (others => (others => '0')), - ChannelUpxD => (others => '0'), - RXResetDoneOutxD => (others => '0'), - TXResetDoneOutxD => (others => '0'), - TXLockxD => (others => '0'), - PllNotLockedxS => '1'); + SoftErrxD => (others => '0'), + FrameErrxD => (others => '0'), + LaneUpxD => (others => (others => '0')), + ChannelUpxD => (others => '0'), + RXResetDoneOutxD => (others => '0'), + TXResetDoneOutxD => (others => '0'), + TXLockxD => (others => '0'), + PllNotLockedxS => '1'); constant C_AURORA_STATUS_OK : t_aurora_status := (HardErrxD => (others => '0'), - SoftErrxD => (others => '0'), - FrameErrxD => (others => '0'), - LaneUpxD => (others => (others => '1')), - ChannelUpxD => (others => '1'), - RXResetDoneOutxD => (others => '1'), - TXResetDoneOutxD => (others => '1'), - TXLockxD => (others => '1'), - PllNotLockedxS => '1'); + SoftErrxD => (others => '0'), + FrameErrxD => (others => '0'), + LaneUpxD => (others => (others => '1')), + ChannelUpxD => (others => '1'), + RXResetDoneOutxD => (others => '1'), + TXResetDoneOutxD => (others => '1'), + TXLockxD => (others => '1'), + PllNotLockedxS => '1'); type t_aurora_crc is record CRCPassFailxSN : std_ulogic; @@ -119,37 +119,95 @@ package aurora_status_pkg is end record t_aurora_crc; constant C_AURORA_NO_CRC : t_aurora_crc := (CRCPassFailxSN => '0', - CRCValidxS => '0'); + CRCValidxS => '0'); constant C_AURORA_CRC_OK : t_aurora_crc := (CRCPassFailxSN => '1', - CRCValidxS => '1'); + CRCValidxS => '1'); constant C_AURORA_CRC_NO_OK : t_aurora_crc := (CRCPassFailxSN => '0', - CRCValidxS => '1'); + CRCValidxS => '1'); + + type t_gt_ref_slave_clk is record + GTRefClkxC : std_ulogic; + end record t_gt_ref_slave_clk; + + constant C_GT_REF_NO_SLAVE_CLK : t_gt_ref_slave_clk := (GTRefClkxC => '0'); + + type t_gt_common_slave_clk is record + GTRefClkxC : std_ulogic; + GTPLL0LockDetClkxC : std_ulogic; + CommonResetxR : std_ulogic; + end record t_gt_common_slave_clk; + + constant C_GT_COMMON_NO_SLAVE_CLK : t_gt_common_slave_clk := (GTRefClkxC => '0', + GTPLL0LockDetClkxC => '0', + CommonResetxR => '0'); + + type t_gt_common_master_clk is record + GTPLL0ClkxCO : std_ulogic; + GTPLL1ClkxCO : std_ulogic; + GTPLL0RefClkxC : std_ulogic; + GTPLL1RefClkxC : std_ulogic; + GTPLL0LockxS : std_ulogic; + GTPLL1LockxS : std_ulogic; + GTPLL0RefClkLostxS : std_ulogic; + end record t_gt_common_master_clk; + + constant C_GT_COMMON_NO_MASTER_CLK : t_gt_common_master_clk := (GTPLL0ClkxCO => '0', + GTPLL1ClkxCO => '0', + GTPLL0RefClkxC => '0', + GTPLL1RefClkxC => '0', + GTPLL0LockxS => '0', + GTPLL1LockxS => '0', + GTPLL0RefClkLostxS => '0'); type t_aurora_slave_clk is record InitClkxC : std_ulogic; DrpClkxC : std_ulogic; - GTClkxC : std_ulogic_vector((C_NUM_PLL - 1) downto 0); - GTClkLockedxD : std_ulogic_vector((C_NUM_PLL - 1) downto 0); + GTClkxC : std_ulogic; + GTClkLockedxS : std_ulogic; end record t_aurora_slave_clk; constant C_AURORA_NO_SLAVE_CLK : t_aurora_slave_clk := (InitClkxC => '0', - DrpClkxC => '0', - GTClkxC => (others => '0'), - GTClkLockedxD => (others => '0')); + DrpClkxC => '0', + GTClkxC => '0', + GTClkLockedxS => '0'); type t_aurora_master_clk is record InitClkxC : std_ulogic; - UserClkxC : std_ulogic_vector((C_NUM_PLL - 1) downto 0); - SyncClkxC : std_ulogic_vector((C_NUM_PLL - 1) downto 0); - PllNotLockedxD : std_ulogic_vector((C_NUM_PLL - 1) downto 0); + UserClkxC : std_ulogic; + SyncClkxC : std_ulogic; + PllNotLockedxS : std_ulogic; end record t_aurora_master_clk; constant C_AURORA_NO_MASTER_CLK : t_aurora_master_clk := (InitClkxC => '0', - UserClkxC => (others => '0'), - SyncClkxC => (others => '0'), - PllNotLockedxD => (others => '0')); + UserClkxC => '0', + SyncClkxC => '0', + PllNotLockedxS => '0'); + + type t_aurora_slave_reset is record + ResetxR : std_ulogic; + GTResetxR : std_ulogic; + end record t_aurora_slave_reset; + + constant C_AURORA_NO_SLAVE_RESET : t_aurora_slave_reset := (ResetxR => '0', + GTResetxR => '0'); + + type t_aurora_master_reset is record + SystemResetxR : std_ulogic; + GTResetxR : std_ulogic; + end record t_aurora_master_reset; + + constant C_AURORA_NO_MASTER_RESET : t_aurora_master_reset := (SystemResetxR => '0', + GTResetxR => '0'); + + type t_aurora_master_link_reset is record + SystemResetxR : std_ulogic_vector((C_NB_GTP_CORE - 1) downto 0); + LinkResetxR : std_ulogic_vector((C_NB_GTP_CORE - 1) downto 0); + end record t_aurora_master_link_reset; + + constant C_AURORA_NO_MASTER_LINK_RESET : t_aurora_master_link_reset := (SystemResetxR => (others => '0'), + LinkResetxR => (others => '0')); -- Functions diff --git a/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd b/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd index c241510cfa03792e570ec44f685feb95d91da7b3..88e0033df01efd4afaebbd2a9823acaaeaa28a9d 100644 --- a/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd +++ b/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.2 -- Description: AXI4 format bus signals. -- --- Last update: 2020-09-03 +-- Last update: 2020-10-12 -- --------------------------------------------------------------------------------- @@ -25,13 +25,14 @@ use ieee.numeric_std.all; package axi4_pkg is - constant C_AXI4_DATA_SIZE : integer range 0 to 32 := 32; - constant C_AXI4_KEEP_SIZE : integer range 0 to 32 := 4; - constant C_AXI4_UFC_DATA_SIZE : integer range 0 to 32 := 3; - constant C_AXI4_NFC_DATA_SIZE : integer range 0 to 32 := 4; - constant C_AXI4_DEST_SIZE : integer range 0 to 32 := 4; - constant C_AXI4_STRB_SIZE : integer range 0 to 32 := C_AXI4_KEEP_SIZE; -- Same as Keep - constant C_AXI4_USER_SIZE : integer range 0 to 32 := 32; + constant C_AXI4_DATA_SIZE : integer range 0 to 32 := 32; + constant C_AXI4_KEEP_SIZE : integer range 0 to 32 := 4; + constant C_AXI4_UFC_RX_DATA_SIZE : integer range 0 to 32 := 32; + constant C_AXI4_UFC_TX_DATA_SIZE : integer range 0 to 32 := 3; + constant C_AXI4_NFC_DATA_SIZE : integer range 0 to 32 := 4; + constant C_AXI4_DEST_SIZE : integer range 0 to 32 := 4; + constant C_AXI4_STRB_SIZE : integer range 0 to 32 := C_AXI4_KEEP_SIZE; -- Same as Keep + constant C_AXI4_USER_SIZE : integer range 0 to 32 := 32; -- AXI4 Framing -- Master to Slave @@ -84,23 +85,34 @@ package axi4_pkg is type t_axi4s2m_vector_vector is array (natural range <>) of t_axi4s2m_vector; -- AXI4 UFC - -- Master to Slave - type t_axi4ufcm2s is record + -- Master to Slave RX + type t_axi4ufcm2s_rx is record -- Big Endian - DataxD : std_ulogic_vector(0 to (C_AXI4_UFC_DATA_SIZE - 1)); + DataxD : std_ulogic_vector(0 to (C_AXI4_UFC_RX_DATA_SIZE - 1)); KeepxD : std_ulogic_vector(0 to (C_AXI4_KEEP_SIZE - 1)); + LastxS : std_ulogic; ValidxS : std_ulogic; - end record t_axi4ufcm2s; + end record t_axi4ufcm2s_rx; + + -- Master to Slave TX + type t_axi4ufcm2s_tx is record + -- Big Endian + DataxD : std_ulogic_vector(0 to (C_AXI4_UFC_TX_DATA_SIZE - 1)); + ValidxS : std_ulogic; + end record t_axi4ufcm2s_tx; -- Slave to Master - type t_axi4ufcs2m is record + type t_axi4ufcs2m_tx is record ReadyxS : std_ulogic; - end record t_axi4ufcs2m; - - constant C_NO_AXI4_UFC_M2S : t_axi4ufcm2s := (DataxD => (others => '0'), - KeepxD => (others => '0'), - ValidxS => '0'); - constant C_NO_AXI4_UFC_S2M : t_axi4ufcs2m := (ReadyxS => '0'); + end record t_axi4ufcs2m_tx; + + constant C_NO_AXI4_UFC_M2S_RX : t_axi4ufcm2s_rx := (DataxD => (others => '0'), + KeepxD => (others => '0'), + LastxS => '0', + ValidxS => '0'); + constant C_NO_AXI4_UFC_M2S_TX : t_axi4ufcm2s_tx := (DataxD => (others => '0'), + ValidxS => '0'); + constant C_NO_AXI4_UFC_S2M_TX : t_axi4ufcs2m_tx := (ReadyxS => '0'); -- AXI4 NFC -- Master to Slave