北邮数字电路期末 [北邮-数电实验报告]
时间:2020-08-31 20:41:04 来源:天一资源网 本文已影响 人
北邮-数电实验报告
数字电路实验报告
学院:信息与通信工程 专业:信息工程
班级:2013211125
学号:2013210681
姓名:袁普
实验一:QuartusII原理图输入法设计与实现
-:实验要求
:用逻辑门设计实现一个半加器,仿真验证其功能,并生成新 的半加器图形模块单元。
:用实验一生成的半加器模块和逻辑门设计实现一个全加器, 仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信 号,发光二极管显示输出信号。
:用3线一8线译码器和逻辑门设计实现函数F,仿真验证其 功能,下载到实验板测试。要求用拨码开关设定输入信号,发光二 极管显示输出信号。
—:报告内容
:实验一(2)的原理图
用两个已经生成的半加器图形模块单元和一个双输入或门即可实现
全加器
:仿真波形图以及分析
波形图:
波形分析:通过分析ab ci三个输入在8中不同组合下的输出,发 现与全加器的真值表吻合,说明实现了全加器的逻辑功能。同时看见 波形中出现了毛刺(冒险),这也与事实一致。
:故障及问题分析
第一次在做全加器的时候发现找不到已经生成的半加器模块, 后 来发现是因为在建立工程时这两个项目没有建在同一个文件夹里, 在 调用的时候就找不到。后来我将全加器工程建在同一个文件夹里解决 了此问题。
实验二:用VHDL设计和实现组合逻辑电路
一:实验要求
:用VHDL设计一个8421码转换为格雷码的代码转换器, 仿真验证其功能。
:用VHDL设计一个4位二进制奇校验器,要求在为奇数个
1时输出为1,偶数个1时输出为0,仿真验证其功能。
:用VHDL设计一个数码管译码器,仿真验证其功能,下载 到实验板测试,要求用拨码开关设定输入信号,数码管显示输出信号, 并且只使一个数码管有显示,其余为熄灭状态。
二:故障及问题分析
在刚开始实现让一个数码管显示的时候,我本来准备再设置 6
个输入和输出,通过实验板上的拨码来输入信息分别控制不同的数码 管的的开闭状态,但是后来发现这样效率很低而且实验板上的拨码开 关数量根本不够。在老师的提醒下,我最终在 VHDL里直接增加了
一个向量输出” 011111 ”来直接控制cat0~5六个管脚,从而达到 了实验的要求。
实验三:用 VHDL设计和实现时序逻辑电路
一:实验要求
:用VHDL语言设计实现一个8421十进制计数器,要求有 咼电平复位功能,仿真验证其功能。
:用VHDL语言设计实现一个分频系数为12,输出为占空比 50%方波的分频器,有高电平复位功能,仿真验证其功能。
:将(1), (2 )和数码管译码器三个电路进行连接,仿真验 证其功能,并下载到实验板进行测试,要求第三个数码管显示数字。
二:报告内容
实验三(3)模块端口说明及模块代码
模块一:div12为一个有高电平复位功能的分频系数为 12的分
屏器,其输出是一个占空比50%的方波。此模块输入连接一个时钟 输入,即可在输出端得到一个周期更大的方波输出
library ieee;
use ieee.std logic 1164.all;
use ieee.std_logic_ un sig ned.all; en tity div12 is
port(
clear,clk:in std」o gic; clk out:out std logic );
end div12; architecture struct of div12 is
sig nal temp:i nteger range 0 to 5;
signal clktmp:std」ogic;
begi n
process(clk,clear)
beg in
if(clear='1') then tempv=O;
elsif clk'event and clk='1' then
if(temp=5) then
temp<=0;
clktmp<=not clktmp;
else
tempv=temp+1;
end if; end if;
end process;
clk_out<=clktmp;
end;
模块二:cou nt10是一个有高电平复位功能的8421十进制计
数器,将分频器的输出作为时钟信号接为计数器的输入, 即可在输出
端得到计数的下一状态的输出。
library ieee;
use ieee.std logic 1164.all;
use ieee.std_logic_ un sig ned.all;
en tity coun t10 is
port(
clk,clear:in std_logic;
q:out std_logic_vector(3 dow nto 0) );一一
end coun t10; architecture struct of coun t10 is
signal q_temp:std」ogic_vector(3 downto 0); begi n
process(clk)
begi n
if (clk'eve nt and clk='1') then if clear='1' the n
q_temp<="0000"; elsif q temp="1001" then
q_temp<="0000"; else
q_tempv=q_temp+1;
end if;
end if;
end process;
qv=q_temp;
end;
模块三:seg7_1是数码管译码器,将计数器的4位输出接为其
输入信号,即可在输出端得到对应的十进制数的数码管信号。
li brary ieee;
use ieee.std_logic_1164.all; en tity seg7_1 is
port(
a:i n std_logic_vector(3 dow nto 0); b:out std」o gic_vector(6 dow nto 0)
);
end seg7 1;
architecture arch of seg7 1 is
begi n
process(a)
case a is
when "0000"=>b<="1111110";
whe n "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;
连接图如下:
②:仿真波形图
③:波形图分析
由仿真波形图可以看出,输入的时钟信号经过分频器后产生了周
期为输入12倍的时钟信号,然后进行了上升沿有效的从 0~9的10
进制计数,每个计数数字都对应一个7位输出来控制数码管。同时此 电路还具有同步高电平复位的功能
③故障及问题分析
开始发现仿真之后计数器输出和数码管输出都全是 0,仔细检
测后发现是因为没有使用总线进行连接,使用总线后解决了问题
实验四:用VHDL设计与实现相关电路
一:实验要求
6个数码管显示:用VHDL实现6
6个数码管显示
:实现数码管的滚动显示(选做)
二:报告内容
①:实验四模块端口说明②:VHDL代码
①:实验四模块端口说明
②:VHDL代码
library ieee;
use ieee.std _lo gic_1164.all;
use ieee.std_logic_ un sig ned.all;
en tity shumagua n is
port (
clk:in std_logic;
con trol_out:out std」o gic_vector(5 dow nto 0); // 管脚控
制
seg:out std_logic_vector(6 downto 0) // 数码管显
示
);
end shumagua n; architecture a of shumaguan is signal control:std_logic_vector(5 downto 0); signal count:integer range 0 to 5;
begin
p1:process(clk) //P1 实现计数功能
begin
if (clk'event and clk='1') then
if count=5 then count<=0; else count<=count+1; end if;
end if;
end process;
p2:process(count) //P2 实现数码管管脚控制 begin
case count is
when 0=>control<="011111";
when 1=>control<="101111";
when 2=>control<="110111";
when 3=>control<="111011";
when 4=>control<="111101";
when 5=>control<="111110";
end case;
end process;
control_out<=control;
p3:process(control) //P3 实现数码管数字显示 begin case control is
when"011111"=>seg<="1111110";
when"101111"=>seg<="0110000";
when"110111"=>seg<="1101101";
when"111011"=>seg<="1111001";
when"111101"=>seg<="0110011";
when"111110"=>seg<="1011011";
when others=>seg<="0000000";
end case;
end process;
end;
:仿真波形图
Simulation V.a/eforrrs
Simulation V.a/eforrrs
通过仿真波形我们可以看出,在输入时钟的每个上升沿,由于内 部的计数器功能,使得每一个计数对应着不同的管脚控制输出, 而不 同的管脚控制信号又对应着不同的数码管显示的信号,从而达到 6
个数码管显示不同数字的功能,如果输入时钟的频率够大,就能实现 6个数字的同时显示。
⑤:故障以及问题分析
在进行下实验板测试的时候,我发现我下载完后总是会使得点阵 发光,而且频率高的时候小数点会亮,然而其他同学都没有遇到。我 在检查完代码与仿真后发现并没有问题,最后只有换了一个实验板, 之后结果就对了,我想可能是实验板出了问题。
总结与结论
本学期的数字电路实验课让我受益匪浅。
它让我熟悉了 quartus 这款新的软件,也让我学会了 VHDL这门新的语言,同时这门实验 课让我在数字电路课程上学习到的理论知识有了实际的作用。 实验促
进了我对数字电路的理解,在不断的编写和调试代码的过程中, 我的 逻辑思维也有了极大的提高,这对我以后的学习都会起到巨大的作 用。我从实验课过程中还学习到了重要的一点就是代码一定要自己写 一遍,就算是书上有的也要自己打一遍来加深理解。
学习语言重点就 是自己的实际操作,光是看是不行的。这就是我对这学期数字电路实 验课的总体感受,希望下学期的实验自己可以做的更好。
相关关键词: 北邮 北邮本科生信息门户 北邮信息门户网站登录 北邮教务系统登录入口 北邮信息门户