<li id="61csb"><s id="61csb"><xmp id="61csb"><noframes id="61csb"></noframes>
  • <sub id="61csb"></sub>
    <sub id="61csb"><xmp id="61csb">
    <sub id="61csb"></sub><sub id="61csb"></sub><sub id="61csb"><progress id="61csb"></progress></sub>
  • <menuitem id="61csb"><xmp id="61csb">
    <sub id="61csb"></sub>
    <track id="61csb"></track>
  • <menuitem id="61csb"></menuitem>
    <sub id="61csb"><xmp id="61csb">
    <sub id="61csb"><progress id="61csb"><sub id="61csb"></sub></progress></sub>
  • <menuitem id="61csb"><xmp id="61csb"><sub id="61csb"></sub>
    <tbody id="61csb"></tbody>
  • <menuitem id="61csb"></menuitem>
    <tbody id="61csb"></tbody>
    <menuitem id="61csb"></menuitem>
  • <sub id="61csb"></sub>
  • <sub id="61csb"><xmp id="61csb">
  • <menuitem id="61csb"><font id="61csb"></font></menuitem>
    <tbody id="61csb"></tbody><sub id="61csb"><progress id="61csb"></progress></sub>
  • <track id="61csb"></track>
    <menuitem id="61csb"></menuitem>
  • <track id="61csb"><noframes id="61csb"><center id="61csb"></center>
    <tbody id="61csb"><noframes id="61csb"><samp id="61csb"><input id="61csb"></input></samp>
    <tbody id="61csb"><center id="61csb"><tbody id="61csb"></tbody></center></tbody>
    <menuitem id="61csb"></menuitem>
  • <track id="61csb"><noframes id="61csb">
  • <track id="61csb"></track>
    <sub id="61csb"></sub><sub id="61csb"><xmp id="61csb"><menuitem id="61csb"></menuitem> <track id="61csb"><li id="61csb"></li></track>
  • <sub id="61csb"><xmp id="61csb"><menuitem id="61csb"></menuitem>
    <track id="61csb"><noframes id="61csb">
    <track id="61csb"><noframes id="61csb">
      iihacker
      论坛版主
      论坛版主
      • 注册日期2010-01-07
      • 最后登录2017-08-16
      • 粉丝5
      • 关注8
      • 积分377分
      • 威望1941点
      • 贡献值0点
      • 好评度0点
      • 原创分0分
      • 专家分0分
      • 社区居民
      阅读:6609回复:59

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

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

       
       
       
       

      最新喜欢:

      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://www.bookclockshop.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://www.bookclockshop.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的开发呢,看看。
      上一页
      游客

      返回顶部