-0-南京邮电大学通达学院课程设计报告设计类别:EDA-VHDL专业名称:通信工程班级学号:~~~~~~~~学生姓名:~~~~~基本题:数字时钟设计综合题:数码管学号滚动显示同小组成员:学号:~~~~~~~~~姓名:~~~~~~指导教师:王奇、梅中辉、周小燕、孔凡坤日期:2012年6月11日—6月22日-1-一、数字时钟1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验任务要求要求学生设计一个时钟,并输出到数码管显示时,分,秒。3.设计思路及VHDL代码首先要设置一个时钟信号,根据时钟信号的变化来进行时钟的变化,从秒的变化到时的变化条件是不同的。将时分秒各分为为十位和各位即六位数字显示时间来分析。原理图如下:模10计数器模6计数器模10计数器模6计数器模10计数器模3计数器数码管译码器数码管译码器数码管译码器数码管译码器数码管译码器数码管译码器进位进位进位进位进位秒针个位信号秒针十位信号分针个位信号分针十位信号时针个位信号时针十位信号清零清零清零清零清零-2-VHDL源程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityshizhongisport(clk:instd_logic;led1:outstd_logic_vector(6downto0);led2:outstd_logic_vector(6downto0);led3:outstd_logic_vector(6downto0);led4:outstd_logic_vector(6downto0);led5:outstd_logic_vector(6downto0);led6:outstd_logic_vector(6downto0));endshizhong;architecturemainofshizhongissignalhou1:std_logic_vector(3downto0);signalhou2:std_logic_vector(3downto0);signalmin1:std_logic_vector(3downto0);signalmin2:std_logic_vector(3downto0);signalsec1:std_logic_vector(3downto0);signalsec2:std_logic_vector(3downto0);begin-------------------------------------------------------------h110:process(clk,hou2,min1,min2,sec1,sec2)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou1=0000;elseif(hou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001))thenhou1=hou1+1;endif;endif;endif;endprocessh110;——————————时钟的十位---------------------------------------------------------------h220:process(clk,min1,min2,sec1,sec2,hou1)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101and-3-sec2=1001)thenhou2=0000;elseifhou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elseif((min1=0101andmin2=1001)and(sec1=0101andsec2=1001))thenhou2=hou2+1;--speak=clk;endif;endif;endif;endif;endprocessh220;——————————时钟的个位--------------------------------------------------------------m110:process(clk,min2,sec1,sec2)beginifclk'eventandclk='1'thenif(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenmin1=0000;elseif(min2=1001and(sec1=0101andsec2=1001))thenmin1=min1+1;endif;endif;endif;endprocessm110;——————————分钟的十位--------------------------------------------------------------m220:process(clk,sec1,sec2)beginifclk'eventandclk='1'thenifmin2=1001and(sec1=0101andsec2=1001)thenmin2=0000;elseif(sec1=0101andsec2=1001)thenmin2=min2+1;endif;endif;endif;endprocessm220;——————————分钟的个位--------------------------------------------------------------s110:process(clk)begin-4-ifclk'eventandclk='1'thenif(sec1=0101andsec2=1001)thensec1=0000;elseifsec2=1001thensec1=sec1+1;endif;endif;endif;endprocesss110;——————————秒钟的十位--------------------------------------------------------------s220:process(clk)beginifclk'eventandclk='1'thenifsec2=1001thensec2=0000;elsesec2=sec2+1;endif;endif;endprocesss220;——————————秒钟的个位---------------------------------------------------------------disp:process(hou1,hou2,min1,min2,sec1,sec2)begincasehou1iswhen0000=LED1=0111111;when0001=LED1=0000110;when0010=LED1=1011011;whenothers=LED1=1000000;endcase;casehou2iswhen0000=LED2=0111111;when0001=LED2=0000110;when0010=LED2=1011011;when0011=LED2=1001111;when0100=LED2=1100110;when0101=LED2=1101101;when0110=LED2=1111101;when0111=LED2=0000111;when1000=LED2=1111111;when1001=LED2=1101111;whenothers=LED2=1000000;endcase;casemin1is-5-when0000=LED3=0111111;when0001=LED3=0000110;when0010=LED3=1011011;when0011=LED3=1001111;when0100=LED3=1100110;when0101=LED3=1101101;whenothers=LED3=1000000;endcase;casemin2iswhen0000=LED4=0111111;when0001=LED4=0000110;when0010=LED4=1011011;when0011=LED4=1001111;when0100=LED4=1100110;when0101=LED4=1101101;when0110=LED4=1111101;when0111=LED4=0000111;when1000=LED4=1111111;when1001=LED4=1101111;whenothers=LED4=1000000;endcase;casesec1iswhen0000=LED5=0111111;when0001=LED5=0000110;when0010=LED5=1011011;when0011=LED5=1001111;when0100=LED5=1100110;when0101=LED5=1101101;whenothers=LED5=1000000;endcase;casesec2iswhen0000=LED6=0111111;when0001=LED6=0000110;when0010=LED6=1011011;when0011=LED6=1001111;when0100=LED6=1100110;when0101=LED6=1101101;when0110=LED6=1111101;when0111=LED6=0000111;when1000=LED6=1111111;when1001=LED6=1101111;whenothers=LED6=1000000;endcase;endprocessdisp;-6------------------------------------------------------------endmain;4.仿真波形及分析-7-通过波形可以看出,秒,分,时各位之间可以很好地完成进位功能,秒钟达最大值59进一并清零,分钟达最大值59进一并清零,时钟打最大值23进一并清零,数字时钟功能可以实现。5.实验总结与体会本实验为基础题的第一题,整体功能与实际联系较为紧密,因此各模块的分析和设计方面难度减少了很多,通过这个课题的设计,我们初步认识了VHDL语言,以及quartusII软件的具体应用方法,能够很直观地将电路模块化分析并使用vhdl语言设计出来。-8-二、数码管学号滚动显示1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验任务要求要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。3.设计思路及VHDL代码本题要求六位学号可以滚动显示,通过对其功能的理解,可以找出每个数字对应的数码管位置变化的规律。具体实现可以通过在每个脉冲上升沿触发学号中六个数字001908依次在六个数码管上输出,而在六个脉冲之后,六位学号还是依次输出,但是显示的数码管不同,首个数字在第二位数码管显示,以此类推,最后一位在第一位数码管显示。六个脉冲构成一个循环,以同上的方法类推显示即可实现学号的右移效果。显示的