当前位置:文档之家› 北邮-数电实验报告

北邮-数电实验报告

北邮-数电实验报告数字电路实验报告学院:信息与通信工程专业:信息工程班级: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 isport(clear,clk:in std_logic;clk_out:out std_logic);end div12;architecture struct of div12 issignal temp:integer range 0 to 5;signal clktmp:std_logic;beginprocess(clk,clear)beginif(clear='1') thenelsif clk'event and clk='1' thenif(temp=5) thentemp<=0;clktmp<=not clktmp;elsetemp<=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 isport(clk,clear:in std_logic;q:out std_logic_vector(3 downto 0));end count10;architecture struct of count10 issignal q_temp:std_logic_vector(3 downto 0);beginprocess(clk)beginif (clk'event and clk='1') thenif clear='1' thenq_temp<="0000";elsif q_temp="1001" thenq_temp<="0000";elseq_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 isport(a:in std_logic_vector(3 downto 0);b:out std_logic_vector(6 downto 0));end seg7_1;architecture arch of seg7_1 isbeginprocess(a)begincase a iswhen "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;连接图如下:②:仿真波形图③:波形图分析由仿真波形图可以看出,输入的时钟信号经过分频器后产生了周期为输入12倍的时钟信号,然后进行了上升沿有效的从0~9的10进制计数,每个计数数字都对应一个7位输出来控制数码管。

同时此电路还具有同步高电平复位的功能。

③故障及问题分析一开始发现仿真之后计数器输出和数码管输出都全是0,仔细检测后发现是因为没有使用总线进行连接,使用总线后解决了问题。

实验四:用VHDL设计与实现相关电路一:实验要求①:用VHDL实现6个数码管的串行扫描,让6个数码管显示不同的数字,仿真并验证功能,并下载到实验板测试。

②:实现数码管的滚动显示(选做)二:报告内容①:实验四模块端口说明②:VHDL代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shumaguan isport (clk:in std_logic;control_out:out std_logic_vector(5 downto 0); //管脚控制seg:out std_logic_vector(6 downto 0) // 数码管显示);end shumaguan;architecture a of shumaguan issignal control:std_logic_vector(5 downto 0);signal count:integer range 0 to 5;beginp1:process(clk) //P1实现计数功能beginif (clk'event and clk='1') thenif count=5 thencount<=0;elsecount<=count+1;end if;end if;end process;p2:process(count) //P2实现数码管管脚控制begincase count iswhen 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实现数码管数字显示begincase control iswhen"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;③:仿真波形图④:仿真波形分析通过仿真波形我们可以看出,在输入时钟的每个上升沿,由于内部的计数器功能,使得每一个计数对应着不同的管脚控制输出,而不同的管脚控制信号又对应着不同的数码管显示的信号,从而达到6个数码管显示不同数字的功能,如果输入时钟的频率够大,就能实现6个数字的同时显示。

相关主题