版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA技术及应用高等职业教育本科精品教材PART01单元1EDA概述PART02单元2VerilogHDL结构与要素PART03单元3VerilogHDL描述语句PART05单元5常用模块电路的VerilogHDL设计PART06单元6基础设计PART07单元7IP核的应用目录CONTENTSPART04单元4QuartusPrime设计基础PART08单元8综合设计PART07单元7IP核的应用7.1
PLLIP核的应用7.2单端口RAMIP核的应用7.3双端口RAMIP核的应用7.4
FIFOIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用锁相环(PhaseLockedLoop,PLL)是一种广泛应用于电子系统的反馈控制电路,主要用于时钟信号的管理和调节。PLL能够对时钟网络进行系统级控制,包括时钟的倍频、分频、相位偏移以及可编程占空比等。这些特性使得PLL在现代数字系统中扮演着至关重要的角色,尤其是在需要高精度时钟信号和多时钟域管理的场景。在FPGA设计中,时钟信号的管理是系统设计的关键环节之一。对于一个简单的设计,FPGA系统可以仅使用一个全局时钟,或者通过编写代码的方式对时钟进行分频来实现基本的时钟需求。然而,对于稍微复杂的系统,往往需要多个时钟信号且要求时钟相位能够精确偏移。此外,由代码生成的时钟信号无法实现倍频功能,这在某些高性能应用中是一个明显的限制。为了解决上述问题,IntelFPGA提供了PLLIP核,这是一种高度可配置的硬件模块,能够灵活地生成和管理多个时钟信号。设计者可以使用PLLIP核轻松实现时钟的倍频、分频、相位调整以及占空比调节等功能,从而满足复杂系统的时钟需求。掌握PLLIP核的使用方法,是更好地应用FPGA设计技术的关键。本节将通过一个简单的示例介绍如何在FPGA项目中使用PLLIP核,帮助学习者理解PLL的基本工作原理,掌握PLLIP核的配置方法,学会如何在实际项目中应用PLL实现复杂的时钟管理。7.1PLLIP核的应用PLL由前置分频计数器(N计数器)、相位频率检测器(PFD)电路,电荷泵(ChargePump)、环路滤波器(LoopFilter)、压控振荡器(VCO)、反馈乘法器计数器(M计数器)和后置分频计数器(K和V计数器)组成。PLL的结构如图71所示。7.1PLLIP核的应用在工作时,PFD检测参考频率FREF和反馈信号Feedback之间的相位差和频率差,电荷泵和环路滤波器将相位差转换为控制电压;VCO根据不同的控制电压产生不同的振荡频率,从而影响Feedback信号的相位和频率。在FREF和Feedback信号具有相同的相位和频率之后,PLL处于锁相的状态。在反馈路径中插入M计数器会使VCO的振荡频率是FREF信号频率的M倍,FREF信号等于输入时钟FIN除以前置分频器N的值。参考频率用以下方程描述:FREF=FIN/N(式71)VCO的输出频率为FVCO=FIN∗M/N(式72)PLL的输出频率为FOUT=(FIN∗M)/(N∗K)(式73)开发板上的FPGA芯片型号为EP4CE10,内部含有2个PLL,为设备提供强大的系统时钟管理以及高速I/O通信的能力。外部时钟经过锁相环,产生不同频率和不同相位的时钟信号供系统使用。7.1PLLIP核的应用7.1.1设计任务输出4个不同时钟频率或相位的时钟,并通过ModelSim软件对ALTPLLIP核进行仿真。7.1.2程序设计首先创建一个名为ip_pll的工程,工程新建完成界面如图72所示。然后创建PLLIP核。选择菜单Tools→IPCatalog,在IPCatalog栏输入PLL或ALTPLL,在Library中双击ALTPLL,在弹出的SaveIPVariation对话框中将输出文件命名为ip_pll,如图73所示。7.1PLLIP核的应用7.1.1设计任务输出4个不同时钟频率或相位的时钟,并通过ModelSim软件对ALTPLLIP核进行仿真。7.1.2程序设计首先创建一个名为ip_pll的工程,工程新建完成界面如图72所示。然后创建PLLIP核。选择菜单Tools→IPCatalog,在IPCatalog栏输入PLL或ALTPLL,在Library中双击ALTPLL,在弹出的SaveIPVariation对话框中将输出文件命名为ip_pll,如图73所示。7.1PLLIP核的应用因为开发板上的晶振的时钟频率为50MHz,所以将频率修改为50MHz。ALTPLLIP核模式配置界面如图74所示。7.1PLLIP核的应用PLL支持以下4种工作模式:Innormalmode(正常模式):PLL反馈路径源是全局或局域时钟网络,可以最小化时钟类型和指定PLL寄存器的时钟延时,还可以指定补偿的PLL输出。Insource-synchronouscompensationmode(源同步模式):数据和时钟信号同时到达输入引脚。从引脚到I/O输入寄存器之间的时钟延时与从引脚到I/O输入寄存器之间的数据延时匹配,可以确保信号在任何输入/输出使能寄存器的时钟和数据端口具有相同的相位关系。Inzerodelaybuffermode(零延时缓存模式):PLL反馈路径限制在专用PLL外部输出引脚上。片外驱动的PLL反馈路径与时钟输入是相位对齐的,且时钟输入和外部时钟输出之间的延时最小。Withnocompensation(外部反馈模式):PLL补偿到PLL的反馈输入,这样可以最小化输入时钟和反馈时钟引脚之间的延时。通常保持默认设置,选择Innormalmode(正常模式)即可。然后单击【Next】按钮,进入输入复位信号及LOCK信号设置界面,如图75所示。勾选Createan‘areset’inputtoasynchronouslyresetthePLL,设置使用异步复位来复位锁相环。勾选Create‘locked’output,设置输出LOCK信号。LOCK信号拉高表示锁相环开始稳定输出时钟信号。单击【Next】按钮,进入频率带宽设置界面,如图76所示。频率带宽采用默认设置,即自动带宽。7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用时钟转换配置界面用于配置另一个时钟输入源,由于开发板上只有一个50MHz的晶振,且不需要使用两个,因此直接单击【Next】按钮,进入PLL重配置界面,如图78所示。选择动态配置PLL输出,实现在线的实时配置。因为我们通常使用的时钟输出为固定频率,所以不需要选择,直接单击【Next】按钮,进入图79所示的配置输出时钟界面,即第一个输出时钟c0配置界面。在RequestedSettings栏输入需要的时钟频率100MHz;在Clockphaseshift栏输入时钟的相位偏移,保持默认为0;在Clockdutycycle(%)栏设置时钟的占空比,一般为50%,保持默认即可。单击【Next】按钮,进入图710所示的第二个输出时钟c1配置界面。在该界面使能c1时钟信号,将c1时钟设置为100MHz,为演示设置时钟相位的作用,将时钟相位设置成180°,然后单击【Next】按钮,进入图711所示的第三个输出时钟c2配置界面,在该界面使能c2时钟信号,将c2时钟设置为50MHz。单击【Next】按钮,进入图712所示的第四个输出时钟c3配置界面。在该界面使能c3时钟信号,将c3时钟设置为25MHz。单击【Next】按钮,进入第五个输出时钟c4配置界面。因为本次设计只需要用到4个时钟,所以直接单击【Next】按钮,进入图713所示的EDA配置界面。7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用7.1PLLIP核的应用单击【Next】按钮,进入图714所示的Summary配置界面。单击【Finish】按钮完成IP核的创建。7.1PLLIP核的应用QuartusPrime软件会在ipcore文件夹下创建ALTPLL的IP核文件,然后询问是否添加至工程,单击【Yes】按钮将生成的IP核添加至工程。返回工程界面,双击ip_pll文件即可看到图715所示的脚本代码。如图716所示为PLLIP核已添加至工程。7.1PLLIP核的应用至此,ALTPLLIP核创建完成。接下来设计一个Verilog文件来实例化刚才创建的PLLIP核,文件名为ip_pll_top.v。7.1PLLIP核的应用7.1.3仿真测试对PLLIP核进行仿真,验证锁相环输出的时钟频率是否正确。利用ModelSim软件自动仿真。参考4.3.4小节设置EDA仿真工具,使用QuartusPrime软件生成TestBench模板,将生成的仿真测试文件按照例7.2进行修改,并另存为tb_ip_pll.vt。ModelSim仿真波形如图717所示。由图717可知,locked信号拉高之后,锁相环开始输出4个稳定的时钟。clk_100m和clk_100m_180deg周期都为10000ps,即时钟频率都为100MHz,但两个时钟相位偏移180°,这两个时钟刚好是反向的时钟;clk_50m周期为20000ps,时钟频率为50MHz;clk_25m周期为40000ps,时钟频率为25MHz。锁相环仿真结果正确。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用随机存取存储器(RandomAccessMemory,RAM)是一种可以随时写入或读取数据的存储设备,能够快速访问任一指定地址的存储单元。RAM的读写速度主要由时钟频率决定,因此它在数字系统中被广泛用于存储程序代码、中间数据以及运算结果等。在FPGA设计中,RAM是实现高效数据存储和处理的关键组件之一。为了简化RAM的设计和集成,IntelFPGA提供了RAMIP核,这是一种高度可配置的硬件模块,能够灵活地实现各种存储需求。设计者可以使用RAMIP核快速生成符合项目需求的RAM模块,并集成到FPGA设计中,从而显著提高开发效率。根据地址线和数据端口的配置,RAMIP核主要分为两种类型:单端口RAM和双端口RAM。这两种类型在功能和使用方法上存在一定差异,但操作逻辑相似。本节将以单端口RAM为例,讲解其配置和使用方法,帮助学习者理解RAM的基本工作原理,掌握RAMIP核的配置方法,学会如何在FPGA项目中实现高效的数据存储和访问。如图718所示为单端口RAM的端口框图。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用单端口RAM的端口描述如下:data:RAM写数据端口。address:RAM读写地址端口,对于单端口RAM来说,读地址和写地址共用同一组地址。wren:写使能信号,高电平有效。byteena:字节使能控制,该功能屏蔽了输入数据,这样仅写入数据中指定字节,未被写入的字节保留之前写入的值。当写入数据的位宽为16位、18位、32位和36位时,M9K模块将支持字节使能,wren信号和字节byteena信号一起控制RAM模块的写操作。byteena信号在RAMIP核创建过程中是可选的,可选择是否使用字节使能控制功能。addressstall:地址时钟使能控制,当addressstall信号为高电平时,有效地址时钟使能就会保持之前的地址。addressstall信号在RAMIP核创建过程中是可选的,可选择是否使用地址使能控制功能。clockena:时钟使能控制,高电平有效。rden:读使能信号,高电平有效。aclr:异步复位信号,高电平有效。q:从RAM中读出的数据。inclock、outclock:单端口RAM支持输入与输出时钟模式和单时钟模式。在输入与输出时钟模式下,输入时钟控制存储器模块的所有输入寄存器,其中包括数据、地址、byteena、wren以及rden寄存器;输出时钟控制数据输出寄存器。在单时钟模式下,没有inclock信号与outclock信号,只有一个clock信号,可以通过单时钟以及时钟使能来控制M9K存储器模块中的所有寄存器。7.2单端口RAMIP核的应用7.2.1设计任务使用AlteraRAMIP核生成一个单端口的RAM,然后对RAM进行读写操作,并通过ModelSim软件进行仿真。7.2.2程序设计首先创建一个名为ip_1port_ram的工程,工程新建完成界面如图719所示。然后创建RAMIP核。在工程所在路径的par文件夹下创建一个文件夹ipcore,用于存放工程中用到的IP核。选择菜单Tools→IPCatalog,在OnChipMemory中找到RAM:1-PORT,如图720所示。双击RAM:1-PORT,在弹出的SaveIpVariation对话框中输入IP存放的路径及名称,命名为ram_1port,并且选择创建的IP核代码为VerilogHDL,如图721所示。设置完成后,单击【Next】按钮,进入RAMIP核参数配置界面,如图722所示。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用在图722所示界面中,“Howwideshouldthe‘q’outputbusbe?”用于指定输出数据端口的位宽,保持默认,选择8bits。“Howmany8-bitwordsofmemory?”用于指定存储器的容量,选择32words。“Whatshouldthememoryblocktypebe?”用于指定存储器中存储块的类型,具体可选值与使用的FPGA芯片型号有关,一般采用默认Auto。“Whatclockingmethodwouldyouliketouse?”用于指定使用的时钟模式,可选择单时钟和双时钟,单端口RAM通常选择单时钟。然后单击【Next】按钮,进入寄存输出、读使能等信号设置界面,如图723所示。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用在图723所示界面中,取消选中q输出端口,否则读出的数据会多延时一个时钟周期;aclr信号用于复位RAM中的数据,由于本次设计不需要对RAM中的数据清零,因此没有选中aclr信号;添加一个rden读使能信号,读使能是高电平有效的,用于控制数据的输出。该信号配置完成后,单击【Next】按钮,进入写入数据时读数据输出选项界面,如图724所示。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用在图724所示界面中,指定对RAM进行写操作时读数据的输出选项,包括新数据(NewData)和不关心(Don
tCare),默认选项为NewData,即在写数据的同一个时钟周期的上升沿新数据可用;如果选择Don
tCare,则存储器输出不确定。保持默认设置,单击【Next】按钮,进入RAM初始化界面,如图725所示。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用在图725所示界面中,保持默认设置,然后单击【Next】按钮,进入EDA配置界面,如图726所示。再单击【Next】按钮,进入Summary配置界面,如图727所示,单击【Finish】按钮完成配置。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用QuartusPrime软件在ipcore文件夹下创建RAMIP核文件,然后询问是否添加至工程,单击【Yes】按钮即可将生成的IP核添加至工程,如图728所示。7.2单端口RAMIP核的应用7.2单端口RAMIP核的应用返回工程界面,可以在Files里看到生成的ram_1port.qip已经添加到工程中,如图729所示。至此,RAMIP核创建完成。7.2单端口RAMIP核的应用7.2.3仿真测试通过对RAMIP核进行仿真,来验证对RAM的读写操作是否正确。在ModelSim中创建一个名为tb_ip_1port_ram的工程。如图730所示为ModelSim写数据仿真波形。ram_wr_en信号拉高,ram_rd_en信号拉低,此时对RAM进行写操作。ram_wr_en信号拉高之后,地址和数据都是从0开始累加,即当ram地址为0时,写入的数据也是0;当ram地址为1时,写入的数据也是1,总共向RAM中写入32个数据。如图731所示为ModelSim读数据仿真波形。ram_rd_en信号拉高,ram_wr_en信号拉低,说明此时对RAM进行读操作。ram_rd_en(读使能)信号拉高之后,ram_addr从0开始增加,即从ram的地址0开始读数据;ram中读出的数据ram_rd_data在延时一个时钟周期之后,开始输出数据0,1,2……,与写入的值相等,因此创建的RAMIP核仿真结果正确。7.2单端口RAMIP核的应用7.3双端口RAMIP核的应用7.3双端口RAMIP核的应用根据读写操作的复杂性和应用场景的不同,双端口RAM主要分为简单双端口RAM(伪双端口RAM)和真双端口RAM。每种类型的RAM都有其独特的特点和适用场景,设计者需要根据项目需求选择合适的RAM类型。简单双端口RAM具有两组独立的地址线,分别控制写数据端口和读数据端口。一个端口专门用于写操作,另一个端口专门用于读操作。可以在同一时钟周期内同时进行读操作和写操作,互不干扰。适用于需要同时读写但读写端口固定的场景,如异步数据缓存、FIFO缓冲区或数据流处理。真双端口RAM具有两组完全独立的地址线和数据端口,每个端口均可用于读操作或写操作。可以同时进行两路读操作、两路写操作或一路读操作和一路写操作。适用于需要多路写入和读出的复杂场景,如多任务系统或多路数据处理。本节使用的是简单双端口RAMIP。如图732所示为简单双端口RAM的端口框图。7.3双端口RAMIP核的应用7.3双端口RAMIP核的应用简单双端口RAM的端口描述如下:data:RAM写数据端口。wraddress:RAM写地址端口。wren:写使能信号,高电平有效。byteena:字节使能控制,该功能屏蔽了输入数据,这样仅写入数据中指定字节,未被写入的字节保留之前写入的值。当写入数据的位宽为16位、18位、32位和36位时,M9K模块将支持字节使能,wren信号和字节byteena信号共同控制RAM模块的写操作。byteena信号在RAMIP核创建过程中是可选的,可选择是否使用字节使能控制功能。wr_addressstall:写地址时钟使能控制,当wr_addressstall信号为高电平时,有效地址时钟使能就会保持之前的地址。wrclock:写时钟。wrclocken:写时钟使能信号,高电平有效。aclr:异步复位信号,高电平有效。rdaddress:RAM读地址端口。rden:读使能信号,高电平有效。q:从RAM中读出的数据。rd_addressstall:读地址时钟使能控制,当rd_addressstall信号为高电平时,有效地址时钟使能就会保持之前的地址。rdclock:读时钟。rdclocken:读时钟使能信号,高电平有效。7.3双端口RAMIP核的应用7.3.1设计任务使用AlteraRAMIP核生成一个简单双端口RAM,然后对RAM进行读写操作,并通过ModelSim软件进行仿真。7.3.2程序设计根据设计任务要求和模块化设计的思想,需要5个模块:简单双端口RAM模块、写RAM模块、读RAM模块、PLLIP核模块以及顶层模块。顶层模块可例化其余4个模块,实现它们的数据交互。因为双端口RAM多用于跨时钟域信号的处理,所以本设计使用两个不同的时钟,输出的时钟分别是50MHz和25MHz。系统的功能框图如图733所示。7.3双端口RAMIP核的应用由图733可知,PLLIP核输出两个时钟,分别作为写RAM模块和读RAM模块的时钟;写RAM模块向RAM中写入数据,读RAM模块从RAM中读出数据。与单端口RAMIP核不同,本设计只在上电后写入一次,然后不断地从RAM中读出数据。首先创建一个名为ip_2port_ram的工程,工程新建完成界面如图734所示。7.3双端口RAMIP核的应用然后创建RAMIP核。在工程所在路径的par文件夹下创建一个文件夹ipcore,用于存放工程中用到的IP核。选择菜单Tools→IPCatalog,在OnChipMemory中找到RAM:2-PORT,如图735所示。双击RAM:2-PORT,在弹出的SaveIpVariation对话框中输入IP存放的路径及名称,命名为ram_2port,并且选择创建的IP核代码为VerilogHDL,如图736所示。设置完成后,单击【Next】按钮,进入RAMIP核参数配置界面,如图737所示。7.3双端口RAMIP核的应用然后创建RAMIP核。在工程所在路径的par文件夹下创建一个文件夹ipcore,用于存放工程中用到的IP核。选择菜单Tools→IPCatalog,在OnChipMemory中找到RAM:2-PORT,如图735所示。双击RAM:2-PORT,在弹出的SaveIpVariation对话框中输入IP存放的路径及名称,命名为ram_2port,并且选择创建的IP核代码为VerilogHDL,如图736所示。设置完成后,单击【Next】按钮,进入RAMIP核参数配置界面,如图737所示。7.3双端口RAMIP核的应用在图737所示界面中,“HowwillyoubeusingthedualportRAM?”用于指定双端口RAM的类型,第一个选项选择简单双端口RAM,第二个选项选择真双端口RAM,此处选择第一个(Withonereadprotandonewriteport)。“Howdoyouwanttospecifythememorysize?”用于指定存储器大小,第一个选项以“word”为单位,第二个选项以“bit”为单位,此处选择第一个(Asanumberofwords)。单击【Next】按钮,打开的RAM存储深度、位宽配置界面如图738所示。“Howmany8-bitwordsofmemory?”用于设置RAM的存储深度,此处选择32。“Howwideshouldthe‘data_a’inputbusbe?”用于设置RAM的数据位宽,此处选择8。其余设置保持默认。7.3双端口RAMIP核的应用7.3双端口RAMIP核的应用7.3双端口RAMIP核的应用单击【Next】按钮,打开的RAM时钟、读使能配置界面如图739所示。“Whatclockingmethoddoyouwanttouse?”用于设置双端口RAM的时钟,此处选择第二个(Dualclock:useseparate‘read’and‘write’clocks),即写端口和读端口选择独立的时钟。“Createa‘rden’readenablesignal”用于设置是否读使能信号,如果不勾选则一直在读,此处勾选。7.3双端口RAMIP核的应用7.3双端口RAMIP核的应用配置完成后,单击【Next】按钮,打开的RAM输出寄存器配置界面如图740所示。“Readoutputport(s)‘q’”用于设置是否寄存输出信号q,如果选中,则从RAM中读到的q延时一个时钟周期输出,此处不勾选。7.3双端口RAMIP核的应用其余设置保持默认,配置完成后,单击【Next】按钮,进入RAM初始化配置界面,如图741所示。7.3双端口RAMIP核的应用单击【Next】按钮,进入EDA配置界面,如图742所示。7.3双端口RAMIP核的应用单击【Next】按钮,进入Summary配置界面,如图743所示。单击【Finish】按钮完成整个IP核的创建。7.3双端口RAMIP核的应用QuartusPrime软件在ipcore文件夹下创建RAMIP核文件,然后询问是否添加至工程,单击【Yes】按钮即可将生成的IP核添加至工程,如图744所示。7.3双端口RAMIP核的应用再创建一个PLLIP核(命名为pll_clk),输出两路时钟,时钟频率分别是50MHz和25MHz,存放路径为par/ipcore/pll_clk。设计一个Verilog文件对RAM进行写入数据,文件名为ram_wr.v。如图745所示为ModelSim写数据仿真波形。可以看出,ram_wr_en(写使能)信号拉高,此时对RAM进行写操作。ram_wr_en信号拉高之后,地址和数据从0开始累加,当RAM地址为0时,写入的数据也为0;当RAM地址为1时,写入的数据也为1,向RAM中写入32个数据。7.3双端口RAMIP核的应用如图746所示为ModelSim读数据仿真波形。可以看出,ram_rd_en(读使能)信号拉高,此时对RAM进行读操作。ram_rd_en信号拉高之后,ram_addr从0开始增加,即从RAM的地址0开始读数据;RAM中读出的数据ram_rd_data在延时一个时钟周期之后开始输出,输出的数据为0,1,2……,和写入的值相等,表明创建的RAMIP核仿真结果正确。7.4FIFOIP核的应用7.4FIFOIP核的应用FIFO(FirstInFirstOut)即先进先出。FPGA使用的FIFO通常指的是对数据的存储具有先进先出特性的缓存器,常用于数据的缓存或者高速异步数据的交互,即跨时钟域信号传递。它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,缺点是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址。本节将对QuartusPrime软件生成的FIFOIP核进行读写测试,介绍FIFOIP核的使用方法。FIFO从输入时钟的角度可分为单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO)两种类型,其中双时钟FIFO又可从输出数据的位宽的角度分为普通双时钟(DCFIFO)和混合宽度双时钟FIFO(DCFIFO_MIXED_WIDTHS)。单时钟FIFO和双时钟FIFO的端口框图如图747所示。可以看出,单时钟FIFO具有一个独立的时钟端口clock,所有输入/输出信号都同步于clock信号。在双时钟FIFO结构中,写端口和读端口分别有独立的时钟,与写相关的信号都同步于写时钟wrclk,与读相关的信号都同步于读时钟rdclk。在双时钟FIFO的端口框图中,上部的以“data”和“wr”开头的信号为与写相关的信号,中部的“q”和以“rd”开头的信号为与读相关的信号,底部的为异步清零信号。7.4FIFOIP核的应用7.4FIFOIP核的应用单时钟FIFO常用于同步时钟的数据缓存,双时钟FIFO常用于跨时钟域的数据信号的传递,例如时钟域A下的数据data1传递给异步时钟域B,当data1为连续变化信号时,如果直接传递给时钟域B则可能会导致收发不一致,即在采集过程中会出现包括亚稳态问题在内的一系列问题,而使用双时钟FIFO能够将不同时钟域中的数据同步到所需的时钟域中。7.4.1设计任务使用QuartusPrime生成FIFOIP核,实现当FIFO为空时就开始向FIFO中写入数据,直到FIFO写满为止;当FIFO为满时则开始从FIFO中读出数据,直到FIFO读空为止的功能。7.4.2程序设计根据任务要求和模块化设计的思想,需要4个模块:FIFO模块、写FIFO模块、读FIFO模块以及顶层模块。顶层模块可例化其余3个模块,实现它们的数据交互。由于FIFO多用于跨时钟域信号的处理,因此本设计使用双时钟FIFO,以便详细介绍双时钟FIFOIP核的创建和使用,将读/写时钟都用系统时钟来驱动。系统的功能框图如图748所示。7.4FIFOIP核的应用7.4FIFOIP核的应用首先创建一个名为ip_fifo的工程,工程新建完成界面如图749所示。7.4FIFOIP核的应用然后创建FIFOIP核。选择菜单Tools→IPCatalog,在IPCatalog栏输入FIFO,在Library中双击FIFO,在弹出的SaveIPVariation对话框中将输出文件命名为ip_fifo,如图750所示。7.4FIFOIP核的应用FIFOIP核模式配置界面如图751所示,设置FIFO的位宽为8bits,FIFO的深度(即能存放多少个指定位宽的数据)设置为256words,则FIFO的容量为256个8bits。选择双时钟FIFO,采用默认方式,输出数据与输入数据等宽。7.4FIFOIP核的应用单击【Next】按钮,进入图752所示的DCFIFO1配置界面。“Whichtypeofoptimizationdoyouwant?”用于设置3种针对读时钟同步、亚稳态保护、面积和速度的优化类型。7.4FIFOIP核的应用Lowestlatencybutrequiressynchronizedclocks(最低延迟,但要求同步时钟):此选项使用一个同步阶段,没有亚稳态保护,适用于同步时钟。资源占用最小,可实现较好的最高工作频率(Fmax)。Minimalsettingforunsynchronizedclocks(异步时钟的最小配置):此选项使用两个同步阶段,提供良好的亚稳态保护。资源占用中等,可实现较好的最高工作频率(Fmax)。Bestmetastabilityprotection,bestfmax,unsynchronizedclocks(不同步):此选项使用3个或更多的同步阶段,提供最好的亚稳态保护。资源占用最大,可实现最优的最高工作频率(Fmax)。在此保持默认的设置,直接单击【Next】按钮,进入DCFIFO2配置界面,设置可选的输出控制信号,从读方(Readside)和写方(Writeside)分别选择。rdfull和wrfull为FIFO满的标记信号,高电平时表示FIFO已满,不能进行写操作。rdempty和wrempty为FIFO空的标记信号,高电平时表示FIFO已空,不能进行读操作。rdusedw[]和wrusedw[]为显示存储在FIFO中数据个数的信号。AddanextraMSBtousedwport(s)表示将rdusedw和wrusedw数据位宽增加1位,用于保护FIFO在写满时不会翻转到0。Asynchronousclear为异步复位信号,用于清空FIFO。7.4FIFOIP核的应用选择读空、读满信号和读侧数据量,以及写空、写满信号和写侧数据量,如图753所示。7.4FIFOIP核的应用单击【Next】按钮,打开图754所示的RdreqOption,BlkType配置界面,选择输出模式和存储器类型。输出模式有正常模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 飞机模线样板移型工安全生产意识测试考核试卷含答案
- 2025年高级会计师实务真题及答案解析
- 2025年cpa注册会计师经济法真题试卷+参考答案
- 2026年秋季开学初三好心态决定好成绩励志教育课件
- 2026浙江省农村信用社招聘考试(行政职业能力测验)历年参考题库含答案详解3卷
- 2026注册资产评估师(建筑工程评估)历年参考题库含答案详解3卷
- 2026河南省医学院毕业生特招考试(医学影像技术)历年参考题库含答案详解3卷
- 2026河南机关事业单位工勤技能岗位等级考试(水文勘测工·高级技师/一级)历年参考题库含答案详解2卷
- 2026河南城管协管员招聘考试(公共基础知识)历年参考题库含答案详解3卷
- 2026河北省机关事业单位工人技能等级考试(岩土工程地质工)历年参考题库含答案详解2卷
- 小学一年级上册美术教材分析-以湘美版为例
- 制冰机安全操作规程
- 风电场道路及平台施工方案
- 景观生态学Chapter6景观格局分析
- GB/T 4968-2008火灾分类
- 发展经济学 马工程课件 13.第十三章 技术进步与创新
- GB/T 19816.5-2005涂覆涂料前钢材表面处理喷射清理用金属磨料的试验方法第5部分:缺陷颗粒百分比和微结构的测定
- GB/T 14846-2014铝及铝合金挤压型材尺寸偏差
- GA 979-2012D类干粉灭火剂
- 2023年新疆国际陆港(集团)有限责任公司招聘笔试题库及答案解析
- 水稳拌和站建设方案详细
评论
0/150
提交评论