北邮数电实验报告-信息————————————————————————————————作者:————————————————————————————————日期:数字电路与逻辑设计实验姓名***学院信息与通信工程学院专业信息工程班级***学号****班内序号***实验一一、实验名称和实验任务要求1.实验内容:QuartusII原理图输入法设计与实现。
2.实验目的:(1)熟悉用QuartusII原理图输入法进行电路设计和仿真。
(2)掌握QuartusII图形模块单元的生成与调用。
(3)熟悉实验板的使用。
3.实验任务要求:(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图像模块。
(2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板上测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用3线—8线译码器(74LS138)和逻辑门实现函数F=(/)(/)(/)+(/)(/)+(/)(/)+,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
二、原理图半加器模块和逻辑门设计实现的全加器:三、仿真波形图及分析电路实现了全加器的功能。
全加器是实现两个1位二进制数及低位来的进位相加求得和数及向高位进位的逻辑电路。
由其原理可得逻辑表达式:sum=ain⊕bin⊕cincout = (ain⊕bin)cin + ain*bin。
列出真值表:输入输出ain bin cin cout sum0 0 0 0 00 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 1仿真波形对比真值表,可以看出波形图与理论值完全符合。
四、故障及问题分析1、问题:按照逻辑表达式连接了全加器电路后,仿真波形很乱。
解决方法:思考后知道了应该把输入信号依次设成2的n次方,这样的仿真波形清楚容易分析。
2、问题:把代码下载到板子上的过程中,进行到37%的时候停了,等了2分钟也没继续下载。
解决方法:再次重连USB尝试下载,手紧握着接线口,下载成功了,分析可能是接线口接触不好。
实验二一、实验名称和实验任务要求1.实验内容:用VHDL设计与实现组合逻辑电路。
2.实验目的:(1)熟悉用VHDL语言设计组合逻辑电路的方法。
(2)熟悉用QuartusII文本输入法进行电路设计。
3.实验任务要求:(1)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出‘0’,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,7段数码管显示输出信号。
二、VHDL代码1.奇校验器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jijiaoyanqi ISPORT( A:STD_LOGIC;B:STD_LOGIC;C:STD_LOGIC;D:STD_LOGIC;F:OUT STD_LOGIC);END jijiaoyanqi;ARCHITECTURE one OF jijiaoyanqi ISSIGNAL n1,n2 : STD_LOGIC;BEGINn1<=A XOR B;n2<=n1 XOR C;F<=n2 XOR D; --异或,A⊕B⊕C⊕DEND one;2.8421码转余3码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY basizhuanyu3 ISPORT( A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END basizhuanyu3;ARCHITECTURE zhuanyu3 OF basizhuanyu3 ISBEGINPROCESS(A)BEGINCASE A ISWHEN"0000"=> B<="0011";WHEN"0001"=> B<="0100";WHEN"0010"=> B<="0101";WHEN"0011"=> B<="0110";WHEN"0100"=> B<="0111";WHEN"0101"=> B<="1000";WHEN"0110"=> B<="1001";WHEN"0111"=> B<="1010";WHEN"1000"=> B<="1011";WHEN"1001"=> B<="1100";WHEN OTHERS=> B<="ZZZZ";END CASE;END PROCESS;END zhuanyu3;3.数码管译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shumaguanyimaqi ISPORT( 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 shumaguanyimaqi;ARCHITECTURE shuma OF shumaguanyimaqi ISBEGINPROCESS(A)BEGINC<="011111";CASE A ISWHEN"0000"=> B<="1111110";--0WHEN"0001"=> B<="0110000";--1WHEN"0010"=> B<="1101101";--2WHEN"0011"=> B<="1111001";--3WHEN"0100"=> B<="0110011";--4WHEN"0101"=> B<="1011011";--5WHEN"0110"=> B<="1011111";--6WHEN"0111"=> B<="1110000";--7WHEN"1000"=> B<="1111111";--8WHEN"1001"=> B<="1111011";--9WHEN OTHERS=> B<="ZZZZZZZ";END CASE;END PROCESS;END shuma;三、故障及问题分析1、问题:代码写好以后编译出现错误,Error (10568): VHDL error atjijiaoyanqi.vhd(17): can't write to interface object "partout" of mode IN,由于报错指到了第17行F<=n2 XOR D; 导致我开始的时候没意识到这是哪里的错误。
解决方法:在百度查了以后发现是F:OUT STD_LOGIC); 这句我写成了F:IN STD_LOGIC);以后要注意少犯这些马虎的错误。
2、问题:把代码下载到板子上的过程中,再次出现了第一节课出现的下载停止的问题,再次尝试后也没有下载成功,第三次接线的时候等了好久,Hardware Setup窗口也没有显示有硬件接入。
解决方法:换了一台电脑尝试然后成功了,我觉得可能是两个原因,一是我反复操作导致软件反应时间长,二是我本来用的电脑接口连接不好。
实验三一、实验名称和实验任务要求1.实验内容:用VHDL设计与实现时序逻辑电路。
2.实验目的:(1)熟悉用VHDL语言设计时序逻辑电路的方法。
(2)熟悉用QuartusII文本输入法进行电路设计。
3.实验任务要求:(1)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。
要求在QuartusII平台上设计程序并仿真验证设计。
(2)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号。
(3)将(1)、(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。
二、模块端口说明及连接图1.整个电路输入端:时钟信号CLK,复位键CLR。
2.分频器及计数器的端口连接:复位键CLR作为分频器复位键CLR1、8421十进制计数器复位键CLR2;时钟信号CLK作为分频器的时钟信号CLK1,分频器输出CLK_OUT1作为8421十进制计数器的时钟信号CLK2;计数器的输出Q[0,1,2,3]作为数码管译码器的输入a [0,1,2,3]。
3.整个电路输出端:b[0,1,2,3,4,5,6],分别对应7段数码管;c[0,1,2,3,4,5],分别对应6个数码管译码器。
三、VHDL代码(1)8421十进制计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ZY8421shijinzhi ISPORT(CLK2,CLR2:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ZY8421shijinzhi;ARCHITECTURE behave OF ZY8421shijinzhi ISSIGNAL Q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK2,CLR2)BEGINIF CLR2 = '1' THEN Q_temp <="0000";ELSIF CLK2'EVENT AND CLK2 = '1' THENIF Q_temp = "1001" THEN Q_temp <="0000";ELSE Q_temp <=Q_temp+1;END IF;END IF;END PROCESS;Q <=Q_temp;END behave;(2) 分频器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY div_50M ISPORT(CLK1,CLR1:IN STD_LOGIC;CLK_OUT1:OUT STD_LOGIC);END div_50M;ARCHITECTURE behave OF div_50M ISSIGNAL temp:INTEGER RANGE 0 TO 24999999;SIGNAL clkout:STD_LOGIC;BEGINPROCESS(CLK1,CLR1)BEGINIF CLR1 = '1' THEN temp <=0;ELSIF CLK1'EVENT AND CLK1 = '1' THENIF temp = 24999999 THEN temp <=0;clkout <=NOT clkout;ELSE temp <=temp+1;END IF;END IF;END PROCESS ;CLK_OUT1 <=clkout;END behave;(3) 将分频器、8421十进制计数器和数码管译码器3个电路的连接电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY function3 ISPORT(CLK,CLR:IN STD_LOGIC;b: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);c: OUT STD_LOGIC_VECTOR(5 DOWNTO 0));END function3 ;ARCHITECTURE a1 OF function3 ISCOMPONENT div_50M --调用分频器和计数器两个元件PORT(CLK1,CLR1:IN STD_LOGIC;CLK_OUT1:OUT STD_LOGIC);END COMPONENT;COMPONENT ZY8421shijinzhiPORT(CLK2,CLR2:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNAL a : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL clkin : STD_LOGIC;BEGINu1:div_50M PORT MAP (CLK1=>CLK,CLR1=>CLR,CLK_OUT1=>clkin);u2: ZY8421shijinzhi PORT MAP (CLK2=>clkin,CLR2=>CLR,Q=>a);PROCESS(a)BEGINc<=" 110111"; --左数第三个数码管亮CASE a ISWHEN "0000" => b<="1111110"; --0WHEN "0001" => b<="0110000"; --1WHEN "0010" => b<="1101101"; --2WHEN "0011" => b<="1111001"; --3WHEN "0100" => b<="0110011"; --4WHEN "0101" => b<="1011011"; --5WHEN "0110" => b<="1011111"; --6WHEN "0111" => b<="1110000"; --7WHEN "1000" => b<="1111111"; --8WHEN "1001" => b<="1111011"; --9WHEN OTHERS => b<="1111110"; --0END CASE;END PROCESS;END;四、仿真波形图及分析分析仿真波形图可知,c为110111,左数第三个数码管亮;数码管译码器循环显示0到9这10个数字;复位信号CLK是高电平有效,从波形中看出CLR=1时输出b=1111110,数码管显示数字0。