北邮数字电路及逻辑设计实验上 综合实验报告_第1页
北邮数字电路及逻辑设计实验上 综合实验报告_第2页
北邮数字电路及逻辑设计实验上 综合实验报告_第3页
北邮数字电路及逻辑设计实验上 综合实验报告_第4页
北邮数字电路及逻辑设计实验上 综合实验报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路与逻辑设计实验综合实验报告学院:信息与通信工程学院班级:2013211124姓名:曹爽学号:2013210640班内序号:052015年6月2日目 录一、实验题目和任务要求3(一)Quartus II原理图输入法设计与实现3(二)用VHDL设计与实现组合逻辑电路3(三)用VHDL设计与实现时序逻辑电路3(四)用VHDL设计与实现相关电路4二、实验内容、原理图、VHDL代码和仿真波形分析4(一)Quartus II原理图输入法设计与实现41.半加器42.全加器53.3-8线译码器6(二)用VHDL设计与实现组合逻辑电路61.数码管译码器62.8421码转余3码63.奇校验器7(三)用VH

2、DL设计与实现时序逻辑电路81.8421十进制计数器82.分频器83.组合电路实现数码管0到9循环显示8(四)用VHDL设计与实现相关电路131.数码管动态扫描控制器132.点阵行扫描控制器16三、故障及问题分析20四、总结和结论21五、参考文献21一、 实验题目和任务要求(一) Quartus II原理图输入法设计与实现实验题目Quartus II原理图输入法设计与实现任务要求1)用逻辑门设计一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。2) 用生成的半加器模块和逻辑门设计与实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二级管显示输出信号。3

3、) 用3-8线译码器和逻辑门设计和实现函数,仿真验证其功能。(二) 用VHDL设计与实现组合逻辑电路实验题目1)数码管译码器2)8421码转余3码3)奇校验器任务要求1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个1时,输出为1,否则输出为0,仿真验证其功能,并下载到实验板测试。要求用拨码开

4、关设定输入信号,发光二极管显示输出信号。(三) 用VHDL设计与实现时序逻辑电路实验题目1)8421十进制计数器2)分频器3)组合电路实现数码管0到9循环显示任务要求1)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。要求用按键设定输入信号,发光二极管显示输出信号。2)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。要求在Quartus II平台上设计程序并仿真验证设计。3)讲(1)、(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。(四) 用VHDL设计与实现相关电路实验题目(二选一)1)数码管动

5、态扫描控制器2)点阵行扫描控制器任务要求1)用VHDL语言设计实现一个数码管动态扫描控制器,要求显示班号后3位和班内序号。仿真验证其功能,并下载到实验板测试。2)用VHDL语言设计实现一个8×8点阵行扫描控制器,要求从上至下逐行循环点亮点阵(红色或绿色均可),每行点亮时间为0.5秒。3)用VHDL语言设计实现一个8×8点阵行扫描控制器,要求从上至下逐行点亮点阵,第一行为红色,第二行为绿色,依次类推,直至点亮所有行,然后全部熄灭,再重新从第一行开始。二、 实验内容、原理图、VHDL代码和仿真波形分析(一) Quartus II原理图输入法设计与实现1. 半加器原理图:2. 全

6、加器原理图其中halfadder元件是之前生成的半加器图形模块单元。仿真波形图波形分析全加器包括两个加数A和B、从低位进位Ci、向高位进位Co、和值S,其真值表如下:ABCISCO0000000110010100110110010101011100111111波形图中,高电平对应真值表中的1,低电平对应真值表中的0,设置“End Time”为50s ,A、B、Ci三个输入的波形周期分别为1s、2s、4s,可对应出真值表中的8种输入状态。S、Co为输出,同样,根据高低电平对照真值表,可以判断输出无误。输出波形中的冒险可通过增加冗余项消除,但对于本实验来说并无大碍。3. 3-8线译码器本实验采用已

7、有的3-8线译码器元件,再将表达式中四个最小项对应的输出管脚通过与非门连接即可。仿真波形图(二) 用VHDL设计与实现组合逻辑电路在编写本次实验的代码时,我采用的是较为直观的CASE语句,罗列出所有可能。代码比较简单,故只列出代码,不再赘述。1. 数码管译码器VHDL代码详见实验(三)3中VHDL代码的e7_2.vhd文件。2. 8421码转余3码VHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY e7_3 ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:OUT STD_LOGIC_VECTOR(3

8、DOWNTO 0) );END e7_3;ARCHITECTURE arch OF e7_3 ISBEGINPROCESS(a)BEGINCASE a ISWHEN "0000" => b <="0011"WHEN "0001" => b <="0100"WHEN "0010" => b <="0101"WHEN "0011" => b <="0110"WHEN "0100&qu

9、ot; => b <="0111"WHEN "0101" => b <="1000"WHEN "0110" => b <="1001"WHEN "0111" => b <="1010"WHEN "1000" => b <="1011"WHEN "1001" => b <="1100"WHEN OTHERS

10、=> b <="0000"END CASE;END PROCESS;END arch;3. 奇校验器VHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY e7_4 ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:OUT STD_LOGIC );END e7_4;ARCHITECTURE arch OF e7_4 ISBEGINPROCESS(a)BEGINCASE a ISWHEN "0000" => b <='0'WHEN

11、 "0001" => b <='1'WHEN "0010" => b <='1'WHEN "0011" => b <='0'WHEN "0100" => b <='1'WHEN "0101" => b <='0'WHEN "0110" => b <='0'WHEN "0111" =>

12、b <='1'WHEN "1000" => b <='1'WHEN "1001" => b <='0'WHEN "1010" => b <='0'WHEN "1011" => b <='1'WHEN "1100" => b <='0'WHEN "1101" => b <='1'WHEN &

13、quot;1110" => b <='1'WHEN "1111" => b <='0'WHEN OTHERS => b <='0'END CASE;END PROCESS;END arch;(三) 用VHDL设计与实现时序逻辑电路1. 8421十进制计数器本实验代码我采用IF语句实现,详细代码可见第三个实验中VHDL代码的e7_11.vhd文件。2. 分频器本实验代码依然采用IF语句实现,详细代码可见第三个实验中VHDL代码的e7_8.vhd文件。原题目中要求的分频系数为12,而在

14、第三个实验中,由于使用的是开发板上的高频时钟,故将代码中的分频系数调高,并将清零电平做了调整,以满足第三个实验的要求。3. 组合电路实现数码管0到9循环显示本实验由分频器、计数器和数码管译码器连接而成,这三个元件分别有各自的VHDL代码文件。在主体中,我利用COMPONENT语句调用这三个文件,在它们之间通过信号SIGNAL连接,从而实现模块化编程。实验时,实验板上的高频时钟先通过分频器降频,之后用计数器计数,再通过数码管译码器译码并显示在数码管上,实现从0到9循环显示的效果。端口说明元件名端口输入/输出名称相关信息或功能主体clk_in输入端外部时钟信号开发板clk的频率为50MHzclea

15、r_in输入端异步复位信号异步复位清零b_out6,0输出端七段控制信号通过控制a到g的亮灭,显示不同的数字CAT_out5,0输出端六位控制信号控制六位数码管的显示分频器clk输入端时钟信号clear输入端异步复位信号异步复位使clk_out置0clk_out输出端时钟信号分频后的时钟信号计数器clk输入端时钟信号clear输入端异步复位信号异步复位使q3,0置0000q3,0输出端四位数组信号输出二进制计数结果数码管译码器a3,0输入端四位数组信号输入二进制数b6,0输出端七段控制信号根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字CAT5,0输出端六位控制信号低电平有效,控制六位

16、数码管的显示连接图b_out6,0数码管译码器a3,0分频器clk_inclear_inclkclearclk_outclkclearq3,0b6,0CAT5,0CAT_out5,0计数器VHDL代码主体:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_8and11 ISPORT(clk_in: IN STD_LOGIC;clear_in: IN STD_LOGIC;b_out:OUT STD_LOGIC_VECTOR (6 downto 0);CAT_out:OUT STD

17、_LOGIC_VECTOR (5 downto 0);end e7_8and11;ARCHITECTURE arch OF e7_8and11 ISCOMPONENT e7_2PORT(a:IN STD_LOGIC_VECTOR (3 downto 0);b:OUT STD_LOGIC_VECTOR (6 downto 0);CAT:OUT STD_LOGIC_VECTOR (5 downto 0);END COMPONENT;COMPONENT e7_8PORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 D

18、OWNTO 0);END COMPONENT;COMPONENT e7_11PORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;clk_out: OUT STD_LOGIC);END COMPONENT;SIGNAL q_twmp: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL clktmp: STD_LOGIC;BEGINu1: e7_11 PORT MAP (clk=>clk_in, clear=>clear_in, clk_out=>clktmp);u2: e7_8 PORT MAP (clk=>clkt

19、mp, clear=>clear_in, q=>q_twmp);u3: e7_2 PORT MAP (a=>q_twmp, CAT=>CAT_out, b=>b_out);END arch;e7_11.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_11 ISPORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;clk_out: OUT STD_LOGIC);end e7_11;ARCHITECTURE ar

20、ch OF e7_11 ISSIGNAL tmp: INTEGER RANGE 0 TO 12499999;SIGNAL clktmp: STD_LOGIC;BEGINPROCESS (clear,clk)BEGINIF clear='1' THENtmp<=0;clktmp<='0'ELSIF clk'event AND clk='1' THENIF tmp=12499999 THENtmp<=0;clktmp<=NOT clktmp;ELSEtmp<=tmp+1;END IF;END IF;END PRO

21、CESS;clk_out<=clktmp;END arch;e7_8.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_8 ISPORT(clk: IN STD_LOGIC;clear: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END e7_8;ARCHITECTURE arch OF e7_8 ISSIGNAL q_temp: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCES

22、S(clk)BEGINIF clear='1' THENq_temp<="0000"ELSIF (clk'event AND clk='1') THENIF q_temp="1001" THENq_temp<="0000"ELSEq_temp<=q_temp+1;END IF;END IF;END PROCESS;q<=q_temp;END arch;e7_2.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY e7_2

23、 ISPORT(a:IN STD_LOGIC_VECTOR (3 downto 0);b:OUT STD_LOGIC_VECTOR (6 downto 0);CAT:OUT STD_LOGIC_VECTOR (5 downto 0);end e7_2;ARCHITECTURE arch OF e7_2 ISBEGINPROCESS (a)BEGINCAT <= "110111"CASE a ISWHEN "0000" => b <="1111110"WHEN "0001" => b <

24、="0110000"WHEN "0010" => b <="1101101"WHEN "0011" => b <="1111001"WHEN "0100" => b <="0110011"WHEN "0101" => b <="1011011"WHEN "0110" => b <="1011111"WHEN "

25、;0111" => b <="1110000"WHEN "1000" => b <="1111111"WHEN "1001" => b <="1111011"WHEN OTHERS => b <="0000000"END CASE;END PROCESS;END arch;仿真波形图注:为便于仿真,分频器系数设置为4。波形分析从波形图中可以看出,当异步复位信号clear_in为0时,电路正常工作,时钟信号clk_in先

26、通过分频器实现降频,每通过4个时钟上升沿,输出一个降频后的时钟上升沿,相当于频率降低4倍。降频后的时钟信号进入计数器,每一个上升沿计数加1,从0到9循环计数,并以二进制数输出。最后通过数码管译码器,将二进制数转换为七段数码管,显示数字0到9循环。CAT_out控制开发板上的六个数码管显示哪一个,低电平有效。从波形图中看出,本实验选择的是3号数码管显示数字。当异步复位信号clear_in为1时,分频器、计数器异步复位,从波形图中可以看出,数码管立刻显示数字0。待异步复位信号clear_in回到0时,重新开始计数并显示。在实际实验中,由于利用的是开发板上50MHz的高频时钟信号,所以分频系数设置为

27、25M(25000000),即分频器中从0到12499999计数,分频后的时钟为2Hz。计数器、数码管译码器不作改动。数码管每0.5s显示一个数字,从0到9循环显示。(四) 用VHDL设计与实现相关电路本次实验的两个电路的VHDL代码我都编写了,实验时下载到开发板上的是第一个实验数码管动态扫描控制器,在报告中这两个实验我都会给出详细解释,但是重点放在第一个上。1. 数码管动态扫描控制器本实验主要由两个PROCESS部分组成,第一部分是分频器,第二部分是7段数码管显示器,中间用SIGNAL连接。当输入时钟频率较高时,每次扫描所用时间很短,人眼难以分辨,看起来就像是持续亮着一样。如果将分频器的分频

28、系数调高,如上一个实验调成25M,则数字会从左到右一个一个显示,间隔为0.5s。端口说明元件名端口输入/输出名称相关信息或功能主体clk输入端时钟信号开发板clk的频率为50MHzclear输入端异步复位信号异步复位清零p_out6,0输出端七段控制信号通过控制a到g的亮灭,显示不同的数字CAT_out5,0输出端六位控制信号控制六位数码管的显示分频器clk输入端时钟信号clear输入端异步复位信号异步复位使输出时钟置0clk_temp输出端时钟信号分频后的时钟信号数码管显示器clk输入端时钟信号每经过一个上升沿,CAT和part都发生变化(进入下一状态),其中CAT的状态转移图如下b6,0输

29、出端七段控制信号根据输入的二进制数,通过控制a到g的亮灭,显示不同的数字CAT5,0输出端六位控制信号低电平有效,控制六位数码管的显示101111011111111110110111111011111101CAT的状态转移图(如果出现其他状态均转移到111110以保证进入循环)连接图p_out6,0数码管显示器分频器clkclearclkclearclk_temppart6,0CAT5,0CAT_out5,0clkVHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD

30、_LOGIC_ARITH.ALL;ENTITY number IS PORT(clk,clear: IN STD_LOGIC;p_out: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);CAT_out: OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END number;ARCHITECTURE arch OF number ISSIGNAL clk_temp: STD_LOGIC;SIGNAL count: INTEGER RANGE 0 to 5;SIGNAL part: STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL CAT

31、: STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINu1:PROCESS(clk)BEGINIF(clear='1')THENcount<=0;ELSIF(clk'EVENT AND clk='1')THENIF count=5 THENcount<=0;clk_temp<= NOT clk_temp;ELSEcount<=count+1;END IF;END IF;END PROCESS u1;u2:PROCESS(clk_temp)BEGINIF(clk_temp'EVENT AND clk_tem

32、p='1')THENCASE CAT ISWHEN"101111"=> CAT <="011111" part<="1011011" -显示数字5WHEN"110111"=> CAT <="101111" part<="1111110" -显示数字0WHEN"111011"=> CAT <="110111" part<="0000001" -显示符

33、号-WHEN"111101"=> CAT <="111011" part<="0110011" -显示数字4WHEN"111110"=> CAT <="111101" part<="1101101" -显示数字2WHEN"011111"=> CAT <="111110" part<="0110000" -显示数字1WHEN OTHERS => CAT <

34、;="111110" part<="1111110" -显示数字0END CASE;END IF;END PROCESS u2;CAT_out<=CAT;p_out<=part;END arch;仿真波形图注:为便于仿真,分频器系数设置为4。波形分析从波形图中可以看出,当异步复位信号clear为0时,电路正常工作,时钟信号clk先通过分频器实现降频,每通过4个时钟上升沿,输出一个降频后的时钟上升沿,相当于频率降低4倍。降频后的时钟信号进入数码管显示器。CAT控制开发板上的六个数码管显示哪一个,低电平有效,part则控制七段数码管分别显示

35、1、2、4、-、0、5这六个字符。为了让电路可以自启动,当part为其他状态时,均设置下一状态为111110。外部输出CAT_out对应CAT,p_out对应p。从波形图中可以看出,每经过一个分频后的时钟上升沿,CAT和part的状态改变一次,并显示相应的字符,以实现滚动扫描。当异步复位信号clear为1时,分频器异步复位,分频器中的计数立刻置0,从波形图中可以看出,CAT和part分别保持不变,即六位和七段数码管均保持原状态,直至clear为0,继续循环扫描。在实际实验中,由于利用的是开发板上50MHz的高频时钟信号,扫描一次所需时间极短,肉眼无法识别,看起来好像一直显示“124-05”字样

36、。如果将分频系数调高,则可以看到六位数码管一个一个亮灭。例如将分频系数调成25M,则会看到每个字符显示的时间间隔为0.5s。2. 点阵行扫描控制器这个实验我实现的是奇数行亮绿灯,偶数行亮红灯,从上到下依次按行扫描,每次只亮一行,可能和题目要求并不完全相符(题目中要求逐行点亮),所以主要上交的是第一个实验,第二个实验仅为练习。时钟信号先通过分频器分频,之后用来控制row的状态转移。row从0到7循环。之后再用IF语句控制颜色即可。端口说明元件名端口输入/输出名称相关信息或功能主体clk输入端时钟信号开发板clk的频率为50MHzreset输入端异步复位信号异步复位清零row7,0输出端行控制信号

37、控制不同行的亮灭colR7,0输出端红色控制信号控制LED灯显示红色colG7,0输出端绿色控制信号控制LED灯显示绿色分频器clk输入端时钟信号clear输入端异步复位信号异步复位使输出时钟置0clk_out输出端时钟信号分频后的时钟信号VHDL代码主体:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LED IS PORT( clk,reset:IN STD_LOGIC; row:OUT STD_LOGIC_VECTOR(

38、7 DOWNTO 0); colR:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);colG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END LED; ARCHITECTURE arch OF LED IS SIGNAL number:INTEGER RANGE 0 TO 7; SIGNAL hang:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL red:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL green:STD_LOGIC_VECTOR(7 DOWNTO 0);COMPONENT e7_1

39、1PORT (clk: IN STD_LOGIC;clear: IN STD_LOGIC;clk_out: OUT STD_LOGIC);END COMPONENT;SIGNAL clk2:STD_LOGIC;BEGIN u1: e7_11 PORT MAP (clk=>clk, clear=>reset, clk_out=>clk2);u2:PROCESS(clk2,reset) BEGINIF(reset='1')THEN number<=0; ELSIF(clk2'EVENT AND clk2='1')THEN IF(num

40、ber=7)THEN number<=0; ELSE number<=number+1;END IF;END IF;END PROCESS u2; u3:PROCESS(number) BEGIN CASE number ISWHEN 0 => hang <= "10000000"WHEN 1 => hang <= "01000000"WHEN 2 => hang <= "00100000"WHEN 3 => hang <= "00010000"WHEN

41、4 => hang <= "00001000"WHEN 5 => hang <= "00000100"WHEN 6 => hang <= "00000010"WHEN 7 => hang <= "00000001"END CASE;END PROCESS u3; u4:PROCESS(number) BEGIN IF (number=0 OR number=2 OR number=4 OR number=6)THENred<="11111111&quo

42、t;green<="00000000" ELSEred<="00000000"green<="11111111" END IF;END PROCESS u4; row<=hang; colR<=red;colG<=green;END arch;e7_11.vhd:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY e7_11 ISPORT(clk: IN STD_LOGIC;clear: IN

43、 STD_LOGIC;clk_out: OUT STD_LOGIC);end e7_11;ARCHITECTURE arch OF e7_11 ISSIGNAL tmp: INTEGER RANGE 0 TO 1;SIGNAL clktmp: STD_LOGIC;BEGINPROCESS (clear,clk)BEGINIF clear='1' THENtmp<=0;clktmp<='0'ELSIF clk'event AND clk='1' THENIF tmp=1 THENtmp<=0;clktmp<=NOT clktmp;ELSEtmp<=tmp+1;END IF;END IF;END PROCESS;clk_out<=clktmp;END arch;仿真波形图注:为便于仿真,分频器系数设置为4。波形分析从波形图中可以看出,该代码实现了行的循环显示,并且根据奇偶行数显示不同的颜色。reset是异步复位端,可以使行数回到第一行,重新开始扫描。三、 故障及问题分析1. 在半加器实验中,连接输入端INPUT和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论