ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:1.23MB ,
资源ID:989349      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-989349.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮数字电路与逻辑设计实验上-综合实验报告.docx)为本站会员(风****)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

北邮数字电路与逻辑设计实验上-综合实验报告.docx

1、数字电路与逻辑设计实验综合实验报告学院:信息与通信工程学院目 录一、实验题目和任务要求3(一)Quartus II原理图输入法设计与实现3(二)用VHDL设计与实现组合逻辑电路3(三)用VHDL设计与实现时序逻辑电路3(四)用VHDL设计与实现相关电路4二、实验内容、原理图、VHDL代码和仿真波形分析4(一)Quartus II原理图输入法设计与实现41.半加器42.全加器53.3-8线译码器6(二)用VHDL设计与实现组合逻辑电路61.数码管译码器62.8421码转余3码63.奇校验器7(三)用VHDL设计与实现时序逻辑电路81.8421十进制计数器82.分频器83.组合电路实现数码管0到9

2、循环显示8(四)用VHDL设计与实现相关电路131.数码管动态扫描控制器132.点阵行扫描控制器16三、故障及问题分析20四、总结和结论21五、参考文献21一、 实验题目和任务要求(一) Quartus II原理图输入法设计与实现实验题目Quartus II原理图输入法设计与实现任务要求1)用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。2) 用生成的半加器模块和逻辑门设计与实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。3) 用3-8线译码器和逻辑门设计和实现函数,仿真验证其功能。(二) 用VHDL设计与实现组合逻

3、辑电路实验题目1)数码管译码器2)8421码转余3码3)奇校验器任务要求1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个1时,输出为1,否则输出为0,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。(三) 用VHDL设计与实现时序逻辑电路实验题目1)8

4、421十进制计数器2)分频器3)组合电路实现数码管0到9循环显示任务要求1)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。要求用按键设定输入信号,发光二极管显示输出信号。2)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。要求在Quartus II平台上设计程序并仿真验证设计。3)讲(1)、(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。(四) 用VHDL设计与实现相关电路实验题目(二选一)1)数码管动态扫描控制器2)点阵行扫描控制器任务要求1)用VHDL语言设计实现一个数码管动态扫描控制器,要

5、求显示班号后3位和班内序号。仿真验证其功能,并下载到实验板测试。2)用VHDL语言设计实现一个88点阵行扫描控制器,要求从上至下逐行循环点亮点阵(红色或绿色均可),每行点亮时间为0.5秒。3)用VHDL语言设计实现一个88点阵行扫描控制器,要求从上至下逐行点亮点阵,第一行为红色,第二行为绿色,依次类推,直至点亮所有行,然后全部熄灭,再重新从第一行开始。二、 实验内容、原理图、VHDL代码和仿真波形分析(一) Quartus II原理图输入法设计与实现1. 半加器原理图:2. 全加器原理图其中halfadder元件是之前生成的半加器图形模块单元。仿真波形图波形分析全加器包括两个加数A和B、从低位

6、进位Ci、向高位进位Co、和值S,其真值表如下:ABCISCO0000000110010100110110010101011100111111波形图中,高电平对应真值表中的1,低电平对应真值表中的0,设置“End Time”为50s ,A、B、Ci三个输入的波形周期分别为1s、2s、4s,可对应出真值表中的8种输入状态。S、Co为输出,同样,根据高低电平对照真值表,可以判断输出无误。输出波形中的冒险可通过增加冗余项消除,但对于本实验来说并无大碍。3. 3-8线译码器本实验采用已有的3-8线译码器元件,再将表达式中四个最小项对应的输出管脚通过与非门连接即可。仿真波形图(二) 用VHDL设计与实现

7、组合逻辑电路在编写本次实验的代码时,我采用的是较为直观的CASE语句,罗列出所有可能。代码比较简单,故只列出代码,不再赘述。1. 数码管译码器VHDL代码详见实验(三)3中VHDL代码的e7_2.vhd文件。2. 8421码转余3码VHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY e7_3 ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END e7_3;ARCHITECTURE arch OF e7_3 ISBEGINPROCE

8、SS(a)BEGINCASE a ISWHEN 0000 = b b b b b b b b b b b b b b b b b b b b b b b b b b b b clk_in, clear=clear_in, clk_out=clktmp);u2: e7_8 PORT MAP (clk=clktmp, clear=clear_in, q=q_twmp);u3: e7_2 PORT MAP (a=q_twmp, CAT=CAT_out, b=b_out);END arch;e7_11.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE I

9、EEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_11 ISPORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;clk_out: OUT STD_LOGIC);end e7_11;ARCHITECTURE arch OF e7_11 ISSIGNAL tmp: INTEGER RANGE 0 TO 12499999;SIGNAL clktmp: STD_LOGIC;BEGINPROCESS (clear,clk)BEGINIF clear=1 THENtmp=0;clktmp=0;ELSIF clkevent AND clk=1 THE

10、NIF tmp=12499999 THENtmp=0;clktmp=NOT clktmp;ELSEtmp=tmp+1;END IF;END IF;END PROCESS;clk_out=clktmp;END arch;e7_8.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_8 ISPORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END e7_8;ARCHITE

11、CTURE arch OF e7_8 ISSIGNAL q_temp: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk)BEGINIF clear=1 THENq_temp=0000;ELSIF (clkevent AND clk=1) THENIF q_temp=1001 THENq_temp=0000;ELSEq_temp=q_temp+1;END IF;END IF;END PROCESS;q=q_temp;END arch;e7_2.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY e7_

12、2 ISPORT(a:IN STD_LOGIC_VECTOR (3 downto 0);b:OUT STD_LOGIC_VECTOR (6 downto 0);CAT:OUT STD_LOGIC_VECTOR (5 downto 0);end e7_2;ARCHITECTURE arch OF e7_2 ISBEGINPROCESS (a)BEGINCAT b b b b b b b b b b b =0000000;END CASE;END PROCESS;END arch;仿真波形图注:为便于仿真,分频器系数设置为4。波形分析从波形图中可以看出,当异步复位信号clear_in为0时,电路正

13、常工作,时钟信号clk_in先通过分频器实现降频,每通过4个时钟上升沿,输出一个降频后的时钟上升沿,相当于频率降低4倍。降频后的时钟信号进入计数器,每一个上升沿计数加1,从0到9循环计数,并以二进制数输出。最后通过数码管译码器,将二进制数转换为七段数码管,显示数字0到9循环。CAT_out控制开发板上的六个数码管显示哪一个,低电平有效。从波形图中看出,本实验选择的是3号数码管显示数字。当异步复位信号clear_in为1时,分频器、计数器异步复位,从波形图中可以看出,数码管立刻显示数字0。待异步复位信号clear_in回到0时,重新开始计数并显示。在实际实验中,由于利用的是开发板上50MHz的高

14、频时钟信号,所以分频系数设置为25M(25000000),即分频器中从0到12499999计数,分频后的时钟为2Hz。计数器、数码管译码器不作改动。数码管每0.5s显示一个数字,从0到9循环显示。(四) 用VHDL设计与实现相关电路本次实验的两个电路的VHDL代码我都编写了,实验时下载到开发板上的是第一个实验数码管动态扫描控制器,在报告中这两个实验我都会给出详细解释,但是重点放在第一个上。1. 数码管动态扫描控制器本实验主要由两个PROCESS部分组成,第一部分是分频器,第二部分是7段数码管显示器,中间用SIGNAL连接。当输入时钟频率较高时,每次扫描所用时间很短,人眼难以分辨,看起来就像是持

15、续亮着一样。如果将分频器的分频系数调高,如上一个实验调成25M,则数字会从左到右一个一个显示,间隔为0.5s。端口说明元件名端口输入/输出名称相关信息或功能主体clk输入端时钟信号开发板clk的频率为50MHzclear输入端异步复位信号异步复位清零p_out6,0输出端七段控制信号通过控制a到g的亮灭,显示不同的数字CAT_out5,0输出端六位控制信号控制六位数码管的显示分频器clk输入端时钟信号clear输入端异步复位信号异步复位使输出时钟置0clk_temp输出端时钟信号分频后的时钟信号数码管显示器clk输入端时钟信号每经过一个上升沿,CAT和part都发生变化(进入下一状态),其中C

16、AT的状态转移图如下b6,0输出端七段控制信号根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字CAT5,0输出端六位控制信号低电平有效,控制六位数码管的显示101111011111111110110111111011111101CAT的状态转移图(如果出现其他状态均转移到111110以保证进入循环)连接图p_out6,0数码管显示器分频器clkclearclkclearclk_temppart6,0CAT5,0CAT_out5,0clkVHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.A

17、LL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY number IS PORT(clk,clear: IN STD_LOGIC;p_out: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);CAT_out: OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END number;ARCHITECTURE arch OF number ISSIGNAL clk_temp: STD_LOGIC;SIGNAL count: INTEGER RANGE 0 to 5;SIGNAL part: STD_LOGIC_VECTOR(6 DOWNT

18、O 0);SIGNAL CAT: STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINu1:PROCESS(clk)BEGINIF(clear=1)THENcount=0;ELSIF(clkEVENT AND clk=1)THENIF count=5 THENcount=0;clk_temp= NOT clk_temp;ELSEcount CAT =011111; part CAT =101111; part CAT =110111; part CAT =111011; part CAT =111101; part CAT =111110; part CAT =111110;

19、part=1111110; -显示数字0END CASE;END IF;END PROCESS u2;CAT_out=CAT;p_outclk, clear=reset, clk_out=clk2);u2:PROCESS(clk2,reset) BEGINIF(reset=1)THEN number=0; ELSIF(clk2EVENT AND clk2=1)THEN IF(number=7)THEN number=0; ELSE number hang hang hang hang hang hang hang hang = 00000001;END CASE;END PROCESS u3;

20、 u4:PROCESS(number) BEGIN IF (number=0 OR number=2 OR number=4 OR number=6)THENred=11111111;green=00000000; ELSEred=00000000;green=11111111; END IF;END PROCESS u4; row=hang; colR=red;colG=green;END arch;e7_11.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_11 I

21、SPORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;clk_out: OUT STD_LOGIC);end e7_11;ARCHITECTURE arch OF e7_11 ISSIGNAL tmp: INTEGER RANGE 0 TO 1;SIGNAL clktmp: STD_LOGIC;BEGINPROCESS (clear,clk)BEGINIF clear=1 THENtmp=0;clktmp=0;ELSIF clkevent AND clk=1 THENIF tmp=1 THENtmp=0;clktmp=NOT clktmp;ELSEtmp=tm

22、p+1;END IF;END IF;END PROCESS;clk_out=clktmp;END arch;仿真波形图注:为便于仿真,分频器系数设置为4。波形分析从波形图中可以看出,该代码实现了行的循环显示,并且根据奇偶行数显示不同的颜色。reset是异步复位端,可以使行数回到第一行,重新开始扫描。三、 故障及问题分析1. 在半加器实验中,连接输入端INPUT和模块接口时容易虚连。为防止该问题,必须用线连接,待接口处出现小方框时方可松手。2. 在全加器实验中,使用生成的半加器符号文件需要提前放到全加器目录下,这样才能在元件列表中找到。3. 在使用VHDL语言时,输入输出的类型容易出错。比如:数

23、组类型需要标注出数组从几DOWNTO几;在使用INTEGER RANGE类型时,需要加上头文件IEEE.STD_LOGIC_UNSIGNED.ALL;要把所有的敏感信号都写到PROCESS()内。以上问题是我在编译代码的过程中出现过的问题及解决方法。4. 在分频器实验中,修改分频系数时,除了要修改PROCESS内的技术周期外,还要记得修改clktmp信号的取值范围,使二者保持一致。5. 在“组合电路实现数码管0到9循环显示”实验时,需要同时调用三个之前写好的vhd文件。之前写的计数器是clear为0时置零,而主体部分设置的是clear置1时置零,这就造成了仿真波形不正确的问题,并且不易排查出来

24、。以后在调用其他代码前要注意clear的清零电平是否一致。6. 在同一个PROCESS内变化的量应该用SIGNAL替代,之后在PROCESS外面将该信号赋值给变量并作为输出,不能在PROCESS中直接使用变量赋值。7. 在写输出信号时,如果信号为数组,后面要写成带的形式。例如定义信号row: OUT STD_LOGIC_VECTOR(7 DOWNTO 0),则输出信号名称为row7,0。8. 在设置复位信号clear时,要注意是同步复位还是异步复位,同步复位需要先判断上升下降沿再判断复位,异步复位需要先判断复位再判断上升下降沿。一般统一设置成异步信号。四、 总结和结论本学期的数字电路与逻辑设计

25、实验主要学习的是基于VHDL语言的EDA设计方法。首先学习了图形化设计方法,但是图形化设计方法对于设计功能复杂的电路时,需要先知道其逻辑关系,较为麻烦。之后重点学习了VHDL语言,该语言语法较为简单,并且可以使用IF、CASE等语句实现较为复杂的逻辑关系。对于大规模、逻辑较为复杂、使用多个元器件的电路,还可以使用模块化的设计方法,先设计出所需元器件,之后利用COMPONENT等连接语句和信号实现多文件之间的连接。也可以利用多个PROCESS实现多模块进程。通过本学期的学习,我学会了VHDL语言的语法及使用方法,学会了利用Quartus II软件设计和仿真简单的数字电路,了解了实验板的使用方法,并尝试将程序下载到实验板进行测试。对于较为复杂的电路,我学会了利用模块化的方法设计并实现电路。在实验过程中,最开始经常出现许多语法错误导致编译不通过,需要我耐心修改调试。之后通过分析波形也发现了许多逻辑错误,比如复位端的高低电平问题。分析波形是很重要的技能,通过对仿真波形的分析可以找到不易发现的逻辑错误,并且省去了下载到实验板验证的过程。最后一次实验较为复杂和综合,在编写代码的时候颇费了一番时间,最终还是在努力之下达到了预期的效果。我觉得本学期我除了学到了一门新的编写数字电路的语言外,更重要的是学到了处理一个复杂工程的方法,就是分模块处理,将一个大问题细化为各个模块,逐一

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922