FPGA从Xilinx 的7系列学起(5)

举报
李锐博恩 发表于 2021/07/15 06:59:00 2021/07/15
【摘要】 2.4 BlockRAM的级联 7系列BlockRAM存储器可以把两个相邻RAM使用专用的布线资源级联到一起。这个对于工程师的重要性在于仅仅级联两块RAM的时候,可以考虑节省不少的资源。从上面说讲述中,可以看出来,很显然不可以直接级联两个以上的的RAM。 但是如果你是使用Spartan-6系列,那用户就不能考虑使用这个级联功能,因为他们并没有该功能。 如...

2.4 BlockRAM的级联

7系列BlockRAM存储器可以把两个相邻RAM使用专用的布线资源级联到一起。这个对于工程师的重要性在于仅仅级联两块RAM的时候,可以考虑节省不少的资源。从上面说讲述中,可以看出来,很显然不可以直接级联两个以上的的RAM。

但是如果你是使用Spartan-6系列,那用户就不能考虑使用这个级联功能,因为他们并没有该功能。

如果你想使用更大规模的RAM存储空间,那么你就借助IP核的工具来实现这一点。IP的工具将增加一些输入的逻辑和一些输出的多路复用器,将更多的RAM级联到一起。这个和上面说的两个BlockRAM进行级联不太一样,上面的不需要额外的逻辑资源,但是IP核工具就需要额外的CLB资源。使用IP工具,你可以构建128K, 256K,512K甚至更大的存储空间,越大消耗的额外的CLB资源就更多。

2.5 内部集成的ECC功能

BlockRAM内部集成错误检测和纠正单元,可以做64位ECC的校验,这个时候72位的bit位都需要被使用。可以纠正所有的单bit的错误,这个错误修正是在数据的输出端口进行的,而不是在内部的存储阵列里面进行的;能够检测但是不能纠正双bit的错误;能够指示出错误地址。当用户需要时,可以故意插入一些错误,进行相关的测试。这个对使用外部高速存储器控制器的用户来说,会很有帮助。

2.6 字节写模式


7系列和Virtex-6一样支持的字节使用的方式。这个对使用嵌入式设置的工程师来说非常重要,在WRITE_FIRST模式下,进行字节操作的时候,当没有整字节操作完成时,输出口会显示为不确定值。这个真实的反映了新的memory的内容。那么用户进行设计的时候就需要时刻关注这个存储空间的内容,当用户进行读操作的时候,只有当READ信号有效的时候才可以进行读。

2.7 FIFO模式
在7系列中还包括专用逻辑,每个BlockRAM转换成专用的FIFO。这样的结构的最大好处在于可以不占用CLB资源,可以直接利用硅片里面专用单元,可以直接转化RAM为FIFO使用, 而且从性能上讲也比消耗逻辑资源的FIFO性能要好一点。XILINX 7系列中的FIFO是支持同步和异步读写操作,不需要时钟和数据之间有一个相位的便宜。空信号,满信号,和可以编程的空满信号都可以被用作控制FIFO的信号,从而可以实现不同的功能。同步FIFO可以消除异步FIFO的固有的不确定性。它有一个first-word-fall-through的选项,在空模式下,它可以使第一个数据能够立马从输出口可以读取到。

FIFO像BlockRAM一样可以提供各种不同的配置模式,当BlockRAM被分为两个18Kb的时候,它也可以使用BlockRAM的一部分。需要注意的是FIFO对应BlockRAM的端口A,写端口对应着BlockRAM的端口B。也BlockRAM一样可以级联出更大的存储空间,可以配置成64Kb

FIFO支持使用异步时钟,它能够支持标准和first-word-fall-through模式。这在生成FIFO的属性里面可以选择使用,GUI默认的模式是同步模式。同步模式只能支持标准模式,无法支持first-word-fall-through模式。这种模式没有信号的一个相互交互使用,就可以获得一个非常低的延时。

至于选用什么模式,是用户根据自己需求来完成的,有一点需要进一步强调一下,无论用户需用什么模式,都不会额外占用资源。

关于时钟的对应关系,也就啰嗦一句:读取从FIFO数据是同步的RDCLK的上升沿;写入数据到FIFO是同步的WRCLK的上升沿。

FIFO核同时可以产生大量的标志,当用户使用 GUI界面进行例化的时候,这个都是可以用户来选择使用什么信号,不使用什么信号。同样地,这些标志不要求任何额外的逻辑。最常用的信号有FULL,ALMOST_FULL,EMPTY,ALMOST_EMPTY 4个信号,FULL,ALMOST_FULL的同步时钟是写时钟,EMPTY,ALMOST_EMPTY的时钟是读时钟。

当尝试对一个满的FIFO进行写操作的时候,FIFO还提供WRERR信号来声明出错,当尝试对一个满的FIFO进行读操作的时候,FIFO还提供RDERR信号来声明出错。RDCOUNT和WRCOUNT是当前指针指到底层BlockRAM地址(它俩分别对应在RDCLK和WRCLK。)。

在同步模式下,ALMOST_EMPTY 可以编程的数值为1到FIFO深度减2的之间。在异步模式中,ALMOST_EMPTY在标准模式可以编程的数值范围为5至深度减6,在FWFT模式下可以编程的数值范围为6到深度减6。在同步模式下,ALMOST_FULL 可以编程的数值为1到FIFO深度减2的之间。在异步模式中,ALMOST_FULL在标准模式可以编程的数值范围为4至深度减7之间,在FWFT模式下可以编程的数值范围为4到深度减8之间。

最后对FIFO的两种模式在做一个简单的说明:
在标准模式下,数据的第一个字必须积极从FIFO读出。当空信号无效时,有读使能才可以读数据。在first-word-fall-through模式下,只要数据被推入FIFO中那么数据立即出现在读端口。

2.8 RAM资源的应用

用户做设计的时候发现自己的设计的代码可能被识别为RAM资源,这个时候感觉很爽。有的时候啥也推断不出来,可能会影响设计的性能。

那么什么样的资源才会被设计工具推断出来呢?

单端口,真双端口,简单双端口块RAM可以推断.

RTL代码来描述希望RAM功能的,将会被工具推断为RAM的资源。

RTL描述必须有如下特点:

同步读写

每个时钟周期只有一个或两个地址被访问

同步输出复位
这就要求用户必须对自己的代码有一个非常清晰的认识才可以如此选择,一个不小心用户可能得到一个不是他想要的结果,这个对用户来说,是一个灾难性的选择。

综合策略也可以被用来帮助综合工具选择合适的资源。例如,当一个RAM可以既可以在分布式SelectRAM™存储器,又可以在BlockRAM来实现时候,可以在综合策略里面选择使用BlockRAM来选择使用的资源。

另外,切记FIFO无法被工具推断出来。

可能很多用户非常想知道如何来正确编写HDL的代码。下面就啰嗦两句HDL代码风格的事情。因为这个也关系到上面说的一些问题,让用户得到他想使用的资源。特别是新用户面临的最大挑战是确保他们使用正确的推理最远。

首先,检查用户是否正确使用了推断的资源的最佳方法之一就是用户通过综合工具原理图查看器直观的进行观察。用户使用该观察器后会发现无论用户的功能如何变化,用户使用的最基本单元,有LUT, 移位寄存器的LUT,分布式RAM和BlockRAM是没有变化的。所有Slice的资源都是可以通过综合器综合出来的。但是用户必须保证代码的正确性。这意味着,如果你是用的控制信号和底层的触发器原语需求不匹配,那么你就无法得到一个正确的触发器资源使用。可能还需要多一个LUT来帮你实现功能。同样移位寄存器的LUT不能提前赋值,不能有复位信号,而且只支持串行功能。当用户代码是并行处理,那么只会得到一个纯粹的寄存器,而不是移位寄存器,这个可能并不是用户想要的。同样多路复用器应该使用Case语句,进行逻辑运算应该使用正确的算术运算符。例如,不能既使用了异或功能,又期望综合器综合出进位逻辑资源,它是不可能实现的。一般,我们的设计都是使用工具进行推断,这几乎是所有用户的首选。他既保障易读性,又增加了代码的可重复性。然而我们有时候不得不使用例化IP来实现自己想要的功能。

XILINX提供了两种途径来完成这个例化功能。

第一是原语例化。

用户可以发现,从该库指南可以帮助用户正确使用Xilinx的原语。这也是始终是学习如何推断出相应的资源,并把它融入到用户的逻辑中的最有效的资源。

该库指南包含了XILINX的所有可能的基元和宏。所有原语和宏都详细列出并包括一个示意图,端口名(HDL实例),属性名称的功能描述,而对组件的行为的真值表描述。对使用的库指南的好处是,当一种资源的推理有时是具有挑战性的,用户可以随时例化它到他想要的原始设计中去。

Core Generator和 IP Catalog提供了很多优秀的IP资源供用户选择和使用。虽然有一些可能需要付一点费用,但是大部分IP XILINX都是提供免费使用的。这个IP有功能简单应用,也有非常复杂的IP。这个架构导向的IP中最常用的之一就是时钟管理单元的例化。使用IP Catalog可以帮助用户生成高层次的组件,这些IP对该功能进行优化,可以使用户设计的东西轻松的实现。

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/80394014

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。