EDA课程设计数字时钟闹钟.docx
《EDA课程设计数字时钟闹钟.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字时钟闹钟.docx(11页珍藏版)》请在冰豆网上搜索。
EDA课程设计数字时钟闹钟
课程设计说明书
题目:
闹钟
学院(系):
年级专业:
学号:
学生姓名:
指导教师:
教师职称:
目录
第1章摘要…………………………………………………………………………………1
第2章设计方案……………………………………………………………………………
2.1VHDL简介……………………………………………………………………………
2.2设计思路……………………………………………………………………………
第3章模块介绍……………………………………………………………………………
第4章VerilogHDL设计源程序…………………………………………………………
第5章波形仿真图…………………………………………………………………………
第6章管脚锁定及硬件连线………………………………………………………………
心得体会……………………………………………………………………………………17
参考文献……………………………………………………………………………………18
第一章摘要
在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。
在此次EDA课程,我的设计课题是闹钟,使用VHDL语言进行编程完成。
报告书主要由设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。
设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。
第二章设计方案
§2.1VHDL简介
数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。
EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
利用EDA技术进行电子系统的设计,具有以下几个特点:
①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了计算机辅助设计(ComputerAssistDesign,简称CAD)、计算机辅助工程设计(ComputerAssistEngineeringDesign,简称CAE)和电子设计自动化(ElectronicDesignAutomation,简称EDA)三个发展阶段。
常用的硬件描述语言有VHDL、Verilog、ABEL。
EDA技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。
它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。
前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了独立于工艺和厂家的系统级的设计工具。
EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。
目前应用比较广泛的硬件描述语言就是VerilogHDL。
2VerilogHDL简介
VerilogHDL是目前大规模集成电路设计中最具代表性、使用最广泛的硬件描述语言之一。
具有如下特点:
(1)能够在不同的抽象层次上,如系统级、行为级、RTL级、门级和开关级,对设计系统进行精确而简练的描述。
(2)能够在每个抽象层次的描述上对设计进行仿真验证,及时发现及时发现可能存在的错误,缩短设计周期,并保存整个设计过程的正确性。
(3)由于代码描述与工艺过程实现无关,便于设计标准化,提高设计的可重用性。
如国有C语言的编程基础经验,只需很短的时间就能学会和掌握VerilogHDL,因此,VerilogHDL可以作为学习HDL设计方法的入门和基础。
§2.2设计思路
一、设计要求
1、设计简易的一分钟闹钟;
2、可手动输入定时时间(0~59s),如30s;
3、两个动态数码管上跟踪显示时间的变化:
如30,29,28……到了指定时间蜂鸣器发出5s的提示音;
4、采用2个动态数码管显示时间;
5、用蜂鸣器发出提示音;
6、拨码开关设置定时时间。
二、设计思路
根据上述的设计要求,整个系统大致包括如下几个组成部分:
它包括以下几个组成部分:
1)显示屏,由2个七段动态数码管组成,用于显示当前设置的闹钟时间并进行跟踪显示;2)6个拨码开关,用于输入闹钟时间;3)复位键,确定新的闹钟时间设置,或显示已设置的闹钟时间;4)蜂鸣器,在当前时钟时间与闹钟时间相同时,发出报警声。
第三章模块介绍
一、计时模块
此模块共有6个拨码开关作为输入信号,当开关无输入时,都处于低电平状态,D5、D4、D3、D2、D1和D0是并行数据输入端,CRN是异步复位输入端,LDN是预置控制输入端。
当开关有输入时,会产生一个六位的二进制输出信号num,此信号表示动作的开关序号,它是作为动态显示模块的输入信号。
二、数码显示模块
这个模块有两个输入信号和两个输出信号。
其中一个是信号输入模块的输出num作为输入,另外一个是时钟输入端,作为扫描数码管的频率信号,采用1024HZ的中高频信号。
输出信号为SS0、SS1、SS2,是动态数码管的片选段。
三、报警模块
报警模块共有两个输入信号ET和CLK1,一个输出信号COUT。
当从信号输入模块检测到有开关输入时,ET信号已置1,CLK上升沿到来时,程序将COUT置1,蜂鸣器发出时间为10s的报警信号,时间到达后,跳出循环,蜂鸣器停止报警。
四、顶层模块
顶层模块的作用是将各个模块组合到一起,从而实现最终的功能。
其输入即为各个模块的输入,一个时钟信号,还有6个拨码开关的输入,其输出为数码管显示和报警器。
第四章VerilogHDL设计源程序
一、计时模块
modulecounter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);
inputLDN,D5,D4,D3,D2,D1,D0,CLK,CRN;
output[5:
0]Q;
outputOC;
regOC;
reg[5:
0]Q;
reg[5:
0]Q_TEMP;
reg[3:
0]NUM;
always@(posedgeCLKornegedgeCRN)
begin
if(~CRN)Q_TEMP=6'b000000;
elseif(~LDN)
begin
Q_TEMP={D5,D4,D3,D2,D1,D0};
NUM=4'b0000;
end
elseif(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)
begin
if(NUM<4'b1000&&NUM>=4'b0000)
NUM=NUM+1;
elseNUM=4'b0001;
if(NUM==4'b1000)
Q_TEMP=Q_TEMP-1;
end
elseQ_TEMP=6'b000000;
end
always
begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;
elseOC=1'b0;
Q=Q_TEMP;
end
endmodule
二、数码显示模块
moduleshowtime(A,Q,CLKM,SS0,SS1,SS2);
input[5:
0]A;
inputCLKM;
output[6:
0]Q;
outputSS0,SS1,SS2;
reg[6:
0]Q;
regSS0,SS1,SS2;
regM;
reg[5:
0]B;
reg[5:
0]C;
always@(posedgeCLKM)
begin
M=M+1;
end
always
begin
if(A<='b001001)
begin
B=A;
C=0;
end
elseif(A>'b001001&&A<='b10011)
begin
B=A-10;
C=1;
end
elseif(A>'b10011&&A<='b11101)
begin
B=A-20;
C=2;
end
elseif(A>'b11101&&A<='b100111)
begin
B=A-30;
C=3;
end
elseif(A>'b100111&&A<='b110001)
begin
B=A-40;
C=4;
end
elseif(A>'b110001&&A<='b111011)
begin
B=A-50;
C=5;
end
elseif(A=='b111100)
begin
B=0;
C=6;
end
if(M=='b1)
begin
SS0=1;SS1=0;SS2=0;
case(B)
'b000000:
Q='b0111111;
'b000001:
Q='b0000110;
'b000010:
Q='b1011011;
'b000011:
Q='b1001111;
'b000100:
Q='b1100110;
'b000101:
Q='b1101101;
'b000110:
Q='b1111101;
'b000111:
Q='b0000111;
'b001000:
Q='b1111111;
'b001001:
Q='b1101111;
default:
Q='b0111111;
endcase
end
elseif(M=='b0)
begin
SS0=0;SS1=0;SS2=0;
case(C)
'b000000:
Q='b0111111;
'b000001:
Q='b0000110;
'b000010:
Q='b1011011;
'b000011:
Q='b1001111;
'b000100:
Q='b1100110;
'b000101:
Q='b1101101;
'b000110:
Q='b1111101;
default:
Q='b0111111;
endcase
end
end
endmodule
三、报警模块
modulespeaker(CLK1,ET,COUT);
inputCLK1,ET;
outputCOUT;
regCOUT;
reg[5:
0]TEMP;
always@(posedgeCLK1)
begin
if(~ET)TEMP=6'b000000;
elseif(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
elseTEMP=6'b101001;
end
always
begin
if(TEMP<6'b101001&&TEMP!
=6'b000000)COUT=1'b1;
elseCO