微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > PCI设计

PCI设计

时间:10-02 整理:3721RD 点击:
    目前设计的initiator功能较为简单,按照目前我们的系统设计需求,我的初步想法是这样:
    PCI用fpga实现,master write时序是设计重点。fpga外挂一个大容量的fifo,内部嵌入一个小的fifo,用以将外部fifo数据导入内部去,匹配PCI时序。
    由于PCI交易过程中,fifo可能被多读,我想在内部设计中当遇到桥芯片提前终止交易时,用内部触发器锁住多余的数据,而不用将fifo“backup”。
   目前遇到的困惑:
    1、master write开始时,交易地址如何控制?因为这个交易地址是物理内存的地址空间,难道要在Fpga内部设计一个寄存器,保存物理地址空间?
    2、由于我的数据量较大,不可能在物理内存开辟足够空间。譬如物理内存开辟10M空间,我每次master write128个数据到内存空间,我用什么好的方法通知软件?软件是否要把内存空间的数据读走以腾出内存空间?
    3、当写入到内存空间的数据足够多时,可能到达内存底部空间,此时再一次交易是否由从内存起始的地址空间开始?
    4、你所设计的PCI卡实测的吞吐量有多少?针对第二个问题,由于(可能)软件从内存地址空间读数据,突发长度为多少较好?你认为长度定死好还是动态较好?
    上面是我个人的想法,你可以给出你的建议!
    希望得到你的指导!
   

PCI设计
不知道你是否使用pci core ? 如果使用的话在设计指导上会有详细的initiator的设计描述,特别是pci fifo的使用问题,其实并不复杂。
我们用fpga设计pci时从来没有用过外部fifo,我们用的是512x32的内部RAM做的,通过测试发现用1024x32的fifo与512x32性能没有什么差别,因此我建议你只使用
内部fifo,这样更简单。我们所做的pci的速率最高为30Mbyte/S,但是如果LT配置的很低时(比如32)则数据会发生断链。我们的数据也很大(应该说是无限大,只要程序运行就会一直传送数据),我们采用了pinpang结构,即在fpga内设有两个交易地址,同时在pc机内也开有两块存储区,fpga内设有交易地址计数器,每传完一个数据块(所开内存区)就会产生中断通知pc机,当然软件要及时读走缓冲区内的数据以便下一次pci数据填充。突发长度设定并不重要,长度越长中断产生的频率就越低,我认为可取4k以上就可以了。

PCI设计
    我没有使用PCI core,准备自己设计。
    目前我最感到疑惑的是交易地址,能否就着一方面给予详细的指导?
    我猜想你的设计是基于xilinx,我用的是Altera器件,关于pci initiator设计描述(可以公开)的文档能否发一份给我?
    非常感谢!

PCI设计
    jack,initiator 中配置寄存器的Min_Gnt有何用途?我理解为可以保持总线的时间,例如设置为0x10,则可以保持250ns*16=4000ns,不知对否?我是否可以不用它,硬连线到0?
    Max_Lat是不是一般不用实现?

PCI设计
Min_GNT 可以用来告诉系统软件或bios这块卡要求一次传输的数据数(pci clk),在设计时用硬连线最好连为ff,不能被软件改写。系统启动时,会读取该寄存器,然后综合分析后bios会决定这块卡的Lat_timer是多少,然后写入卡内,这样pci卡就会按lat的数值来决定一次传输的数据。有时bios不会满足你的lat要求,这时你可以用自己的驱动去写lat_timer(可以写为最大255),这样会提升这块卡的传输效率的
Max_Lat与此无关。

PCI设计
你们用何软件作驱动程序?

PCI设计
jack兄,牛。

PCI设计
我们一般用DDK和windriver,不过我自己只用windriver,毕竟我是做硬件的,没有太多的尽力去编软件.

PCI设计
谢谢jerry,欢迎你加入

PCI设计
dragonyoo:关于pci initiator设计描述我有一份是xilinx的,不过是基于xilinx pci core以下的设计描述,不知对你是否有用?如果有用我可以发给你.

   我的E_mail:dragonyoo@sina.com
   非常感谢!

PCI设计
发过去了,请查收

PCI设计
我没有收到,能不能再发一次?

PCI设计
又发了一次,受到了么?

PCI设计
真不错,问的不错,回答的更好!
真是受益匪浅!

PCI设计
小编,您说发给我的PCI调试工具我还没收到,能否重发一次?非常感谢!

PCI设计
我也想學PCI設計  算是初學者

PCI设计
謝謝

PCI设计
没有写过pci方面的东东,羡慕呀

PCI设计
   jackzhang 我有一个问题想请你帮我看一下,是<<pci系统结构 第四版>>上的一个例子
   [例6-1]
   假定FFFFFFFFH被写入基地址寄存器的配置双字04D中,并且返回值为FFF00000H,任何位可被改变为1的事实表明实现了基地址寄存器。------]
   我想问的是配置双字04D是怎么来的?基地址寄存器不是只有6个配置双字嘛?10H,14H,18H,1cH,20H和24H
   阿肖谢过!

你说的那6个配置双字地址是以字节来计算的地址,每个地址对于8位,是字节地址,不是双字地址。
那本书上说的是以双字来计算的双字地址,每个地址对于32位。
不过有一点我不明白的是:“假定FFFFFFFFH被写入基地址寄存器的配置双字04D中,并且返回值为FFF00000H”,它的这个返回值是PCI卡来实现还是系统来实现。
是不是说如果想基地止寄存器写FFFFFFFFH,PCI卡就要返回一个值?这是不是不同于一般的配置写交易?

PCI设计
你说的对04 DH写法有点问题,其实就是第4个双字
所谓返回,实际上是配置读之后的结果

PCI设计
那是不是说:如果向基地址寄存器写入FFFFFFFFH,这是一个写交易;在接下来的寄存器读交易读到的数据就是上面说的返回值。
那也就是说:如果向基地址寄存器写入FFFFFFFFH,这个操作和普通的寄存器写交易是不同的。
那就要在设计时区分写入基地址配置寄存器的是不是FFFFFFFFH,以区分以后的配置读交易?

PCI设计
问:我们使用的PCI Slave模式的PCI在硬件上设计的支持Memory的Burst读操作,而配合软件时却产生不了Burst操作,是否和驱动有关,驱动中使用的是mcopy函数

PCI设计
一个傻傻的问:我们设计的PCI只是实现了Slave模式,在硬件设计上支持memory的burst读操作,驱动上使用mcopy函数,为什么没有burst读操作产生呢?如何解决?

PCI设计
什么问题? 你没写全

PCI设计
问各位高手:小弟使用的XILINX PCI IP ,我设计时采用的PCI SLAVE模式,在FPGA中支持使用Memory的BURST读操作,而从逻辑分析仪上看却没有产生BURST读的操作。从FPGA的设计上,从仿真的结果上看不出有任何问题;我怀疑是否是驱动的问题,而设计驱动的软件工程师也说他的驱动肯定也是能实现BURST方式的。小弟对软件不是很感冒,所以想请教一下各位高手,在驱动中使用“memcpy”函数是否能够产生Memory的BURST读操作?还是要使用一些更底层的函数?

PCI设计
请不要费力了,在pc机上无法实现的,也就是说无法控制pc机host产生burst来操作pci device.
必须用pci device master方式来实现。

PCI设计
多谢jack兄!
可是这点我就一直也不是很理解了,既然PCI协议上明确有SLAVE Memory BURST的操作类型,为什么Host不支持呢?
我也测试过好多PCI机,我也觉得似乎是Host没有产生burst。可是有什么明确的理由可以证明确实是host不支持burst方式吗?
多谢!

PCI设计
我在几年前也和你一样,但是确实行不通。
并不是说就不能实现,有可能是可以的,但不是标准方法,有的芯片组支持有的不知持,就是不同的芯片组可能实现起来是不一样的,这方面的资料也很少,因此设计pci burst都设计为pci device master方式。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top