FIFO是FPGA项目中使用最多的IP核,一个项目使用几个,甚至是几十个FIFO都是很正常的。通常情况下,每个FIFO的参数,特别是位宽和深度,是不同的。
明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。
这些项目都必须用到FIFO。如果按照通常做法,每种位宽和深度的IP,都要打开FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、设置参数、生成并编译IP核,工作量可以想象出来是非常多的。更重要的是随之而来的管理问题,如何管理这几十个不同FIFO,如何检查FIFO的设置是否正确,都是一个不小的挑战。
对于我们专门承接项目的团队,绝不可忍受如此重复、枯燥、容易出错的工作。经过精心研究,终于找到了一条实用的方法:使用XILINX的原语--xpm_fifo_async和xpm_fifo_sync。
XILINX原语xpm_fifo_async和xpm_fifo_sync在FPGA中,可以直接例化使用,并且可以参数化FIFO的位宽和深度的。即在设计时,不用生成FIFO IP,直接例化就可以使用了。
二、获得参考代码
打开VIVADO软件,点击上图中的Language Templates,将会d出Language Templates窗口,如下图。
在Language Templates窗口中,依次点击verilog、Xilinx Parameterized Macros(XPM)、XPM、XPM_FIFO,如上图。可以看到有三种FIFO,分别是异步的XPM FIFO:xpm_fifo_async、AXI总线的FIFO:xpm_fifo_axis和同步的XMP FIFO:xpm_fifo_sync。
选择xpm_fifo_async,右边的Preview窗口,将出现xpm_fifo_async的注释以及参考代码。将此部分代码拷出来,并将注释删除,剩下的是xpm_fifo_async的例化参考。
上图是对xpm_fifo_async的参数例化部分。下面是需要重点关注并经常使用的参数。
Ø FIFO_WRITE_DEPTH:FIFO的写深度,其实就是在这里设置FIFO的深度,注意该值通常是2的N次方,如8、16、32、64等数。
Ø PROG_EMPTY_THRESH:FIFO的快空的水线。当FIFO存储的数据量小于该水线时,FIFO的快空信号将会变高。
Ø PROG_FULL_THRESH:FIFO的快满的水线。当FIFO存储的数据量大于该水线时,FIFO的快满信号将会变高,表示有效。
Ø READ_DATA_WIDTH:读数据的位宽。
Ø WRITE_DATA_WIDTH:将数据的位宽。
Ø RD_DATA_COUNT_WIDHT:读侧数据统计值的位宽。
Ø WR_DATA_COUNT_WIDTH:写侧数据统计值的位宽。
上图是对xpm_fifo_async的接口信号部分。下面是需要重点关注并经常使用的信号。
Ø wr_clk:FIFO的写时钟
Ø rst:FIFO的复位信号,高电平有效。要注意的是,该信号是属于写时钟域的。
Ø wr_en:FIFO的写使能信号。
Ø din:FIFO的写数据
Ø full:写满指示信号,当FIFO写满时,该信号变高。
Ø wr_data_count:FIFO存储数据量指示信号,用来指示当前FIFO已经写入但未读出的数据个数。
Ø rd_clk:FIFO的读时钟。
Ø rd_en:FIFO的读使能。
Ø dout:FIFO读出的数据。
Ø empty:FIFO的空指示信号。当其为1表示FIFO处于空状态,当其为0,表示FIFO内有数据。
三、定义自用的FIFO模块
从第二步可以看出,xpm_fifo_async是可以参数化深度和位宽的。但xpm_fifo_async有很多参数和信号,并且其中有部分是不使用的。为了使用上的方便,可以自定义自用的FIFO模块。
例如,明德扬就定义了一个模块mdyFifoAsy,该信号的接口信号如下图。可以看出,名称更加规范,并且定义常用的信号,如读时钟rd_clk,写时钟wrclk、写使能wrreq等信号。
明德扬还在模块mdyFifoAsy定义了一些常用的参数,分别是FIFO深度参数:DEPT_W;FIFO位宽的参数:DATA_W,还有FIFO快满参数AL_FUL和快空参数AL_EMP,如下图。
接下来,就是在mdyFifoAsy中例化并使用xpm_fifo_async了。如下图,就是对xpm_fifo_async的参数例化。将DEPT_W传给FIFO_WRITE_DEPTH,DATA_W传给READ_DATA_WIDTH等。
下图是对xpm_fifo_async的信号例化。将不用的信号留空,将dout连到q,din连到data,wr_en连到wrreq等。您可以根据自己情况来定制FIFO。
四、应用
定制完自己的FIFO后,就可以直接例化使用了。
上图就是使用了一个位宽为8,深度为256的FIFO。
上图就是使用了一个位宽为18,深度为1024的FIFO。
FIFO是FPGA、芯片设计中,最常用的IP核,在存储控制、算法实现、接口设计中,都少不了FIFO,因此合理并正确使用FIFO的技术就非常有必要了,明德扬录制了FIFO的训练视频,掌握后技术能力将有大提升。
通过上面介绍可知,通过此种方式,再也不用生成FIFO IP核啦,整个工程大小基本上可以减少一大半。
上面举的例子是xpm_fifo_async,同步FIFO:xpm_fifo_sync的使用方法是类似的。
FPGA由可配置逻辑块(CLB)与可编程互连相结合的网格构成。制造完成后,FPGA还可以重新编程,以满足特定的功能或应用需求。这一特性使FPGA有别于专用集成电路(ASIC)。后者是明确地为给定的目标而制定的,以后无法更改。虽然一次性可编程(OTP)FPGA是一种选择,但基于静态随机存取存储器(SRAM)的型号是最常见的,并且允许随着设计的变化而重新编程。输入/输出焊盘、可重新编程的互连和可编程逻辑模块组成了一个现场可编程门阵列。触发器或存储器模块可用作现场可编程门阵列逻辑模块中的存储器组件。逻辑块可以执行简单到复杂的计算 *** 作。
现场可编程门阵列和可编程只读存储器芯片有许多相似之处。FPGA可以容纳数千个门阵列,这与可编程只读存储器芯片不同,可编程只读存储器芯片仅限于几百个门阵列。现场可编程门阵列是可重新编程的,而不是ASIC,ASIC是为专业作业而开发的。
计算机用户可以使用现场可编程门阵列自定义微处理器的功能,以满足特定的个性化需求。工程师使用FPGA来创建专用集成电路。晶圆功能的缺乏使得现场可编程门阵列的生命周期更具可预测性。其他优势包括潜在的重制、比其他解决方案更快的上市时间以及简单的设计周期。
FPGA用于许多行业和市场,包括无线通信、数据中心、汽车、医疗和航空航天。
FPGA中的芯片是完全可编程的,这是一个相当大的好处。通过这种方式,它可以变成一个相当大的逻辑电路,一个遵循设计的设置,但用户也可以根据需要进行更新以进行调整。换句话说,如果创建了一个电路卡或电路板,并且FPGA是电路的一个组件,则FPGA在创建过程中被编程,但随后可以重新编程以反映任何修改。
虽然第一批FPGA是在1980年代初推出的,但直到20世纪90年代末才开始流行起来。除了Altera、赛灵思和德州仪器等少数几家企业之外,他们并不为人所知。
ASIC(专用集成电路)用于创建对于常规CPU或GPU来说过于复杂的系统,作为ASIC(专用集成电路)的替代方案。
由于它们使用户能够以更低的成本和更低的功耗生产产品,因此FPGA仍然是当今技术中的一个突出主题。在网络和网络安全等其他应用中,它们也很有帮助。将其与传统微控制器进行比较,传统微控制器无法容纳更大的设计,这是一项相当大的进步。
例如,8051微控制器采用了哈佛设计和CISC指令集。FPGA没有这些内置指令集,这给了设计人员更多的自由度。尽管FPGA经常与高端计算相关联,但消费电子行业的使用也在增加。
现场可编程门阵列芯片已经在顶级显卡中包含许多功能。然而,它们比传统的视频卡更便宜,更耗电。它们还支持许多同步流,并且具有明显更快的吞吐量。因此,基于FPGA的图形卡在游戏机中越来越频繁地使用。
Verilog和VHDL只是FPGA使用的众多不同编程语言中的两种。1984年,硬件描述语言Verilog被创建。它可用于构建系统所需的任何类型的电路,并且是FPGA的设计标准。
另一种基于状态机对FPGA进行编程的常用语言是VHDL。它与Verilog不同,因为它包含更多功能,如数据类型和信号名称,这使得创建复杂电路和提高效率变得更加简单。定义了FPGA编程的语法和语法。
FPGA如何工作?
每个FPGA制造商都有其独特的架构规范。关键组件、原则和功能包括:
1.可配置的逻辑块
现场可编程门阵列的基本构建模块是CLB。它是一个逻辑单元,可以设置或编程以执行特定任务。连接块将连接到这些构建基块。这些组件包括携带和控制逻辑、晶体管对和查找表(LUT)。它们执行设计所需的逻辑 *** 作。
可以使用基于逻辑的多路复用器或LUT来创建CLB。基于LUT的逻辑中的模块由D触发器,查找表和2:1多路复用器组成。多路复用器选择正确的输出。
2.可编程互连
位于不同逻辑块中的逻辑单元之间的所有独特连接都存在于现场可编程门阵列的这一区域中。包含多个基本半导体开关的开关盒通常用于实现互连。这些电气可编程链路为这些可编程逻辑模块提供了路径。
不同长度的线段可以沿着布线路径找到,并由电气可编程开关连接。FPGA密度由用于布线路径的器件数量决定。FPGA的单元或输入焊盘的输出可以连接到电路中的任何其他单元或焊盘,利用对每个现场可编程门阵列至关重要的可编程互连点。
3.可编程路由
可编程路由至关重要,因为它通常占结构表面的百分之五十以上以及应用程序的关键路由延迟。可编程布线由预制线段和预配置的开关组成。通过配置正确的开关组合,功能块的任何输出都可以链接到任何输入。现场可编程门阵列路由架构有两种基本类型。
设计本质上是分层的,高级组件实例化较低级别的模块并链接其中的信号,从而为可编程门阵列提供了动力。可编程门阵列可以使用连接芯片离散部分的短线来构建这些连接,因为在设计层次结构中靠近在一起的模块之间更频繁地进行通信。FPGA的密度和性能受到路由设计的影响。
4.可编程I/O模块
接口引脚用于将逻辑模块与外部组件连接起来。现场可编程门阵列和外部电路之间的接口是IOB(输入输出模块),这是一种可编程输入和输出器件,用于满足各种电气特性下输入/输出信号的驱动和匹配需求。I/O块将路由体系结构和CLB连接到外部元素。
在封装引脚和器件的底层电路之间,输入/输出模块提供可编程的单向或双向连接。实现应用需要从头开始构建电路,因为以前的现场可编程门阵列缺乏运行任何软件的处理器。因此,FPGA可能被编程为像OR门一样简单,或者像多核处理器一样复杂。
5.片上存储器
集成在FPGA逻辑块中的FFS是FPGA系统中片上存储元件的一种形式。尽管如此,随着现场可编程门阵列逻辑容量的提高,它被用于更广泛的系统中,这些系统几乎总是需要存储器来缓冲和重用芯片上的数据。由于构建由寄存器和LUT组成的大型RAM的密度比SRAM块低100倍左右,因此还需要具有更密集的片上存储。
此外,在现场可编程门阵列上实现的应用程序的RAM要求差异大不相同。
6.数字信号处理(DSP)模块
在运输链之前,商业现场可编程门阵列系统中使用的专用算术电路是加法器。
由于需要在利用LUT和携带链的软逻辑中加入乘法器,因此产生了严重的面积和延迟损失。由于用于现场可编程门阵列的高乘法器密度信号处理和通信应用具有相当大的市场份额,设计人员开发了新颖的实现来解决软逻辑乘法器实现效率低下的问题,这称为数字信号处理或DSP。
无乘法分布式算术技术是使用基于LUT的现场可编程门阵列创建高效有限脉冲响应(FIR)滤波器设计的一种方法。乘法器是FPGA系统中作为专用电路进行强化的主要候选者,因为它们在关键应用领域的现场可编程门阵列设计中普遍存在,并且在软逻辑中实现时尺寸、延迟和功耗都降低了。
7.系统级互连
DDR内存和以太网的兴起只是FPGA容量和带宽稳步增长的几个原因。管理这些高频端口和不断增长的结构之间的数据流量是一项挑战。这种系统级链路过去是通过设置特定的FPGA逻辑和路由元件来形成软总线来建立的,这些总线在必要的端点之间完成流水线,多路复用和布线。
更宽总线是匹配这些外部接口带宽的唯一方法,因为它们以比现场可编程门阵列结构更高的频率运行。由于大量和物理上很长的总线的组合,定时闭合具有挑战性,并且通常需要对总线进行相当大的流水线处理,从而增加了资源消耗。
现场可编程门阵列的应用
FPGA在各行各业都有广泛的应用,特别是在工业物联网(IoT)领域。它的一些关键应用领域:
1.能源行业案例研究
太阳能和风能等可再生能源越来越受欢迎。它们在智能电网中是可靠的,其中法规仍在建立中。输配电(T&D)变电站尤其需要高效的电力网络来实现智能电网的最佳运行。自动化需要持续监控、调节和保护电网的技术,以实现更有效的峰值需求负载管理。FPGA可以提高智能电网的性能和可扩展性,同时保持低功耗。
2.使用FPGA设计集成电路
必须首先创建此类电路的体系结构。然后,使用FPGA构建和测试原型,由于这种方法,错误是可以纠正的。一旦原型按预期执行,就会开发一个ASIC项目。这能够节省时间,因为创建集成电路可能是一项劳动密集型和复杂的 *** 作。
此外,它还可以节省资金,因为可以使用单个FPGA来创建同一项目的大量修订版。值得注意的是,当前的张量处理单元(TPU)或加密货币矿工最初是作为FPGA开发的,直到那时它们才被生产出来。
3.汽车体验的改善
使用汽车芯片和IP实现车载信息娱乐、舒适性和便利性的解决方案。借助MicrosemiFPGA,车载原始设备制造商(OEM)和供应商可以开发创新的安全应用,如巡航控制、盲点警告和防撞。
FPGA供应商提供网络安全功能,包括信息保证、防篡改和硬件安全,以及纠错内存和低静态功耗等可靠性功能。由于其最小的泄漏和在低功耗环境中工作的能力,基于FPGA的存储可以提供低静态功耗。
4.支持实时系统
在实时系统中,当响应时间至关重要时,会使用FPGA。传统CPU的响应时间是不可预测的,因此无法准确估计一旦触发器触发,您将何时收到回复。采用实时 *** 作系统将反应时间保持在预定范围内。
在需要快速响应时间的情况下,这是不够的。系统必须在FPGA中实现所需的方法,利用组合或顺序电路来解决这个问题并保证恒定的响应时间。一旦准备就绪,就可以使用FPGA更改这样的实时系统并将其投入生产。
5.航空航天和国防使用案例
为了满足恶劣环境的性能、可靠性和寿命要求,同时提供比传统ASIC实现更大的灵活性,工业制造公司提供了抗辐射可重构的FPGA,这些FPGA通常是空间级的。抗辐射可重构FPGA适用于处理密集型空间系统。
6.在通信和软件定义网络(SDN)中的应用
软件定义网络(SDN)和其他算法(如快速傅里叶变换(FFT))必须放入FPGA中,以便在复杂的实时环境中使用。无线电的标准组件包括用于接收和传输信号的天线,以及用于通过过滤、更改信号频率等来处理信号的网络硬件。
这种硬件无法从根本上改变它所要实现的功能。如今,此功能的很大一部分被转移到电子设备中,这通常是FPGA。模拟器件通常仅限于天线、ADC和DAC转换器。
7.数据中心和云中的FPGA
物联网(IoT)和大数据正在产生获取和处理的数据的指数级增长。这与通过 并行的多个 *** 作的深度学习技术进行计算分析相结合,导致对低延迟,灵活和安全的计算能力的高需求。由于空间成本不断增加,无法通过添加更多服务器来解决。
由于FPGA能够加速处理,设计灵活性以及硬件对软件的安全性,数据中心世界的大门正在在很大程度上向他们敞开。
8.计算机视觉系统
在现代世界中,计算机视觉系统存在于许多小工具中。视频监控摄像机,机器人和其他设备就是这方面的例子。许多这些小工具通常需要基于FPGA的系统,以便它们能够根据人的位置,周围环境和面部识别功能,以有意义的方式与人进行行动和交互。要使用此功能,必须处理许多照片,其中大多数 *** 作都是实时完成的,以检测物体,识别人脸等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)