iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:15231回复:62

PCI9054+fpga从零开始(持续更新一个月)

楼主#
更多 发布于:2013-07-01 13:54
本部分内容设定了隐藏,需要回复后才能看到

 
 
 
 

最新喜欢:

danranruxingdanran... GreeceGreece Honghong321Hongho...
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
qjyun99
驱动牛犊
驱动牛犊
  • 注册日期2013-06-27
  • 最后登录2013-10-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2013-07-01 16:39
thank有
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2013-07-02 12:57
转载请注明出处:http://bbs3.driverdevelop.com/read.php?tid-125690-page-e.html#a



PCI9054有三种工作模式:M,J,C
M模式,直接为Motorola公司的MPC850和MPC860准备的非复用接口;
C模式,地址,数据线不复用;(主意区分和PCI信号线,不要搞混了)
J模式,地址数据线复用。
 
 
PCI9054的本地端支持可编程的特点,通过两个模式选择管脚MODE[1:0]来设置LocalBus端分别工作在C模式、J模式、M模式。这样可以使得PCI9054的Local Bus可以挂载不同类型的其他设备。

再详解:
 M模式是专门为motorola公司的mcu设计的工作模式。这种模式专门为motorola公司的mpc850和mpc860提供直接的非复用的接口。
     C模式是一种类似于单片机的工作方式 。在这种工作模式下,9054芯片通过片间逻辑控制,将pci的地址线和数据线分开,很方便地为本地工作时序提供各种高难工作方式 ,一般较为广泛的应用于系统设计中。对于这种工作方式 ,设计者只要严格的把握时序的控制,把local端和pci端的各种时序控制线的时序过程严格控制,就可以很好的应用9054芯片。
     J模式是一种没有local master的工作模式,它的好处 是地址数据线没有分开,严格仿效pci总线的时序。只是为了时序的控制,增加了很多的控制信号,这样为设计者了解pci协议和更好的控制pci通信提供了更好的空间。
     本课题选用plx9054的c模式工作方式 。plx9054的工作方式可利用模式选择引脚加以选择。对于176pin-PQFP封装的plx9054芯片。模式选择引脚为pin156(mode1),pin157(mode0)
 由于M模式使用范围比较小,J模式使用起来控制比较复杂,一般使用C模式。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
华丽的分界线,说完了9054再说一下PCI规范中的信号线
 
PCI信号线
 1.系统信号
  CLK IN:系统时钟信号,为所有PCI传输提供时序,对于所有的PCI设备都是输入信号。其频率最高可达33MHz/66MHz,这一频率也称为PCI的工作频率。
  RST# IN:复位信号。用来迫使所有PCI专用的寄存器、定序器和信号转为初始状态。
 
2.地址和数据信号
  AD[31::00]T/S地址、数据复用的信号。PCI总线上地址和数据的传输,必需在FRAME#有效期间进行。当FRAME#有效时的第1个时钟,AD[31::00]上的信号为地址信号,称地址期;当IRDY#和TRDY#同时有效时,AD[31::00]上的信号为数据信号,称数据期。一个PCI总线传输周期包含一个地址期和接着的一个或多个数据期。
  C/BE[3::0]# T/S:总线命令和字节允许复用信号。在地址期,这4条线上传输的时总线命令;在数据期,它们传输的时字节允许信号,用来指定在数据期,AD[31::00]线上4个数据字节中哪些字节为有效数据,以进行传输。
  PAR T/S:奇偶校验信号。它通过AD[31::00]和C/BE[3::0]进行奇偶校验。主设备为地址周期和写数据周期驱动PAR,从设备为读数据周期驱动PAR。
3.接口控制信号
  FRAME# S/T/S:帧周期信号,由主设备驱动。表示一次总线传输的开始和持续时间。当FRAME#有效时,预示总线传输的开始;在其有效期间,先传地址,后传数据;当FRAME#撤消时,预示总线传输结束,并在IRDY#有效时进行最后一个数据期的数据传送。
  IRDY# S/T/S:主设备准备好信号。IRDY#要与TRDY#联合使用,当二者同时有效时,数据方能传输,否则,即为未准备好二进入等待周期。在写周期,该信号有效时,表示数据已由主设备提交到AD[31::00]线上;在读周期,该信号有效时,表示主设备已做好接收数据的准备。
  TRDY# S/T/S:从设备(被选中的设备)准备好信号。同样TRDY#要与IRDY#联合使用,只有二者同时有效,数据才能传输。
  STOP# S/T/S:从设备要求主设备停止当前的数据传送的信号。显然,该信号应由从设备发出。
  LOCK# S/T/S:锁定信号。当对一个设备进行可能需要多个总线传输周期才能完成的操作时,使用锁定信号LOCK#,进行独占性访问。例如,某一设备带有自己的存储器,那么它必需能进行锁定,以便实现对该存储器的完全独占性访问。也就是说,对此设备的操作是排它性的。
  IDSEL IN:初始化设备选择信号。在参数配置读/写传输期间,用作片选信号。
  DEVSEL# S/T/S:设备选择信号。该信号由从设备在识别处地址时发出,当它有效时,说明总线上有某处的某一设备已被选中,并作为当前访问的从设备。
4.仲裁信号(只用于总线主控器)
  REQ# T/S:总线占用请求信号。该信号有效表明驱动它的设备要求使用总线。它是一个点到点的信号线,任何主设备都有它自己的REQ#信号。
  GNT# T/S:总线占用允许信号。该信号有效,表示申请占用总线的设备的请求已获得比准。
5.错误报告信号
  PERR# S/T/S:数据奇偶校验错误报告信号。一个设备只有在响应设备选择信号(DEVSEL#)和完成数据期之后,才能报告一个PERR#。
  SERR# O/D:系统错误报告信号。用做报告地址奇偶错、特殊命令序列中的数据奇偶错,以及其他可能引起灾难性后果的系统错误。它可由任何设备发出。
6.中断信号 在PCI总线中,中断是可选项,不一定必须具有。
  INTA# O/D:用于请求中断。
  INTB# O/D、INTC# O/D、INTD# O/D:用于请求中断,仅对多功能设备有意义。所谓的多功能设备是指:将几个相互独立的功能集中在一个设备中。各功能与中断线之间的连接是任意的,没有任何附加限制。
7.其他可选信号
 (1)高速缓存支持信号:SBO# IN/OUT、SDONE IN/OUT
 (2)64位总线扩展信号:REQ64# S/T/S、ACK65# S/T/S
、AD[63::32]T/S、C/BE[7::4]#T/S、PAR64 T/S。
 (3)测试访问端口/边界扫描信号:TCK IN、TDI IN、TDO OUT、TMS IN、TRST# IN。

 
 
 
 
 
 
 
其他的版本的引脚说明,下面说的不是很清楚,建议看上面的,不过可以参考下面的:
 
所有模式
AD[31:0](Address and Data)地址和数据复用,首先是一个地址段,后面跟着一个或多个数据段,支持突发模式的读写;
C/BE[3:0]#(Bus Command and Byte Enables)总线命令和数据使能复用管脚,在AD为地址线的时候作为总线命令,在AD为数据线的时候作为数据使能;
DEVSEL#(Device Select)有效的时候表示当前设备被选中,作为输入端口;
FRAME#(Cyclone Frame)由主设备驱动,用来表示当前设备已经开始接入,总线开始传输数据。有效:传输数据。无效:完成最后一个数据的传输;
GNT#(Grant)用来表示当前接入的设备已经被接受;
IDSL(Initialization Device Select)在配置寄存器读写的时候用做片选信号;
INTA#(Interrupt A)PCI中断请求;
IRDY#(Initiator Ready)说明当前数据有效,可以并要完成传输;
LOCK#(Lock)提示有自动操作,需要消耗若干个时钟来完成操作;
PAR(Parity)作为AD和C/BE两部分总线的基偶校验,在传输地址的时候PAR要在地址传输完毕后一个时钟周期保持稳定。对于数据段,PAR要在IRDY#或者TRDY#有效以后一个时钟周期保持稳定。一旦PAR数据有效,将保持有效到当前数据或地址段传输结束;
PCLK(Clock)系统时钟,9054工作在33MHz;
PERR#(Parity Error)用来报告奇偶校验错误,不包括特殊周期;
PME#(Power Management Event)唤醒中断;
REQ#(Request)请求信号,通知总线判决器,当前设备必须使用总线;
RST#(Reset)系统复位;
SERR#(System Error)用来报告特殊周期的奇偶校验错误和其他系统错误;
STOP#(Stop)要求主系统,停止当前设备的数据传输;
TRAY#(Target Ready)目标设备准备完毕,可以传输当前数据;
BIGEND#(Big Endian Select)
CCS#(Configuration Register Select)低有效的片选信号;
EECS(Serial EEPROM Chip Select)选择串行EEPROM;
EEDI/DDEO(Serial EEPROM Data In/ Serial EEPROM Data Out)控制串行EEPROM读写数据;
EESK(Serial Data Clock)EEPROM读写时钟;
ENUM#(Enumeration)突发输出,用来表示一个使用PCI9054芯片的适配器刚刚从一个CPI总线通道里面加入或者移出;
LCLK(Local Processor Clock)本地时钟输入;
LEDon/LEDin LED控制;
LFRAME#(PCI Buffered FRAME# Signal)指示PCI总线的状态;
LINT#(Local Interrupt)本地总线中断。输入到9054,低有效,触发一个PCI中断。作为输出,等待到一个触发发生;
LRESETo#(Local Bus Reset Out)当PCI9054芯片被复位以后,该管脚可以用来驱动其他芯片的RESET#信号;
MDREQ#/MDPAF/EOT#
MODE[1:0](Bus Mode)11:M模式;10:J模式;01:保留;00:C模式;
TEST(Test Pin)芯片检测管脚,高为检测,低为工作,平时置低;
USERi/BACK0#/LLOCKi# 复用管脚
USERo/DREQ0#/LLOCKo# 复用管脚
VDD 电源
VSS 地
C模式:
ADS#(Address Strobe)说明地址有效,总线有新设备接入;
BLAST#(Burst Last)该信号由本地总线控制,表示最后一个字符的传输;
BREQi(Bus Request In)本地总线控制,数据从本地总线输入;
BREQo(Bus Request Out)PCI总线控制,数据从PCI总线输出;
BTERM#(Burst Terminate)作为输入,表示当前突发操作结束,开始下一个突发地址的读写,和PCI9054内部的可编程等待状态生成器一起使用。作为输出,和READY#一起使用,中断当前突发操作,开始下一个突发操作地址周期;
DP[3:0](Data Parity)奇偶校验数据;
LA[31:2](Address Bus)地址总线;
LBE[3:0]#(Byte Enable)控制数据有效,不同的模式有不同的控制方法;
LD[31:0](Data Bus)数据总线;
LHOLD(Hold Request)发送要求使用本地总线,本地总线决定分配给当前装置以后,判决器发送LHOLDA信号反馈;
LHOLDA(Hold Request)反馈信号;
LSERR#(System Error Interrupt Output)系统错误中断;
LW/R#(Write/?Read)低电平读,高电平写;
READY#(Ready Input/Output)无论主还是从模式,表示数据准备好,有效;
WAIT#(Wait Input/Output)作为输入,控制PCI9054插入等待状态。作为输出,PCI9054处于Ready状态。
J模式:
ADS#(Address Strobe)说明地址有效,总线有新设备接入;
ALE(Address Latch Enable)地址传输时有效,数据传输时无效;
BLAST#(Burst Last)该信号由本地总线控制,表示最后一个字符的传输;
BREQi(Bus Request In)本地总线控制,数据从本地总线输入;
BREQo(Bus Request Out)PCI总线控制,数据从PCI总线输出;
BTERM#(Burst Terminate)作为输入,表示当前突发操作结束,开始下一个突发地址的读写,和PCI9054内部的可编程等待状态生成器一起使用。作为输出,和READY#一起使用,中断当前突发操作,开始下一个突发操作地址周期;
DEN#(Data Enable)和DT/R#连接在一起使用,用来控制和本地总线连接的数据收发器;
DP[3:0](Data Parity)奇偶校验数据;
DT/R#(Data Transmit/Receive)与DEN#连接在一起使用,有效的时候PCI9054接收数据;
LA[28:2](Local Address Bus)本地总线地址;
LAD[31:0](Address/Data Bus)地址周期:该总线包括了物理地址总线的上30位。数据周期:该总线传输32位数据;
LBE[3:0]#(Byte Enable)控制数据有效,不同的模式有不同的控制方法;
LHOLD(Hold Request)发送要求使用本地总线,本地总线决定分配给当前装置以后,判决器发送LHOLDA信号反馈;
LHOLDA(Hold Request)反馈信号;
LSERR#(System Error Interrupt Output)系统错误中断;
LW/R#(Write/Read)低电平读,高电平写;
READY#(Ready Input/Output)无论主还是从模式,表示数据准备好,有效;
WAIT#(Wait Input/Output)作为输入,控制PCI9054插入等待状态。作为输出,PCI9054处于Ready状态。


 
 
 
 
 
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2013-07-02 17:38
转载请注明出处:http://bbs3.driverdevelop.com/read.php?tid-125690-page-e.html#a



PCI9054内部状态机给用户提供了三种传输方式:PCI Initiator传输方式(主模式)、PCI Target(从模式)传输方式以及PCI DMA传输方式。

图片:pci9054.jpg


 
PCI Initiator(主模式)传输方式下,PCI9054成为PCI Bus端的主机,同时是Local Bus端的从机,由Local Bus端主动发起数据传输,PCI9054被动后再主动向PCI Bus发起传输。
     主模式操作就是允许本地的cpu访问pci总线的内存和I/O接口。模式选择必须在pci命令寄存器中使能给出。如pci主设备存储器和i/o范围寄存器,pci基址寄存器,主设备配置和命令寄存器等。主模式操作包括pci主设备存储器和i/o译码,pci主设备存储器和i/o配置访问,pci双地址周期访问,pci主设备存储器写并无效等操作。
 
 
PCI Target(从模式)传输方式下PCI9054的角色刚好与PCI Initiator方式相反,成为PCI Bus端的从机以及Local Bus端的主机。而在PCI DMA方式下PCI9054同时是PCI Bus端和Local Bus端的主机。
从模式就是允许pci总线上的主控设备访问局部总线上的plx9054的配置寄存器和内存,支持突发和单周期动模式传输。Plx9054通过16字长的pci从设备度FIFO和32字长的pci从设备写FIFO,来支持从pci总线到局部总线上的突发和单周期存储器映射访问和i/o映射访问。Pci基址寄存器用来设定pci存储器和i/o地址空间。从模式操作包括延时读操作,提前读操作等。这种模式有非复用的地址和数据总线,电路设计,时序和控制相对简单。
 
DMA模式
 Plx9054  有一个强大的双通道分散/收集dma控制器,支持pci主机和适配器内存的高效突发传输。两个独立的dma通道能从局部总线到pci总线和从pci总线到局部总线传输数据。每个通道包括一个dma控制器和一个专用双向FIFO。两个通道都支持块传输,分散/收集传输,应用或者不用EOT传输等。模式选择在plx9054 成为一个pci总线主设备之前由主设备使能位(pcicr[2])使能。另外,两个dma通道都能编程实现8,16,32bit局部总线带宽,使能/使无效内部等待周期,使能/使无效局部总线突发传输;执行pci存储器写并无效操作;设置pci中断(inta)或看是否本地中断(i.int)等  对于数据传输模式的选择,主要是根据硬件制作者对硬件设计的需求而定的。当硬件制作者选择有pci发起控制的时候,则9054应该为pci的工作目标,这时候应选择9054的pci target方式。当硬件制作者选择由本地端发起控制的时候 ,9054 成为主控设备,而pci则成为9054的工作目标,这种情况应选择婆4的pci master方式。而在数据进行dma传输的时候,9054  对pci端和local端都是主控设备,本身就具有dma控制器,完全可以脱离pc机进行dma控制,这时候,9054就工作在dma传输方式。本课题就是由pc机发起控制请求向外部sram读写数据的,所以选择plx9054从模式(pci target)传输方式。在这种模式下,plx9054对pci端是目标设备,对local端则是主控设备
 
PCI9054提供了两个独立的可编程DMA(Direct Memory Access,直接存储器存取)控制器;每个通道均支持块和分散/集中的DMA方式;在PCI总线端支持32位的数据位宽,时钟速率达到33MHz;本地端可以编程实现8、16或32位的数据宽度;传输速率最高可达132MB/s;本地总线端时钟最高可达50MHz支持复用/非复用的32位地址数据。
 
在PCI9054内部分别提供了这三种传输方式下的内部寄存器,方便设计者来对每一种传输方式进行配置
 
 
 
 
 
 
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2013-07-02 17:44
预留
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2013-07-02 17:46
[sell=1,money][/sell]PCI9054笔记.pdf
方便交流,建立了FPGA+PCI群,以后技术要点还是要发到论坛上来。 注明:FPGA+PCI
搞活驱网才是王道。天天扯淡的就别进来了。
群:187471817
 
 资料已经更新到PCI  PCIEX4
 资料出售地址:
http://weixinstrong.taobao.com/
 
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
terry_nyh
驱动牛犊
驱动牛犊
  • 注册日期2013-07-04
  • 最后登录2013-08-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2013-07-04 14:15
拜读看看
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2013-07-05 17:50
接下来我们应该了解PCI配置空间。
PCI空间包含了我们我们必须的访问信息。比如mem base addr ,IO base addr .如果你是做黑客的话你可以用到扩展ROM base addr,自己写个PCI板卡BIOS,在BIOS运行完后接管,这个时候你就可以胡作非为了,比如拦截硬盘访问,植入带有操作系统的驱动,这就是很多人说的360都杀不掉的木马,国外有开源项目。扯太远了。还有INT中断啥的,对了还有关键的一个PID  VID,系统根据INF加载驱动就是通过这个,还有就是驱动的编写。
我们一展美图
        DW |    Byte3    |    Byte2    |    Byte1    |     Byte0     | Addr
        ---+---------------------------------------------------------+-----
         0 |     Device ID     |     Vendor ID      | 00
        ---+---------------------------------------------------------+-----
         1 |      Status     |      Command      | 04
        ---+---------------------------------------------------------+-----
         2 |        Class Code        | Revision ID | 08
        ---+---------------------------------------------------------+-----
         3 |   BIST  | Header Type | Latency Timer | Cache Line  | 0C
        ---+---------------------------------------------------------+-----
         4 |           Base Address 0           | 10
        ---+---------------------------------------------------------+-----
         5 |           Base Address 1           | 14
        ---+---------------------------------------------------------+-----
         6 |           Base Address 2           | 18
        ---+---------------------------------------------------------+-----
         7 |           Base Address 3           | 1C
        ---+---------------------------------------------------------+-----
         8 |           Base Address 4           | 20
        ---+---------------------------------------------------------+-----
         9 |           Base Address 5           | 24
        ---+---------------------------------------------------------+-----
        10 |          CardBus CIS pointer          | 28
        ---+---------------------------------------------------------+-----
        11 |  Subsystem Device ID  |   Subsystem Vendor ID   | 2C
        ---+---------------------------------------------------------+-----
        12 |        Expansion ROM Base Address        | 30
        ---+---------------------------------------------------------+-----
        13 |        Reserved(Capability List)         | 34
        ---+---------------------------------------------------------+-----
        14 |            Reserved             | 38
        ---+---------------------------------------------------------+-----
        15 |  Max_Lat  |  Min_Gnt  |  IRQ Pin  |  IRQ Line  | 3C
        -------------------------------------------------------------------
 
这个只是PCI空间256的前64字节。4*16
 
PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。
系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。所以,所有的PCI设备必须实现配置空间,从而能够实现参数的自动配置,实现真正的即插即用。
PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放。前64个字节的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。
PCI设备有三个空间——内存地址空间、IO地址空间和配置空间。由于PCI支持即插即用,所以PCI设备不是占用固定的内存地址空间或I/O地址空间,而是可以由操作系统决定其映射的基址。
 
那我们顺便看一下PLX9054对应的PCI和本地配置空间

图片:9054_EEPROM.png


忘了说了,PLX9054的配置信息是存到EEPROM中的。我们通过PLXMon工具来配置。
从图上看以出来主要分2部分,第一部分是PCI配置空间,第二部分是本地的配置空间。
是不是怀疑PCI配置空间如此至少,谁让人家是即插即用那。我们来一个对号入座。比如PCI配置空间的0X3C出有INT中断,呵呵 果真如此吧。PCI配置空间和PLXMon配置空间的偏移都是这个。
 
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2013-07-05 18:14
PCI9054有SPACE0 SPACE1连个地址空间,都可以配置成IO和存储器空间。这两个类似但是还是有
差别的。
1 存储空间支持0-4G空间映射, IO只支持0-256字节映射
2 存储空间可以8/16/32位总线位宽操作,IO只支持32位
3 存储空间支持单一周期和突发模式读写。 IO只支持单一周期读写。
 
 
根据自己的需求选择上面两种方式进行操作。如果是数据流最好是存储器空间,采用DMA方式,
进行参数配置和寄存器读取采用IO空间。
对于上位机驱动IO和存储器空间自动分配,不会重叠,但是对于FPGA我们要避免地址重叠。
 
 
我们接下来介绍IO空间操作和存储器空间操作(DMA)
一  先说IO空间操作吧
这个操作中,PLX5054对于PCI总线来说是从设备,对于FPGA来说是主设备。可以这样记住,左边:PCI是主设备----plx9054是从,右边
PLX9054是主--FPGA是从设备。
即PCI局部总线端 或者其他设备作为主设备发起PCI9054的IO操作,此时PCI9054的局部总线端是目标设备。同事PCI9054的本地总线又作为本地总线端
向FPGA发起IO操作,FPGA作为目标设备接收总线控制。

图片:PCI Target Read.png



Read过程

图片:PCI Target Write.png



Write过程

图片:PCI9054目标设备Local总线存取过程.png


PCI9054目标设备Local总线存储过程。

上图可以看出存储过程主要是进行地址映射的过程,首先进行Local端和PCI端的寄存器映射,再通过PCI9054内部的两个目标设备FIFO进行存取
,主机根据寄存器的值既可以得到映射位置上面的数据。

上面的过程主要对应如下时序:
1 主设备发起Local总线占用请求LHOLD信号,FPGA应答产生LHOLDA信号运行该请求。
2 主设备获得运行后,发起起始信号ADS#,并提供Local总线读写方向信号LW/R#以及地址信号LA[31:2]
3 fpga获得其实信号后,发出总线准备好信号READY#,并执行相应操作。
4 主设备完成操作后,发起结束信号BLAST#,FPGA捕获后改变READY#状态。
5 主设备捕获READY#状态后,释放Local总线占用信号LHOLD。
FPGA应答线释放,结束操作。
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2013-07-06 09:10
IO模式的FPGA代码分析:

 // la[13:0] == 14'b1 ,实现定义好的地址协议,用于判断操作类似类似,联合以下信号
// ADS#、LW/R、LBE#和LA(控制模块将对以上信号锁存和译码来确定操作目标和操作类型)本程序未使用LBE
module WITH_PCI_LED_RUN(
                        clkin,//时钟
                        lrst,//RST
                        ld, //本地总线的数据信号
                        ads,//开始信号
                        lwr,//低电平读,高电平写
                        ready,//总线准备好信号
                        blast,//操作结束信号
                        lhold, //Local总线占用请求信号
                        lholda,//Local总线占用允许信号
                        la, //本地总线的地址信号
                        ccs,//低有效的片选信号
                        bterm,//当前突发操作结束
                        led //OUTPUT控制LED的
                        );
 
    input             clkin;
    input            lrst,ads,lwr,blast,lhold;
    input    [13:0]    la;
    output            ready,lholda,ccs,bterm;
    input    [31:0]    ld;
    output     [3:0]     led;
 
    reg     [3:0]     led;
    reg     [24:0]    count;
    reg     [1:0]     state;
    wire             clk;
    reg                lholda;
    wire            ready,ccs,bterm;
 
    reg                readyflag;
    reg        [7:0]    LEDByControl;
//--计数分频-------------------------------------
always @ (posedge clkin)
    count <= count+1;
 
assign clk = count[24];
//--LED控制--------------------------------
always @ (posedge clk)
    begin
        case(LEDByControl)
            8'd1:    led <= 4'b0001;
            8'd2:    led <= 4'b0010;
            8'd3:    led <= 4'b0100;
            8'd4:    led <= 4'b1000;
            8'd5:    case(state)
                        2'b00:    led <= 4'b0001;
                        2'b01:    led <= 4'b0010;
                        2'b10:    led <= 4'b0100;
                        2'b11:    led <= 4'b1000;
                    endcase
            default:led <= 4'b0000;
        endcase        
    end
 
always @ (posedge clk)
    state <= state+1;
 
//--PCI本地控制器-------------------------------
always @(posedge clkin)
    lholda <= lhold;
 
always @(posedge clkin or negedge lrst)
    begin
        if(!lrst)
            begin
                readyflag <= 1'b0;
                LEDByControl[7:0] <= 8'b0;
            end
        else if(!ads & lwr & blast & la[13:0] == 14'b1)//ads为低,blast 为高代表是一个起始信号。(低电平有效)
            begin
                readyflag <= 1'b1;
            end
        else if(ads & lwr & blast & readyflag == 1'b1 & la[13:0] == 14'b1)// 开始阶段到取数据阶段的一个中间状态,可以进行相应操作
            begin                                                                                        
                readyflag <= 1'b1;                                            
            end
        else if(ads & lwr & !blast & readyflag == 1'b1 & la[13:0] == 14'b1)  //取数据。
            begin
                LEDByControl[7:0] <= ld[31:24];
                readyflag <= 1'b0;
            end
        else
            begin
                LEDByControl[7:0] <= LEDByControl[7:0];
                readyflag <= 1'b0;
            end
    end
//-----------------------------------------------------
assign       ccs = 1'b1;
assign       bterm = 1'b1;
assign          ready = 1'b0;
 
endmodule
 
再详细的说明等拿到板卡在调试。
下图是片上逻辑分析仪的时序图

图片:时序图.png


NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2013-07-06 09:18
下一个就是DMA模式
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
ddsea
驱动牛犊
驱动牛犊
  • 注册日期2013-04-17
  • 最后登录2013-08-12
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2013-07-11 11:03
拜读啦,谢谢分享!
popboy126
驱动牛犊
驱动牛犊
  • 注册日期2011-10-19
  • 最后登录2013-07-12
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2013-07-12 19:54
谢谢楼主分享经验,学习了!
helsin
驱动牛犊
驱动牛犊
  • 注册日期2006-06-04
  • 最后登录2013-07-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2013-07-13 23:15
谢谢,不错。
jorley
驱动牛犊
驱动牛犊
  • 注册日期2011-11-21
  • 最后登录2016-03-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2013-07-15 11:18
thanks a lot
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2013-07-18 16:25

图片:IMG_20130718_133351.jpg


图片:IMG_20130718_133356.jpg


图片:IMG_20130718_133404.jpg


图片:IMG_20130718_133445.jpg



淘宝地址:
驱动会员成本价:60元一片,邮费自付。
http://item.taobao.com/item.htm?spm=686.1000925.1000774.11.dP7Byo&id=26501560516
四层板,15*11cm 斜边+金手指。
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2013-07-18 16:37
近期比较忙,过几天,成本价出售 成品PCI卡

在这里插入一个硬件调试的步骤。
因为做的新板卡EEPROM是空白的所以在进入系统时候会进不去,也就是在BIOS启动后,就卡在那里了,屏幕左上角会有一个光标不停的闪烁。
恭喜你,这是成功的最后一步了。至少我的系统是这样的。
方法有两个
1  使用编程器烧写EEPROM,记得是16bit的。(我用编程器正常烧写了还是不行,没有天理)
2 采用一般的路子, 把TEST管脚拉高并且把EEDIO管脚拉低时能进入系统的,原因是TEST拉高进入测试模式,PCI9054相当于不工作,在出现进度条时候
把TEST拉低。这样进入之后系统提示新硬件,然后就是安装官方驱动(要求重启,上面的步骤再来一次),再就是启动PLXMON烧写eeprom。
正常烧写了EEPROM后,设置TEST管脚一直为低,,就可以使用正常启动系统了。以后 以后的以后都可以正常启动。
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
nurikolu
驱动牛犊
驱动牛犊
  • 注册日期2007-08-14
  • 最后登录2013-07-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望43点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2013-07-26 14:06
受益良多 希望大大可以持續更新此文...
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
18楼#
发布于:2013-07-30 16:36
用户被禁言,该主题自动屏蔽!
wuwovicky
驱动牛犊
驱动牛犊
  • 注册日期2013-07-30
  • 最后登录2014-01-12
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2013-07-30 19:02
正在学9054的开发呢,看看。
上一页
游客

返回顶部