
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的使用方法是类似的。
电脑的硬件系统由输入设备、主机和输出设备组成。外部信息经输入设备输入主机,由主机分析、加工、处理,再经输出设备输出。#1 输入输出设备:
电脑只能识别二进制数字电信号,而人们习惯于接受图文声像信号。输入输出设备起着信号转换和传输的作用。
我们常用键盘输入文字,用麦克风输入声音,用数码像机、扫描仪和摄影机输入图像。
常用输出设备有显示器、打印机和喇叭。
#1 主板:
也称主机板,是安装在主机机箱内的一块矩形电路板,上面安装有电脑的主要电路系统。主板的类型和档次决定着整个微机系统的类型和档次,主板的性能影响着整个微机系统的性能。
主板上安装有控制芯片组、BIOS芯片和各种输入输出接口、键盘和面板控制开关接口、指示灯插接件、扩充插槽及直流电源供电接插件等元件。
CPU、内存条插接在主板的相应插槽(座)中,驱动器、电源等硬件连接在主板上。
主板上的接口扩充插槽用于插接各种接口卡,这些接口卡扩展了电脑的功能。常见接口卡有显示卡、声卡等。
#1 CPU:
CPU(中央处理器)是电脑的核心,电脑处理数据的能力和速度主要取决于CPU。
通常用位长和主频评价CPU的能力和速度,如PⅡ300 CPU能处理位长为32位的二进制数据,主频为300MHz。
#1 系统总线:
系统总线是连接扩充插槽的信息通路。
ISA和PCI总线是目前PC机常用系统总线,主板上相应有ISA和PCI插槽。
#1 输入输出接口:
简称I/O接口,是连接主板与输入输出设备的界面。主机后侧的串口、并口、键盘接口、PS/2接口、USB接口以及主机内部的硬盘、软驱接口都是输入输出接口。
#1 串行通讯接口(RS-232-C):
简称串行口,是电脑与其它设备传送信息的一种标准接口。现在的电脑至少有两个串行口COM1和COM2。
#1 并行通讯接口:
简称并行口,是电脑与其它设备传送信息的一种标准接口,这种接口将8位数据位同时并行传送,并行口数据传送速度较串行口快,但传送距离较短。
并行口使用25孔D形连接器,常用于连接打印机。
#1 EIDE接口:
也称为扩展IDE接口,主板上连接EIDE设备的接口。常见EIDE设备有硬盘和光驱。目前较新的接口标准还有Ultra DMA/33、Ultra DMA/66。
#1 AGP:
即“加速图形端口”,是Intel公司在1996年7月提出的显示卡接口标准,通过主板上的AGP插槽连接AGP显示卡。PCI总线的传输速度只能达到132MB/s,而AGP端口则能达到528MB/s,传输速度四倍于前者。
AGP技术使图形显示(特别是3D图形)的性能有了极大的提高,使PC机在图形处理技术上又向前迈了一大步。
#1 光盘驱动器:
读取光盘信息的设备。是多媒体电脑不可缺少的硬件配置。
光盘存储容量大,价格便宜,保存时间长,适宜保存大量的数据,如声音、图像、动画、视频信息、电影等多媒体信息。
光盘驱动器有三种,CD-ROM、CD-R和MO,CD-ROM是只读光盘驱动器;CD-R只能写入一次,以后不能改写;MO是可写、可读光盘驱动器。
#1 内存储器:
简称内存,用于存放当前待处理的信息和常用信息的半导体芯片。容量不大,但存取迅速。
内存包括RAM、ROM和Cache。
#1 RAM:
RAM(随机存取存储器)是电脑的主存储器,人们习惯将RAM称为内存。RAM的最大特点是关机或断电数据便会丢失。
内存越大的电脑,能同时处理的信息量越大。
我们用刷新时间评价RAM的性能,单位为ns(纳秒),刷新时间越小存取速度越快。
586电脑常用RAM有EDO RAM和SDRAM,存储器芯片安装在手指宽的条形电路板上,称之为内存条。内存条安装在主板上的内存条插槽中。
按内存条与主板的连接方式有30线、72线和168线之分。
目前装机常用168线、刷新时间为10ns、容量为32M(或64M)的SDRAM内存条。
#1 Cache:
Cache(高速缓冲存储器)是位于CPU与主内存间的一种容量较小但速度很高的存储器。
由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache一般是焊在主板上,常见主板上焊有256KB或512KB L2 Cache。
#1 ROM:
ROM(只读存储器)是一种存储计算机指令和数据的半导体芯片,但只能从其中读出数据而不能写入数据,关机或断电后ROM的数据不会丢失。
生产厂商把一些重要的不允许用户更改的信息和程序存放在ROM中,例如存放在主板和显示卡ROM中的BIOS程序。
#1 BIOS:
BIOS是一个程序,即微机的基本输入输出系统,BIOS程序的主要功能是对电脑的硬件进行管理。
BIOS程序是电脑开机运行的第一个程序。开机后BIOS程序首先检测硬件,对系统进行初始化,然后启动驱动器,读入 *** 作系统引导记录,将系统控制权交给磁盘引导记录,由引导记录完成系统的启动。电脑运行时,BIOS还配合 *** 作系统和软件对硬件进行 *** 作。
BIOS程序存放在主机板上的ROM BIOS芯片中。当前586主板大多使用Flash ROM存储BIOS程序,Flash ROM中的程序(数据)可以通过运行程序更新。
#1 CMOS:
CMOS是主板上一块可读写的RAM芯片,用于保存当前系统的硬件配置信息和用户设定的某些参数。CMOS RAM由主板上的电池供电,即使系统掉电信息也不会丢失。对CMOS中各项参数的设定和更新需要运行专门的设置程序,开机时通过特定的按键(一般是Del键)就可进入BIOS设置程序,对CMOS进行设置。CMOS设置习惯上也被叫做BIOS设置。
#1 显示卡:
又称显示器适配卡,是连接主机与显示器的接口卡。其作用是将主机的输出信息转换成字符、图形和颜色等信息,传送到显示器上显示。
显示卡插在主板的ISA、PCI、AGP扩展插槽中,ISA显示卡现已基本淘汰。
#1 声卡:
多媒体电脑中用来处理声音的接口卡。
声卡可以把来自话筒、收录音机、激光唱机等设备的语音、音乐等声音变成数字信号交给电脑处理,并以文件形式存盘,还可以把数字信号还原成为真实的声音输出。声卡尾部的接口从机箱后侧伸出,上面有连接麦克风、音箱、游戏杆和MIDI设备的接口。
#1 视频捕获卡:
用于捕获从电视天线、录像机、影碟机等输入的动态或静态视频影像的接口卡,是多媒体制作的重要工具。高级的视频捕获卡还能在捕获影像的同时进行MPEG压缩,制作VCD。
#1 中断:
中断是计算机处理特殊问题的一个过程。当在计算机执行程序的过程中,出现某个特殊情况(或称为“事件”)时,暂时中止现行程序,转去执行这一事件的程序,处理完毕之后再回到原来程序的中断点继续执行的整个过程叫做中断。
#1 IRQ:
即“中断请求”,是其它设备发出的请求计算机响应的信号。计算机将根据IRQ的级别和优先程度决定何时发生响应。原则上每个设备有自身的唯一的中断请求通道,即IRQ值(又叫IRQ号),如果两个硬件设备使用同一个中断通道,必定会发生IRQ冲突。
#1 DMA:
即“直接内存访问”,是计算机内的一种数据传输 *** 作。整个数据传输 *** 作过程在“DMA控制器”控制下进行,不通过CPU。数据传输过程中CPU只在数据传输开始和结束时作一点处理。DMA技术使计算机系统的效率大大提高。
DMA传输通过DMA通道进行,如软驱、声卡均占用DMA通道传输数据。两个设备不能同时用同一DMA通道传输数据,否则会发生DMA冲突。
#1 主频与外频:
主频指CPU内核工作时钟频率。外频指CPU与外部(主板芯片组)交换数据、指令的工作时钟频率。
系统时钟就是CPU的“外频”,我们将系统时钟按规定比例倍频后所得到的时钟信号作为CPU的内核工作时钟(主频)。例如某电脑使用Pentium 233 CPU,那么这台电脑的外频是66MHz,而它的主频则是(66×3.5)=233MHz。
系统时钟(外频)是电脑系统的基本时钟,电脑中各分系统中所有不同频率的时钟都与系统时钟相关联。如当前100 MHz 外频系统中,系统内存工作于100 MHz (或66MHz),L2 Cache工作于100 MHz,PCI 工作于33MHz,AGP工作于66MHz。可以看出,上述频率都与外频有一定的比例关系。
提高系统时钟(外频)可以提高整个电脑的性能,但提高外频必然将改变其它各分系统时钟频率,影响各分系统的实际运行情况,这一点对CPU超外频运行时应该加以充分重视。
#1 DVD:
即数字通用光盘。DVD光驱指读取DVD光盘的设备。DVD盘片的容量为4.7GB,相当于CD-ROM光盘的七倍,可以存储133分钟电影,包含七个杜比数字化环绕音轨。DVD盘片可分为:DVD-ROM、DVD-R(可一次写入)、DVD-RAM(可多次写入)和DVD-RW(读和重写)。
目前的DVD光驱多采用EIDE接口,能像CD-ROM光驱一样连接到IDE1或IDE2口上。
参考资料:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)