《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc

上传人:仙人指路1688 文档编号:4146908 上传时间:2023-04-07 格式:DOC 页数:23 大小:243.50KB
返回 下载 相关 举报
《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc_第1页
第1页 / 共23页
《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc_第2页
第2页 / 共23页
《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc_第3页
第3页 / 共23页
《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc_第4页
第4页 / 共23页
《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc》由会员分享,可在线阅读,更多相关《《电子线路EDA》课程设计8×9先进先出(FIFO)缓冲器 .doc(23页珍藏版)》请在三一办公上搜索。

1、课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 仅供参考 题 目: 89先进先出(FIFO)缓冲器 一、设计目的根据设计要求,完成对89先进先出(FIFO)缓冲器的设计。进一步加强对Quartus的应用和对VHDL语言的使用。二、设计内容和要求设计一个89先进先出(FIFO)缓冲器,8位字深,9位字宽;当读信号ready有效时,FIFO的输出data_out使能;当ready无效时,FIFO的输出处于高阻态;当写信号writey有效时,9位款的寄存器进行写操作,信号rdinc和wrinc被用来作为寄存器读和写指针递增,以指示该位寄存器的读和写。信号rdptclr和wrptclr复

2、位读写指针指向FIFO的第一个寄存器。data_in是将被载入到一个寄存器的数据。掌握Quartus的操作和使用方法。利用Quartus软件对所设计的电路进行仿真分析。 三、 初始条件 CPLD,按键,时钟信号,拨码开关等。四、时间安排: 2011.1.11课程设计任务布置、选题、查阅资料。 2011.1.12-2010.1.17 设计,软件编程、仿真和调试。 2011.1.18-2010.1.20 设计的硬件调试。 2011.1.21 机房检查设计成果,提交设计说明书及答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录摘要IIIAbstractIII绪 论31 软件使

3、用31.1 Quartus简介31.2 Quartus基本使用31.2.1 新建工程31.2.2 程序编写31.2.3 仿真31.2.4 硬件调试32 FIFO32.1 FIFO的使用32.2 FIFO的参数32.3 FIFO的分类及设计33 先进先出缓存器设计33.1 设计思想33.2 各部分模块33.2.1 先入先出缓存器33.2.2 消抖电路33.2.3 分频电路33.2.4 顶层原理图34 仿真及硬件调试34.1 缓冲器仿真34.2 缓存器硬件测试35 心得体会36 参考文献3附录3摘要本文介绍了先进先出(FIFO)缓存器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方

4、法。利用FPGA的可编程性,拥有简洁而又多变的设计方法。本设计实现了先进先出缓存器的一些基本功能,也把一些新的思路加入到设计中。主要包括采用了FPGA芯片,使用Quartus中的VHDL语言进行编程。VHDL是一个标准语言,其具有良好的移植性,值得本设计更为灵活,从而更有利于产品升级。关键词:VHDL;FIFO;缓存器;Quartus; Abstract This article describes the design approach of First In First Out (FIFO) buffer,it focuses primarily on how to use the eme

5、rging EDA electronic design device to replace the traditional methods, There has many simple yet varied design approaches with the use of FPGAs programmability. This design achieved a FIFO buffer some of the basic functions, but also bring some new ideas into the design. Mainly include the use of a

6、FPGA chip, using the VHDL language in the Quartus ? programming. VHDL is a standard language, which has good portability, it is worth this design is more flexible and thus more conducive to product upgrades. Keywords: VHDL;FIFO;register;Quartus; 绪 论当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,用电省的方向发展。推动该潮流迅速发展的决定性因

7、素就是使用了现代化的EDA设计工具。EDA是电子设计自动化(Electronic Design Automation)的缩写,是90年代初,从CAD(计算机辅助没计)、CAM(算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑行局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作1。设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮

8、助下就可以得到最后的设计结果。尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。高速发展的CPLD/FPGA器件又为EDA技术的不断进步奠定可坚实的物质基础。CPLD/FPGA器件更广泛的应用及厂商间的竞争,使得普通的设计人员获得廉价的器件和EDA软件成为可能。VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。另外,VHDL还有以下优点:VHDL的宽范围描述能力使它成为高层次设计的

9、核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;VHDL的设计不依赖于特定的器件,方便了工艺的转换。1 软件使用1.1 Quartus简介 Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程2。 Quartus

10、包括模块化的编译器。它的编译器支持的硬件描述语言有VHDL、Verilog HDL及AHDL。Quartus支持层次化设计,可以在一个新的编辑输入环境中对环境中使用不同输入设计方式完成的模块进行调用。在设计输入之后,Quartus的编译器将给出设计输入的错误报告,这给编程和修改提供了很好的帮助。 1.2 Quartus基本使用1.2.1 新建工程双击桌面QUARTUS II图标进入主界面,如下图所示: 图1-1 Quartus II主界面单击软件主界面中File ? New Project Wizard.开始新建一个工工程,根据提示选择存储路径,输入工程名,软件会默认顶层实体名与工程名相同并显

11、示。往下选择芯片,在此时选择Cyclone下的EP2C8Q208C8,最后会显示所有选择结果,以供最后确认。确认图如图1.2:图1.2 New Project Wizard1.2.2 程序编写单击File?New.,在弹出的窗口中选择新建VHDL File,然后在其中编写程序。一般用三段式VHDL语言编写程序代码3。 库或程序包调用的说明部分; 实体说明部分; 结构体描述模块功能;编写完成程序代码后,将其以实体名保存,编译程序,若编译成功则继续向下进行。将多个程序连起来成为创建顶层文件,可以由程序编写或者用画图来实现。1.2.3 仿真 单击File?New.,在弹出的窗口中选择新建Vector

12、 Waveform File。左键双击图左边的空白处,在弹出的Insert Node or Bus窗口下单击Node Finder,在弹出的窗口中单击List,并将Nodes Found全部导到Selected Nodes,单击OK,仿真图上会显示所有的输入输出端口。选定某一输入端口,在左边的工具条中选择适当的图标设置输入波形。将所有的输入端口设置完毕后保存,单击Processing?Simulator Tool,Simulation Tool设置为Functional,单击Generate Functional Simulation Netlist。待其完成后选择Simulator Tool

13、窗口下方的的Start,完成后,单击Open,仿真结果会覆盖在仿真图上。根据波形检查是否实现要达到的功能4。1.2.4 硬件调试单击主界面Assignments?Device.在弹出的Setting窗口下单击Device&Pin Option,在弹出的窗口中设置不是用的管脚为高阻态。单击Assignments?Pins,对应实验箱上的管脚名进行设置,设置完毕后进行编译,软件会检测管脚设置有无错误。设置无误单击Programmer,在实验箱与微机主机连接好并通电打开电源的前提下,即可以向实验箱中导入程序,进行硬件调试5。 2 FIFO FIFO( First In First Out)简单说就是

14、指先进先出。由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。2.1 FIFO的使用FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位100K SPS,那么每秒的数据量为100K16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FI

15、FO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。2.2 FIFO的参数FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度

16、为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续

17、从FIFO中读出数据而造成无效数据的读出(underflow)。读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。读指针:指向下一个读出地址。读完后自动加1。写指针:指向下一个要写入的地址的,写完自动加1。读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。2.3 FIFO的分类及设计根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。其连接模式如图2.1FIFO设计的难点

18、在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。一般是异步FIFO有空/满标志所产生问题,但是在本次设计中暂不讨论这个问题。图2.1 FIFO连接模式3 先进先出缓存器设计先进先出法是指根据先入库先发出的原则,对于输出的数据以先输入存储器的数据为依据。3.1 设计思想 在缓冲器内部定义一个89的存储空间用于暂存数据。初始状态读写指针都指向0号数寄存器(共8个)。当输入通道打开时,每来一个脉冲(由外部按键提供),向缓冲期内输

19、入一个9位的数,与此同时内部寄存器读指针加1,准备接受下一个需要暂存的数,下一个脉冲到来,再存一个数,读指针再加1当输出通道打开时,每来一个脉冲输出一个9位数,写指针加1,准备输出下一个9位数,同理进行下一个数的输出由于输入/输出数据是按需进行的,故设计脉冲由按键提供,为更好的进行控制,加一个消抖电路使其每按一次内部计数确定加1。3.2 各部分模块本设计共由三个部分组成:先入先出缓存器、消抖模块、分频器。3.2.1 先入先出缓存器这是整个设计的核心模块,其输入输出端口设置如下:ready:控制输出通道,当其为1时,输出通道打开,可以进行读操作。writey:控制输入通道,当其为1时,输入通道打

20、开,可以进行写操作。rdptclr,wrptclr:缓冲器内部读写指针,用于规范内部寄存器(编号07)的使用,两指针初始状态都指向0寄存器。当写入第一个数据时,数据存入0寄存器,同时写指针加1,指向下一个寄存器,准备接受下一个将被写入的数据。在需要读出数据时,打开输出通道,同时由脉冲控制输出数据,每输出一个数据,读指针加1,准备输出下一个数据,同时输出数据以输入数据的个数为顶限。clk:脉冲控制输入,控制数据的写入和读出。data_in:放置将被输入的数据。data_out:用于输出数据的通道。readit:控制读取输入数据。编写的程序见附录。生成元件后如图3.1所示: 图3.1 FIFO元件

21、图3.2.2 消抖电路本设计用外部按键产生脉冲来控制输入输出数据的个数,每一个脉冲对应一个数据,同时对应内部寄存器的移位。为了保证数据输入顺序与数据输出顺序完全相同,要保证每按键一次只产生一个脉冲。通常的按键在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。为确保电路对按键的一次闭合仅作一次处理,必须去除按键抖动。软件消抖的方法为:在检测出键闭合保持后执行一个延时程序,产生5ms10ms的延时,让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失才能转入该键

22、的处理程序。本课题中用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.

23、4 顶层原理图以上所描述模块的程序编写均在同一工程下,由程序生成的元件也在该工程下。用前面所介绍的方法,在该工程下再建一原理图作为顶层,将所需的元件按照要求进行连线,加入输入输出处端口并改名。保存原理图,并将原理图置为顶层文件。本设计的整体原理图如图3.4所示: 图3.4 整体原理图4 仿真及硬件调试4.1 缓冲器仿真用前面所描述的方法进入仿真界面,得到某个激励条件下的仿真图如图4.1: 图4.1 仿真图4.2 缓存器硬件测试 按照软件用法中的步骤将程序导入实验箱上,接通电源,用按键来控制它的脉冲输入,用拨码开关来控制它的输入序列,用发光二极管作为它的输出,以观察灯的的变化来观察FIFO的输出

24、。在调试过程中出现了部分问题,由于输入的管脚比较多,也用了很多拨码开关,在设置时,要小心区分。5 心得体会通过这次的课设,我认识到了Quartus软件的功能非常强大,对于很多关于数电方面的元器件都可以用它来实现,这使得我们在使用的时候非常方便及多变。我也熟悉了Quartus的工作环境,可以很熟练的对Quartus进行常规的操作,快速进行程序编辑和仿真。本文次课设利用Quartus?设计FIFO先进先出缓存器,方法简单、快捷。在本次的课程设计中,由于没有完全读懂课设要求,导致设计出来的FIFO的功能没有完全达到要求,使我对自己的学习态度有了反思。读课设要求,写程序,直到完成硬件调试都需要认真对待

25、,每一步都不能放松,否则都可能导致整个设计失败。路漫漫其修远兮,吾将上下而求索。我愿在未来的学习和研究过程中,以更加认真的态度来对待所有的学习,以及任务。 6 参考文献1 张亦华,延明,肖冰.数字逻辑设计实验技术与EDA工具.北京:北京邮电大学出版社,20032 陈小毛,胡机秀新编数字电路与EDA技术北京:国防工业出版社,20083 夏路易.基于EDA的电子技术课程设计北京:电子工业出版社,20094 宋嘉玉,孙丽霞EDA实用技术北京:人民邮电出版社,2006. 5 齐洪喜,陆颖VHDL电路设计实用技术北京:清华大学出版社,2004.附录FIFIO的程序library ieee;use iee

26、e.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keshe isport( clk,ready,writey,readit,rdptclr,wrptclr: in std_logic; data_out:out std_logic_vector(8 downto 0); data_in: in std_logic_vector(8 downto 0);end;architecture arh of keshe is component nclk port( clk: in std_logic; clk1: buffer s

27、td_logic);end component;component anjian port( clk: in std_logic; d: in std_logic_vector(0 to 4); q: out std_logic_vector(0 to 4);end component;component cpu port( q:std_logic_vector(0 to 4); data_out:out std_logic_vector(8 downto 0); data_in: in std_logic_vector(8 downto 0);end component;signal q1:

28、std_logic_vector(0 to 4);signal c1:std_logic;begina1:nclk port map(clk=clk,clk1=c1);a2:anjian port map(clk=c1,d(0)=ready,d(1)=writey,d(2)=rdptclr,d(3)=wrptclr,d(4)=readit,q=q1);a3:cpu port map(q=q1,data_out=data_out,data_in=data_in);end; cpu程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_lo

29、gic_unsigned.all;entity cpu isport( q:std_logic_vector(0 to 4); data_out:out std_logic_vector(8 downto 0); data_in: in std_logic_vector(8 downto 0) );end;architecture arh of cpu is signal rdinc:integer range 0 to 7; signal wrinc:integer range 0 to 7; signal data0,data1,data2,data3,data4,data5,data6,

30、data7:std_logic_vector(8 downto 0);beginp1:process(q)beginif q(2)=1 then rdinc data_out data_out data_out data_out data_out data_out data_out data_out=data7;end case;rdinc=rdinc+1;end if;elsif q(0)=0 thendata_out=ZZZZZZZZZ;end if;end process;p2:process(q)beginif q(3)=1 then wrinc data0 data1 data2 d

31、ata3 data4 data5 data6 data7=data_in;end case;wrinc=wrinc+1;end if;end if;end process;end; 分频器程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity nclk isport( clk: in std_logic; clk1: buffer std_logic);end;architecture arh of nclk is begin process(clk)variable num1:int

32、eger range 0 to 1000000;beginif clkevent and clk=1 then if num1=1000000 then num1:=0;clk1=not clk1; else num1:=num1+1; end if;end if;end process;end; 消抖电路程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity anjian isport( clk: in std_logic; d: in std_logic_vector(0 to 4); q: out std_logic_vector(0 to 4);end;architecture arh of anjian is begin process(clk,d)begin q=d;end process;end; 本科生课程设计成绩评定表姓 名性 别专业、班级课程设计题目: 89先进先出(FIFO)缓冲器 课程设计答辩或质疑记录:成绩评定依最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号