北邮-数电实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北邮-数电实验报告
数字电路实验报告
学院:信息与通信工程
专业:信息工程
班级:2013211125
学号:2013210681
姓名:袁普
②:仿真波形图以及分析
波形图:
波形分析:通过分析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_unsigned.all;
entity div12 is
port(
clear,clk:in std_logic;
clk_out:out std_logic
);
end div12;
architecture struct of div12 is
signal temp:integer range 0 to 5;
signal clktmp:std_logic;
begin
process(clk,clear)
begin
if(clear='1') then
elsif clk'event and clk='1' then
if(temp=5) then
temp<=0;
clktmp<=not clktmp;
else
temp<=temp+1;
end if;
end if;
end process;
clk_out<=clktmp;
end;
模块二:count10是一个有高电平复位功能的8421十进制计数器,将分频器的输出作为时钟信号接为计数器的输入,即可在输出端得到计数的下一状态的输出。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count10 is
port(
clk,clear:in std_logic;
q:out std_logic_vector(3 downto 0)
);
end count10;
architecture struct of count10 is
signal q_temp:std_logic_vector(3 downto 0);
begin
process(clk)
begin
if (clk'event and clk='1') then
if clear='1' then
q_temp<="0000";
elsif q_temp="1001" then
q_temp<="0000";
else
q_temp<=q_temp+1;
end if;
end if;
end process;
end;
模块三:seg7_1是数码管译码器,将计数器的4位输出接为其输入信号,即可在输出端得到对应的十进制数的数码管信号。
li brary ieee;
use ieee.std_logic_1164.all;
entity seg7_1 is
port(
a:in std_logic_vector(3 downto 0);
b:out std_logic_vector(6 downto 0)
);
end seg7_1;
architecture arch of seg7_1 is
begin
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;
连接图如下: