数电实验报告2014210178张居凯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路与逻辑设计实验实验报告
学科类别:通信工程
姓名张居凯
学院信息与通信工程学院
专业通信工程
班级 2014211107
学号 2014210178
班内序号 07
指导教师高英实验一 Quartus II原理图输入法设计
一、实验目的:
(1)熟悉Quartus II原理图输入法进行电路设计和仿真;
(2)掌握Quartus II 图形模块单元的生成与调用;
(3)熟悉实验板的使用。
二、实验所用器材:
(1)计算机;
(2)数字系统与逻辑设计实验开发板。
三、实验任务要求
(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
(2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
四、设计思路和过程
(1)半加器的设计
半加器电路是指对两个输入数据位进行加法,输出结果位和进位,不产生进位输入的加法器电路。
是实现两个一位二进制数的加法运算电路。
数据输入AI被加数、BI加数,数据输出SO 和数(半加和)、进位C0。
半加器的设计过程如下:
1.列出真值表
半加器的真值表如下表所示。
表中两个输入是加数A0和B0,输出有一个是和S0,另一个是进位C0。
半加器真值表
AO BO SO CO
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
2.根据真值表写出输出逻辑表达式
该电路有两个输出端,由卡诺图化简可得电路的逻辑表达式为:SO=AI⊕BI;CO=AB;
所以,可以用一个两输入与门和一个两输入异或门实现。
(2)全加器的实现
全加器相当于半加器加入了一个低进位CI,设计流程与半加器
类似。
1、列出真值表
全加器真值表如下表所示,其中AI和BI为输入的两个做加运算的数,低位进位为CI,输出和为SO。
高位进位为CO。
全加器真值表
AI BI CI SO CO
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1
2、类似由卡诺图化简可得逻辑表达式为:
SO=AI⊕BI⊕CI;CO=AB+(AI⊕BI)CI
故在半加器逻辑图中再加入一个异或门和一个两输入与门和两输入或门即可实现全加器。
五、实验原理图
1、半加器实验原理图
半加器实验原理图
2、全加器实验原理图
全加器实验原理图
六、仿真波形图及仿真波形分析
1、半加器仿真波形图
半加器仿真波形图
2、全加器仿真波形图
半加器仿真波形图
实验二:用VHDL设计和实现组合逻辑电
路
一、实验目的:
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉用Quartus II文本输入法进行电路设计;
(3)熟悉不同的编码及其之间的转换。
二、实验所用器材:
(1)计算机;
(2)数字系统与逻辑设计实验开发板。
三、实验任务要求
(1):用VHDL设计一个8421码转换为格雷码的代码转换器,仿真验证其功能。
(2):用VHDL设计一个4位二进制奇校验器,要求在为奇数个1时输出为1,偶数个1时输出为0,仿真验证其功能。
(3):用VHDL设计一个数码管译码器,仿真验证其功能,下载到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号,
并且只使一个数码管有显示,其余为熄灭状态。
四、VHDL代码
(1)8421码转换为格雷码
(2)4位二进制奇校验器
(3)数码管译码器
五、实验原理图
实验原理图
六、仿真波形图及仿真波形分析
仿真波形图(1)
仿真波形图(2)
仿真波形图(3)
实验三用VHDL设计与实现时序逻辑电路
一、实验目的:
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉计数器的设计与应用;
(3)熟悉分频器的设计方法;
(4)熟悉用Quartus II文本输入法进行电路设计。
二、实验所用器材:
(1)计算机;
(2)数字系统与逻辑设计实验开发板。
三、实验任务要求
(1)用VHDL语言设计一个带异步复位的8421码十进制计数器,仿真验证其功能。
(2)用VHDL语言设计一个分频系数为10,分频输出信号占空比为50%的分频器。
要求在Quartus II平台上设计程序并仿真验证程序。
(3)将(1)、(2)和数码管译码器进行链接,并下载到实验板显示计数结果。
四、VHDL代码
(1)8421计数器
library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count_1 is
port (
clk,rst : in STD_logic;
q : out STD_LOGIC_VECTOR(3 DOWNTO 0));
end count1;
architecture a of count_1 is
signal count : STD_LOGIC_VECTOR(3 DOWNTO 0); begin
process(clk,rst)
begin
if rst = '1' then
count<="0000";
elsif (clk'event and clk = '1') then if (count = "1001") then count<="0000";
else
count<=count+1;
end if;
end if;
end process;
q<=count;
end;
(2)分频器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY div_12 IS PORT(
clk : IN STD_LOGIC;
clk_out : OUT STD_LOGIC);
END div_12;
ARCHITECTURE a OF div_12 IS
SIGNAL tmp : INTEGER RANGE 0 TO 4; SIGNAL clktmp : STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF clk'event AND clk = '1' THEN IF tmp = 4 THEN
tmp <=0;clktmp<= NOT clktmp; ELSE tmp <=tmp+1;
END IF;
END PROCESS;
clk_out<=clktmp;
END;
(3)数码管译码器
library ieee;
use ieee.std_logic_1164.all;
entity Vhdl1 is
port(
a:in std_logic_vector(3 downto 0); b:out std_logic_vector(6 downto 0); c:out std_logic_vector(5 downto 0)); end Vhdl1;
architecture Vhdl1_arch of Vhdl1 is
c<="110111";
process(a)
begin
case a is when"0000"=>b<="1111110"; when"0001"=>b<="0110000"; when"0010"=>b<="1101101"; when"0011"=>b<="1111001"; when"0100"=>b<="0110011"; when"0101"=>b<="1011011"; when"0110"=>b<="1011111"; when"0111"=>b<="1110000"; when"1000"=>b<="1111111"; when"1001"=>b<="1111011";
when others =>b<="0000000";
end case;
end process;
end;
五、实验原理图
实验原理图
Div_12为分频器,count_1为8421计数器,clear为异步复位端。
Vhdl1为数码管译码器。
Clock为时钟输入端,clk_out为分频后时钟输出端,q[3..0]为8421计数器信号输出端,a[3..0]为数码管译码器信号输入端,b[6..0]、c[5..0]为数码管译码器信号输出端。
六、仿真波形图及仿真波形分析
仿真波形图(1)
仿真波形图(2)
由图(1)可知电路异步复位功能正常,当clear出现高电平时,数码管立即显示0,并在clear高电平消失后重新从0开始计数。
在计数到9之后又重新由0开始计数。
图(1)及图(2)显示了完整的计数周期。
C表示了计数所利用的数码管的编号。
由仿真图可以看出,电路功能正常。
实验四用VHDL设计与实现相关电路
一、实验目的:
(1)掌握VHDL语言的语法规范,掌握时序电路描述方法;
(2)掌握多个数码管动态扫描显示的原理及设计方法;
二、实验所用器材:
(1)计算机;
(2)数字系统与逻辑设计实验开发板。
三、实验任务要求
用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试。
四、VHDL代码
ENTITY shumaguan IS
PORT(
clk:IN STD_LOGIC;
b:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); c:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END ENTITY;
ARCHITECTURE jingtaixianshi OF shumaguan IS SIGNAL jishu:INTEGER RANGE 0 TO 5:=0; BEGIN
p1:PROCESS(clk)
BEGIN
IF(clk'event AND clk='1') THEN IF(jishu=5) THEN
time<=0;
ELSE
jishu<=jishu+1;
END IF;
END IF;
END PROCESS p1;
p2:PROCESS(jishu)
BEGIN
CASE jishu IS
WHEN 0=> b<="1111110";c<="011111"; WHEN 1=> b<="0110000";c<="101111"; WHEN 2=> b<="1101101";c<="110111"; WHEN 3=> b<="1111001";c<="111011";
WHEN 4=> b<="0110011";c<="111101"; WHEN 5=> b<="1011011";c<="111110"; END CASE;
END PROCESS p2;
END jingtaixianshi;
五、仿真波形图及仿真波形分析
仿真波形图
电路实现了对6段数码管的译码输出,并通过所设计的串行扫描控制,对6个7段数码管扫描输出,要求6个数码管分别显示0、1、2、3、4、5,当控制信号为高电平时,对应数码管点亮,否则熄灭。
当时钟频率满足时视觉暂留特性的要求时,可以看到6个数码管同时分别显示0、1、2、3、4、5.仿真波形经检验正确。
问题及故障分析
1.在实验一中,出现的错误大致有两类。
(1)刚开始做实验时,对软件不熟悉,在建立工程,保存原理图、仿真图的过程中出现了许多低级错误。
比如元件调用时原理图没有在同一文件夹下,仿真波形图没有与工程名相同等,
造成了后续操作过程中的不便,在多次操作和询问同学老师后得到了解决。
(2)下载时还出现了建立工程时芯片选择与实验板不一致,无法匹配;以及管脚锁定存在错误的问题。
实验一相比后续实验相对简单,大多数问题在熟悉软件操作后都得到了解决。
2.在之后的VHDL语言设计实验中,大多数错误有三种:
(1)最核心的环节就是VHDL代码的编写。
在课前编好的代码可能到了实验室编译时又出现错误,需要仔细逐句分析并找出故障。
(2)另外出现问题较多的地方就是管脚锁定过程中要注意多位输入的顺序。
如果不慎连接反了,实板上可能就会出现奇怪的显示,得不到想要看到的结果。
(4)还有就是在仿真波形图之前要确定好合适的截止时间,既要观察到关键的现象和一周期内完整的运行过程,还不能设置太长的截止时间,否则会使仿真时间大大延长,需要等待的时间较长。
总结和结论
通过为期四周的数电实验课学习,我熟悉了Quartus II软件的几类基本操作和VHDL语音的基本规则。
学习了原理图和VHDL 文本两种电路设计方案的设计流程。
自己动手实现了分频器、译码器、计数器的设计,对之前理论课上学习的知识点有了更加形象和深刻的理解。
在实验过程中我还体验到代码一定要自己写一遍,写代码的过程就是加深理解的过程。
学习语言需要通过亲手操作来了解它的语法规则。
以上是我在这学期数字电路实验课学习过程中的总体感受,希望在下学期的实验设计自己可以完成的更好。