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

📄 pci_oc.vhd

📁 ARM7的源代码
💻 VHD
📖 第 1 页 / 共 2 页
字号:
--         end if;--        v.wb.cab_o  := '0';        v.ahbslv.hburst := ahbsi.hburst;        v.ahbslv.htrans := ahbsi.htrans;        if ahbsi.haddr(31 downto 16) = "1010000000000000" then -- 0xA000          v.ahbslv.adr_o  := "0000000000000000" & ahbsi.haddr(15 downto 0);        else          v.ahbslv.adr_o  := ahbsi.haddr;          --0xa0010000-0xfffffffc        end if;        if (ahbsi.hsel and ahbsi.hready and ahbsi.htrans(1)) = '1' then--          if ahbsi.hsize = "010" then   --word            v.ahbslv.hready := '0';            v.ahbslv_state  := strobe;            v.ahbslv.we_o   := ahbsi.hwrite;--          end if; --ahbsi.hsize = word        end if; --ahbsi.hsel = '1'      when strobe  =>        v.ahbslv_state    := respond;        v.ahbslv.mdat_o   := ahbsi.hwdata;  --write specific        v.ahbslv.mdat_i    := wbmi.mdat_i;        vstb_o            := '1';        v.ahbslv.ack_i    := wbmi.ack_i;        v.ahbslv.rty_i    := wbmi.rty_i;        v.ahbslv.hready   := '0';        if r.ahbslv.hburst = "001" then          v.wb.cab_o := '1';--          v.ahbslv.hburst := ahbsi.hburst;        end if;              when respond =>        if r.ahbslv.ack_i = '1' then          v.ahbslv_state    := idle;          v.ahbslv.hrdata   := r.ahbslv.mdat_i;  --read specific        elsif r.ahbslv.rty_i = '1' then          v.ahbslv_state    := rty;          v.ahbslv.hready   := '0';          v.ahbslv.hresp    := hresp_retry;        else          vstb_o     := '1';              --fix          v.ahbslv.hready   := '0';          v.ahbslv.mdat_i   := wbmi.mdat_i;  --read specific          v.ahbslv.ack_i    := wbmi.ack_i;          v.ahbslv.rty_i    := wbmi.rty_i;        end if;        if (r.wb.cab_o = '1' and ahbsi.htrans(0) = '0') then          v.wb.cab_o := '0';        end if;--        if not r.ahbslv.hburst = "001" then          --          v.wb.cab_o := '0';--        end if;      when rty =>        v.ahbslv_state  := doreturn;      when doreturn =>        v.ahbslv_state  := idle;        v.ahbslv.hresp  := hresp_okay;      when others => null;    end case;--------------------------------------------------------------------------------    v.wb.stb_i := wbsi.stb_i;    v.wb.we_i := wbsi.we_i;    v.ahbmst.adr_i     := wbsi.adr_i(31 downto 0);    v.ahbmst.sdat_i    := wbsi.sdat_i;    v.rdata            := dmao.rdata;    vstart             := '0';    v.ahbmst.ack_o     := '0';    case r.ahbmst_state is      when idle =>        if r.wb.stb_i = '1' then          v.ahbmst_state := req;        end if;      when req  =>        if dmao.active = '1' and dmao.ready = '1' then          v.ahbmst.ack_o := '1';          v.ahbmst_state := respond;        else          vstart := '1';        end if;      when respond =>        v.ahbmst_state := idle;      when others => null;    end case;----------------------------------------------------------------------------------------------------------------------------------------------------------------    if apbi.psel = '1' then--      if apbi.pwrite = '1' then--        case apbi.paddr(7 downto 0) is--          when "00000000" =>--            v.AHB2WBCtrl        := apbi.pwdata;--          when others       => Null;--        end case;--      else--        case apbi.paddr(3 downto 0) is--         when "0000" =>--            vprdata     := r.AHB2WBCtrl;--          when others       => Null;--        end case;--      end if;--    end if;    if rst = '0' then      v.ahbslv_state          := idle;      v.ahbslv.hresp          := hresp_okay;      v.ahbslv.hready         := '1';      v.ahbslv.adr_o          := (others => '0');      v.ahbslv.hrdata         := (others => '0');      v.ahbslv.mdat_o         := (others => '0');      v.ahbslv.mdat_i         := (others => '0');      v.ahbslv.ack_i          := '0';      v.ahbslv.rty_i          := '0';      v.ahbslv.we_o           := '0';      v.ahbmst_state          := idle;      v.ahbmst.adr_i          := (others => '0');      v.ahbmst.ack_o          := '0';      v.ahbmst.sdat_i         := (others => '0');      v.rdata                 := (others => '0');--      v.AHB2WBCtrl            := (others => '0');      v.wb.cab_o      := '0';    end if;    wbmo.adr_o         <= r.ahbslv.adr_o;--    if is_x(v.ahbslv.mdat_o) then--      wbmo.mdat_o        <= (others => '0');--    else      wbmo.mdat_o        <= v.ahbslv.mdat_o;--    end if;    wbmo.we_o          <= r.ahbslv.we_o;    wbmo.stb_o         <= vstb_o;    ahbso.hready       <= r.ahbslv.hready;    ahbso.hresp        <= r.ahbslv.hresp;    wbmo.cab_o         <= v.wb.cab_o;--    if is_x(v.ahbslv.hrdata) then--      ahbso.hrdata       <= (others => '0');--    else      ahbso.hrdata       <= v.ahbslv.hrdata;--    end if;    ahbso.hsplit       <= (others => '0');    dmai.address       <= r.ahbmst.adr_i;--    if is_x(r.ahbmst.sdat_i) then--      dmai.wdata         <= (others => '0');--    else      dmai.wdata         <= r.ahbmst.sdat_i;--    end if;    dmai.start         <= vstart;    dmai.burst         <= '0';    dmai.write         <= r.wb.we_i;    dmai.size          <= "10";    wbso.ack_o         <= r.ahbmst.ack_o;    wbso.sdat_o        <= r.rdata;    wbso.rty_o         <= '0';    apbo.prdata        <= (others => '0');    pcio.pci_cbe3_en_n <= cbe_en(3);    pcio.pci_cbe2_en_n <= cbe_en(2);    pcio.pci_cbe1_en_n <= cbe_en(1);    pcio.pci_cbe0_en_n <= cbe_en(0);--    pcio.pci_serr_en_n <= '0';    pcio.pci_lock_en_n <= '1';--    pcio.pci_req_en_n  <= '1';    ocrst <= not rst;    irq <= '0';    rin <= v;  end process comb;  regs : process(clk)  begin    if rising_edge(clk) then      r <= rin;    end if;  end process;  ahbmst0 : ahbmst port map (rst, clk, dmai, dmao, ahbmi, ahbmo);  oc : pci_bridge32 port map (    PCI_CLK_i 		=> pci_clk,    PCI_AD_oe_o		=> pcio.pci_aden_n,    PCI_AD_i 		=> pcii.pci_adin,    PCI_AD_o 		=> pcio.pci_adout,    PCI_CBE_oe_o 		=> cbe_en,    PCI_CBE_i 		=> pcii.pci_cbein_n,    PCI_CBE_o 		=> pcio.pci_cbeout_n,    PCI_RST_oe_o	=> Open,        --not host    PCI_RST_i 		=> pcii.pci_rst_in_n,    PCI_RST_o 		=> Open,        --not host    PCI_INTA_oe_o	=> pcio.pci_int_en_n,    PCI_INTA_i 		=> highbits(0),    PCI_INTA_o 		=> pcio.pci_int_out_n,    PCI_REQ_oe_o	=> pcio.pci_req_en_n,    PCI_REQ_o 		=> pcio.pci_req_out_n,    PCI_GNT_i           => pcii.pci_gnt_in_n,    PCI_FRAME_oe_o	=> pcio.pci_frame_en_n,    PCI_FRAME_i		=> pcii.pci_frame_in_n,    PCI_FRAME_o           => pcio.pci_frame_out_n,    PCI_IRDY_oe_o	=> pcio.pci_irdy_en_n,    PCI_IRDY_i 		=> pcii.pci_irdy_in_n,    PCI_IRDY_o 		=> pcio.pci_irdy_out_n,    PCI_IDSEL_i		=> pcii.pci_idsel_in,    PCI_DEVSEL_oe_o	=> pcio.pci_devsel_en_n, --FIX    PCI_DEVSEL_i	=> pcii.pci_devsel_in_n,    PCI_DEVSEL_o	=> pcio.pci_devsel_out_n,    PCI_TRDY_oe_o	=> pcio.pci_trdy_en_n, --FIX    PCI_TRDY_i 		=> pcii.pci_trdy_in_n,    PCI_TRDY_o 		=> pcio.pci_trdy_out_n,    PCI_STOP_oe_o	=> pcio.pci_stop_en_n, --FIX    PCI_STOP_i 		=> pcii.pci_stop_in_n,    PCI_STOP_o 		=> pcio.pci_stop_out_n,    PCI_PAR_oe_o	=> pcio.pci_par_en_n,    PCI_PAR_i 		=> pcii.pci_par_in,    PCI_PAR_o 		=> pcio.pci_par_out,    PCI_PERR_oe_o	=> pcio.pci_perr_en_n,    PCI_PERR_i 		=> pcii.pci_perr_in_n,    PCI_PERR_o 		=> pcio.pci_perr_out_n,    PCI_SERR_oe_o	=> pcio.pci_serr_en_n,    PCI_SERR_o 		=> pcio.pci_serr_out_n,     -- SYSCON Signals     WB_CLK_I       => clk,     WB_RST_I       => ocrst,     WB_RST_O       => Open,     WB_INT_I       => lowbits(0),--negated and propagated to inta_out     WB_INT_O       => Open,                      --FIX     -- WISHBONE slave interface     WBS_ADR_I       => wbmo.adr_o,     WBS_DAT_I      => wbmo.mdat_o,     WBS_DAT_O      => wbmi.mdat_i,     WBS_SEL_I       => highbits(3 downto 0),     WBS_CYC_I       => highbits(0),     WBS_STB_I       => wbmo.stb_o,     WBS_WE_I        => wbmo.we_o,     WBS_CAB_I       => wbmo.cab_o,     WBS_ACK_O       => wbmi.ack_i,     WBS_RTY_O       => wbmi.rty_i,     WBS_ERR_O       => Open,     -- WISHBONE master interface     WBM_ADR_O       => wbsi.adr_i,     WBM_DAT_I      => wbso.sdat_o,     WBM_DAT_O      => wbsi.sdat_i,     WBM_SEL_O       => Open,     WBM_CYC_O       => Open,     WBM_STB_O       => wbsi.stb_i,     WBM_WE_O        => wbsi.we_i,     WBM_CAB_O       => Open,     WBM_ACK_I       => wbso.ack_o,     WBM_RTY_I       => wbso.rty_o,     WBM_ERR_I       => lowbits(0)     );end;

⌨️ 快捷键说明

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