alterPCI核学习总结.docx
《alterPCI核学习总结.docx》由会员分享,可在线阅读,更多相关《alterPCI核学习总结.docx(14页珍藏版)》请在冰点文库上搜索。
![alterPCI核学习总结.docx](https://file1.bingdoc.com/fileroot1/2023-5/22/5a74ab8c-925e-4639-bbd4-8a151b53fd63/5a74ab8c-925e-4639-bbd4-8a151b53fd631.gif)
alterPCI核学习总结
AlteraPCI核学习总结
1.PCI核工作模式
PCI核在生成时可选择两种工作模式:
master/target模式和target模式;其中master/target模式下,PCI核可申请控制总线,作为master给其他PCI设备通信;也可以作为slave设备与masterPCI设备通信;而在target模式,只能作为slave设备被其他PCI设备访问。
在以上两种工作模式下,根据读写数据位宽(32bit和64bit,把PCI核分为4种:
PCI_mt64、PCI_t64、PCI_mt32、PCI_t32;
在本设计中使用PCI_t32模式,即target工作模式,读写数据位宽32bit;故以下的介绍中主要针对PCI_t32模式的使用说明;
2.在quartus中例化PCI核
注意界面右边的IPCatalog部分,在这里选择你想要IP核,如果界面上没有这个选择部分,则通过点击Tools-->IPCatalog调出来;
在Library->interfaceprotocols中点击PCI
点开PCI后可以看到PCICompilerv14.1,双击;
填写PCI核的命名(pci_core,选择生成IP核的相关代码是VHDL或Verilog,按自己需求选;点击OK;
跳转出此界面,有6个选项,
(1aboutthiscore:
里面介绍了此IP核的一些基本信息,例如版本、发布时间和能支持的FPGA器件型号;
(2documentation:
PCI核使用的指导文档
(3quartusIIconstraints:
关于PCI核的约束文件
(4step1:
parameter:
用来设置PCI核基本参数
compactPCI为紧凑型PCI接口,在接口协议上没有区别,只是在硬件接口连接上有区别;故按照硬件设计选在PCI或CompactPCI。
Master/Target或TargetOnly,两者区别为:
如:
目前有3个CPU在PCI总线上,分别标号CPU1,CPU2,CPU3,其中CPU1为HOST,CPU2/3为Target,CPU1HOST为PCI总线分配PCI空间等资源并赋予Target一定的读写权限;资源分配完毕,3个CPU可以相互访问,当CPU1访问(读写CPU2/3时,CPU1是Master,当CPU2访问CPU1/3时,CPU2就是Master;被访问的对象就是Slaver;也就是CPUx要访问PCI总线上的设备时先要向PCIHOSTS(CPU1上的总线控制器申请对总线的操作,占有了这总线的操作的CPU就是Master;
在这个步骤下选择PCI和master/target,然后点击Next;
填写参数值;
填写Baseaddressregister值,点击Next;
点击Finish;
(5step2:
setupsimulation:
生成仿真模型,点击OK
(6step3:
generate
最后完成IP核生成;3.PCI核引脚信号说明
以上信号列表中,PCIsignal是主设备端控制的信号;凡是local-side信号都是本地端控制的信号;在本设计中使用时,主设备端指CPU,本地端就是FPGA,所以在代码设计中,只要控制local_side信号就可以了。
本地端的信号在PCI_mt64、PCI_t64、PCI_mt32、PCI_t32四种模式下,使用情况不同,有的信号用不到。
4.PCI_t32数据读写方式
PCI_t32的读写方式由以下四种:
(132-bitsingle-cyclememoryread/write
(232-bitburstmemoryread/write
(3I/Oread/write
(4Configurationread/write
在本设计中使用single-cyclememoryread/write方式,即单周期内存读写方式;5.目标读事务
单个内存读目标事务时序波形图
6.目标写事务
单个内存写目标事务时序波形图
定义的地址范围内;使framen无效;并使irdyn信号有效,表示有数据需要传输;4在此时钟周期内完成以下事件:
1)PCI核使能It_framen,通知本地端设备,将要开始写事务;修改It_tsr[5:
0]中某个bit为1,It_tsr[5:
0]对应BAR地址范围;例如时序图中It_tsr[0]为高电平表示当前的ad地址值对应BAR0;2)PCI核把命令字输出到I_cmdo[3:
0],把地址值输出到I_adro[31:
0];3)PCI核打开devseln、ack64n、trdyn和stopn驱动能力,从时序图中可以看出原来是三态的,并且在第5个时钟周期中使能devseln和ack64n信号(ack64n在PCI_t32模式下不用);4)lt_tsr[8]高电平表示PCI核的主设备一端正在忙;PCI核使能devseln表示写操作开始;本地端拉低lt_rdyn,表示本地端已经做好接收数据的准备;PCI核拉低trdyn通知主设备端,已经做好接收数据的准备;因为irdyn已经有效,则在此时钟周期内完成数据字传输;锁存ad总线上的数据,并传输到l_dato总线上;锁存cben总线上的字节使能并传输到l_beno总线上;同时PCI核拉低lt_ackn信号,表示在l_dato总线和l_beno总线上的数据有效;由于lt_rdyn在第6个时钟周期有效和lt_ackn信号在第7个时钟有效,数据字传输在第7个时钟完成,故lt_dxfrn拉低有效表示一次数据字传输完成;PCI端已经完成写数据事务,PCI核重置lt_tsr[11..0]信号;PCI核使得lt_framen信号无效,通知本地端设备没有其他数据要传输;567897.配置寄存器介绍在PCI核中定义了64字节的配置空间,用来定义设备属性、控制PCI功能和提供PCI的状态信息;
(1)vendorID只读,标识设备生产厂商,默认值由altera厂商设定的0x1172,也可例化IP核时修改;
(2)DeviceID只读,标识设备类型,默认值0x0004,也可在例化IP核修改;
(3)commandregister读/写,用来设置PCI的基本功能(4)statusregisterPCI总线相关的事件状态信息,可以从寄存器中读取状态信息,但是不能写入寄存器数据,只能进行清除,即向某个bit位写1时,就会把相应的bit位清零;如果写0,则不变;
(5)RevisionID只读,标识器件的版本编号,由生产厂商设定,也可在例化IP时修改;(6)Classcode只读,默认值为0XFF0000;(7)Headertype8bit只读;bit[6:
0]的值为0表示普通PCI设备,值为1表示PCI桥,值为2表示cardbus;bit[7]是否为单功能设备;bit7为0值,表示为单功能设备;(8)Baseaddressregister基地址寄存器共有6个,都是相同的属性;使用时必须按序使用,必须从bar0开始使用;每个BAR的bit0支持只读,用来指明当前的地址空间是内存或IO;0时指内存地址,1时只IO地址;可在例化IP核时修改;通过对代码学习,理解BAR地址就如同地址总线,每个地址对应一个设备(如某个寄存器)或对应一个设备中的某个地址(如Flash的某个地址);在使用时,通过译码地址,确定数据的去向;