FPGA counter and FIFO

masterz 2011-12-31 12:32:12
请教一下,Artix-7能设计出多少个16bit的计数器呢?FIFO depth 能达到多少?TAG 能达到多少?我看到有人用Virtex-4 FF1517设计了40个counters, FIFO深度为256, TAG有2组,1组是6K*32bit, 一组是6K*1bit. 为什么不设计为2组都是32bit呢?求解。
...全文
201 点赞 收藏 21
写回复
21 条回复
masterz 2012年01月12日
[Quote=引用 19 楼 answerlj 的回复:]

你可能理解成我说的RAM是片外RAM了,我说的实际上就是FPGA片内RAM。硬件上的FIFO强调的是读写同时进行,从而压缩延迟,而你说的读写分时间进行的用法实际上就是在操作RAM。
[/Quote]
谢谢您的说明。我们之前有一个产品把FIFO是建立在FPGA block RAM上,通过DMA把FIFO拷贝到ARM CPU RAM, 我不知道DMA是否每次都拷贝固定长度数据。期望的工作模式是一边写一边读出来往ARM CPU RAM传,但是写入数据的速度和数量是不定的。有可能100us只写几个字节,也可能超出FIFO容量,要分多次写入和传输,这样的需求大概要怎么实现呢?
回复 点赞
AnswerLJ 2012年01月12日
你这个与网卡的DMA传输很像,这大概需要用到 TX RING BUFFER,可以参考网卡的DMA。
例化多个RAM出来,构成一个链表存储收到的数据,然后构造一个RAM Controller来控制这个链。每个RAM的大小固定。可以自己设定一次DMA传输的数据为一个RAM的数据量或者更多。
例如PCIE DMA中就是这样的,一次DMA的数据量大小可以超过4KB,而超过4KB的DMA传输会被分割成小于或等于4KB的TLP进行传输,而当所有的TLP传输完成以后才会产生中断。
回复 点赞
masterz 2012年01月11日
FIFO是建立在FPGA block RAM上 (比如Virtex-6有Block RAM 可以配置为1K x 36(or 32)).
FPGA在大约100us内向FIFO写内容,然后DMA把这个内容拷贝到RAM里的一个RingBuffer. 我觉得使用额外FIFO的好处是FPGA不需要和ARM CPU竞争总线控制权。在FPGA工作的时候,ARM CPU也有很多工作要做,也需要访问内存。
回复 点赞
AnswerLJ 2012年01月11日
FIFO 是RAM+FIFO Controller
RAM 只是RAM(根据需求+RAM Controller),区别还是很大的,FPGA可以直接例化RAM,根据你的应用,用不到FIFO,因为DMA之前必须确知源数据的大小。这样实际上也根本没有在DMA过程中使用到FULL,EMPTY等等的信号啊。
在同步FIFO中只需要FULL,EMPTY两个控制信号,在异步FIFO中根据写时钟与读时钟的关系才需要
almost full(写频率>读),almost empty(读频率>写)。
在你的应用中,如果使用了FULL,EMPTY来使能DMA中断与DMA完成的话,则此时读,写必须分时进行,这跟使用单端RAM没有区别了,如果使用其他的方式来使能DMA中断与DMA完成的话,则需要增加逻辑,所以说你这里使用FIFO跟RAM没有区别啊。

回复 点赞
AnswerLJ 2012年01月11日
你可能理解成我说的RAM是片外RAM了,我说的实际上就是FPGA片内RAM。硬件上的FIFO强调的是读写同时进行,从而压缩延迟,而你说的读写分时间进行的用法实际上就是在操作RAM。
回复 点赞
Binzo 2012年01月10日
altera 的 de0 的 fifo 可以做到 4k 。
fifo 用的是 RAM 和 一点LUT。
不知道 Artix-7 硬件支不支持 32b。如果不的话, 16b 会快些。
回复 点赞
AnswerLJ 2012年01月10日
数字电路中的FIFO的深度取决于WCLK 与RCLK之间可能的连续亚稳态冲突时间的长短,FIFO的深度增加只能是延迟两次亚稳态冲突的间隔时间,而对于亚稳态冲突的时间并不能起到缩小的作用。根据亚稳态时间占据时钟周期的比例可以找到一个比较合适的深度使得性价比最大。而这个深度大概不会超过4K。异源同频时钟域的通信是连续亚稳态时间最长的。
软件层的FIFO主要用于缓冲,所以理论上来讲是越大越好,而硬件层的FIFO主要是用于降低传输延迟,最大程度的避免连续亚稳态的时间影响。这是软件层的FIFO与硬件层的FIFO的根本区别。因此一般不太需要关注器件的FIFO生成能够达到的最大深度问题。
计数器的位宽取决于FF的个数,FPGA能够生成的COUNTER的个数理论上的最大值取决于其内部的包含的CLB的个数以及每个CLB的构造,如一个CLB中只含有一个FF,则构成一个16-BIT counter需要占用16个CLB中的FF逻辑资源。用总数除以16就是理论上的最大值,这是理想情况,而实际上在工程中含有其他复杂模块的情况下,是不能能达到100%的利用率的。
回复 点赞
masterz 2012年01月10日
[Quote=引用 13 楼 answerlj 的回复:]

这个描述的并不清晰,怎么还要用到DMA直连FIFO呢。这不是直接把FIFO当成RAM在用了么。据我所知不管是读还是写存储器的DMA,都需要先有源数据的确知大小才可以啊。如果要用读写指针的位置来算数据大小这不是画蛇添足么。
[/Quote]
FIFO是FPGA上的内存,通过DMA拷贝到CPU RAM.下面这一段是来自Virtex-6 Family Overview
FIFO Controller
The built-in FIFO controller for single-clock (synchronous) or dual-clock (asynchronous or multirate) operation increments
the internal addresses and provides four handshaking flags: full, empty, almost full, and almost empty. The almost full and
almost empty flags are freely programmable. Similar to the block RAM, the FIFO width and depth are programmable, but the
write and read ports always have identical width. First-word fall-through mode presents the first-written word on the data
output even before the first read operation. After the first word has been read, there is no difference between this mode and
the standard mode.
回复 点赞
pro_or_gram 2012年01月10日
可以理解成,FIFO 支持 DMA 传输模式。设置一个门限作为trigger,比如说4K的FIFO, 那么设置trigger为4K,即FIFO满的时候,触发中断,或者触发DMA传输,这个貌似可选

1GHz,是纳秒ns级别的, 1秒2w次,是微妙us级别的,对于你的需求,问题应该不大的,只不过,调试的时候可能会有些问题,因为一调试这个部分,就意味着要打断了,时延一长,看到的数据可能就半拉胡片的了
回复 点赞
AnswerLJ 2012年01月10日
20000次并不算高,根据你的最大需求带宽计算 20000×8K=160MBPS,这只需要PCIE X1 LANE 工作于V1.0版本就可以了。而XLINX V5+的FPGA可以支持到X8 LANE。DMA作为外围设备间的通信手段,跟CPU的主频关系不大。前提是你的系统核心支持PCIE通信,且有PCIE接口。这属于GTP范畴了,如果没有G-BIT接口是做不了这样的DMA的。
回复 点赞
AnswerLJ 2012年01月10日
这个描述的并不清晰,怎么还要用到DMA直连FIFO呢。这不是直接把FIFO当成RAM在用了么。据我所知不管是读还是写存储器的DMA,都需要先有源数据的确知大小才可以啊。如果要用读写指针的位置来算数据大小这不是画蛇添足么。
回复 点赞
AnswerLJ 2012年01月10日
DMA的话 肯定是需要中断的,这跟FIFO没有必然的联系,可以参考 网卡DMA设计中的实现机制,例化多个FIFO建立DMA环。这样应该是可以做到1个中断就够了
回复 点赞
masterz 2012年01月10日
[Quote=引用 10 楼 pro_or_gram 的回复:]

学习了。

FIFO的作用,在软件角度讲,提高了CPU 的利用率,不需要CPU总去拿数据,而是改成了以 block的形式拿一些数据。
FIFO有数据不处理的话,就会发生覆盖。
FIFO 深度不够是很正常的情况,够了才是怪呢,在我个人看来,多次触发DMA很正常
[/Quote]
FIFO有读写指针,有空间就能继续写,没有空间就得停下来等待。
希望有经验的朋友分享一下中断频率方面的知识。我搜了一下,似乎通常的PC上中断不能达到我需要的这么高频。我的应用环境是嵌入式系统,ARM CPU (1G或者1.2GHZ).请多指教。
回复 点赞
pro_or_gram 2012年01月10日
学习了。

FIFO的作用,在软件角度讲,提高了CPU 的利用率,不需要CPU总去拿数据,而是改成了以 block的形式拿一些数据。
FIFO有数据不处理的话,就会发生覆盖。
FIFO 深度不够是很正常的情况,够了才是怪呢,在我个人看来,多次触发DMA很正常
回复 点赞
masterz 2012年01月10日
[Quote=引用 8 楼 answerlj 的回复:]

数字电路中的FIFO的深度取决于WCLK 与RCLK之间可能的连续亚稳态冲突时间的长短,FIFO的深度增加只能是延迟两次亚稳态冲突的间隔时间,而对于亚稳态冲突的时间并不能起到缩小的作用。根据亚稳态时间占据时钟周期的比例可以找到一个比较合适的深度使得性价比最大。而这个深度大概不会超过4K。异源同频时钟域的通信是连续亚稳态时间最长的。
软件层的FIFO主要用于缓冲,所以理论上来讲是越大越好,而硬件……
[/Quote]
FIFO通过DMA传输到RAM,需要中断控制么?1秒能实现20000次传输么?我遇到的情况是:每次FPGA向FIFO写入一些长度不定的数据(大约1~8KB),写完之后传到RAM.如果FIFO深度不够,那就要分多次传,有点担心interrupt数量过多。请多指教。
回复 点赞
宇宙总统 2012年01月04日
根据你的需求
counter位数多了好像不是很好
回复 点赞
woshi_ziyu 2012年01月04日
[Quote=引用 4 楼 masterz 的回复:]

4-bit counter


8-bit counter
[/Quote]
JK触发器
回复 点赞
masterz 2012年01月03日
4-bit counter


8-bit counter
回复 点赞
masterz 2012年01月02日
恶补了一下数字逻辑的基础知识,大概有点概念了,32bit counter需要32个flip-flops和一些其他的资源,TAG要用Distributed RAM, FIFO用Block RAM.
Virtex-4 Family Overview
还需要继续研究怎么让accumulator和register一起工作。
回复 点赞
woshi_ziyu 2012年01月02日
[Quote=引用楼主 masterz 的回复:]
请教一下,Artix-7能设计出多少个16bit的计数器呢?FIFO depth 能达到多少?TAG 能达到多少?我看到有人用Virtex-4 FF1517设计了40个counters, FIFO深度为256, TAG有2组,1组是6K*32bit, 一组是6K*1bit. 为什么不设计为2组都是32bit呢?求解。
[/Quote]
没接触过Artix-7 帮顶
回复 点赞
发动态
发帖子
硬件设计
创建于2007-09-28

4444

社区成员

1.1w+

社区内容

硬件/嵌入开发 硬件设计
社区公告
暂无公告