




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字逻辑电路设计实验教案赵蕙实验一 半加器和全加器I实验平台实验要求使用TTL小规模集成电路芯片74LS00搭建半加器电路和全加器电路,电路的输入接实验平台开关,电路输出接实验平台的发光管。希望同学们能够通过实验掌握使用基本门电路设计实现数字电路的方法。实验原理在数字电路中,门电路就是用来实现基本逻辑关系的电路,比如这个实验中的半加器和全加器。最基本的门电路是与门、或门和非门,由这些门可以组合成其它的逻辑电路。门电路最初由分立元件组成,集成电路出现后,我们现在使用的门电路都是集成门电路。半加器:完成两个一位二进制数的相加而求得“和”及“进位”。全加器:当多位二进制数相加时,高位的相加运算除了要将本位的加数和被加数相加以外,还要考虑低位是否有向该位的进位。全加器完成将两个一位的二进制数相加,并考虑低位来的进位,相当于三个一位二进制数相加的电路。实验步骤1 设计根据半加器和全加器列出真值表,写出输出函数,因为实验要求使用“与非门”实现,将输出函数转换为“与非门”形式,画出使用与非门实现半加器和全加器的电路图。&1ABSHCH&AiBiSHiCi&Ci-1Si半加器与非门电路 全加器与非门电路2 连线请特别注意VCC和GND的连接,不要接错,以免芯片烧毁!所用芯片的Vcc连起来接+5V;所用芯片的GND连起来接地(GND)。电路的输入接实验平台开关,电路的输出接实验平台的发光管。实验提供的74LS00芯片逻辑与引脚图如下。每块芯片中有四组 2 输入端与非门(正逻辑),根据步骤1设计的电路图,搭建半加器电路需要5个与非门( 可使用2块74LS00芯片),搭建全加器电路需要9个与非门(可使用3块74LS00芯片)。双列直插封装74LS00芯片逻辑图和引脚图3 验证开关向上拨为“1”,向下拨为“0”;发光管为“1”时点亮, 为“0”时熄灭。根据真值表,检验你所搭建的半加器和全加器电路,是否满足设计要求。教你一招:实验平台上可能有个别开关、发光管故障,可以将导线一端接开关,一端接发光管,如果开关向上拨时,发光管点亮;开关向下拨时,发光管熄灭, 说明开关、发光管、导线都是好的。完成连线后的电路可能有误,在没有万用表的情况下,此法也可帮你检查电路故障。实验报告要求1 填妥姓名、班级外,必须填写完成报告的日期(年月日),以后的实验报告要求里不再冗述。2 写出使用TTL小规模集成电路芯片74LS00完成半加器的设计和实现的完整过程(根据功能要求列真值表-写输出函数-将输出函数变换成“与非门”形式-画出电路图-根据芯片引脚连线-验证结果)3 结合实验中接触和使用的小规模集成电路,请说说什么是集成电路?常用的中小规模集成电路产品有哪些? 4 实验过程中你遇到了哪些问题?实验刚开始时,你觉得计算机硬件课程的实验最难理解的地方在哪里?5 实验一和实验二使用两种不同的方式(小规模集成电路,可编程器件)实现全加器电路,就两种方式谈谈你实验的体会。实验二 FPGA设计流程 全加器II实验平台EDA/SOPC实验开发平台,实验二以后的所有实验都使用此开发平台。实验要求根据实验平台提供的Altera公司可编程器件FPGA(现场可编程门阵列),使用Altera公司的EDA设计开发工具QuartusII,用原理图方式设计实现全加器电路,电路的输入接实验平台开关,电路输出接实验平台的发光管。希望同学们能够通过实验掌握使用可编程器件设计实现数字电路的方法。实验原理使用可编程器件进行数字电路设计,将传统的“设计硬件搭试焊接”过程变为“设计编译下载”的过程,其主要工作都在计算机内完成,先将设计输入计算机,再由开发系统将其转换成编程文件下载到可编程器件中。全加器电路图的设计同实验一。实验步骤1 新建工程实验室机器安装的设计环境为:Quartus II Version 9.0。双击桌面图标,运行Quartus II软件。用New Project Wizard工具选项创建此设计的工程,并设计相关信息。点击菜单项File- new project wizard,出现introduction对话框,如图 1。图 1单击next,进入Directory,name,Top-Level Entity设置对话框,选择工程存放路径(请在E盘或F盘新建一个工程相文件夹,实验室的C盘、D盘及桌面被保护)、工程名称和顶层模块名称(本例工程名和顶层模块名均设为fadder。)注意:所有的名称和路径均不能包含空格和汉字。如图 2。图 2跳过图 3所示Add Files对话框,该对话框设置用来将已存在的设计文件加入到工程中。图 3点击next,进入Family & devices settings对话框,指定FPGA器件为Cyclone系列的EP1C12F324C8,如图 4。Cyclone系 列FPGA是Altera公司最初(2002年)的低成本FPGA。2004年和2006年,Altera公司又推出了更新的,密度更高的Cyclone II和Cyclone III系列FPGA,进一步巩固它在大批量、低成本应用解决方案中的地位。图 4图 5图 5对话框用来设置第三方EDA工具,包括综合工具,仿真工具和时序分析工具,这里我们点击Next跳过。图 6信息显示区编译状态区资源管理区工程工作区标题栏菜单栏工具栏图 7最后,新建工程向导会根据你之前一步一步的设置,给出一个工程设置概述页如图 6,单击finish完成工程创建。完成后,QuartusII界面如图 7所示。所有在新建工程向导中进行的设置,在工程建立完成后,都可以通过QuartusII菜单项进行修改。2 设计输入点击菜单项File- new,出现新建源文件对话框如图 8,数字电路的设计文件总的来说有两种方式,原理图方式和硬件描述语言方式,这次实验我们使用原理图方式设计电路,所以选择新建一个“Block Diagram/Schematic File”文件,图 8,点击“OK”按钮,打开原理图编辑器。图 8原理图编辑器的工具栏如图 10所示,工具栏上的按钮作用依次分别是“分离窗口切换”、“选择”,“添加文字”、“符号工具”、“块工具”、“正交结点工具”、“正交总线工具”、“正交管道工具”、“橡皮筋工具”、“部分线选择工具”、“放大缩小工具”、“全屏”、“查找工具”、“水平翻转”、“垂直翻转”、“逆时针90度翻转”、“矩形工具”、“椭圆工具”、“直线工具”、“弧线工具”。图 9QuartusII提供了许多基本库元件给用户使用,根据实验一全加器的设计,共需要9个“2输入与非门电路”模块。在原理图编辑区的空白处双击鼠标,或点击符号工具打开Symbol对话框如图 9。在Symbol对话框中,设计全加器电路需要的“与非门”可以通过选择 “Primitives-logic”基本原件库中的“nand2”模块,点击“OK”,将该模块加入原理图中。 重复该过程,或在原理图编辑区选中已经添加好的nand2模块,使用Ctrl+C和Ctrl+V继续添加。全加器电路的输出端口和输入端口,在Symbol对话框中,使用 “Primitives-pin”库中的“input”模块和“output”模块,添加到原理图中。添加完成后,可以在原理图中双击各个输入输出模块,为它们改名,尽量让端口名称具有可读性,本例可改为Ai、Bi、Ci-1、SHi、Si、Ci如图 11。与非门、输入端口、输出端口之间的连接使用“正交结点工具”完成。完成后的原理图如图 11。图 10图 11设计输入完成后,保存文件,将模块名命名为顶层模块名,即新建工程时指定的顶层模块名,本例为:fadder.bdf。新建的文件默认情况下会自动加入到工程中。3 逻辑综合为工程添加好设计文件以后,下一步就是对工程设计进行综合,本例使用QuartusII软件内嵌的分析综合工具Analysis & Synthesis进行。点击工具栏中按钮,对设计进行综合。Analysis & Synthesis将检查工程的逻辑完整性和一致性。设计如果综合通过,编译状态显示区中Analysis & Synthesis步骤前面会显示绿色的勾,如果设计有错误,会显示红色的叉,如图 12,出错行号及错误原因会显示在信息显示区中,如图 13。图 12图 13根据错误原因提示修改设计,完成修改后,重新综合,直到综合通过,资源管理区中可以点击顶层模块名称前的号,显示模块间的树形结构,编译状态显示区的Analysis & Synthesis步骤前显示绿色的勾,如图 14。图 14初学者往往不习惯阅读错误信息。实际上学会读懂错误信息是很有用的!4 功能仿真在综合通过以后,只能够说明设计符合语法规范,但并不能保证设计满足功能要求,需要通过功能仿真,来验证电路功能是否符合设计要求,功能仿真的考察是的电路在理想环境下的行为,不考虑电路门延迟与线延迟。这里使用QuartusII自带的波形图仿真工具进行。1) 新建仿真波形图文件要使用QuartusII自带的波形图仿真工具进行仿真,首先要新建一个波形图文件。在File菜单中选择New,出现如图 8中所示对话框,在Verification/Debugging Files页中选择Vector Waveform File,点击OK按钮,出现一个空的波形图文件,如图 15。图 152) 添加观察信号结点用菜单Edit-Insert-Insert Node or Bus,打开如图 16所示对话框。可以直接在Name文本框中直接输入信号名称,也可以通过点击按钮Node Finder,打开结点查询对话框来如图 17,来添加需要观察的信号。图 16本例在Node Finder对话框的Filter选项下拉菜单中选择Pins:all,然后点击List按钮,在Nodes Found列表中,选中Ai、Bi、Ci-1、SHi、Si、Ci信号,双击或使用按钮,将它们添加到观察信号中。最后点击“OK”按钮,完成观察信号的添加。图 173) 编辑输入波形在Name栏中选中输入信号的名称,这组输入信号所在的行将被高亮,如图 18。通过菜单Edit-Value,或者直接使用工具栏按钮对输入信号的波形进行设定。图 18如图 19工具栏上的按钮作用分别是“分离窗口切换”、“选择”,“添加文字”、“编辑波形”、“放大缩小”、“全屏幕切换”、“查找”、“替换”、“设置为Unknown”、“置0”、“置1”、“设置为高阻”、“设置为Weak Unknown”、“设置为Weak Low”、“设置为Weak High”、“设置为Dont Care”、“设置为取反”、“设置计数值”、“设置时钟”、“设置为任意值”、“设置随机值”、“贴齐网格线”、“排序”。图 19信号添加完成并且编辑好波形后,保存文件,本例为fadder.vwf。4) 在QuartusII中指定仿真文件用菜单Assignment-Setting在Simulator Settings中,设置Simulation mode为“Functional”,设置fadder.vwf为仿真输入文件,仿真结束的条件可以根据需要在Simulation Period项中选择,如图 20选择仿真运行80ns结束。点击“OK”按钮完成设置 。图 205) 生成功能仿真网表用菜单ProcessingGenerate Functional Simulation Netlist。如果缺少这一步,在仿真运行时,QuartusII产生出错提示:“Error: Run Generate Functional Simulation Netlist (quartus_map seven_seg -generate_functional_sim_netlist) to generate functional simulation netlist for top level entity seven_seg before running the Simulator (quartus_sim)”,无法完成仿真。6) 运行仿真通过工具栏按钮启动仿真。 7) 观察分析仿真结果仿真完成后,根据生成的仿真波形图,对比全加器真值表,分析结果是否正确。本例结果如图 21。图 215 布局布线1) 约束引脚FPGA电路板与实验平台上各个资源模块(如本实验的LED Switches & Buttons模块)之间的连接是固定的,应该根据它们之间的连接关系对FPGA的引脚进行引脚约束。约束引脚是将顶层设计文件的输入输出端口指定到FPGA器件的实际引脚。引脚对应关系见附表。使用菜单项Assignment-Pins进入引脚分配编辑窗口,完成后的分配图 22。图 22不要忘记引脚约束! 在以后的设计中,如果忘记了导入引脚约束文件,编译也不会报错,此时由软件自动分配未约束的引脚,但是和实际连接关系就不一致了。后果是不能通过在实验仪上的验证。2) 布局布线、生成编程文件引脚约束完成后,在QuartusII界面的工具栏中,点击按钮,对设计进行全编译。此外,也可以使用菜单项Processing-Compiler Tool打开编译工具对话框,如图 23,点击Fitter区域中的按钮和Assembler区域中的按钮来执行布局布线和生成编程文件,也可以直接点击Start按钮来完成全编译过程。图 23如果设计文件或引脚约束有改动,一定要重新进行全编译。6 时序仿真(附加题,有兴趣的同学选择完成)功能仿真不考虑传输延迟,主要目的是检查逻辑功能有没有错误,是否符合设计要求。时序仿真包含了延时信息,它能较好地反映芯片的工作情况。用菜单Assignment-Setting在Simulator Settings中,更改设置Simulation mode为“Timming”,设置完成后重新运行仿真,观察结果,本例如图 24。图 24与功能仿真时得到的波形图不同,在时序仿真得到的波形图没有那么完美,因为信号经过任何门电路和导线都存在一个时间延迟问题,,使得电路的输入到达稳定状态时,输出并不一定能立即达到稳定状态。观察电路延迟的情况。7 配置器件(或称编程、下载)对可编程器件FPGA进行配置(编程),俗称下载,下载前打开实验平台电源。点击工具栏按钮,或使用菜单项Tool-Programmer进入器件编程话框,如图 25。单击按钮,可以选择编程电缆硬件设置,如图 26,因为实验设备使用的是USB-Blaster下载电缆,所以本例中使用USB-Blaster作为硬件接口。设置完编程硬件后,在编程界面,在Mode中选择编程模式,本例使用JTAG模式。勾选Program/Configure选项框,单击按钮开始器件编程。在Process进度条中会显示编程进度。完成后,在QuartusII的信息显示区中,会报告成功或出错信息;注意:信息显示在QuartusII的信息显示区中,不在编程窗口中。编程界面左侧的其它按钮分别表示停止编程;自动检测编程硬件是否连接;删除编程文件;更改选中的编程文件;保存文件;添加用户自定义的器件;更改编程文件的顺序。图 25图 268 测试验证器件被成功配置后,就可以进行验证了。拨动连接全加器输入端口Ai,Bi,Ci的开关,观察连接全加器输出端口Si,Ci的发光管显示是否正确。实验三 七人表决器实验要求使用EDA设计开发工具QuartusII,以原理图方式设计实现七人表决器电路,当表决器的七个输入中有4个以上(含4个)为“1”时,u表决器输出为“1”,否则为“0”。用七个开关作为表决器的七个输入,输入为逻辑“1”时表示表决者“赞成”,输入为“0”代表“不赞成”。用二个发光管作为表决器的输出,发光管点亮( 逻辑1)表示表决“通过”,发光管熄灭表示表决“不通过”。实验原理七人表决器的方案很多,这里给出一个使用多个一位全加器实现的电路参考,见“设计输入”,其中的一位全加器我们利用实验二的设计。实验步骤1 实验准备打开QuartusII环境,使用File-Open Project打开上一次的全加器实验工程,双击顶层模块打fadder开原理图文件,然后使用File-Create/_Update-Create Symbol Files For Current File,将顶 层原理图方式设计的全加器模块转换为符号文件fadder.bsf。在E盘或F盘新建一个文件夹(所有的名称和路径均不能包含空格和汉字),将实验二全加器工程中的全加器原理图文件fadder.bdf,以及刚才生成的全加器符号文件fadder.bsf,一起拷入新建的文件夹中。2 新建工程参考实验二指导,在上一步新建的文件夹内创建QuartusII工程,工程名和顶层模块名均设为seven。3 设计输入点击菜单项File- new,新建原理图Block Diagram/Schematic文件,在空白编辑区内双击鼠标左键,或使用符号工具,打开symbol对话框。在Libraries中,除了QuartusIIa提供的库元件外,由于在“实验准备”步骤中,往工程文件夹内中拷入了fadder.bsf符号文件, 所以在Project树下,可以看见当前工程路径下自己定义的元件fadder.bsf。点击“OK”按钮,将fadder模块加入原理图中。 重复该过程,共添加4个一位全加器模块。在Symbol对话框中,使用 “Primitives-pin”库中的“input”模块和“output”模块,为设计添加输入端口和输出端口。使用“Primitives-logic”库中的“not”模块,,输出端口pass取反后送给 输出端口deny。模块之间的连接使用“正交结点工具”完成。完成后的原理图如下,保存文件(本例为seven.bdf)。4 逻辑综合参考实验二指导。5 布局布线使用菜单项Assignment-Pins进行引脚分配,完成后引脚分配如下图。引脚约束完成后,在QuartusII界面的工具栏中,点击按钮,对设计进行全编译。6 编程参考实验二指导。7 验证拨动开关,观察发光管,验证在所有输入条件下的输出结果是否正确。实验报告要求1 完善设计:在表决通过时,用实验平台上的扬声器报鸣提示;在原基础上使用数码管显示赞成票数,写出设计方法。(提示:票数就是几个一位全加器计算出来的最后的结果;想在数码管上显示,需要设计译码器电路。)2 使用VHDL 语言设计七人表决器电路。附:数码管段码表发光二极管组成的显示器是嵌入式应用产品中最常用的廉价输出设备。它由若干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的一个或一笔画被点亮,控制不同组合的二极管导通,就能显示数字和少量字符。常用的七段显示器如下图。一位显示器由八个发光二极管组成,其中七个发光二极管ag控制七个笔画(段)的亮或暗,另一个控制一个小数点的亮和暗。实验平台上的七段数码管是共阴极的(发光二极管阳极连在一起称为共阳极显示器,阴极连在一起称为共阴极显示器),也就是输出为高电平的时候,二极管会导通。例如显示一个“0”,就是abcdef导通,gh截止。根据表可知,段码为3FH。实验平台上有八个数码管,它们的abcdefgh都连接在一起,由用户控制,8个数码管的位选信号由一片74LS138译码器提供, 译码器的输入端(SEL0,SEL1,SEL2)由用户控制,例如SEL0,SEL1,SEL2若为为000, 就选中最右边的数码管,而其余数码管关闭。表 七段数码管段码表显示16进制hgfedcba03F001111111060000011025B0101101134F010011114660110011056D0110110167D011111017070000011187F0111111196F01101111A7701110111B7C01111100C3900111001D5E01011110E7901111001F7101110001数码管译码显示设计参考实验平台上的数码管显示模块的电路原理,以及数码管的输入与与FPGA的管脚连接关系如下面的图、表所示:信号名称对应FPGA管脚名说明7SEG-AH3七段码管A段输入信号7SEG-BH4七段码管B段输入信号7SEG-CK5七段码管C段输入信号7SEG-DL5七段码管D段输入信号7SEG-EK4七段码管E段输入信号7SEG-FL3七段码管F段输入信号7SEG-GL4七段码管G段输入信号7SEG-DPM3七段码管dp段输入信号7SEG-SEL0G4七段码管位选输入信号7SEG-SEL1G3七段码管位选输入信号7SEG-SEL2F4七段码管位选输入信号如果只需要在数码管上显示16进制数据0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F,可以参考下面的代码设计一个4-7译码器。同学们知道1个16进制数据可以由四个二进制位表示,设计用四位的向量输入端口switch来表示四个二进制位;用7位的向量输出端口ledaq来表示数码管的七段(dp小数点段未考虑),根据七段数码管段码表,进行译码器描述。向量输出端口sel用来选择点亮8个数码管中的哪一个,本例中sel2:0设置为为“000”, 点亮最右边的数码管,而其余数码管关闭,同学们也可根据自己的需要选择点亮其它数码管。library ieee;use ieee.std_logic_1164.all;entity Decode4_7 is port( switch: in std_logic_vector(3 downto 0) ; -四位输入信号 ledag: out std_logic_vector(6 downto 0);-8个数码管的7段输出 sel: out std_logic_vector(2 downto 0) - 8个数码管的位选输出 ); end Decode4_7;architecture behave of Decode4_7 is begin sel ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag ledag null; end case; end process; end behave;思考:1. 如果要求除了0F之外,还要能够显示H,如何修改设计?2. 如果希望8个数码管同时点亮,你觉得可以怎么做? 实验四 四位全加器实验要求使用EDA设计开发工具QuartusII,以VHD语言方式设计实现组合逻辑电路四位全加器。实验原理四位全加器可由一位全加器以串行方式连接而成,更为高效的方式是直接用VHDL语言实现。实验步骤1 新建工程参考实验二指导,,工程名和顶层模块名均设为fadder_4。2 设计输入点击菜单项File- new,这次实验我们使用VHDL描述语言方式设计电路,所以选择新建一个“VHDL File”文件,点击“OK”按钮,打开代码编辑器,将下面的代码输入空白编辑区,输入完成后,保存文件,文件名与实体名相同(本例为:fadder_4.vhd)。library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity fadder_4 isgeneric(DATA_WIDTH : natural := 4);port (a : in unsigned (DATA_WIDTH-1) downto 0);b : in unsigned(DATA_WIDTH-1) downto 0);result : out unsigned (DATA_WIDTH downto 0) );end entity;architecture behave of fadder_4 isbeginresult Pins进行引脚分配,完成后引脚分配如下图。引脚约束完成后,在QuartusII界面的工具栏中,点击按钮,对设计进行全编译。5 编程6 验证根据四位全加器真值表,拨动开关,观察发光管,验证在所有输入条件下的输出结果是否正确。附:VHDL知识点1 库的引用库一般是一些常用的VHDL代码的 集合,包括:数据类型的定义、函数的定义、子程序的定义、元件引用声明、常量的定义等一些可复用或是共享的VHDL代码。程序引用了库就可以使用该库中的VHDL代码。library库名 ;use库名 . 库中程序包 . 程序包中的项 ;2 实体的声明实体的声明用于实体与其它实体或是外部接口相关联的说明。实体名应该与文件名一致。entity 实体名 isgeneric(参数名:数据类型 := 值) ;port(端口名 : 端口模式 数据类型) ;end 实体名 ;3 结构体的描述VHDL程序的所有逻辑功能都在结构体中实现。architecture 结构体名 of 实体名 is结构体说明语句;begin 结构体描述语句;end 结构体名;实验报告要求1 画出使用一位全加器以串行方式连接成四位全加器的原理图。2 在四位全加器电路的基础上,修改设计,使用VHDL 语言,设计BCD码加法器,说明设计方案并写出设计代码。实验五 序列检测器实验要求使用EDA设计开发工具QuartusII,以状态图方式设计实现时序逻辑电路“111”序列检测器。实验原理有限状态机(Finite State Machine)是一种时序逻辑,它源于人们将一个复杂的问题分割成多个简单的部分来处理的思想。状态机通过时钟驱动下的多个状态,以及状态之间的跳转规则来实现复杂的逻辑,一旦当前的状态确定,也就明确的相关的输入输出。实验步骤1 新建工程参考实验二指导,工程名和顶层模块名均设为sequencer。2 设计输入点击菜单项File- new,这次实验我们使用状态图方式设计电路,所以选择新建一个“State Machine File”文件,点击“OK”按钮,打开状态图编辑器,使用工具栏完成状态l图的编辑。下图工具栏上的按钮作用分别是“分离窗口切换”、“全屏幕切换”、“选择”、“放大缩小”、 “查找”、“状态工具”、“条件转换工具”、“状态表工具”、“状态机生成向导”、“插入输入端口”、“插入输出端口”、“条件转换等式显示”、“生成HDL文件工具”、“橡皮筋工具”。完成后的序列检测状态图如下,保存文件,本例为sequencer.smf。状态图完成后,使用“生成HDL文件工具”将状态图转换成HDL代码,在弹出的对话框中可以选择生成Verilog HDL、VHDL或System Verilog,本例选择生成VHDL代码,一个sequencer.vhd文件会自动生成并保存在你的工程文件夹里。3 逻辑综合参考实验二指导。4 功能仿真参考实验二指导,创建仿真波形文件,根据生成的仿真波形图,分析结果是否正确。5 布局布线用一个开关K1(引脚号:A12)作为序列检测器的switch输入, 用一个发光管D1(引脚号:A0)作为序列检测器的输出lamp,时钟信号可以使用开发平台的可调数字时钟模块CLK(引脚号:J4),但是因为实验平台上没有单拍时钟,所以本例把时钟信号到开关K2(引脚号:B12),通过拨动开关K2从0-1-0的变化,来模拟时钟。详细引脚对应关系见附录。使用菜单项Assignment-Pins进行引脚分配,完成后点击按钮,对设计进行全编译。6 编程参考实验二指导。7 验证实验报告要求1 有限状态机分为Moore状态机和Mealy状态机,简述两者的特点,分析本例的序列检测器状态机应该属于哪一种?2 设计一个1010序列检测器,画出状态图。实验六 计数器和分频器实验要求层次化设计方法,使用VHDL方式设计实现10进制加法计数器。要求计数器以1秒钟的频率计数,具有同步计数,异步清零,同步预置数功能,要求计数值同时在八个数码管上显示。主时钟选择1KHz的频率,同时作为数码管动态扫描时钟,1KHz主时钟分频后作为10进制加法器的计数时钟。实验原理计数器是最常见的时序逻辑电路,从微处理器的地址发生器到频率计都需要用到计数器。分频器与计数器非常类似,时序电路设计中需要各种各样的分频器来获得不同频率的时钟,其中以整数分频器最为常见,整数分频可以简单地使用模n计数器实现,即随驱动时钟跳动n次后就输出一个进位脉冲,然后立即被清零或置位,再开始新一轮循环的计数器。实验步骤1 新建工程参考实验二指导,工程名和顶层模块名均设为counter_TOP。2 设计输入1) 计数器点击菜单项File- new,新建一个“VHDL File”文件,点击“OK”按钮,打开代码编辑器,将下面的代码输入空白编辑区,输入完成后,保存文件,文件名与实体名相同(本例为:counter.vhd)。计数器模块采用参数化设计,从MIN_COUNT开始加1计数,计到MAX_COUNT后,重新回到MIN_COUNT开始计数。使用参数化设计的最大特点在于它可以被方便地修改,所以常用来建模一些需要调整的数据,以便在实例化模块时根据需要进行配置。library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity counter isgeneric(MIN_COUNT : natural := 0;MAX_COUNT : natural := 9);port(clk : in std_logic;reset : in std_logic;load : in std_logic;enable : in std_logic;d : in integer range MIN_COUNT to MAX_COUNT;q : out integer range MIN_COUNT to MAX_COUNT);end entity;architecture behave of counter isbeginprocess (clk,reset)variable cnt : integer range MIN_COUNT to MAX_COUNT;beginif reset = 1 thencnt := 0; elsif (rising_edge(clk) then if load =1 then cnt:= d;elsif cnt=MAX_COUNT then cnt:= MIN_COUNT;elsif enable = 1 thencnt := cnt + 1;end if;end if;q MegaWizard Plug-In Manager,在弹出的对话框中选择Create a new custom定制一个新的模块(如果要修改一个已经编辑好的LPM模块,则选择Edit an exiting custom项),点击“Next”按钮,在后续对话框中的左栏选择Arithmetic项下的LPM_COUNTER,在右边选择Cyclone器件和VHDL语言方式,最后输入定制的LPM_COUNTER存放的路径和文件名,本例文件名为divider.vhd,路径选择自己创建工程的路径。 点击“Next”,选择计数器的位宽为10bit,加1计数。点击“Next”,设置为模1000计数,选择输出Carry-out信号,则计数器会从0计数到999,再回零计数,当计数到999时,会产生一个时钟的Carry-out信号。后面我们就用这个Carry-out信号来做10进制计数器的计数时钟。依图完成每个对话框的设置,最后点击“Finish”,完成LPM_COUNTER定制,硬件描述语言文件divider.vhd会自动保存在你设置的路径中。 3) 数码管译码电路及动态扫描在“数码管译码显示设计参考”中,我们介绍了使用译码电路,控制实验平台中8个数码管的段码a-b-c-d-e-f-g,从而在数码管上显示16进制数据0F,由设计中8个数码管的位选择信号SEL0、SEL1、SEL2来决定到底哪个数码管显示,例如SEL0、SEL1、SEL2为“000”时,最右边的数码管显示当前段码,即在一个时刻,只能有一个数码管被点亮。如果希望8个数码管上分别显示希望的数据,就必须使得选通信号以较高的频率依次选通,同时在段码输入口加上希望在对应数据管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。点击菜单项File- new,创建一个实现数码管动态扫描的VHDL文件,点击“OK”按钮,打开代码编辑器,将下面的代码输入空白编辑区,输入完成后,保存文件,文件名与实体名相同(本例为:Dynamic_Scan.vhd)。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Dynamic_Scan is port(clk : in std_logic; -定义动态扫描时钟信号 switch: in std_logic_vector(3 downto 0); -四位输入信号 ledag: out std_logic_vector(6 downto 0); -8个数码管的7段输出 sel: out std_logic_vector(2 downto 0) -8个数码管的位选输出 ); end Dynamic_Scan;architecture behave of Dynamic_Scan is begin-三位计数器实现000111计数,计数器的输出作为数码管的SEL选通信号。 process(clk) variable count : std_logic_vector(2 downto 0); begin if clkevent and clk=1 then-检测时钟上升沿 count:=count+1;-计数器count累加 end if; sel new,创建一个顶层模块VHDL文件,保存,文件名与实体名相同(本例为counter_TOP.vhd)。这个设计包含计数器、分频器、数码管动态扫描等多个模块,顶层模块的作用是把各个模块连起来,形成最后完整的数字电路,作用与同学们画原理图时从库里添加元件,以及在元件与元件之间连线类似。library ieee;use ieee.std_logic_1164.all; -该程序包中定义了转换函数conv_std_loigc_vector(A,位长)use ieee.std_logic_ARITH.all; entity counter_TOP isgeneric(MIN_COUNT : natural := 0;MAX_COUNT : natural := 9;DATAWIDTH : natural := 4);port(clk : in std_logic;reset : in std_logic;load : in std_logic;enable : in std_logic;d : in integer range MIN_COUNT to MAX_COUNT;q : buffer integer range MIN_COUNT to MAX_COUNT;ledag: out std_logic_vector(6 downto 0); sel: out std_logic_vector(2 downto 0) );end entity;architecture beha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届陕西省西安市莲湖区化学高三第一学期期中调研试题含解析
- 山东省济南市实验中学2026届化学高一第一学期期末质量跟踪监视试题含解析
- 2025年秋季部编版初中数学教学设计八年级上册13.4 课题学习 最短路径问题
- 圣诞节公司活动策划方案
- 五一劳动节文艺晚会策划方案
- 幼儿园活动实施策划方案
- 关于初三体育教学工作方案
- 大班配班个人工作方案
- 电仪监理面试题及答案
- 中平电动车考试试题及答案
- 14生活日用品的联想 (教案)人美版美术四年级上册
- CH+8016-1995全球定位系统(GPS)测量型接收机检定规程
- DL-T5493-2014电力工程基桩检测技术规程
- 人教版2024年小学升学考试数学模拟测试卷(共5套)(含答案解析)
- 测量基础能力测试
- 医院系统瘫痪应急预案
- 光伏项目技术标准清单
- 117湖南省怀化市雅礼实验学校2023-2024学年七年级下学期开学考试数学试题
- 输气管线破裂漏气应急处置方案
- 老年患者呼吸系统疾病的护理重点
- 脑卒中急救中的辅助检查与影像学应用
评论
0/150
提交评论