eda课程设计89先进先出FIFO缓冲器文档格式.docx
- 文档编号:21187259
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:14
- 大小:285.74KB
eda课程设计89先进先出FIFO缓冲器文档格式.docx
《eda课程设计89先进先出FIFO缓冲器文档格式.docx》由会员分享,可在线阅读,更多相关《eda课程设计89先进先出FIFO缓冲器文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
2016年01月22日
目录
摘要I
绪论1
1.设计的内容及要求1
1.1设计的目的1
1.2设计任务要求1
2.FIFO5
2.1FIFO的使用5
2.2FIFO的参数5
2.3FIFO的分类及设计6
3.先进先出缓存器设计7
3.1设计思想7
3.2各部分模块7
3.2.1先入先出缓存器7
3.2.2消抖电路8
3.2.3分频电路9
3.2.4顶层原理图9
4.仿真及硬件调试10
4.1缓冲器仿真10
4.2缓存器硬件测试10
5.心得体会11
5.参考文献12
附录13
摘要
本文介绍了先进先出(FIFO)缓存器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法。
利用FPGA的可编程性,拥有简洁而又多变的设计方法。
本设计实现了先进先出缓存器的一些基本功能,也把一些新的思路加入到设计中。
主要包括采用了FPGA芯片,使用QuartusⅡ中的VHDL语言进行编程。
VHDL是一个标准语言,其具有良好的移植性,值得本设计更为灵活,从而更有利于产品升级。
关键词:
VHDL;
FIFO;
缓存器;
QuartusⅡ;
绪论
当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,用电省的方向发展。
推动该潮流迅速发展的决定性因素就是使用了现代化的EDA设计工具。
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,是90年代初,从CAD(计算机辅助没计)、CAM(算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。
EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑行局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作[1]。
设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果。
尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。
高速发展的CPLD/FPGA器件又为EDA技术的不断进步奠定可坚实的物质基础。
CPLD/FPGA器件更广泛的应用及厂商间的竞争,使得普通的设计人员获得廉价的器件和EDA软件成为可能。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。
另外,VHDL还有以下优点:
VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;
VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;
VHDL的设计不依赖于特定的器件,方便了工艺的转换。
1.设计的内容及要求
1.1设计的目的
根据设计要求,完成对8×
进一步加强对QuartusⅡ的应用和对VHDL语言的使用。
1.2设计任务要求
1.设计一个8×
data_in是将被载入到一个寄存器的数。
2.掌握QuartusⅡ的操作和使用方法。
3.利用QuartusⅡ软件对所设计的电路进行仿真分析。
2.FIFO
FIFO(FirstInFirstOut)简单说就是指先进先出。
由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。
作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。
2.1FIFO的使用
FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位100KSPS,那么每秒的数据量为100K×
16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。
另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。
2.2FIFO的参数
FIFO的宽度:
也就是英文资料里常看到的THEWIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。
FIFO的深度:
THEDEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。
如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12,就可以存储12个8位的数据,FIFO的深度可大可小。
一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。
而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。
在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。
满标志:
FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。
空标志:
FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。
读时钟:
读操作所遵循的时钟,在每个时钟沿来临时读数据。
写时钟:
写操作所遵循的时钟,在每个时钟沿来临时写数据。
读指针:
指向下一个读出地址。
读完后自动加1。
写指针:
指向下一个要写入的地址的,写完自动加1。
读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。
2.3FIFO的分类及设计
根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。
同步FIFO是指读时钟和写时钟为同一个时钟。
在时钟沿来临时同时发生读写操作。
异步FIFO是指读写时钟不一致,读写时钟是互相独立的。
其连接模式如图2.1
FIFO设计的难点在于怎样判断FIFO的空/满状态。
为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。
在空的状态下不能进行读操作。
怎样判断FIFO的满/空就成了FIFO设计的核心问题。
一般是异步FIFO有空/满标志所产生问题,但是在本次设计中暂不讨论这个问题。
图2.1FIFO连接模式
3先进先出缓存器设计
先进先出法是指根据先入库先发出的原则,对于输出的数据以先输入存储器的数据为依据。
3.1设计思想
在缓冲器内部定义一个8
9的存储空间用于暂存数据。
初始状态读写指针都指向0号数寄存器(共8个)。
当输入通道打开时,每来一个脉冲(由外部按键提供),向缓冲期内输入一个9位的数,与此同时内部寄存器读指针加1,准备接受下一个需要暂存的数,下一个脉冲到来,再存一个数,读指针再加1……当输出通道打开时,每来一个脉冲输出一个9位数,写指针加1,准备输出下一个9位数,同理进行下一个数的输出……由于输入/输出数据是按需进行的,故设计脉冲由按键提供,为更好的进行控制,加一个消抖电路使其每按一次内部计数确定加1。
3.2各部分模块
本设计共由三个部分组成:
先入先出缓存器、消抖模块、分频器。
3.2.1先入先出缓存器
这是整个设计的核心模块,其输入输出端口设置如下:
ready:
控制输出通道,当其为‘1’时,输出通道打开,可以进行读操作。
writey:
控制输入通道,当其为‘1’时,输入通道打开,可以进行写操作。
rdptclr,wrptclr:
缓冲器内部读写指针,用于规范内部寄存器(编号0~7)的使用,两指针初始状态都指向0寄存器。
当写入第一个数据时,数据存入0寄存器,同时写指针加1,指向下一个寄存器,准备接受下一个将被写入的数据。
在需要读出数据时,打开输出通道,同时由脉冲控制输出数据,每输出一个数据,读指针加1,准备输出下一个数据,同时输出数据以输入数据的个数为顶限。
clk:
脉冲控制输入,控制数据的写入和读出。
data_in:
放置将被输入的数据。
data_out:
用于输出数据的通道。
readit:
控制读取输入数据。
编写的程序见附录。
生成元件后如图3.1所示:
图3.1FIFO元件图
3.2.2消抖电路
本设计用外部按键产生脉冲来控制输入输出数据的个数,每一个脉冲对应一个数据,同时对应内部寄存器的移位。
为了保证数据输入顺序与数据输出顺序完全相同,要保证每按键一次只产生一个脉冲。
通常的按键在闭合及断开的瞬间均伴随有一连串的抖动。
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
为确保电路对按键的一次闭合仅作一次处理,必须去除按键抖动。
软件消抖的方法为:
在检测出键闭合保持后执行一个延时程序,产生5ms~10ms的延时,让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。
当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失才能转入该键的处理程序。
本课题中用2个D触发器和一个2输入与门联合实现。
用程序分别编写D触发器和2输入与门,生成元件,供最后顶层原理图使用。
D触发器的程序见附录,消抖模块的电路如图3.2所示:
图3.2消抖模块原理图
3.2.3分频电路
为了配合消抖电路,取延时为5ms,即使得采样频率为5ms,由此根据f=1/T,算得脉冲频率为200Hz,而实验箱上提供的是20M的时钟频率,故要对时钟进行分频。
程序中用内部计数器计算到来的脉冲数,脉冲数小于50000时输出为0,否则输出为1,同时计到100000时计数器清零。
同理,将分频器生成元件,供顶层原理图使用。
生成元件如图3.3所示:
图3.3分频器元件图
3.2.4顶层原理图
以上所描述模块的程序编写均在同一工程下,由程序生成的元件也在该工程下。
用前面所介绍的方法,在该工程下再建一原理图作为顶层,将所需的元件按照要求进行连线,加入输入输出处端口并改名。
保存原理图,并将原理图置为顶层文件。
本设计的整体原理图如图3.4所示:
图3.4整体原理图
4仿真及硬件调试
4.1缓冲器仿真
用前面所描述的方法进入仿真界面,得到某个激励条件下的仿真图如图4.1:
图4.1仿真图
4.2缓存器硬件测试
按照软件用法中的步骤将程序导入实验箱上,接通电源,用按键来控制它的脉冲输入,用拨码开关来控制它的输入序列,用发光二极管作为它的输出,以观察灯的的变化来观察FIFO的输出。
在调试过程中出现了部分问题,由于输入的管脚比较多,也用了很多拨码开关,在设置时,要小心区分。
5心得体会
通过这次的课设,我认识到了QuartusⅡ软件的功能非常强大,对于很多关于数电方面的元器件都可以用它来实现,这使得我们在使用的时候非常方便及多变。
我也熟悉了QuartusⅡ的工作环境,可以很熟练的对QuartusⅡ进行常规的操作,快速进行程序编辑和仿真。
本文次课设利用QuartusⅡ设计FIFO先进先出缓存器,方法简单、快捷。
在本次的课程设计中,由于没有完全读懂课设要求,导致设计出来的FIFO的功能没有完全达到要求,使我对自己的学习态度有了反思。
读课设要求,写程序,直到完成硬件调试都需要认真对待,每一步都不能放松,否则都可能导致整个设计失败。
参考文献
[1]张亦华,延明,肖冰.数字逻辑设计实验技术与EDA工具.北京:
北京邮电大学出版社,2003
[2]陈小毛,胡机秀.新编数字电路与EDA技术.北京:
国防工业出版社,2008.
[3]夏路易.基于EDA的电子技术课程设计.北京:
电子工业出版社,2009.
[4]宋嘉玉,孙丽霞.EDA实用技术.北京:
人民邮电出版社,2006.
[5]齐洪喜,陆颖.VHDL电路设计实用技术.北京:
清华大学出版社,2004.
附录
FIFIO的程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitykesheis
port(clk,ready,writey,readit,rdptclr,wrptclr:
instd_logic;
data_out:
outstd_logic_vector(8downto0);
data_in:
instd_logic_vector(8downto0));
end;
architecturearhofkesheis
componentnclk
port(clk:
clk1:
bufferstd_logic);
endcomponent;
componentanjian
d:
instd_logic_vector(0to4);
q:
outstd_logic_vector(0to4));
componentcpu
port(q:
std_logic_vector(0to4);
signalq1:
signalc1:
std_logic;
begin
a1:
nclkportmap(clk=>
clk,clk1=>
c1);
a2:
anjianportmap(clk=>
c1,d(0)=>
ready,d
(1)=>
writey,d
(2)=>
rdptclr,d(3)=>
wrptclr,d(4)=>
readit,q=>
q1);
a3:
cpuportmap(q=>
q1,data_out=>
data_out,data_in=>
data_in);
end;
cpu程序:
entitycpuis
instd_logic_vector(8downto0));
architecturearhofcpuis
signalrdinc:
integerrange0to7;
signalwrinc:
signaldata0,data1,data2,data3,data4,data5,data6,data7:
std_logic_vector(8downto0);
p1:
process(q)
begin
ifq
(2)='
1'
thenrdinc<
=0;
elsifq(0)='
then
ifrising_edge(q(4))then
caserdincis
when0=>
data_out<
=data0;
when1=>
=data1;
when2=>
=data2;
when3=>
=data3;
when4=>
=data4;
when5=>
=data5;
when6=>
=data6;
when7=>
=data7;
endcase;
rdinc<
=rdinc+1;
endif;
0'
then
data_out<
="
ZZZZZZZZZ"
;
endprocess;
p2:
ifq(3)='
thenwrinc<
elsifq(3)='
then
ifrising_edge(q
(1))then
casewrincis
data0<
=data_in;
data1<
data2<
data3<
data4<
data5<
data6<
data7<
wrinc<
=wrinc+1;
endif;
分频器程序:
entitynclkis
architecturearhofnclkis
begin
process(clk)
variablenum1:
integerrange0to1000000;
ifclk'
eventandclk='
ifnum1=1000000then
num1:
clk1<
=notclk1;
elsenum1:
=num1+1;
endif;
endprocess;
消抖电路程序:
entityanjianis
architecturearhofanjianis
process(clk,d)
q<
=d;
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
8×
9先进先出(FIFO)缓冲器
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
2015年1月23日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 课程设计 89 先进 FIFO 缓冲器