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

📄 pci_oc.vhd

📁 ARM7的源代码
💻 VHD
📖 第 1 页 / 共 2 页
字号:
------------------------------------------------------------------------------  This file is a part of the LEON VHDL model--  Copyright (C) 2003 Gaisler Research----  This library is free software; you can redistribute it and/or--  modify it under the terms of the GNU Lesser General Public--  License as published by the Free Software Foundation; either--  version 2 of the License, or (at your option) any later version.----  See the file COPYING.LGPL for the full details of the license.------------------------------------------------------------------------------ Entity: 	pci_oc-- File:	pci_oc.vhd-- Description:	Backend for Opencores PCI_IF-- Author:     	Daniel Hedberg, Gaisler Research--------------------------------------------------------------------------------  ReadMe.txt--  This backend enables access from PCI to AHB and vice-versa. The address--  mappings are as follows:--  --  PCI to AHB access----  BAR0 (MEM area - 4KB)----  0x000 - 0x0FF	PCI conf. space--  0x100 - 0x1F0	Opencores device specific conf. space--  --  BAR1 (MEM area - 1 MB)--  --  PCI				AHB--  0x00000 - 0xFFFFC		0x[000]00000 - 0x[000]FFFFC--  --  Values within [default] are configurable in Opencores device specific--  conf. space.--  EXAMPLE: How to map an access to AHB address 0x4000_1000?--  Write 0x4 to P_IMG_CTRL1 reg at 0x110 to enable translation--  Write 0x4000_1000 to P_TA1 reg at 0x11C--  For further information refer to Opencores specification--  --  AHB to PCI access--  --  AHB                                   PCI--  0xA000_0000 - 0xA000_FFFC             0x0000 - 0xFFFC (I/O access)--  0xA001_0000 - 0xA001_01F0 (Read only) Opencores device specific conf. space--  0xC000_0000 - 0xFFFF_FFFC             0xC000_0000 - 0xFFFF_FFFC (MEM access)---- --  How to configure the verilog core (all.v)--  --  FIFO implementaion: To get an implemention with flip-flops instead of RAMB4--  comment the lines marked with "//comment for flip-flops"----  To alter default values for how Wishbone addresses are mapped on PCI 16195--  edit line 16195 to 16221 and 349 to 357-------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;use work.amba.all;use work.ambacomp.all;use work.leon_iface.all;entity pci_oc is   port (      rst  : in  std_logic;      clk  : in  std_logic;      pci_clk : in std_logic;      ahbsi : in  ahb_slv_in_type;      ahbso : out ahb_slv_out_type;      ahbmi : in  ahb_mst_in_type;      ahbmo : out ahb_mst_out_type;      apbi  : in  apb_slv_in_type;      apbo  : out apb_slv_out_type;      pcio  : out pci_out_type;      pcii  : in  pci_in_type;      irq   : out std_logic      );end;architecture rtl of pci_oc istype wb_mst_in_type is record  mdat_i : std_logic_vector(31 downto 0);      -- binary data bus  rty_i  : std_logic;  ack_i  : std_logic;                          -- data availableend record;                                                                                                                                       type wb_mst_out_type is record  adr_o  : std_logic_vector(31 downto 0); 	-- address bus (byte)   mdat_o : std_logic_vector(31 downto 0); 	-- binary data bus      we_o   : std_logic;  stb_o  : std_logic;  cab_o  : std_logic;end record;                                                                           type wb_slv_in_type is record  adr_i  : std_logic_vector(31 downto 0);  sdat_i : std_logic_vector(31 downto 0);  we_i   : std_logic;  stb_i  : std_logic;end record;type wb_slv_out_type is record   ack_o  : std_logic;				-- data available   rty_o  : std_logic;  sdat_o : std_logic_vector(31 downto 0);	-- binary data bus    end record;              type ahbslv_state_type is (idle, strobe, respond, rty, doreturn);  type ahbmst_state_type is (idle, req, respond);  type ahbslv_reg_type is record                     hresp      : std_logic_vector(1 downto 0);                     hready     : std_logic;                     adr_o      : std_logic_vector(31 downto 0);                     hrdata     : std_logic_vector(31 downto 0);                     mdat_o     : std_logic_vector(31 downto 0);                     mdat_i     : std_logic_vector(31 downto 0);                     ack_i      : std_logic;                     rty_i      : std_logic;                     we_o       : std_logic;                     hburst     : std_logic_vector(2 downto 0);                     htrans     : std_logic_vector(1 downto 0);                   end record;  type ahbmst_reg_type is record                     adr_i       : std_logic_vector(31 downto 0);                     ack_o       : std_logic;                     sdat_i      : std_logic_vector(31 downto 0);                   end record;  type wb_reg_type is record                     stb_i     : std_logic;                     we_i      : std_logic;                     cab_o     : std_logic;                   end record;  type reg_type is record                     ahbslv_state   : ahbslv_state_type;                     ahbmst_state   : ahbmst_state_type;                     ahbslv         : ahbslv_reg_type;                     ahbmst         : ahbmst_reg_type;                     rdata          : std_logic_vector(31 downto 0);                     wb             : wb_reg_type;  --                   AHB2WBCtrl     : std_logic_vector(31 downto 0); --31:29=WB_TA,0=WB_TA enable,                   end record;  signal r, rin : reg_type;  signal highbits : std_logic_vector(31 downto 0);  signal lowbits : std_logic_vector(31 downto 0);  signal occlk : std_logic;  signal ocrst : std_logic;  signal cbe_en : std_logic_vector(3 downto 0);  signal wbmi : wb_mst_in_type;  signal wbmo : wb_mst_out_type;  signal wbsi : wb_slv_in_type;  signal wbso : wb_slv_out_type;  signal dmai : ahb_dma_in_type;  signal dmao : ahb_dma_out_type;  component pci_bridge32    port (      PCI_CLK_i : in std_logic;      PCI_AD_oe_o : out std_logic_vector(31 downto 0);      PCI_AD_i : in std_logic_vector(31 downto 0);      PCI_AD_o : out std_logic_vector(31 downto 0);      PCI_CBE_oe_o : out std_logic_vector(3 downto 0);      PCI_CBE_i : in std_logic_vector(3 downto 0);      PCI_CBE_o : out std_logic_vector(3 downto 0);      PCI_RST_oe_o : out std_logic;      PCI_RST_i : in std_logic;      PCI_RST_o : out std_logic;      PCI_INTA_oe_o : out std_logic;      PCI_INTA_i : in std_logic;      PCI_INTA_o : out std_logic;      PCI_REQ_oe_o : out std_logic;      PCI_REQ_o : out std_logic;      PCI_GNT_i: in std_logic;      PCI_FRAME_oe_o : out std_logic;      PCI_FRAME_i : in std_logic;      PCI_FRAME_o : out std_logic;      PCI_IRDY_oe_o : out std_logic;      PCI_IRDY_i : in std_logic;      PCI_IRDY_o : out std_logic;      PCI_IDSEL_i: in std_logic;      PCI_DEVSEL_oe_o : out std_logic;      PCI_DEVSEL_i : in std_logic;      PCI_DEVSEL_o : out std_logic;      PCI_TRDY_oe_o : out std_logic;      PCI_TRDY_i : in std_logic;      PCI_TRDY_o : out std_logic;      PCI_STOP_oe_o : out std_logic;      PCI_STOP_i : in std_logic;      PCI_STOP_o : out std_logic;      PCI_PAR_oe_o : out std_logic;      PCI_PAR_i : in std_logic;      PCI_PAR_o : out std_logic;      PCI_PERR_oe_o : out std_logic;      PCI_PERR_i : in std_logic;      PCI_PERR_o : out std_logic;      PCI_SERR_oe_o : out std_logic;      PCI_SERR_o : out std_logic;      WB_CLK_I: in std_logic;      WB_RST_I: in std_logic;      WB_RST_O: out std_logic;      WB_INT_I: in std_logic;      WB_INT_O: out std_logic;    -- WISHBONE slave interface      WBS_ADR_I: in std_logic_vector(31 downto 0);      WBS_DAT_I: in std_logic_vector(31 downto 0);      WBS_DAT_O: out std_logic_vector(31 downto 0);      WBS_SEL_I: in std_logic_vector(3 downto 0);      WBS_CYC_I: in std_logic;      WBS_STB_I: in std_logic;      WBS_WE_I: in std_logic;      WBS_CAB_I: in std_logic;      WBS_ACK_O: out std_logic;      WBS_RTY_O: out std_logic;      WBS_ERR_O: out std_logic;    -- WISHBONE master interface      WBM_ADR_O: out std_logic_vector(31 downto 0);      WBM_DAT_I: in std_logic_vector(31 downto 0);      WBM_DAT_O: out std_logic_vector(31 downto 0);      WBM_SEL_O: out std_logic_vector(3 downto 0);      WBM_CYC_O: out std_logic;      WBM_STB_O: out std_logic;      WBM_WE_O: out std_logic;      WBM_CAB_O: out std_logic;      WBM_ACK_I: in std_logic;      WBM_RTY_I: in std_logic;      WBM_ERR_I: in std_logic    );  end component;begin  lowbits <= (others => '0');  highbits <= (others => '1');  comb: process (r, ahbsi, wbmi, rst, cbe_en,                 ahbmi, wbsi, dmao)    variable v : reg_type;    variable vstb_o, vstart : std_logic;    variable vprdata : std_logic_vector(31 downto 0);--    variable vAHB_TA : std_logic_vector(31 downto 29);--    variable vAHB_TA_enable : boolean;  begin  -- process comb    v := r;    vstb_o  := '0';    v.ahbslv.hready := '1';--    v.wb.cab_o      := '0';--    vAHB_TA       := r.AHB2WBCtrl(31 downto 29);--    if r.AHB2WBCtrl(0) = '1' then--      vAHB_TA_enable := true;--    else--      vAHB_TA_enable := false;--    end if;    case r.ahbslv_state is      when idle   =>        v.ahbslv.ack_i := '0';--         if not r.ahbslv.hburst = "001" then--           v.wb.cab_o := '0';

⌨️ 快捷键说明

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