摘要:介绍用FPGA 实现PCI总线的方法.方法根据数字电路设计的自上而下的设计方法,用VHDL 实现,并在Xilinx的SpartenII器件中进行验证.结果与结论结果表明:用FPGA 实现PCI总线是经济可行的.
PCI的含义为周边器件互连(Peripheral Component Interconnection).PCI总线规范1.0由Int口公司开发,现由一个工业厂商协会管理,称为PCI SIGN.PCI总线有许多其他总线(如ISA)所没有的优点,如高速、热插拔、自动配置等,在图像处理、网络、数据采集等领域有广泛的应用.PCI总线的实现一般有3种方法:
本文主要探讨用FPGA实现PCI总线,并以Xilinx公司的SpartenII器件来实现PCI Slave接口为例进行说明.
1 系统整体框架
现代数字电路设计一般采用自上而下的方法,即从数字电路的总体要求入手,先将较为复杂的数字系统化为简单的子系统,再通过逻辑和接口设计用各种功能部件实现要求的数字系统.在设计PCI总线时也采用这种方法.根据文献[1,2],可以将系统划分为配置空间、PCI协议状态机、Parity校验、Parity发生、背端接口等几部分,如图1所示.
2 PCI目标状态机实现和配置寄存器空间
2.1 PCI目标状态机实现
PCI设备分为主设备和目标设备两种.主设备是指既能发起交易的设备也能接受交易的设备,而从设备只能被别的设备读写.因此实现PCI总线时可按需要分为两种来实现.目标设备的实现要比主设备简单一些,这里仅以目标设备的实现来描述PCI协议的实现过程.目标状态机由4个状态组成,状态转换如图2所示.
2.2 配置寄存器空间
PCI规范规定,每个PCI功能拥有64个配置双字的单元.第一个16双字的格式和用法由PCI规范预定义.具体可以参考PCI规范.实现的框图如图3所示.
3 错误校验和处理模块的设计
PAR 是奇偶校验I/O 引脚.在数据传输期间,它包含数据总线AD[31,…,0]和字节使能线C/BE#[3,…,0]的奇偶校验位,并且是在一个时钟后出现.用最简单的方法产生奇偶校验位是用有36个输入的异或门构成. 必须注意,在PCI时钟为33 MHz时,奇偶校验位必须在30ns内产生,60ns 内被校验.Xilinx 的SpartenII每一个CLB有4输入,因此实现36输入异或门要4级或5级逻辑才能实现,当时序不能满足时,可以采用管道线技术实现.例如:奇偶发生逻辑可用图4所示的管道线逻辑实现.
4 硬件实现
在上述设计的基础上,就可以开始实现硬件电路.对于复杂数字系统而言,传统设计方法已不适用,用硬件描述语言成为当代数字系统的主要设计方法.本PCI系统也是采用硬件描述语言(VHDL)并按照FPGA 的设计流程来进行设计的.首先写出系统的行为级描述,并写出测试基准(Testbench)进行仿真;仿真成功后,再对系统进行RTL级描述,用综合工具对其综合;综合完成后,再进行综合后仿真.下一步就是设计实现,放置和路由,时序仿真;最后就可以下载到FPGA 中,对实际电路测试和仿真.
5 结论
通过在Xilinx的SpartenII实现PCI总线控制逻辑,可以发现用FPGA 实现是一种经济和实用的方案.PCI目标控制器消耗大概1万逻辑门左右,剩下的大部分可用来实现用户背端逻辑.但是也要注意到的是,实现PCI是一个非常复杂的过程,一般很难在短期内设计成功.要进行产品化设计,可以选择已经过测试的PCI CORE.本次设计在SpartenII系列的XC2S30进行验证,达到了预期效果.
文章评论(0条评论)
登录后参与讨论