1 PCI总线及其接口概述

PCI总线是高速同步总线,具有32bit总线宽度,工作频率是33MHz,最大传输率为132Mbyte/s,远远大于ISA总线5Mbyte/s的速率。PICMG(PCI工业计算机制造商联盟)制定的更加坚固耐用的Compact PCI总线规范,支持64位总线宽度,66MHz作频率,最大传输率为528Mbye/s。基于PC机的高速数据采集系统和各种虚拟仪器,几乎都选择了PCI总线。在现代高速通讯、测试等领域的嵌入式应用中,Compact PCI总线大有超过VME和VXI总线的趋势。PCI的高性能、高效率以及与现有标准的兼容性和充裕的发展潜力,是其它总线所不能及的,被计算机界公认为最具高瞻远瞩的局部总线标准。

PCI总线接口相对其它总线接口来说是比较复杂的,它不但有着严格的同步时序要求,而且为了实现即插即用和自动配置,PCI接口还必须有许多配置寄存器。根据用户设备的性质不同,PCI设备分为MASTER(主设备)和TARGET(从设备),因此PCI接口类型也就分为MASTER和TARGET两种接口。概括地说,PCI接口主要包括PCI标准配置寄存器(64字节)、PCI 总线逻辑接口、用户设备逻辑接口、数据缓冲区等。

作为一般应用设计工程师,为缩短开发周期,没有必要自己去设计全部的复杂的接口逻辑,甚至可以不必完全理解PCI规范的细节,就能进行PCI用户设备的设计。目前,市场上有一些专用PCI接口芯片,如AMCC公司的S5920(TARGET接口)、S5933(MASTER接口)等。使用这些专用PCI接口芯片,设计者只需要使用地址线、数据线以及少数几个读写控制信号,就能实现PCI总线与PCI用户设备之间的连接,类似ISA总线接口那么简单方便。

随着FPGA (现场可编程逻辑阵列请介绍一下Flash的全面管理问题。) 技术的快速发展,万门以上乃至几十万门逻辑阵列的使用越来越普遍,FPGA的单片价格也大幅度下降。与专用PCI接口芯片相似,很多FPGA制造商都提供了PCI接口宏核逻辑(PCI MegaCore)。设计者可以将PCI用户逻辑与PCI MegaCore集成在一片FPGA里,并且可以在顶层通过仿真来验证PCI接口以及用户逻辑设计的正确与否,这样可以大幅度提高调试速度,缩短开发周期,提高电路板的集成度和系统的性能。

ALTERA公司提供了多种不同功能的PCI MegaCore,例如:pci _a(带有DMA的32位MASTER/TARGET接口),pci_mt64(支持64位的MASTER/TARGET接口),pci_mt32(32位的MASTER/TARGET接口),pci_t64(支持64位的TARGET接口),pci_t32(32位的TARGET接口)等。不同的PCI MegaCore占用的资源是不同的,设计者可以根据PCI用户设备的需求来选择。

本文将介绍ALTERA公司提供的最简单的32位PCI TARGET接口宏核逻辑pci_t32。重点介绍利用pci_t32进行PCI接口设计的方法及应用注意事项,并给出具体设计实例。其它PCI MegaCore的设计方法与此相类似。本文不介绍有关PCI规范的细节内容。

2 Pci_t32 MegaCore的内部结构及外围信号

Pci_t32是ALTERA公司提供的最简单的32位PCI TARGET接口宏核逻辑,支持33MHz和66MHz的PCI时钟。
Pci_t32内部结构包含如下几个模块:
PCI总线配置寄存器,是符合PCI规范2.2版规定的所有配置寄存器。配置寄存器用于识别设备、控制PCI总线功能、提供PCI总线状态等。
奇偶校验模块,用于对数据、地址、命令等进行奇偶校验。
PCI侧TARGET控制模块(PCI target control block),用于控制pci_t32(作为TARGET)与PCI总线的各种操作。
用户设备侧TARGET控制模块(local target control block),用于控制pci_t32(作为TARGET)与用户逻辑的各种操作。

用户设备侧地址/数据/命令/字节使能模块,接收和输出用户侧的所有地址/数据/命令/字节使能等信号。
Pci_t32内部功能模块及周边信号如图1所示。

左侧PCI信号是符合PCI规范的标准信号,在这里不多加解释。下面重点介绍右侧用户逻辑接口local信号:
L_aci 31 0 ,local侧地址、数据输入信号。
L_cbeni 3 0 ,local侧命令、字节使能输入信号,位定义及时序符合PCI规范。
L_dato 31 0 ,local侧数据输出信号。
L_adro 31 0 ,local侧地址输出信号。
L_beno 30 ,local侧字节使能输出信号,位定义及时序符合PCI规范。
L_cmdo30,local侧命令输出信号,位定义及时序符合PCI规范。
Lt_rdyn,local侧目标设备准备好信号(target ready),对pci_t32是输入信号。
Lt_discn,local侧目标设备通过置低该信号请求pci_t32向PCI 侧主设备发出断开连接信号(disconnect request),对pci_t32是输入信号。
Lt_abortn,local侧目标设备通过置低该信号来请求pci_t32向PCI 侧主设备发出放弃操作信号,对pci_t32是输入信号。
Lt_irqn,local侧目标设备中断请求信号,对pci_t32是输入信号。
Lt_framen,PCI主设备通过pci_t32读写local侧目标设备时,pci_t32置低该信号(输出信号).
Lt_ackn,当为目标写操作时,PCI_t32置低该信号(输出信号),表示数据有效;当为目标读操作时,PCI_t32置低该信号(输出信号),表示已准备好读数。
Lt_dxfrn,输出信号,表示local 目标设备数据传输成功。
Lt_tsr 11 0,输出信号,控制local目标设备状态寄存器。
Cmd_reg 5 0,配置命令寄存器输出信号。Bit0,I/O操作使能;bit1,Memory操作使能;bit2,保留;bit3,memory写无效使能;bit4,奇偶校验出错响应使能;bit5,系统出错响应使能。
Stat_reg 5 0 ,配置状态寄存器输出信号。

3 读写操作时序分析与设计要点

pci规范中定义了两种读写操作,即Memory和I/O的读写。Pci_t32的读写操作包括:32位的Memory单周期读写、Memory猝发读写、I/O单周期读写以及配置读写。Pci_t32 的Memory读写分为单周期和猝发两种模式,而I/O的读写只有单周期模式。所谓猝发模式,即在给出首地址后,主设备连续读写多个数据,用户设备应能对首地址自动加1。配置读写是指pci主设备对pci_t32的配置空间寄存器进行读写操作,pci主设备与pci_t32之间的接口是无缝连接。本文只分析32位Memory单周期读写时序,其它模式的读写时序大同小异,此略。

3.1 Memory 读操作
pci_t32的单周期memory read操作时序如图2所示。

时序分析及用户逻辑设计要点:pci主设备在第2个clk给出要读的目标地址ad 31 0 和Memory读命令cben 3 0 =6,pci_t32在第3个clk向用户设备给出读目标地址1_adro 31 0和Memory读命令l_cmdo 3 0 =6。用户设备要对l_cmdo 3 0 译码来判断是何种操作,对l_adro 31 0 译码来选择目标地址。在lt_framen输出为低的下个时钟周期,若用户设备逻辑准备好要输出的数据,可以置低lt_rdyn。若用户逻辑没有准备好,可以延迟置低lt_rdyn来产生延时等待周期。当lt_dxfrn输出为低电平时(第6个clk),pci用户设备必须将目标地址的数据D0放到l_adi 31 0 ,用户逻辑可以用lt_dxfrn来作为存储单元的输出使能信号(/Output Enable)。这样,在第7个clk的上升沿pci_t32可以采样到数据D0。在第8个clk的上升沿pci主设备可以得到数据D0。

3.2 Memory写操作
pci_t32的单周期memory 写操作时序如图3所示。

时序分析及用户逻辑设计要点:pci主设备在第2个clk给出要写的目标地址ad 31 0 和Memory写命令cben 3 0 =7,pci_t32在第3个clk向用户设备给出写目标地址l_adro 31 0 和Memory写命令l_cmdo 3 0 =7。用户设备要对l_cmdo 3 0 译码来判断是何种操作,对l_adro 31 0 译码来选择目标地址。在lt_framen输出为低的下个时钟周期,若用户设备逻辑准备好接收pci_32t写的数据,可以置低lt_rdyn。若用户逻辑没有准备好,可以延迟置低lt_rdyn来产生延时等待周期。当lt_dxfrn输出为低电平时(第7个clk),pci_t32已经将输出的有效数据放在l_dato 31 0 上,pci用户设备必须在第8个clk的上升沿将l_dato 31 0 输出的数据D0锁存至目标地址l_adro 31 0 ,用户设备逻辑可以用第8个clk的上升沿来作为锁存器的锁存时钟,用lt_dxfrn作为锁存器的锁存使能信号(/Latch Enable)或存储单元的写使能信号(/Write Enable)。

4 应用设计实例及注意事项

笔者已经成功地将pci_t32用于一个compact PCI的TARGET控制模块中。在这个模块中,主设备Master通过pci_t32来读写64个32bit控制寄存器,再由这些寄存器组去控制外部设备。在本系统的FPGA里,还有仲裁器等其它逻辑,PCI时钟是33MHz,芯片选用的是EPF10K100EQC240-2。系统逻辑设计的框架如图4所示。

在寄存器组里还有一些简单的选通、三态控制等逻辑,此略。L_adro 6 0 译码选择寄存器组里的目标寄存器。当/WE有效时,l_dato 31 0 上是pci_t32输出的有效数据;当/OE有效时,寄存器组必须将要输出的数据放到l_adi 31 0 总线上。
在使用pci_t32时,还有一些值得注意的地方,如下所述:
1 用户逻辑的时钟(本系统的寄存器组的时钟clk)与进入pci_t32的时钟必须是同一个时钟,并且在定义管脚时应选用全局时钟线(global clock)。这样,可以保证时钟的同步,提高系统的性能。
2 从库中调出pci_t32.gdf的symbol,在其右上角,可以看到一些默认设置,双击这些参数,可以改变设置。包括:DEVICE_ID、REVISION_ID、CLASS_CODE、VENDOR_ID、基地址等PCI标准配置寄存器。
3 选择芯片主要考虑两个因素:
容量和速度。芯片容量包括片内的逻辑单元和可用I/O管脚数。芯片速度主要由PCI系统工作的时钟频率以及用户逻辑的大小和优化程度两方面决定。

Pci_t32的资源占用较小,在用EPF10K100EFC484-1芯片编译时,占用621个LC(Logic Cell)。而PCI宏核pci_a,在用EPF10K100EFC484-1芯片编译时,占用923个LC。EPF10K100共有约5000个LC。
Altera的FPGA有多种容量和速度级,一般来说,-1速度级的芯片可以满足66MHz时钟的PCI时序要求,-2速度级的芯片只能满足33MHz时钟的PCI时序要求。

速度和容量是否能满足用户的要求,必须要进行仿真才能最终确定。
现在FPGA的价格日渐下降,大容量的FPGA使用越来越普遍。各家芯片供应商都提供了各种 PCI宏核逻辑。设计者可以将PCI用户逻辑与PCI接口宏核逻辑集成在一片FPGA里,在顶层通过仿真来验证PCI接口以及用户逻辑设计的正确与否。这样,可以大幅度提高调试速度,缩短开发周期,提高电路板的集成度和系统性能。可以肯定地预言,使用PCI接口宏核逻辑来进行PCI接口设计是今后设计PCI接口的主要方法。PCI接口宏核逻辑将会受到越来越多的设计工程师的青睐。

基于FPGA的PCI接口设计相关推荐

  1. 基于FPGA的VGA接口设计(三)

    关于VGA系列文章的所有链接: 基于FPGA的VGA接口设计(一) 基于FPGA的VGA接口设计(二) 基于FPGA的VGA接口设计(三) 结篇   在之前的文章中介绍了有关VGA的扫描方式.行场同步 ...

  2. 计算机键盘接入fpga,基于FPGA的键盘接口设计毕业论文.doc

    单片机论文,优秀毕业论文,外文翻译,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机毕业论文,基于单片机毕业论文,毕业论文终稿,毕业论文初稿,毕业论文设计,单片机论文,本文档支持完 ...

  3. c语言pcie接口开发,基于单片机与PCI接口设计解决方案

    8位单片机在嵌入式系统中应用广泛,然而让它直接与PCI总线设备打交道却有其固有缺陷.8位单片机只有16位地址线,8位数据端口,而PCI总线2.0规范中,除了有32位地址数据复用AD[3-0]外,还有F ...

  4. 基于FPGA的PCI接口电路设计

    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86773461 全套资源下载地址:https://download.csdn.net/d ...

  5. 基于FPGA的UART接口设计

    一.顶层设计思路: UART即通用异步收发传输接口(Universal Asynchronous Receiver/Transmitter),简称串口,是一种常用的通信接口,其协议原理就不赘述了,不了 ...

  6. 基于FPGA实现UART接口设计(异步串行通信)

    时间就是金钱,技术就是饭碗,每天学习,每天积累,做好现在,不担心未来,加油! 1 简介 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通 ...

  7. 基于FPGA实现IIC接口(EEPROM)

    1 IIC应用领域 在嵌入式系统开发过程中,IIC占据非常重要的地位.IIC通讯接口能到搭载较多的从设备,从而实现与多个从设备进行通讯,在板级通讯中是一种比较常用的通讯接口.笔者通过IIC接口实现FP ...

  8. 基于FPGA实现DAC8811接口(正弦波)

    1 应用领域 基于FPGA实现DAC8811接口参考设计较少,网络资源都是基于单片机实现DAC8811接口控制,但是在特殊场合必须要使用FPGA实现:因为FPGA不仅具有容量大,逻辑功能强的特点,而且 ...

  9. 基于FPGA的USB接口控制器设计(VHDL)(中)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第二篇,中篇,USB通信原理.USB 系统开发以及设计实例.话不多说,上货. 之前有关于 Veril ...

最新文章

  1. mac -- 安装OpenCV
  2. Codeforces 484B Maximum Value(高效+二分)
  3. 史上最全 Python Re 模块讲解(三)
  4. css 百分比 怎么固定正方形_css样式写出三角形,宽高自适应的正方形,扇形!...
  5. Mysql执行计划2
  6. OpenGL基础46:切线空间
  7. zip保存数据和接口获取压缩包 jsZip
  8. nuc8i7beh安装linux随机重启,指南:nuc8i5beh安装黑苹果的教程,接近完美运行
  9. 惊人!葵花宝典的创始人居然是段誉
  10. 用Java编写程序实现从键盘读入学生成绩,找出最高分,并输出学生成绩和学生的等级。
  11. 设计模式笔记——代理模式
  12. matlab rloess,R语言利用loess如何去除某个变量对数据的影响详解
  13. 使用Python和Numpy构建神经网络模型
  14. 古之成大事者必经三境界--王国维《人间词话》
  15. qt修改程序图标名称_【Qt开发】更改应用程序图标和任务栏图标
  16. 计蒜客习题:帕吉的肉钩
  17. 解决Win10安装Ubuntu20.04双系统出现的win10引导失败方案
  18. SQL——使用sql 查看使用数据库的版本
  19. #775 Div.1 C. Tyler and Strings 组合数学
  20. 人类智商一般在多少左右?爱因斯坦的智商是多少?

热门文章

  1. 工作分解结构WBS 项目管理
  2. Html+Css+Js表单验证(正则表达式)
  3. 想从事运维岗位应该学习什么技能?谁能告诉一下?
  4. 海德堡印刷机显示屏维修SDU10_00.785.1384显示器维修故障概述
  5. mat2cell函数解析
  6. HAL (software)
  7. 七夕了没有男/女朋友怎么办?孤寡机器人帮你!
  8. 无限操控流经典卡牌 《丛林战纪》攻略
  9. 在博客右下角设置透明卡通小美女
  10. 起底▍Spring Boot/Cloud背后豪华的研发团队 ——独角兽公司Pivotal