阅读:1665回复:5
x86处理器不能执行IO突发?
PCI系统结构中写:x86处理器不能执行IO突发。虽然在突发交易是合法的,IO交易一般由处理器起动处理器不能执行突发IO交易......当一个INS指令被X86处理器执行时它导致一系列背靠背IO读/存贮器写交易......
那么如果一个32bit 的FIFO接到9054的local bus 中,应把它当IO处理还是MEMORY处理呢? 当需要高速传送时,当IO处理,用direct master或slave方式会不会速度太慢了?当MEMORY处理时,又应如何接法呢? 有懂的就帮帮忙,发文讨论讨论吧。。 //thx |
|
|
沙发#
发布于:2001-09-11 20:46
我也在考虑这方面的问题,可以提一些意见:
(1)I/O读写应该不能执行PCI猝发,因为I/O指令经常是前后相关的,若用猝发,则可能导致预料不到的I/O指令执行顺序。 (2)可以用存储器读写来访问FIFO,用I/O读写来访问I/O设备,I/O设备和FIFO之间用DMA/DSP/本板CPU来处理大量的数据流。 |
|
|
板凳#
发布于:2001-09-12 10:42
很感激 ZhuYong 的回复,但我还有很多不明白的地方。
我认真看了PCI系统结构,9054的data book中所有对IO操作的时序图,以及Intel的80x86处理器对IO的操作指令INS、IN等,发现x86对IO操作的确只能采用背靠背或快速背靠背操作。这样,33M的PCI总线在快速背靠背操作时,其速率最大也小于32bit X 16.5 HZ。对总线的利用率也太低了吧。。。 一个 32bits X 64 的FIFO,它的MEMORY范围应取为多少呢?如果以通常MEMORY的观点看,它的出口只有32bit,也就是只能一次性访问32bit,那么它的范围也就只能占用1bit。这样的话就只能 single read and write,not the burst read and write, 和IO访问的速度还不是一样了? 当然也可以把它的地址接成00h~40h,以占用多个“MEMORY ADDRESS”,以能够突发传输。可是这样做总是觉得不大合理,因为这和通常的MEMORY看起来很不一样,它不能随机读取某些地址的内容而只能顺序读。 对FIFO到底应如何处理呢? |
|
|
地板#
发布于:2001-09-12 12:06
(1)可以改用双端口RAM来实现,以求和通用逻辑统一。
(2)考虑到FIFO中已整合了地址递加的功能,在使用DMA时,就不需要让低位地址线(即参与地址递加的地址线)参与FIFO片选逻辑的实现,这样做是比较怪。 美国被炸了,又高兴又难过。 |
|
|
地下室#
发布于:2001-09-12 20:25
谢谢 ZhuYong 的指点,我打算用您说的第二种方法,感觉上实现简单些。
另外我在考虑我应做多大的FIFO。 设计中有如下不明的地方: (1)由于9054(考虑用9056,因为要求速率较大)的Local BUS 是接着FPGA的,FIFO也是用FPGA来实现的,很耗资源,做不了太大。而Local BUS到PCI方向传送的数据速率最少要72Mbps。 (2)论坛中有提到Windows下每次DMA相隔1ms,对于FIFO浅的卡就很不利了。 (3)不知道在windows下每次发生Direct Master Write or Direct Slave Read 时要隔多少时间。我想如果相对来说很快的话为什么不用Direct Master Write or Direct Slave Read方式呢,从时序图来看,突发方式下,它们不都是33M吗,差分只不过是占不占用CPU资源吧,对吗? 请大虾们对上面的做法给点建议吧! |
|
|
5楼#
发布于:2001-09-12 20:55
如果不使用9054的DMA方式,对大量数据传输可能有下面的隐患:
------CPU可能无法从数据传输操作中解脱出来,特别是数据传输不允许经常被打断时。尽管CPU所在的HOST总线带宽比PCI总线高得多,但正由于CPU要等待PCI总线的操作完成才能执行下一条数据传送指令,所以CPU的时间被大量占用,估计CPU可执行别的任务的时间有: 1-72Mbps/33MBps=1-9MBps/33Mps=0.727左右 你看你的应用是否可以这样做。 |
|
|