alter-PCI核学习总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Altera PCI 核学习总结
1. PCI 核工作模式
PCI 核在生成时可选择两种工作模式:master/target模式和 target 模式;其中master/target模式下, PCI 核可申请控制总线, 作为 master 给其他 PCI 设备通信; 也可以作为 slave 设备与 master PCI 设备通信;而在 target 模式,只能作为 slave 设备被其他 PCI 设备访问。
在以上两种工作模式下, 根据读写数据位宽 (32bit 和 64bit , 把PCI 核分为 4种:PCI_mt64、 PCI_t64、 PCI_mt32、 PCI_t32;
在本设计中使用 PCI_t32模式,即 target 工作模式,读写数据位宽 32bit ;故以下的介绍中主要针对 PCI_t32模式的使用说明;
2. 在 quartus 中例化 PCI 核
注意界面右边的 IP Catalog 部分,在这里选择你想要 IP 核,如果界面上没有这个选择部分,则通过点击 Tools --> IP Catalog 调出来;
在 Library -> interface protocols 中点击 PCI
点开 PCI 后可以看到 PCI Compiler v14.1,双击;
填写 PCI 核的命名(pci_core,选择生成 IP 核的相关代码是 VHDL 或 Verilog,按自己需求选;点击 OK ;
跳转出此界面,有 6个选项,
(1 about this core :里面介绍了此 IP 核的一些基本信息,例如版本、发布时间和能支持的 FPGA 器件型号;
(2 documentation :PCI 核使用的指导文档
(3 quartus II constraints :关于 PCI 核的约束文件
(4 step 1 :parameter :用来设置 PCI 核基本参数
compact PCI为紧凑型 PCI 接口,在接口协议上没有区别,只是在硬件接口连接上有区别;故按照硬件设计选在 PCI 或 CompactPCI 。
Master/Target 或 Target Only,两者区别为:
如:目前有 3个 CPU 在 PCI 总线上,分别标号 CPU1,CPU2,CPU3,其中 CPU1为HOST,CPU2/3为 Target,CPU1 HOST为 PCI 总线分配 PCI 空间等资源并赋予 Target 一定的读写权限 ; 资源分配完毕, 3个 CPU 可以相互访问, 当 CPU1访问 (读写
CPU2/3时, CPU1是 Master, 当 CPU2访问 CPU1/3时, CPU2就是 Master ; 被访问的对象就是 Slaver ;也就是 CPUx 要访问 PCI 总线上的设备时先要向 PCI HOSTS (CPU1上的总线控制器申请对总线的操作,占有了这总线的操作的 CPU 就是 Master;
在这个步骤下选择 PCI 和 master/target,然后点击 Next ;
填写参数值;
填写 Base address register值,点击 Next ;
点击 Finish ;
(5 step2 :set up simulation :
生成仿真模型,点击 OK
(6 step3 :generate
最后完成 IP 核生成; 3. PCI 核引脚信号说明
以上信号列表中, PCI signal 是主设备端控制的信号;凡是 local-side 信号都是本地 端控制的信号; 在本设计中使用时, 主设备端指 CPU , 本地端就是 FPGA , 所以在代码设计中, 只要控制 local_side 信号就可以了。
本地端的信号在 PCI_mt64、 PCI_t64、 PCI_mt32、 PCI_t32四种模式下,使用情况不同,有的信号用不到。
4. PCI_t32数据读写方式
PCI_t32的读写方式由以下四种:
(1 32-bit single-cycle memory read/write
(2 32-bit burst memory read/write
(3 I/O read/write
(4 Configuration read/write
在本设计中使用 single-cycle memory read/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 信号无效,通知本地端设备没有其他数据要传输; 5 6 7 8 9 7. 配置寄存器介绍在 PCI 核中定义了 64 字节的配置空间,用来定义设备属性、控制 PCI 功能和提供 PCI 的状态信息;(1)vendor ID 只读,标识设备生产厂商,默认值由 altera 厂商设定的 0x1172,也可例化 IP 核时修改;(2) Device ID 只读,标识设备类型,默认值 0x0004,也可在例化 IP 核修改;
(3) command register 读/写,用来设置 PCI 的基本功能(4) status register PCI 总线相关的事件状态信息,可以从寄存器中读取状态信息,但是不能写入寄存器数据,只能进行清除,即向某个 bit 位写 1 时,就会把相应的 bit 位清零;如果写 0,则不变;
(5) Revision ID 只读,标识器件的版本编号,由生产厂商设定,也可在例化IP 时修改;(6) Class code 只读,默认值为 0XFF0000;(7) Header type 8bit 只读;bit[6:0]的值为 0 表示普通 PCI 设备,值为 1 表示 PCI 桥,值为 2 表示cardbus;bit[7]是否为单功能设备;bit7 为 0 值,表示为单功能设备;(8) Base address register 基地址寄存器共有 6 个,都是相同的属性;使用时必须按序使用,必须从 bar0 开始使用;每个 BAR 的 bit0 支持只读,用来指明当前的地址空间是内存或 IO; 0 时指内存地址,1 时只 IO 地址;可在例化 IP 核时修改;通过对代码学习,理解 BAR 地址就如同地址总线,每个地址对应一个设备(如某个寄存器)或对应一个设备中的某个地址(如 Flash 的某个地址);在使用时,通过译码地址,确定数据的去向;。