版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、abstract2 电子科技大学成都学院university of electronic science and technology chengdu university 本科毕业设计(论文) 同步fifo的fpga设计与仿真学院名称成都学院专业名称机械制造设计及其自动化学生姓名冯川学号2840840634指导教师钟耀霞二一二年六月 2 abstractiv同步fifo的fpga的设计及仿真摘要:为实现目标识别与跟踪的应用目的,在基于tms320dm642的fifo基础上拓展储存空间,提出一种fpga实现sdram控制器的方法。分析所用sdram的特点及工作原理,介绍fpga中sdram控制
2、器的组成及工作流程。给出应用中的sdram的时序图,fpga采用模块化设计,增强sdram控制器的通用性,更方便满足实际需求。关键词:fifo ;sdram控制器 ;fpga ;实时跟踪 design and simulation of fifo based on fpgaabstract: in order to achieve the application of target recognition and tracking, the memory on the basis of tms320dm642 fifo is expanded. sdram controller of the
3、implementation basing on the fpga is designed ,firstly, the characteristics and principles of sdram are analyzed. then characteristics and principles of sdram controller and work flow in fpga are introduced, the application in time of sdram timing, chart is given. in order to meet the actual needs m
4、ore convenient and enhance the versatility of sdram controller fpga used modular designkey words: fifo ; sdram controller ;fpga ;real-trackingv abstractv目录电子科技大学成都学院16第一章 引言11.1选题背景11.2研究目标和意义11.3 研究思路2第二章 fifo设计32.1 fifo系统设计52.2 fifo的实现及控制61.3亚稳态82.3.1什么是亚稳态82.3.2 亚稳态发生原因82.3.3亚稳态的危害82.3.4亚稳态的解决方法9
5、2.4关于fifo的一点的思考9第三章fpga结构及工作原理113.1什么是fpga113.1.1逻辑阵列113.1.2嵌入式阵列133.1.3快速通道133.14i/o单元与专用输入端口133.2 fpga基本结构图143.2.1查找表14ir143.2.2结构的fpga逻辑实现原理153.2.3pga查找表单元内部结构163.2.4基于lut的fpga逻辑单元(le)内部结构163.3vhdl 语言173.4quartus ii18第四章 利用fpga实现同步fifo设置方法194.1非对称同步fifo设计难点194.2非对称同步fifo设计204.3方案实现234.4fifo类型254.
6、5系统264.6 fpga 设计274.7 fpga内部软fifo的设计294.8 fpga内部软fifo的仿真31总结33参考文献34致谢35译文36第二章 fifo设计第1章 引言1.1选题背景 fifo 是一种常用于数据缓存的电路器件,可应用于包括高速数据采集、多处理器接口和通信中的高速缓冲等各种领域。在某数据采集和处理系统中,需要通过同步fifo 来连接8 位a/d 和16 位数据总线的mcu,但是由于目前同步fifo 器件的输入出数据总线宽度相等,不能满足这种应用,因此通常采用输入与输出数据总线宽度均为8 位的同步f i f o 作为它们之间的数据缓冲,并对m c u 数据总线的高8
7、 位采用软件进行屏蔽,或是在同步fifo 外围增加数据锁存器及逻辑控制器件的方法解决。为了提高效率和降低系统设计的难度,本文采用v h d l 描述语言,充分利用xilinx 公司spartan ii fpga 的系统资源,设计实现了一种非对称同步fifo(输入与输出数据总线宽度不一致的同步fifo),它不仅提供数据缓冲,而且能进行数据总线宽度的转换。 fpga技术自20世纪80年代中期出现到至今,已经经历了20多年的发展,正得到越来越广泛的应用,它包括各个领域的数字系统,数字信号(dsp)系统的嵌入式系统都可能会用到fpga器件。于此同时,fpga也引起电子设计技术深刻变革,fpga的可编程
8、特性使设计者在应用现场,利用计算机上自动化设计软件完成数字系统产品样机的设计,更新和调试,不仅缩短了产品的上市时间,而且也能适应技术标准和协议的更新和升级,延长了产品的寿命周期。 fpga技术是要求设计者的设计能力不断的提高,除了在自动化设计软件的不断提高和完善,还要求设计者有更丰富的设计知识、软件和硬件的设计本领和面对实际问题的处理能力。这次我所做的是同步fifo的fpga设计及仿真,这是一个具有实用价值的课题,我希望能在这次的设计中不断的提高自身的能力,也希望能在这次的设计中有所突破。1.2研究目标和意义 研究同步fifo的fpga设计的目标是:通过视频处理和视频图帧格式以及fifo缓冲器
9、,提出基于fpga的视频图像处理系统设计通过研究视同步fifo的读写时钟频率相同、来源相同,这种fifo的设计较为简单也快速,因为它避免了由于异步时钟逻辑产生的许多设计中具有挑战性的难题。同步fifo通常用于读写时钟相同的接口部分,这种fifo相比较而言,逻辑较为简单,延时较小,传输数据的速度比较快,同步fifo还具有深度可扩展性。1.3 研究思路 首先了解同步fifo的功能及设计原理,同步vhdl语言描述、时序仿真机分析。 其次了解fpga结构及工作原理,fpga的逻辑阵列、嵌入式阵列、快速通道、i/o单元与专用输入端 最后利用fpga实现同步fifo设置,先对非对称同步同步fifo进行设计
10、,再了解fifo的类型、fpga的设计,再对fpga内部软fifo进行仿真。第二章 fifo设计1. 什么是fifo fifo是英文first in first out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。2什么情况下用fifo? fifo一般用于不同时钟域之间的数据传输,比如fifo的一端时ad数据采集,另一端时计算机的pci总线,假设其ad采集的速率为16位 100k sps,那么每秒
11、的数据量为100k16bit=1.6mbps,而pci总线的速度为33mhz,总线宽度32bit,其最大传输速率为1056mbps,在两个不同的时钟域间就可以采用fifo来作为数据缓冲。另外对于不同宽度的数据接口也可以用fifo,例如单片机位8位数据输出,而dsp可能是16位数据输入,在单片机与dsp连接时就可以使用fifo来达到数据匹配的目的。3fifo的一些重要参数 fifo的宽度:也就是英文资料里常看到的the width,它只的是fifo一次读写操作的数据位,就像mcu有8位和16位,arm 32位等等,fifo的宽度在单片成品ic中是固定的,也有可选择的,如果用fpga自己实现一个f
12、ifo,其数据位,也就是宽度是可以自己定义的。 fifo的深度:the deepth,它指的是fifo可以存储多少个n位的数据(如果宽度为n)。如一个8位的fifo,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,fifo的深度可大可小,个人认为fifo深度的计算并无一个固定的公式。在fifo实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需fifo深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的fifo深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和fifo成本
13、的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,fifo的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。 满标志:fifo已满或将要满时由fifo的状态电路送出的一个信号,以阻止fifo的写操作继续向fifo中写数据而造成溢出(overflow)。 空标志:fifo已空或将要空时由fifo的状态电路送出的一个信号,以阻止fifo的读操作继续从fifo中读出数据而造成无效数据的读出(underflow)。 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。 读指针:指向下一个读出地址。读完后自动加1
14、。 写指针:指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。4fifo的分类 根均fifo工作的时钟域,可以将fifo分为同步fifo和异步fifo。同步fifo是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步fifo是指读写时钟不一致,读写时钟是互相独立的。5fifo设计的难点 fifo设计的难点在于怎样判断fifo的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证fifo在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断fifo的满/空就成了fifo设计的核心问
15、题。由于同步fifo几乎很少用到,这里只描述异步fifo的空/满标志产生问题。 在用到触发器的设计中,不可避免的会遇到亚稳态的问题。在涉及到触发器的电路中,亚稳态无法彻底消除,只能想办法将其发生的概率将到最低。其中的一个方法就是使用格雷码。格雷码在相邻的两个码元之间只由一位变换(二进制码在很多情况下是很多码元在同时变化)。这就会避免计数器与时钟同步的时候发生亚稳态现象。但是格雷码有个缺点就是只能定义2n的深度,而不能像二进制码那样随意的定义fifo的深度,因为格雷码必须循环一个2n,否则就不能保证两个相邻码元之间相差一位的条件,因此也就不是真正的各雷码了。第二就是使用冗余的触发器,假设一个触发
16、器发生亚稳态的概率为p,那么两个及联的触发器发生亚稳态的概率就为p的平方。但这回导致延时的增加。亚稳态的发生会使得fifo出现错误,读/写时钟采样的地址指针会与真实的值之间不同,这就导致写入或读出的地址错误。由于考虑延时的作用,空/满标志的产生并不一定出现在fifo真的空/满时才出现。可能fifo还未空/满时就出现了空/满标志。这并没有什么不好,只要保证fifo不出现overflow or underflow 就ok了2.1 fifo系统设计 fifo系统由fgpa和sdram两部分组成。其中,fgpa内部包含fifo.、缓冲器、sdram控制器三个模块。fifo.的作用是将fifo的状态转变
17、成状态机的读、写信号。若操作为向sdram写数据,则在fifo已满时,fifo.送出一个信号,以阻止写操作继续向fifo中写数据而造成溢出;若操作为向sdram读数据,则在缓冲器已空时,fifo.送出一个信号,以阻止读操作继续从fifo中读数据而造成无效数据的读出。fifo的模块结构如图1所示。 sdram控制器内部包括:初始化模块、模式寄存器、控制模块和状态机。sdram的接口设计是极其关键的,可根据sdram内部操作状态之间的联系,通过状态机来实现接口设计。初始化模块负责sdram的初始化,在上电和时钟稳定后等待100 ms,至少执行一条空操作,然后对所有页执行预充电操作,使所有页处于空闲
18、状态,接着向各页发出两条刷新操作指令,最后发出一个模式寄存器装载命令,使sdram有确定的状态进行读写操作。模式寄存器可根据要求对sdram的突发长度、突发类型、cas延时的时钟数、运行模式和写突发模式进行设置,确定sdram在读写操作时的工作状态。模式寄存器m0m2用于规定突发长度,可以为1,2,4,8。m3用于规定突发类型,当m3=0时,突发类型是连续的;当m3=1时,突发类型是交错的。m4m6用于规定cas延迟的时钟周期数,可以分为1,2,3。m7,m8用于规定运行模式。m9用于规定写突发模式,当m9=0时,按实际编程的突发长度存取;当m9=1时,按单个存取单元写入,但可按实际编程的突发
19、长度读出。sdram控制器的模块结构如图2所示 2.2 fifo的实现及控制 设计中采用fpga来实现双通道数据的缓存和数据传输的逻辑控制。spartan3e是一款高性能低价格的可编程逻辑器件,具有丰富的逻辑单元和存储单元。其内部的blockram可以配置为大小不同的各种类型存储器,如单口ram、双口ram和同步fifo,其中fifo更适合作为a/d 采样数据高速写入的存储器。fifo存储器就像数据管道一样,数据从管道的一头流入、从另一头流出,先进入的数据先流出。fifo具有两套数据线而无地址线,可在其一端写操作而在另一端进行读操作,数据在其中顺序移动,从而达到很高的传输速度和效率,且由于省去
20、了地址线,有利于pcb板布线。 采用fifo构成高速a/d采样缓存时,由于转换速度较快,如果直接将adc采样后的数据存储到fifo中,对时序配置要求非常严格,如果两者时序关系配合不当,就会发生数据存储出错或者掉数。利用fpga可以方便地控制时序和数据传输,简单、可靠地实现采样和存储是选用fpga的优点。该数据采集系统中只采用了一个外部时钟源,直接输入到fpga,经dcm分频后作为fifo和adc的时钟源。 在软件设计中,采用ise开发环境开发fpga时,调用core generator来构造fifo,可以设置fifo的参数,如深度和宽度;设置fifo的各种标志和控制位,如空满、半满全满、半空全
21、空、可编程满和可编程空等标志位;写使能、读使能等控制位,以便实现与高速a/d和dsp的逻辑接口。fifo的输入输出引脚如表所示:其中wr_en由dsp的gpio 口引出,控制数据是否写入到fifo中,输出引脚中只用到了prog_full即可与dsp进行数据传输。 fpga的作用除了构造fifo以实现数据通道复用外,还可以作为协处理器进行实时要求性高的数据预处理(如插值、取平均、fir滤波等),以减少dsp处理的数据量。设计中采用分布式算法的fir滤波,首先对adc转换后的数据进行fir滤波,然后存入fifo中以等待dsp的读取。 fpga代替asic和dsp作为前端数字信号处理的运算,在规模、
22、重量和功耗方面都有所降低,而且吞吐量更高,开发成本进一步缩小。 fpga设计中,需提供外部闪存来存储fpga的下载文件,上电后数据会自动下载到fpga内部,以对fpga进行配置。fpga有多种配置方式,包括主串、从串、主并、从并、spi、bpi,以及jtag等方式。串行方式即逐位串行配置,接线简单,但速度比较慢,并行方式即8位同时传输,速度快,但接线复杂。串行方式和并行方式都需要外加闪存作为配置文件的存储器。设计中本文采用c6416的多通道缓存串行口(mcbsp)以spi方式对fpga进行配置。图1:系统结构框图1.3亚稳态亚稳态是指出发前无法在某个规定的时间内达到一个可确定的状态。当一个触发
23、器进人亚稳态时,既无法预测单元输出电平,也无法预测什么时候输出才稳定在某个正确的电平上。在这个稳定的期间,触发器输出一些中间级电平,或者可能处于震荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。2.3.1什么是亚稳态数字电路中的简单双稳态电路就是两个反相器首尾相连组成(加一些控制逻辑变成锁存器,触发器),然而并不像名字显示的,这种电路其实还有第三种半稳定态就是当两个反相器都处于中间值的情况这称之为亚稳态。2.3.2 亚稳态发生原因在同步系统中,如果触发器的setup time/hold time不满足,就可能产生亚稳态,此时触发器输出端q在有效时钟沿之后比较长的一段时
24、间处于不确定的状态,在这段时间里q端毛刺、震荡、固定的某一电压值,而不是等于数据输入端d的值。这段之间成为决断时间(resolution time)。经过resolution time之后q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入某一必然的关系。2.3.3亚稳态的危害由于输出在稳定下来之前可能是毛刺、震荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出01之间的中间电压值还会使下一级产生亚稳态(即导致 亚稳态的传播)。逻辑误判有可能通过电路的特殊设计减轻危害,而亚稳态的传播则扩大了故障面,难以处理。2.3.4亚稳态的解决方法 只要系统中有异步元件,亚稳态就是无法避免的
25、,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者用同步来实现,而后者根据不同的设计应用不同的处理方法。用同步来减少亚稳态发生的机会的典型电路如图 左边为异步输入端,经过两级触发器同步,在右边输出将是同步的,而且该输出基本不存在亚稳态。其原理是即第一个触发器的输出端存在亚稳态,经过一个clk周期后,第二个触发器d端的电平仍未稳定的概率非常小,因此第二个触发器q端基本不会产生亚稳态。注意,这里说的是“基本”,也就是无法“根除”,那么如果第二触发器q出现亚稳态会有什么后果呢?后果的严重程度是由设计绝定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短
26、暂的异常之后可以恢复正常工作,如果设计上没有考虑如何降低系统对亚稳态的敏感程度,那么一旦出现亚稳态系统就可能崩溃。2.4关于fifo的一点的思考关于fifo丢数据的问题,其实各位对同一个问题的理解有偏差,才造成了相互误解。如果在理想状况下(时钟同步不回出现错码),fifo由读写指针控制是不会丢数的,(这不是废话吗,现实中哪来的理想状况!)且慢,我的意思是说丢数据并不是读写谁快谁慢造成的,在正确的设置空满标志算法的情况下,数据的overflow 和underflow 是不会发生的。而往往现实中因为亚稳态的存在,才出现了丢数的情况,也就是说是只要读写时钟不同步,在采样的过程中采样出错,使得本该是0
27、100的变成了1101等等,就会出现读写的错误,我们称其为丢数,其原因就是在时钟同步指针的时候出现亚稳态,由于二进制码加1的时候很多位同时变化,所以很容易出现亚稳态。因此才用格雷码将此问题发生的概率比降到最小,其次用多余的触发器使其概率进一步降低,也就是说错误难免,但我们可以将其发生的概率降到最低,并且在出现错误时也不会错的态离谱(详见vijay a. nebhrajani的异步fifo结构第二篇)。 二进制码指针并非不好用,在前面也提到了它有自身的优势,由于通过设置握手信号,指针可以有多位同时变化,二进制指针每次移动可以跳跃过任意的长度,这样给fifo的某些功能的实现带来了方便(例如,硬件直
28、接控制fifo从缓存的数据流中丢弃一个出错的包);而格雷码指针一般只能做递增或递减的移动。设置握手信号虽然可以保证指针不出错,但这样你来我往的经过三四个回合才能开始传数据,所以对于高速的场合就不适用了。49第三章 fpga结构及工作原理 第三章fpga结构及工作原理3.1什么是fpga fpga采用了逻辑单元阵列lc fpga是英文field programmable gate array的缩写,即现场可编程门阵列,它是在pal、gal、pld等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(asic)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电
29、路数有限的缺点。 a(logic cell array)这样一个新概念,内部包括可配置逻辑模块clb(configurable logic block)、输出输入模块iob(input output block)和内部连线(interconnect)三个部分。fpga的基本特点主要有: 1)采用fpga设计asic电路,用户不需要投片生产,就能得到合用的芯片。 2)fpga可做其它全定制或半定制asic电路的中试样片。 3)fpga内部有丰富的触发器和io引脚。 4)fpga是asic电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) fpga采用高速chmos工艺,功耗低,可以与c
30、mos、ttl电平兼容。 3.1.1逻辑阵列逻辑阵列由一系列逻辑阵列块(lab)构成。每个lab由八个逻辑单元(le)和一些局部互连组成。每个lab相当于96个可用逻辑门,可用构成一个中规模的逻辑块,如8位计数器、地址译码器或状态机等。也可用将多个lab组合起来构成一个更大规模的逻辑块。逻辑阵列lab(logic array block)是由一系列的相邻le构成的。每个lab包括八个le相连的进位链和级联链,lab控制信号与lab局部互连。lab构成了开发软件的“粗粒度”结构,有利于eda软件进行布局线,优化器件的利用,提高可能性。逻辑单元le(logic element)是flex10k/a
31、cex1k结构中最小单元,它能有效的实现逻辑功能。每个le包括一个4输入的lut、一个带有使能的可编程触发器。一个进位链和一个级联链。每个le有两个输出,分别可以驱动局部互连和快速通道(fsat track)互连。le中的lut是一种函数发生器,它能实现4输入的任意逻辑函数。lr中的可编程触发器可设置成d、t、jk或rs触发器。该寄存器的时钟、清零和置位信号可由全局信号、通用i/o引脚或任何内部逻辑驱动。对于组合逻辑的实现,可将触发器旁路,lut输出作为le的输出。le有两个驱动内部互连的输出信号。一个用于驱动局部互连,另一个用于驱动性和列的快速通道的互连输出。这两个输出信号可以单独控制。可以
32、实现在一个le中,lut驱动一个输出,而寄存器驱动另一个输出。因为在一个le中触发器和lut能够用来完成不相关的功能,因而能够提高le的资源利用率。在flex10k/acex1k结构中还提供了两种专用高速数据通道:进位链(carry-in)和级联链(cascade-in),用于连接相邻的le,但不占用局部互连通路。进位链提供le之间快速的向前进功能。来自低位的进位信号进位链向前送到高位,同时馈入lut和进位链的下一段。这一特点使得flex10k/acex1k结构能够实现高速设计器、加法器和宽位的比较器。级联链可以用来实现多输入(wide-input)逻辑函数,而且延时很小。相邻的lut用来并行
33、地完成部分逻辑功能,级联链把中间结果串接起来。级联链可以使用逻辑“与”或者逻辑“或”来连接相邻le的输出。每增加一个le,逻辑的有效输入宽度增加4个,其延迟会增加约0.7ns。级联链和进位链可以连接同一个lab中的所有le和同一行中所有lab,但是进位链和级联链的大量使用会限制逻辑布线的灵活性,会导致资源的浪费,因此,使用进位链和级联链限于速度有要求的关键部分设计。进位链和级联链都可由开发软件在进行设计处理时自动生成。flex10k/acex1k的le共有4种工作模式:正常模式、运算模式、加减法计数模式和可清零计数模式。每种模式中,le的7个可用输入信号被连接到不同的位置,以实现所要求的逻辑功
34、能。这7个输入信号时来自lab局部互连的4个数据输入,来自可编程寄存器的反馈信号以及一个le的进位输入和级联输入。另外加到le的其余3个输入为寄存器提供时钟、清零和置位信号。在所有的4种模式下,flex10k/acex1k结构还为寄存器提供了一个同步时钟使能端,利于实现全同步设计3.1.2嵌入式阵列 嵌入式阵列由一系列嵌入式阵列块(eab)构成。在要实现存储器功能时,每个eab可提供2048个存储位,用来构成ram、rom、fifo、和双口ram。在实现器、微控制器、状态机及复杂逻辑时,每个eab可贡献100到600个门,eab可单独使用,也可组合使用。如果需要,一个器件中所有的eab可级联成
35、一个单一ram,eab级联形成的ram块不影响时序。3.1.3快速通道 在flex10k/acex1k结构中,le和器件i/o引脚之间的连接时通过快速通道互连实现。快速通道遍布于整个器件,是一系列水平和垂直走向的连续式不线通道。3.14i/o单元与专用输入端口flex10k/acex1k器件的i/o引脚是由一些i/o单元(ioe或ioc)驱动的。ioe位于快速通道的行和列的末端,包括一个双向i/o缓冲器和一个寄存器,这个寄存器可以用作需要快速建立时间的外部数据的输入寄存器,也可以作为要求快速“时钟到输出”性能的数据输出寄存器。在某些情况下,le作为输入寄存器比ioc寄存器在建立时间上会更短。i
36、oc乐意配置成输入/输出双向口。此外ioc还具有许多的特性,每个ioc的时钟、清零、时钟使能和输出使能控制均由i/o控制信号网络提供,采用高速驱动以减小通过器件的时间差。ioc的结构如图 flex10k/acex1k器件还提供了六个专用输入引脚,这些引脚用来驱动ioc控制器,使用了专用的布线通道,以便具有比快速通道更短的延迟或更小的偏移。专用输入中的4个输入引脚可用来驱动全局信号,内部逻辑也可驱动4个全局信号。3.2 fpga基本结构图iobirirclbiriririririrclbclbiririririririririobiobiobiobiobiobiobiobiobiobiobclb
37、clbclbclbclbclbfpga的基本结构图3.2.1查找表 大部分fpga采用的是基于sram(静态随机存储器)的查找表逻辑形成结构,就是用sram来构成逻辑函数发生器。一个n输入查找表(lut可实现n个输入变量的任何逻辑功能。实际逻辑电路lut的实现方式 a,b,c,d 输入逻辑输出地址ram中存储的内容00000000000001000010.0.011111111113.2.2结构的fpga逻辑实现原理 3.2.3pga查找表单元内部结构a,b,c,d由fpga芯片的管脚输入后进入可编程连线,然后作为地址线连到lut,lut中已事先写入了所有可能的逻辑结果,通过地址查找到相应的数
38、据然后输出,这样组合逻辑就实现了。3.2.4基于lut的fpga逻辑单元(le)内部结构 3.3vhdl 语言 vhdl 的英文全名是 very-high-speed integrated circuit hardware description language,诞生于 1982 年。1987 年底,vhdl被 ieee 和美国国防部确认为标准硬件描述语言。 vhdl主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,vhdl的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。vhdl的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模
39、块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是vhdl系统设计的基本点。vhdl 语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来,vhdl 语言主要具有以下优点:1 (1) vhdl 语言功能强大,设计方式多样 vhdl 语言具有强大的语言结构,只需采用简单明确的vhdl语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外
40、,vhdl 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。vhdl 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法; 既支持模块化设计方法,也支持层次化设计方法。 vhdl 语言具有强大的硬件描述能力 vhdl 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,vhdl 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。vhdl 语言的强大描述能力还体现在它具有丰富的数据类型。vhdl 语言既支持
41、标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。 (3) vhdl 语言具有很强的移植能力 vhdl 语言很强的移植能力主要体现在: 对于同一个硬件电路的 vhdl 语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。 (4) vhdl 语言的设计描述与器件无关 采用 vhdl 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,vhdl 语言允许采用多种不同的器
42、件结构来实现。 (5) vhdl 语言程序易于共享和复用 vhdl 语言采用基于库 ( library) 的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。 由于 vhdl 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言,因此它可以使设计成果在设计人员之间方便地进行交流和共享,从而减小硬件电路设计的工作量,缩短开发周期。 3.4quartus ii quartus ii 是altera公
43、司的综合性pld开发软件,支持原理图、vhdl、veriloghdl以及ahdl(altera hardware description language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整pld设计流程。quartus ii可以在xp、linux以及unix上使用,除了可以使用tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。quartus ii支持altera的ip核,包含了lpm/megafunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速
44、度。对第三方eda工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方eda工具。此外,quartus ii 通过和dsp builder工具与matlab/simulink相结合,可以方便地实现各种dsp应用系统;支持altera的片上可编程系统(sopc)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。maxplus ii 作为altera的上一代pld设计软件,由于其出色的易用性而得到了广泛的应用。目前altera已经停止了对maxplus ii 的更新支持,quartus ii 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。altera
45、在quartus ii 中包含了许多诸如signaltap ii、chip editor和rtl viewer的设计辅助工具,集成了sopc和hardcopy设计流程,并且继承了maxplus ii 友好的图形界面及简便的使用。第四章 利用fpga实现同步fifo设置方法第4章 利用fpga实现同步fifo设置方法 目前常用的fifo都是读/写端口数据宽度相同的同步或异步fifo结构,虽然可满足工程需要的大部分要求;但在某些对数据处理实时性要求较高、数据吞吐率大的图像处理和信号处理等场合。如果仍旧采用常用的fifo存储器,将会导致系统实时性明显下降,发生数据溢出、丢失等严重错误。因此设计非对称
46、同步或异步fifo就显得十分重要。 ifo 是一种常用于数据缓存的电路器件,可应用于包括高速数据采集、多处理器接口和通信中的高速缓冲等各种领域。然而在某些应用,例如在某数据采集和处理系统中,需要通过同步fifo 来连接8 位a/d 和16 位数据总线的mcu,但是由于目前同步fifo 器件的输入与输出数据总线宽度相等,不能满足这种应用,因此通常采用输入与输出数据总线宽度均为8 位的同步f i f o 作为它们之间的数据缓冲,并对m c u 数据总线的高8 位采用软件进行屏蔽,或是在同步fifo 外围增加数据锁存器及逻辑控制器件的方法解决。为了提高效率和降低系统设计的难度,本文采用v h d l
47、 描述语言,充分利用xilinx 公司spartan ii fpga 的系统资源,设计实现了一种非对称同步fifo(输入与输出数据总线宽度不一致的同步fifo),它不仅提供数据缓冲,而且能进行数据总线宽度的转换4.1非对称同步fifo设计难点非对称同步fifo 的设计来说,不能简单地通过修改现成的同步fifo 模块而得到,这是因为非对称同步fifo 的设计有以下几个需要解决的难点问题:(1) 写数据与读数据总线宽度不同。设写数据与读数据总线宽度分别为 对于win 和wout,必须对winwout和winwout 这两种情况进行写数据与读数据总线宽度的正确转换。(2) 如何协调内部处理过程中不同
48、的时钟频率。例如输入2个8位字节需2 个时钟周期,而输出1 个16位字节只需1 个时钟周期,所以必须为内部数据处理提供不同的时钟频率。(3) 由于写数据与读数据总线宽度不同,所以,要操作正确,必须保证数据存储排列的顺序及空/ 满标志产生的正确。另外,由于fpga 中的寄存器个数有限,而fifo 是一种基于ram的器件,需要占用大量的存储空间。通常在编写vhdl 程序时用数组描述的方法来设计数据存储结构,在综合时会耗用大量的寄存器,所以这种方法在fifo 的设计中是不可行的。4.2非对称同步fifo设计 针对以上设计中的难点,本文采用vhdl 描述语言,利用xilinx公司spartan ii
49、fpga设计实现了一种非对称同步fifo,设计中充分利用了fpga 中的资源如时钟延迟锁相环(dll)和blockram。fpga 中的dll fpga 中的dll 是一种很好的资源,xilinx公司spartan ii、spartaniie、virtex-e等系列器件中就采用时钟延迟锁相环技术进行fpga 内部的时钟控制,它可以对时钟进行倍频、锁相等操作。本设计中要利用spartan ii系列器件中的d l l 产生倍频时钟信号,电路原理图如图1 所示。其中ibufg、ibuf、bufg、obuf 是时钟缓冲器,提供时钟信号的最小时延。f p g a 中的r a m xilinx 公司的fp
50、ga 器件提供了片内ram 可供直接使用,而不必使用寄存器来构成存储空间,从而大大提高了芯片的利用率。根据型号的不同,fpga 中提供了两种结构的r a m :分布式r a m 和blockram。分布式ram 可以利用可配置逻辑模块(clb) 设计实现,主要用于小容量片内存储;b l o c k r a m 是f p g a 内部的专用ram 模块,通常沿芯片宏模块,就需要自己生成blockram 模块,具有较高的灵活度。利用xilinx 公司的垂直边排列。根据具体型号不同,fpga 内部的blockram 在单位容量和总体容量上都有较大的不同。本设计将采用blockram 用于fifo 的
51、编写。由于在xilinx公司spartan ii fpga器件库中没有现成的的配套软件ise foundation 和isew e b p a c k 中都带有的coregenerator 程序包,可以很方便地建立用户所需的模块。只需要输入b l o c k r a m 模块的名称、blockram 的类型( 如单口还是双口)、地址线和数据线的宽度,就可以生成用户希望得到的结构。一般来说,生成的结构会自动加载到当前的项目中,从而可以像器件库中的元件一样调用。非对称同步fifo的结构下面以winwout(设win=8,wout=16)这种情形为例,介绍非对称同步fifo 模块的设计。非对称同步f
52、ifo 的结构框图如图2 所示,图中还显示了各模块端口及信号互连关系。其主要设计特点为:由于写数据与读数据总线宽度不同,所以在设计双口ram 时把双口r a m 设计成写口r a m 和读口r a m 两个部分。例如f i f o 写口ram 部分为512 8,读口ram 部分为256 16,这样通过数据存储格式的改变达到写数据与读数据总线宽度的转换。(2) 由于读数据时钟频率是写数据时钟频率的两倍,因此可利用fpga 中的dll 产生二倍频时钟信号来提高写数据的时钟频率,使读数据和写数据的时钟频率相等。二倍频时钟信号提供给写口ram、写地址产生模块,而源时钟信号(一倍频) 提供给读口r a
53、m 、读地址产生模块及空/满标志产生模块,从而解决了内部数据处理同步的问题。(3) 由于双口ram 中存在两种数据存储格式,因此地址位数不同,读地址和写地址不能一一对应,例如fifo 写口ram 部分为512 8,读口ram 部分为256 16,因此写地址要求9 位,而读地址要读地址,写地址的高8 位与读地址的8 位相等,它们的区别仅在写地址的最低一位。因此可把写地址的高8位与读地址一同输入空/满标志产生模块,从而得到正确的full 和empty 信号。下面仅给出读写地址产生逻辑及空/ 满标志产生逻辑的vhdl 设计程序:fifo_write : processbeginwait until
54、rising_edge(clk);if rst = 1 thenwr_addr = 0; /写地址初始化elseif (wr_en = 1 and full = 0)thenwr_data_buf (wr_addr) =to_bitvector(wr_data (7 downto 0);/写数据,其中wr_data_buf定义为基于blockram 的存储矩阵wr_addr = (wr_addr + 1) mod8;/ 写地址增加1end if;end if;end process;fifo_read : processbeginwait until rising_edge(clk);if rst = 1 thenrd_addr = 0;/读地址初始化elseif (rd_en = 1 and empty =0) thenrd_data (15 downto 0) =wr_data_buf (rd_addr);/读数据rd_addr = (rd_addr - 1)mod 16;/ 读地址减1end if;end if;end process;wr_addr1 = wr_addr / 2 ;/取写地址的高8bitoffset rd_addr)else (m - (rd_a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浑源县2025届四年级数学下学期期末综合测试模拟试题含解析
- 洛宁县2025年数学四年级下学期期中联考试题含答案解析
- 钒铁沉淀工操作评估知识考核试卷含答案
- 27届沪教版九上化学复习训练题-物质的性质与变化
- 电气试验工操作知识评优考核试卷含答案
- 道路货运业务员岗前创新意识考核试卷含答案
- 乙醛装置操作工岗后竞赛考核试卷含答案
- 卫星通信机务员工艺规程能力考核试卷含答案
- 煤层气修井工创新方法考核试卷含答案
- 家具制作工岗前个人技能考核试卷含答案
- 2026年安全教育授课教师培训试题
- 有机磷农药中毒诊疗专家共识(2025版)
- 合同范本委托经营管理合同5篇
- (2026)中国石油化工集团中石化招聘笔试试题及答案
- 新课标高中生物实验目录
- 2026国企总部招聘笔试真题题库及标准答案(完整版)
- 律师退伙申请书范本
- 20260402 偏差管理控制程序
- 《浙江省城镇燃气用户设施安全检查导则》
- 挂网客土喷播施工方案
- 幼儿园秋季流感预防知识
评论
0/150
提交评论