首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA编程时的一些注意事项(3)

FPGA编程时的一些注意事项(3)

3) FIFO读取和写入超时的利用:
        参考FFT Co-processor范例,当FIFO中没有有效数据时,读取操作会发生超时,这时,不将无效数据写入到下一级的FIFO;在下一次定时循环时继续读取;当写入FIFO时发生超时,说明被写入的FIFO中已没有足够的空间存入新的数据,这时,下一次定时循环时,依然向FIFO中写入上一次循环的数据。当然,使用这种方式来进行数据传输时,FIFO读取和写入的数据都不会发生异常,但如果该流程中包含Host与FPGA之间的数据传输,则会影响FPGA执行的速率:I)Host端发送数据不够快,则FPGA中总是无法得到有效数据,导致FPGA处理流程受限于数据源;II)Host端接收数据不够快,则FPGA无法将FPGA-to-Host FIFO中的数据快速清空,进而影响FPGA从Host端取数据的速率。因此,在使用FPGA处理并向上位机传输数据的时候,上位机要以FPGA处理速率相当的速率或者以尽可能快的速率读取数据。推荐的方式如下:

  很多时候,从FPGA中读取出来的数据需要直接流盘到磁盘阵列中。在高速流盘时对每次写入文件的数据块大小有要求——必须是扇区大小的整数倍,这种情况下,怎么进行读取呢?

  当然,很多函数本身就自带输入就绪、输入有效和输出就绪、输出有效这些端口,可以将这些端口与FIFO读取和写入超时端口结合起来,保证读取或者写入数据的有效性。如下:

  四线制的握手交互:上图中展示的已经是一种四线制的握手方式,完成了三个模块之间的交互。我们可以把这种交互分成左右两部分来查看,每一部分分别都是两线制的控制回环。首先来看左侧部分:读取FIFO IN时,如果发生超时,那么它输出的数据就是无效的,可以将这个端口与下一个模块的“输入有效”端口相连,来告知下一个模块这个必要的信息,对于无效数据,该模块应该丢弃;而如果第二个模块准备好接收下一个数据之后,第二个模块也将该信号反馈给第一个模块,告知第一个模块可以输出新的数据,否则,第一个模块不应该输出新的数据;这就构成了一个控制回环。再来看右侧部分:第三个模块如果准备好了接收新的数据,需要将这个信息告知第二个模块(连接到第二个模块的“输出就绪”端口),这时第二个模块就可以输出新的数据了,否则第二个模块不应该输出有效数据;而当第二个模块输出了有效的数据,那么第三个模块就应该接收数据,否则忽略。这又构成了一个控制回环。按照这样的思路,可以进行多级级联,完成多线制的握手。
继承事业,薪火相传
返回列表