EDA设计 数字钟
- 格式:doc
- 大小:272.50 KB
- 文档页数:13
1 摘要
利用MAX+PLUSⅡ软件,设计一个能进行时、分、秒计时的24制多功能数字钟,使其具有定时与闹钟功能,且能在设定的时间发出闹铃音,能非常方便地对时、分、秒进行手动调节以校准时间,每逢整点,产生报时音效,并在实验板上成功下载,验证后满足要求。
关键词:EDA ; MAX+PLUS2 ; 数字钟 ;
0 引 言
随着科学技术的发展,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。在EDA技术中,最为瞩目的是以现代电子技术为特征的逻辑设计仿真测试技术,该技术的出现,使电子系统设计发生了质的变化,设计速度快、体积小、重量轻、功耗小的集成电路已成为趋势。本文利用EDA技术,选用ALTERA公司的CPLD器件EPF10K10LC84-4和软件MAX+PLUS2,设计了一个多功能数字钟,提高了系统的整体性能和可靠性,并通过编译、仿真、下载,经验证后已满足要求。
1 多功能数字钟设计任务
1.1 数字钟设计要求
(1)、设计一个能显示1/10秒、秒、分、时的12小时数字钟。
(2)、熟练掌握各种计数器的使用。
(3)、能用计数器构成十进制、六十进制、十二进制等所需进制 2 的计数器。
(4)、能用低位的进位输出构成高位的计数脉冲。
1.2 设计思路 此设计可分为主控电路、计数器模块和扫描显示三大模块。
1.2.1 主控电路模块
主控电路状态用表格显示,如下表所列:
模
式 选
择 秒、时、分、
计数器脉
冲
输出状态 备
注
Reset Reset1 A B Turn LD-h LD-m LD-alert
0 X X X X X 0 0 0 系统复位
1 X 0 0 X CLK 0 0 0 系统计时
1 X 0 1 0 Change=
分计数器加1 0 1 0
手动 3 1 X 0 1 1 Change=
时计数器加1 1 0 0
校时
1 1 1 0 0 Change=
分计数器加1 0 1 1 设置闹钟
1 1 1 0 1 Change=
时计数器加1 1 0 1
1 0 X X X X 0 0 0 关闭闹钟
1.2.2 计数器模块
计数器模块中,分钟和秒用带进位位的60进制功能模块,小时用不带进位位的24进制功能模块(如果考虑到日期的问题,在24进制模块加进位输出即可实现)。计数器模块均用Verilog HDL语言编写,实现计数逻辑功能。
1.2.3 扫描显示模块
扫描显示模块利用Verilog HDL语言编写实现,把三个计数器输出的时、分、秒从左至右依次显示在留个数码管上。具体见设计部分。
1.3 数字钟硬件系统示意图
4 2 多功能数字钟的设计实现
2.1 主控电路设计
将主控电路分为输入逻辑控制和输出逻辑控制两部分。
2.1.1 输入逻辑控制
用原理图输入法,通过使用各种门电路,按照数字钟主控电路状态表中的逻辑关系,设计并实现具有表格中各种特殊功能的主控电路,设计原理图如下:
2.1.2 输出逻辑控制
(1)闹铃比较电路
通过8个2输入同或门、一个8输入与门构成逻辑关系,实现比较功能,电路原理图如下: 5
若生成简洁的符号体,使用更方便,且电路图更清晰明了。经编译、仿真、下载,满足要求,然后通过Create Default Symbol,生成符号体,如下左图:
(2)整点报时比较电路 通过门电路来实现,原理图如下: 6
生成符号体如上右图:
(3)数码管输出比较电路
系统计时和闹铃设置状态均需使用扫描显示电路,该功能由两组扫描显示电路来实现。因此,需要通过2个2输入与门和1个2输入或门电路对两组扫描显示电路进行控制,完整实现扫描显示功能,生成的符号体如下: 7 2.2 计数器部分
EDA工具的重要特征之一是支持多种输入方式,如原理图输入方式、状态机输入方式、HDL高级语言输入方式等等。MAX+PLUSⅡ软件平台对以上输入方式都能很好地支持。此部分的设计即通过Verilog
HDL输入方式来实现。
2.2.1 24进制计数器
用Verilog HDL实现时,代码如下:
module hour(qh,ql,clk,reset);
output[3:0]qh;
output[3:0]ql;
reg [3:0]qh;
reg [3:0]ql;
input clk,reset;
always @(posedge clk or negedge reset)
begin
if(!reset){qh,ql}<=0;
else begin
if({qh,ql}==8'h23){qh,ql}<=0;
else begin
if(ql==9)begin ql<=0;
qh<=qh+1;
end
else
ql<=ql+1;
end
end
end
endmodule
输入完毕,经编译、仿真、下载,满足要求。然后通过Create
Default Symbol,生成符号体如下:
8 2.2.2 带进位位的60进制计数器
用Verilog HDL实现时,代码如下:
module minute(qh,ql,rco,clk,reset);
output[3:0]qh;
output[3:0]ql
output rco;
reg [3:0]qh;
reg [3:0]ql;
reg rco;
input clk,reset;
always @(posedge clk or negedge reset)
begin
if(~reset){qh,ql}<=0;
else
begin
if({qh,ql}==8'h59)
begin {qh,ql}<=0;rco<=1;
end
else
begin
if(ql==9)
begin ql<=0; qh<=qh+1;
end
else
begin ql<=ql+1;rco<=0;end
end
end
end
endmodule
输入完毕,经编译、仿真、下载,满足要求。然后通过Create
Default Symbol,生成符号体如下:
同理,秒计时模块生成符号体如下: 9
2.2.3 不带进位位的60进制计数器
用于闹钟的计数器,不需要进位位,另创建符号体如下:
2.3 扫描显示模块
用Verilog HDL实现时,代码如下:
module
sel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4 ,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);
input clk;
input[3:0]in1,in2,in3,in4,in5,in6,in7,in8;
output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg [3:0] temp,flag;
always@(posedge clk)
begin
{ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000000;
flag=flag+1;
case(flag)
0:begin temp=in1;ms1=1;end
1:begin temp=in2;ms2=1;end
2:begin temp=in3;ms3=1;end
3:begin temp=in4;ms4=1;end
4:begin temp=in5;ms5=1;end
5:begin temp=in6;ms6=1;end
6:begin temp=in7;ms7=1;end
7:begin temp=in8;ms8=1;end
endcase
case(temp)
4'd0:{a,b,c,d,e,f,g}=7'b1111110; 10 4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
default:{a,b,c,d,e,f,g}=7'b1111110;
endcase
end
endmodule
输入完毕,经编译、仿真、下载,满足要求。然后通过Create
Default Symbol,生成符号体如下:
至此,三大模块设计工作基本完成,只需将各模块之间按连线规则严格进行连接,必要时添加相应的门电路,定义好相应的I/O管脚和信号线后,即可进行逻辑实现与综合。