FPGA 实现PCI转localbus

把PCI转localbus调通了,取代了以前使用的PCI芯片PCI9030,PCI9054等芯片.全部用FPGA实现。

使用P1020主板可以识别到FPGA PCI卡,DEVICE_ID和VENDOR_ID的参数在config_mux.v里面设置。以及后面的class/rev参数设置如下

2、接下来要做的工作是将PCI总线转成类似localbus总线去访问读写FPGA片内寄存器,主弄清PCI读写命令的原理,以及相关的地址划分,现在要读写FPGA片内寄存器,应该怎么使用地址。

3、PCI设备中有三种地址空间,分别是内存空间、IO空间和配置空间。

PCI总体设计方案:

一、配置模块

在PCI Agent设备的配置空间中包含了许多寄存器,这些寄存器决定了该设备在PCI总线中的使用方法,本节不会全部介绍这些寄存器,因为系统软件只对部分配置寄存器感兴趣。PCI Agent设备使用的配置空间如图2‑9所示。

以下记录几个主要的配置进行说明:

1、定义设备的DEVICE_ID和VENDOR_ID,如下代码:

 6'b0000_00: cfg_dat_out <= #1 {DEVICE_ID,VENDOR_ID};// reg 00h (DevID/VendorID)

2、主要的配置代码:

3、对部分配置空间寄存器进行写操作

4、数据输出通道,pci_dat_out驱动pci_ad的数据周期输出;

二、锁存模块

锁存负责在PCI操作的地址周期将PCI的地址信号AD[31:0]、命令信号CBE#[3:0]、和主设备选择信号IDSEL锁存到相应的寄存器供其他模块调用。

PCI总线复用地址和数据信号,在FRAME#有效(低电平)的第1个时钟,AD[31:00]上传送的是32位地址,称为地址期。地址在这里锁存。

四、重计数模块

协议中规定有限状态机通知后端设备进行I/O操作或存储器操作后,后端设备需要在最多16个时钟周期内响应,发出ready信号,否则有限状态机将对其重试连接。在这里我们采用计数器,如果后端设备10个时钟周期内没有发出ready信号,模块就会输出重试信号通知状态机。代码如下:

五、基地址译码模块

  assign ba0_rw_reg = {ba0, 4'b0000};

  assign ba1_rw_reg = {ba1, 4'b0000};

  always @ (posedge pci_clk or negedge pci_rst_l)

    begin

      if (pci_rst_l == 1'b0) begin

  ba0 <= 28'h0;

  ba1 <= 28'h0;

end

      else if (ba0_en == 1'b1) begin

            if (!pci_cbe_l[3])  ba0[31:24] <= pci_ad[31:24];

  if (!pci_cbe_l[2]) ba0[23:16] <= pci_ad[23:16];

             if (!pci_cbe_l[1]) ba0[15:8]   <= pci_ad[15:8];

  if (!pci_cbe_l[0])ba0[7:4]      <= pci_ad[7:4];    

     end

      else if (ba1_en == 1'b1) begin

六、主状态机模块

七、后端设备处理模块

进过测试 能正确进行存储器读写和IO读写

可以提供全套测试OK的PCI转localbus总线 verilog代码,

weixin:  tecliu_23   

QQ:296880551

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
FPGA是一种可编程逻辑器件,它可以实现各种数字电路的功能。PCI(Peripheral Component Interconnect)是一种计算机总线标准,用于连接外部设备与计算机主板之间的数据传输。 使用FPGA实现PCI数据传输可以通过以下步骤实现: 1. PCI接口电路设计:根据PCI规范,设计FPGA内部的电路,包括地址解码电路、数据缓冲电路、时钟管理电路等。这些电路将在FPGA芯片内部实现PCI传输的各种功能。 2. 数据处理与控制设计:根据应用需求,设计FPGA内部的数据处理电路和控制逻辑。例如,可以使用FPGA内部的算数逻辑单元实现数据计算、校验和运算等功能;同时,设计控制逻辑以协调FPGA内部各个模块的数据传输和操作。 3. PCI总线管理设计:设计FPGA内部的PCI总线管理逻辑,实现与外部设备进行通信的功能。这包括生成和响应PCI的所有命令和数据传输的信号。 4. FPGA芯片配置:将上述设计的电路和逻辑通过专门的工具烧录到FPGA芯片内部,使其成为一个特定的PCI设备。 5. 驱动程序开发:在主机端开发相应的驱动程序,实现FPGA设备之间的数据交互。通过与操作系统进行通信,驱动程序可以访问FPGA设备并进行数据传输。 综上所述,使用FPGA实现PCI数据传输需要进行电路设计、数据处理与控制逻辑设计、总线管理设计以及驱动程序开发等一系列步骤。这样,FPGA设备就可以实现与其他PCI设备之间的高速数据传输。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值