⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pci_io_virtex.vhd

📁 PCI的VHDL源码希望对大家有用!
💻 VHD
字号:
--*****************************************************************************
-- FILE    : PCI_IO_Virtex
-- DATE    : 1.9.1999
-- REVISION: 1.1
-- DESIGNER: KA
-- Descr   : Physical I/O Interface to PCI Pins for VIRTEX family
-- Entities: PCI_IO_Virtex
--           PCILOGIC
-- Changes :
-- ******************************************************
-- *    Physical I/O Interface Entity                   *
-- ******************************************************
library IEEE;
use IEEE.std_logic_1164.all;
-- pragma translate_off
library unisim;
use unisim.all;
-- pragma translate_on
entity PCI_IO_Virtex is
  port (
      -- ## PCI Interface External Signals ## --
      RSTn_p     : in    std_logic;                     -- Reset
      CLK_p      : in    std_logic;                     -- Clock
       -- Address & Data
      AD_p       : inout std_logic_vector(31 downto 0); -- Address/Data Bus
      CBE_p      : in std_logic_vector(3 downto 0);  -- Command/Byte Enable
      PAR_p      : inout std_logic;                     -- Parity
      -- Interface Control
      FRAMEn_p   : in std_logic;                     -- Transaction Frame
      IRDYn_p    : in std_logic;                     -- Initiator Ready
      TRDYn_p    : inout std_logic;                     -- Target Ready
      DEVSELn_p  : inout std_logic;                     -- Device Select
      STOPn_p    : inout std_logic;                     -- Stop transaction
      IDSEL_p    : in    std_logic;                     -- Chip Select
      -- Error Reporting
      PERRn_p    : inout   std_logic;                   -- Parity Error 
(s/t/s)
      SERRn_p    : inout   std_logic;                   -- System Error 
(o/d)
      -- Interrupt
      INTAn_p    : out   std_logic;                     -- Interrupt pin 
(o/d)
      --### SYSTEM I/F Signals
      RESET      : out std_logic;                        -- Chip Reset
      CLK        : out std_logic;                        -- Chip Clock
      -- Address & Data
      ADi        : out std_logic_vector(31 downto 0);    -- Address/Data Bus 
  IN
      ADo        : in  std_logic_vector(31 downto 0);    -- Address/Data Bus 
  OUT
      CBEi       : out std_logic_vector(3 downto 0);     -- Command/Byte 
Enable Direct IN
      CBEid      : out std_logic_vector(3 downto 0);     -- Command/Byte 
Enable Registered IN
      PARi       : out std_logic;              -- Parity In  (-> Board)
      PARid      : out std_logic;              -- Parity In  (-> Board)
      PARo       : in  std_logic;                        -- Parity Out 
(Board ->)
      --### System Control signals
      -- Direct PCI Inputs
      IDSELi      : out std_logic;
      FRAMEni     : out std_logic;
      IRDYni      : out std_logic;
      DEVSELni    : out std_logic;
      TRDYni      : out std_logic;
      STOPni      : out std_logic;
      -- Registered PCI Inputs
      IDSELid     : out std_logic;
      FRAMEnid    : out std_logic;
      IRDYnid     : out std_logic;
      DEVSELnid   : out std_logic;
      TRDYnid     : out std_logic;
      STOPnid     : out std_logic;
      -- PCI Outputs
      NEW_DEVSELno: in  std_logic;
      NEW_TRDYno  : in  std_logic;
      NEW_STOPno  : in  std_logic;
      -- Tristate buffer control
      OT_DEVSEL   : in  std_logic;
      OT_TRDY     : in  std_logic;
      OT_STOP     : in  std_logic;
      T_OT_AD     : in  std_logic; 	-- Target DATA Output Tristate control
      CE_ADo      : in  std_logic;
      T_CE_ADoRDY : in  std_logic;

      -- Interrupt
      INTAno      : in   std_logic; -- Interrupt
      -- Error Reporting
      PERRni      : out   std_logic; -- Parity Error In
      SERRni      : out   std_logic; -- System Error In
      PERRnid     : out   std_logic; -- Parity Error In
      SERRnid     : out   std_logic; -- System Error In
      NEW_PERRno  : in   std_logic;  -- Parity Error Out
      NEW_OTPERR  : in   std_logic;  -- Parity Error Buffer Control
      NEW_SERRno  : in   std_logic  -- System Error Out
   );
  end PCI_IO_Virtex;
--
library ieee;
use ieee.std_logic_1164.all;
entity PCILOGIC is
    port (PCI_CE : out std_logic;
          IRDY   : in  std_logic;
          T_CE_RDY   : in  std_logic;
          DIR_CEo : in  std_logic
          );
end PCILOGIC;

--
--
architecture Struct of PCI_IO_Virtex is
  component FDCE is
      generic(
      TimingChecksOn: Boolean := FALSE);
      port(
      Q   :	out   std_logic;
      D   :	in    std_logic;
      C   :	in    std_logic;
      CE  :	in    std_logic;
      CLR :	in    std_logic);
  end component;
  component FDPE is
      generic(
      TimingChecksOn: Boolean := FALSE);
    port(
      Q   :	out   std_logic;
      D   :	in    std_logic;
      C   :	in    std_logic;
      CE  :	in    std_logic;
      PRE :	in    std_logic
    );end component;
  component IBUF is
     port(
         I: in std_logic;
         O: out std_logic
     ); end component;
  component BUFGP is
     port(
         I: in std_logic;
         O: out std_logic
     ); end component;
  component OBUF is
     port(
         I: in std_logic;
         O: out std_logic
     ); end component;
  component OBUFT is
     port(
         I: in std_logic;
         O: out std_logic;
         T: in std_logic
     ); end component;
  component PCILOGIC
      port (
      PCI_CE: out std_logic;
      IRDY  : in  std_logic;
      T_CE_RDY: in  std_logic;
      DIR_CEo : in  std_logic
      );
   end component;
	-- Component declaration of the GEN_PAR unit
	-- File name contains GEN_PAR entity: .\G_PARITY.vhd
  component GEN_PAR
	port(
		RESET : in std_logic;
		CLK : in std_logic;
		CE_ADo : in std_logic;
		ADo : in std_logic_vector(31 downto 0);
		CBEi : in std_logic_vector(3 downto 0);
		NEW_PARo : out std_logic);
	end component;

   -- local signals
   signal CLKi, RESETn,RESETi : std_logic;
   signal IDSELil: std_logic;
   signal IRDYnil:  std_logic;
   signal TRDYnil:  std_logic;
   signal FRAMEnil:  std_logic;
   signal STOPnil: std_logic;
   signal LPARi: std_logic;
   signal DEVSELnil: std_logic;
   signal LGNTni  : std_logic;
   signal LPERRni  : std_logic;
   signal LSERRni  : std_logic;
--   signal FRAMEno:  std_logic;
--   signal IRDYno :  std_logic;
   signal DEVSELno : std_logic;
   signal TRDYno :  std_logic;
   signal STOPno : std_logic;
   signal L_OT_AD  : std_logic;
   signal OT_PAR,ParOut,PARod : std_logic;
   signal Log1,Log0 : std_logic;
   signal OT_ADo: std_logic_vector(31 downto 0);
   signal NEW_OT_ADo: std_logic;
   signal OT_CBE: std_logic_vector(3 downto 0);
   signal CE_ADob:std_logic_vector(3 downto 0);
   signal CBEc: std_logic_vector(3 downto 0);
   signal CBEod: std_logic_vector(3 downto 0);
   signal ADil: std_logic_vector(31 downto 0);
   signal ADol: std_logic_vector(31 downto 0);
   signal ADOT: std_logic_vector(31 downto 0);
   signal OT_IRDY: std_logic;
   signal PERRno: std_logic;
   signal SERRno: std_logic;
   signal OT_PERR : std_logic;
   signal OT_INTA : std_logic;
   signal T_OTAD, M_OTAD : std_logic;
   -- Component Attributes
   attribute IOB : string;
   attribute INIT : string;

begin
   Log0 <= '0';
   Log1 <= '1';
   -- #### RESET ####
   IB1: IBUF port map(I => RSTn_p, O => RESETn);
   AS1:RESETi <= not(RESETn);
   AS2:RESET  <= RESETi;
   -- #### Clock Buffer ####
   CB1: BUFGP port map(I => CLK_p, O => CLKi);-- Primary clock buffer
   AS3:CLK <= CLKi;
   -- #### TARGET SIGNALS ####
   -- IDSEL IOB
   IB2: IBUF port map(I => IDSEL_p, O => IDSELil);
   ASIO2:IDSELi <= IDSELil;                                                  
           -- Direct Input
   IFF2: FDCE port map(C=>CLKi, D=>IDSELil, Q=>IDSELid, CE=>Log1, 
CLR=>RESETi);	         -- Clocked Input
   -- FRAME# IOB
   IB3: IBUF port map(I => FRAMEn_p, O => FRAMEnil);                         
           -- Direct Input
   IFF3: FDPE  port map(C=> CLKi, D => FRAMEnil, Q => 
FRAMEnid,CE=>Log1,PRE=>RESETi);	   -- Clocked Input
   ASIO3:FRAMEni <= FRAMEnil;
   -- IRDY# IOB
   IB4: IBUF port map(I => IRDYn_p, O => IRDYnil); -- Direct Input
   IFF4: FDPE  port map(C=> CLKi, D => IRDYnil, Q => IRDYnid,CE=>Log1,PRE 
=>RESETi);	   -- Clocked Input
   ASIO4:IRDYni <= IRDYnil;
   -- TRDY# IOB
   IB5: IBUF port map(I => TRDYn_p, O => TRDYnil); -- Direct Input
   ASIO5:TRDYni <= TRDYnil;
   IFF5: FDPE  port map(C=> CLKi, D => TRDYnil, Q => 
TRDYnid,CE=>Log1,PRE=>RESETi);	   -- Clocked Input
   OFF5: FDPE  port map(C=> CLKi, D => NEW_TRDYno, Q => TRDYno,CE=>Log1,PRE 
=>RESETi);	   -- Clocked Input
   OB5: OBUFT port map(I=> TRDYno, O => TRDYn_p, T => OT_TRDY);
   -- STOP# IOB
   IB6: IBUF port map(I => STOPn_p, O => STOPnil);  -- Direct Input
   IFF6: FDPE  port map(C=> CLKi, D => STOPnil, Q => STOPnid, CE=>Log1, 
PRE=>RESETi);    -- Clocked Input
   OFF6: FDPE  port map(C=> CLKi, D => NEW_STOPno, Q => STOPno,CE=>Log1,PRE 
=>RESETi);	   -- Clocked Input
   OB6: OBUFT port map(I=> STOPno, O => STOPn_p, T => OT_STOP);
   ASIO6: STOPni <= STOPnil;
   -- DEVSEL# IOB
   IB7: IBUF port map(I => DEVSELn_p, O => DEVSELnil);    				-- Direct 
Input
   IFF7: FDPE  port map(C=> CLKi, D => DEVSELnil, Q => DEVSELnid, CE=>Log1, 
PRE=>RESETi);    -- Clocked Input
   OFF7: FDPE  port map(C=> CLKi, D => NEW_DEVSELno, Q => 
DEVSELno,CE=>Log1,PRE =>RESETi);	   -- Clocked Input
   OB7: OBUFT port map(I=> DEVSELno, O => DEVSELn_p, T => OT_DEVSEL);
   ASIO7: DEVSELni <= DEVSELnil;

   -- Interrupt Pin INTA# = Open Drain Output
   TFF8: FDPE  port map(C=> CLKi, D => INTAno, Q => OT_INTA,CE=>Log1,PRE 
=>RESETi);	   -- Clocked Input

   OB8: OBUFT port map(I=> Log0, O => INTAn_p  , T =>OT_INTA);
   --  C/BE#[3:0] Input
   CBEBUF:for I in 0 to 3 generate
      IBCBE: IBUF port map(I => CBE_p(I), O => CBEc(I));                     
              -- Input Buffer
      ASCBE: CBEi(I)<= CBEc(I);
      IFFCBE: FDCE  port map(C=> CLKi, D => CBEc(I), Q => CBEid(I), 
CE=>Log1, CLR=>RESETi); -- Clocked Input
   end generate;

   LPCI0 : PCILOGIC port map (
      PCI_CE => CE_ADob(0),
      IRDY   => IRDYnil,
      T_CE_RDY   => T_CE_ADoRDY,
      DIR_CEo    => CE_ADo
      );
   LPCI1 : PCILOGIC port map (
      PCI_CE => CE_ADob(1),
      IRDY   => IRDYnil,
      T_CE_RDY   => T_CE_ADoRDY,
      DIR_CEo    => CE_ADo
      );
   LPCI2 : PCILOGIC port map (
      PCI_CE => CE_ADob(2),
      IRDY   => IRDYnil,
      T_CE_RDY   => T_CE_ADoRDY,
      DIR_CEo    => CE_ADo
      );
   LPCI3 : PCILOGIC port map (
      PCI_CE => CE_ADob(3),
      IRDY   => IRDYnil,
      T_CE_RDY   => T_CE_ADoRDY,
      DIR_CEo    => CE_ADo
      );
   -- DATA Output buffer control
   ASADT0: NEW_OT_ADo <= T_OT_AD;
   -- PCI Data Bus
   ADBUF0: for S in 0 to 7 generate
      IBAD : IBUF port map(I=>AD_p(S), O=>ADil(S));                          
              -- Input Buffer
      IFF : FDCE port map(C=>CLKi, D=>ADil(S), Q=>ADi(S), CE=>Log1, 
CLR=>RESETi);         -- Clocked Input
      OFF : FDCE port map(C=>CLKi, D=>ADo(S), Q=>ADol(S), CE=>CE_ADob(0), 
CLR=>RESETi);       -- Clocked Output
      TFF : FDPE  port map(C=> CLKi, D => NEW_OT_ADo, Q => 
OT_ADo(S),CE=>Log1,PRE =>RESETi);	   -- Clocked Input
      OBAD : OBUFT port map(I=>ADol(S), O=> AD_p(S),  T=>OT_ADo(S));         
                 -- Output Buffer
   end generate;
   ADBUF1: for S in 8 to 15 generate
      IBAD : IBUF port map(I=>AD_p(S), O=>ADil(S));                          
              -- Input Buffer
      IFFAD : FDCE port map(C=>CLKi, D=>ADil(S), Q=>ADi(S), CE=>Log1, 
CLR=>RESETi);         -- Clocked Input
      OFFAD : FDCE port map(C=>CLKi, D=>ADo(S), Q=>ADol(S), CE=>CE_ADob(1), 
CLR=>RESETi);       -- Clocked Output
      TFF : FDPE  port map(C=> CLKi, D => NEW_OT_ADo, Q => 
OT_ADo(S),CE=>Log1,PRE =>RESETi);	   -- Clocked Input
      OBAD : OBUFT port map(I=>ADol(S), O=> AD_p(S),  T=>OT_ADo(S));         
                 -- Output Buffer
   end generate;
   ADBUF2: for S in 16 to 23 generate
      IBAD : IBUF port map(I=>AD_p(S), O=>ADil(S));                          
              -- Input Buffer
      IFFAD : FDCE port map(C=>CLKi, D=>ADil(S), Q=>ADi(S), CE=>Log1, 
CLR=>RESETi);         -- Clocked Input
      OFFAD : FDCE port map(C=>CLKi, D=>ADo(S), Q=>ADol(S), CE=>CE_ADob(2), 
CLR=>RESETi);       -- Clocked Output
      TFF : FDPE  port map(C=> CLKi, D => NEW_OT_ADo, Q => 
OT_ADo(S),CE=>Log1,PRE =>RESETi);	   -- Clocked Input
      OBAD : OBUFT port map(I=>ADol(S), O=> AD_p(S),  T=>OT_ADo(S));         
                 -- Output Buffer
   end generate;
   ADBUF3: for S in 24 to 31 generate
      IBAD  : IBUF port map(I=>AD_p(S), O=>ADil(S));                         
               -- Input Buffer
      IFFAD : FDCE port map(C=>CLKi, D=>ADil(S), Q=>ADi(S), CE=>Log1, 
CLR=>RESETi);         -- Clocked Input
      OFFAD : FDCE port map(C=>CLKi, D=>ADo(S), Q=>ADol(S), CE=>CE_ADob(3), 
CLR=>RESETi);       -- Clocked Output
      TFF   : FDPE  port map(C=> CLKi, D => NEW_OT_ADo, Q => 
OT_ADo(S),CE=>Log1,PRE =>RESETi);	   -- Clocked Input
      OBAD  : OBUFT port map(I=>ADol(S), O=> AD_p(S),  T=>OT_ADo(S));        
                  -- Output Buffer
   end generate;

   -- PARITY
	PG: GEN_PAR	port map(
   		RESET    => RESETi,
   		CLK      => CLKi,
   		CE_ADo   => CE_ADob(2),
   		ADo      => ADo,
   		CBEi     => CBEc,
   		NEW_PARo => ParOut
         );

   IBPAR : IBUF port map(I=> PAR_p, O=> LPARi);
   ASPAR : PARi <= LPARi;
   IFFPAR: FDCE port map(C => CLKi, D => LPARi, Q => PARid, CE => Log1, CLR 
=> RESETi);
   OTADFF: FDPE  port map(C=> CLKi, D => NEW_OT_ADo, Q => 
L_OT_AD,CE=>Log1,PRE =>RESETi);
   TFFPAR: FDPE port map(C => CLKi, D => L_OT_AD, Q => OT_PAR, CE => Log1, 
PRE =>RESETi);
   OFFPAR: FDCE port map(Q => PARod, D => ParOut, C => CLKi, CE => Log1, CLR 
=> RESETi);
   OBPAR : OBUFT port map(I=> PARod, O=> PAR_p,  T=>OT_PAR);
   -- Parity Error Reporting
   OFFPERR : FDCE port map(C => CLKi, D => NEW_PERRno, Q => PERRno, CE => 
Log1, CLR => RESETi);
   TFFERR: FDPE port map(C => CLKi, D => NEW_OTPERR, Q => OT_PERR, CE => 
Log1, PRE =>RESETi);
   PO2: OBUFT port map(I => PERRno, O => PERRn_p, T => OT_PERR);
--   PO2: OBUFT port map(I => Log0, O => PERRn_p, T => Log1);
   PI2: IBUF port map(I => PERRn_p, O => LPERRni);    				-- Direct Input
   PERRni <= LPERRni;
   IFFPERR : FDCE port map(C => CLKi, D =>LPERRni, Q =>PERRnid, CE => Log1, 
CLR => RESETi);

   -- System Error Reporting
   FFTSERR: FDPE port map(C => CLKi, D => NEW_SERRno, Q => SERRno, CE => 
Log1, PRE =>RESETi);
   PO3: OBUFT port map(I => Log0, O => SERRn_p, T => SERRno);
   PI3: IBUF port map(I => SERRn_p, O => LSERRni);    				-- Direct Input
   SERRni <= LSERRni;
   IFFSERR : FDCE port map(C => CLKi, D =>LSERRni, Q =>SERRnid, CE => Log1, 
CLR => RESETi);
   -- Bus Hanshake Signals
end Struct;
--
architecture RTL of PCILOGIC is
begin
   PCI_CE <= DIR_CEo or (T_CE_RDY and not IRDY);
end RTL;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -