alter-PCI核学习总结 下载本文

时钟周期 1 2 3 事件 PCI总线空闲 主设备使能framen有效,并发送地址数据到ad总线,发送命令值到cben总线 PCI核锁存地址ad和命令cben的值;并对锁存的地址进行判断是否在BAR定义的地址范围内;使framen无效;并使irdyn信号有效,表示有数据需要传输; 在此时钟周期内完成以下事件: 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,表示本地端已经做好接收数据的准备;并使能lt_ackn,通知本地设备,核已经做好接收l_adi总线上数据的准备;PCI核需要使能ad总线的驱动能力,不能在等待有效数据时长时间处于三态;虽然本地端拉低lt_rdyn信号,但是数据4 5 的传输是在下一个时钟周期完成的。 6 lt_rdyn在第5个时钟周期有效,则表示l_adi总线上的数据是在第6个时钟周期有效;PCI核锁存本地端总线上的数据到内部总线上在第7个时钟的上升沿;lt_dxfrn有效表示本地端的数据传输已经完成 在时钟上升沿锁存l_adi总线上的数据字并传输到ad总线;同时PCI核使能trdyn表示有个有效数据在ad总线上; PCI核把trdyn, devseln和ack64n信号拉高,结束此事务;为了满足延迟进入三态的要求,此时钟周期内,PCI核会保持devseln, ack64n, trdyn和stopn处于高电平状态;因为读事务已经完成,PCI核重新使ad总线处于三态;通过使lt_framen变为无效,通知本地端不需要读更多数据; PCI核通过使lt_tsr[11..0]无效,通知本地端读事务已完成; 7 8 9 6. 目标写事务

单个内存写目标事务时序波形图

时钟周期 1 2 3 事件 PCI总线空闲 主设备使能framen有效,并发送地址数据到ad总线,发送命令值到cben总线 PCI核锁存地址ad和命令cben的值;并对锁存的地址进行判断是否在BAR定义的地址范围内;使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的某个地址);在使用时,通过译码地址,确定数据的去向;