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管脚和信号线后,即可进行逻辑实现与综合。