QuartusQuartusQuartusQuartusIIIIIIIILPMLPMLPMLPM使用指南FIFOFIFOFIFOFIFO篇BYBYBYBYWGWGWGWG://://://使用指南FIFO篇第-1-页笔者博客目录说明-2-摘要-3-第一章FIFO配置全攻略-4-1.1如何配置自己需要的FIFO-4-1.2输入输出端口-5-1.3时序要求-8-1.4输出状态标记和潜伏期-8-1.5避免亚稳态-9-1.6同步复位及异步复位的影响-9-1.7不同的输入输出位宽-10-1.8约束设置-10-第二章设计实例-11-2.1设计实例概要-11-2.2系统仿真分析-11-2.2.1写操作-11-2.2.2读操作-12-2.2.3当DCFIFO被写满时-13-2.2.4完成ROM至DCFIFO的数据传递-13-2.2.5完成DCFIFO至RAM的数据传递-14-附录FIFO配置界面:-15-1-15-2-16-3-17-4-18-5-19-6-19-参考文献-21-QuartusIILPM使用指南FIFO篇第-2-页笔者博客说明说明说明说明本文档根据ALTERA《SCFIFOandDCFIFOMegafunctions》一问整理而来。笔者使用QuartusII的版本及PC机操作系统版本为11.1sp2WIN732位。本文档仅供学习、讨论使用,请勿用于商业用途。在使用该文档过程中有任何疑问请至笔者博客进行交流探讨。文档版本V1.0笔者将随时可能对本教程中的内容进行更改,恕不事先通知。QuartusIILPM使用指南FIFO篇第-3-页笔者博客摘要摘要摘要摘要ALTERA在LPM库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO)。FIFO主要应用在需要数据缓冲且数据符合先进先出规律的同步或异步场合。LPM中的FIFO包含以下几种:1.SCFIFO:单时钟FIFO;2.DCFIFO:双时钟FIFO,数据输入和输出的宽度相同;3.DCFIFO_MIXED_WIDTHS:双时钟FIFO,输入输出数据位宽可以不同。在本文中,如无特殊说明,DCFIFO通指上述两种双时钟FIFO。QuartusIILPM使用指南FIFO篇第-4-页笔者博客第一章第一章第一章第一章FIFOFIFOFIFOFIFO配置全攻略配置全攻略配置全攻略配置全攻略1.11.11.11.1如何配置自己需要的如何配置自己需要的如何配置自己需要的如何配置自己需要的FIFOFIFOFIFOFIFO配置FIFO的方法有两种,一种是通过QUARTUSII中TOOLS下的MegaWizardPlug-InManager中选择FIFO参数编辑器来搭建自己需要的FIFO,这是自动生成FIFO的方法,另外如果你是大师级选手(对LPM-FIFO参数十分熟悉)还可以通过手动编写HDL来实现需要的FIFO。在此笔者建议大家,尤其是初学者使用自动方式来配置需要的FIFO,配置界面简洁明了十分容易上手。1.21.21.21.2输入输出端口下图中是SCFIFO和DCFIFO的框图,其中,SCFIFO中读写双方信号与时钟clock同步,DCFIFO读写双方信号分别与读写时钟同步。表一中列出FIFO中各个IO的详细描述:表一端口描述端口类型是否必选描述Clock输入是上升沿触发时钟Wrclk输入是上升沿触发时钟,下列信号与之同步:datawrreqWrfullWremptywrusedwRdclk输入是上升沿触发时钟,下列信号与之同步:QQuartusIILPM使用指南FIFO篇第-5-页笔者博客输入是当wrreq有效时数据线上的数据通过DATA端口被写入FIFO中Wrreq输入是写请求信号,激发写入操作。1.当full(对于SCFIFO)或wrfull(对于DCFIFO)有效时,不能激活wrreq信号,参数overflow_checking设置为ON,即在full状态下FIFO会自动无视写请求;2.不能再aclr有效期间激活wrreq信号;3.使用Stratix和Cyclone系列器件(除了Stratix,StratixGX,和Cyclone系列以外)需要将write_aclr_synch参数选择位ON,确保符合限制条件。Rdreq输入是读请求信号,激发读出操作。1.该信号的作用在正常模式下和在预读模式下的作用有很多不同(详情见后文);2.当empty(对于SCFIFO)或rdempty(对于DCFIFO)有效时,不能激活rdreq信号,参数underflow_checking设置为ON,即在full状态下FIFO会自动无视读请求;SclrAclr输入非清零端口,详情见后文Q输出是输出由读操作而从FIFO中读出的数据。1.SCFIFO和DCFIFO中,输入输出数据的位宽必须相同;2.DCFIFO_MIXED_WIDTHS型FIFO输入输出位宽可以不同,但是根据使用RAM的类型不同,输入输出位宽比率有不同的限制;FullWrfullRdfull输出非当该信号有效时,FIFO会被认为已经装满,此时不能再进行写操作;EmptyWremptyRdempty输出非当该信号有效时,FIFO会被认为已经读空,此时不能再进行读操作;Almost_full输出非准装满信号,当usedw大于参数almost_full_value或相同时,该信号被激活,即是full信号被激活的预示;Almost_empty输出否准读空信号,当usedw小于参数almost_empty_value或相同时,该信号被激活,即是empty信号被激活的预示;UsedwWrusedwRdusedw输出否显示当前FIFO中数据存量。表二中列出配置FIFO的各个参数详细说明:QuartusIILPM使用指南FIFO篇第-6-页笔者博客表二参数说明参数类型是否必选描述Lpm_width整数是对于SCFIFO和DCFIFO,该参数定义了data和q的位宽,对于DCFIFO_MIXED_WIDTHS该参数定义了data的宽度;Lpm_width_r整数是对于DCFIFO_MIXED_WIDTHS该参数定义了q的宽度;Lpm_widthu整数是对于SCFIFO,该参数定义了usedw端口的位宽,对于DCFIFO,定义了rdusedw和wrusedw的位宽,对于DCFIFO_MIXED_WIDTHS,定义了wrusedw端口的位宽;Lpm_widthu_r整数是对于DCFIFO_MIXED_WIDTHS,定义了rdusedw端口的位宽;Lpm_numwords整数是定义了FIFO深度,值至少为4,需要满足如下关系2^(LPM_WIDTHU-1)LPM_NUMWORDS£2^(LPM_WIDTHU).Lpm_showhead是模式开关,选择正常模式或者是预读模式。在正常模式下,rdreq有效时才读出数据;在预读模式下,自动读出当前FIFO中第一个数据(FIFO不空时),当rdreq信号有效时,开始继续往后读取第二个数据;Lpm_type非识别FIFO型号的参数,SCFIFO或者是DCFIFOMaximize_speed整数非空间或速度优化度参数,当值为0--5时为空间优化,6--10时为速度优化。Overflow_checking非是否开启溢出检测,溢出时无视wrreq,值为NO或OFF,缺省值为ON;Underflow_checking非是否开启下溢检测,下溢(读空)时无视rdreq,值为NO或OFF,缺省值为ON;Delay_rdusedwDelay_wrusedw非Add_usedw_msb_bit非用于增加rdusedw和wrusedw的位宽(1bit)防止FIFO满时翻转为0,该参数值为ON或OFF,缺省值为OFF,该参数仅针对某些系列器件有效。Rdsync_delaypipeWrsync_delaypipe整数非Use_eab非是否使用块RAM来构造FIFO,该参数值为ON或OFF,若设置为OFF则使用LE来构造FIFO;Write_aclr_synch非是否将aclr设置为与wrclk同步,来避免wrreq和aclr之间的竞争,缺省值为OFF,仅在使用部分器件时有效;Clocks_are_synchronized非Ram_block_type非QuartusIILPM使用指南FIFO篇第-7-页笔者博客非选择是否寄存q输出数据;Almost_full_value整数非设置almost_full信号的阈值,当FIFO众数据量大于或等于该值时,激活almost_full信号;Almost_empty_value整数非设置almost_empty信号的阈值,当FIFO众数据量小于或等于该值时,激活almost_empty信号;Allow_wrcycle_when_full非当SCFIFO已经满时,允许用户合并读写周期,缺省值为OFF,仅当overflow_checking参数设置ON时有效;Intended_dvvice_family非设置使用器件型号,仅在功能仿真时使用。1.31.31.31.3时序要求1.如果设置了溢出保护电路或设置overflow_checking参数为ON,则在FIFO满时会自动无视wrreq信号,FIFO空时同理;2.如果没有做上述两种措施中的任意一种,则当FIFO在装满时的同一时钟周期内不能对wrreq信号做出相应,即在此期间不能拉高wrreq,FIFO空时同理。3.下面通过两幅时序图来具体说明:QuartusIILPM使用指南FIFO篇第-8-页笔者博客输出状态标记和潜伏期对于DCFIFO,输出潜伏期如下图所示:1.51.51.51.5避免亚稳态1.61.61.61.6同步复位及异步复位的影响在不同模式下,同步、异步复位的影响不同,SCFIFO支持同步或异步复位,DCFIFO支持异步复位,且该复位信号与写时钟同步。具体不同影响见表三(SCFIFO),表四(DCFIFO):表三同步或异步复位信号对SCFIFO不同模式下的影响模式同步复位异步复位对状态位的影响清除full,almost_full标志激活empty,almost_empty标志重置usedw标志;触发点时钟上升沿随时正常模式下对q输出的影响如果Q没有寄存,则输出保持输出上一个数据;QuartusIILPM使用指南FIFO篇第-9-页笔者博客的首个数据,否则保持输出上一个数据;预读模式下对q输出的影响如果Q没有寄存,则保持输出上一个数据持续一个时钟周期,随后在下一个时钟上升沿到来后输出SCFIFO的首个数据,若没有寄存则保持输出上一个数据;如果Q没有寄存,则在下一个时钟上升沿到来后输出SCFIFO的首个数据,否则保持输出上一个数据;表四复位信号对DCFIFO不同模式下的影响模式异步复位信号与写时钟同步的异步复位信号对状态位的影响清除wrfull标志在清除wrfull标志之前将之置1保持三个时钟上升沿;清除rdf