数字电路时钟设计verilog语言编写--

电子线路设计与测试 实验报告

一、实验名称

多功能数字钟设计

二、 实验目的

1.掌握可编程逻辑器件的应用开发技术

——设计输入、编译、仿真和器件编程;

2.熟悉一种EDA软件使用; 3.掌握Verilog设计方法;

4.掌握分模块分层次的设计方法; 5.用Verilog完成一个多功能数字钟设计。

三、 设计内容及要求

1.基本功能

? 具有“秒”、“分”、“时”计时功能,小时按24小时制计时。 ? 具有校时功能,能对“分”和“小时”进行调整。 2.扩展功能

? 仿广播电台正点报时。在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。 ? 定时控制,其时间为23时58分。 3.选做内容

? 任意时刻闹钟(闹钟时间可设置)。 ? 自动报整点时数。

四.系统框图与说明

数字钟框图

1.数字钟电路系统由主体电路和扩展电路两大部分所组成。

2.秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。 3.计数器的输出经译码器送显示器。

五. 设计步骤

1.列写多功能数字钟设计--层次结构图

多功能数字钟顶层模块(clock_main.v)整点报时模块(baoshi.v)校时模块分频模块(fre_divider.v)固定时刻闹钟设定任意时刻闹钟(setclock.v)小时计数器(counter24.v)分钟计数器(counter60.v)秒钟计数器(counter60.v)6进制计数器(counter6.v)10进制计数器(counter10.v)6进制计数器(counter6.v)10进制计数器(counter10.v)

2.拟定数字钟的组成框图,在Max+Plus II软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路; 3.设计各单元电路并进行仿真;

4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合; 5.下载到Cyclone II FPGA实验平台上,实际测试数字钟的逻辑功能。

六.Verilog代码

//24进制时钟, 具有计时、校时、仿广播电台正点报时、固定时刻定时,任意时刻闹钟等功能 module

clock_main(LED_Hour,LED_Minute,LED_Second,Alarm,CP_1KHz,Jsh_Min_key,Jsh_Hour_key,Set_Hour_key,Set_Min_key,Show,Ctrl_Bell); );

counter10 U3(.Q(Minute[3:0]),.nCR(Vdd),.EN(MinL_EN),.CP(Out_1Hz)); counter6 U4(.Q(Minute[7:4]),.nCR(Vdd),.EN(MinH_EN),.CP(Out_1Hz)); counter24 U5(Hour[7:4],Hour[3:0],Vdd,Hour_EN,Out_1Hz);

input CP_1KHz;//定义输入时钟

input Jsh_Min_key,Jsh_Hour_key;//定义校时按键 input Set_Hour_key,Set_Min_key;//定义闹钟定时按键 input Show; //定义显示模式按键 input Ctrl_Bell;//定义闹钟铃声控制

output [7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量 wire [7:0]LED_Hour,LED_Minute,LED_Second;//定义输出变量类型 wire [7:0]Hour,Minute,Second; wire [7:0]Set_Hour_Out,Set_Min_Out;

wire Out_1Hz,Out_500Hz;//定义分频模块输出变量类型

reg Alarm_Ring,Alarm_Clock_1KHz;//定义仿广播电台报时和固定时刻定时铃声 output Alarm;//蜂鸣器输入 supply1Vdd;

wire Alarm_Clock;//任意时刻闹钟闹铃

wire MinL_EN,MinH_EN,Hour_EN;//定义中间变量类型

fre_dividerFD0(Out_1Hz,Out_500Hz,Vdd,Vdd,CP_1KHz);

counter10 U1(.Q(Second[3:0]),.nCR(Vdd),.EN(Vdd),.CP(Out_1Hz)); counter6

//分频 //正常计时

U2(.Q(Second[7:4]),.nCR(Vdd),.EN(Second[3:0]==4'h9),.CP(Out_1Hz));

assignMinL_EN=Jsh_Min_key?Vdd:(Second==8'h59); assign

MinH_EN=(Jsh_Min_key&&(Minute[3:0]==4'h9))||(Minute[3:0]==4'h9)&&(Second==8'h59

assign Hour_EN=Jsh_Hour_key?Vdd:((Minute==8'h59)&&(Second==8'h59));

//仿广播电台正点报时

baoshi BS1(Alarm_Ring,Minute,Second,Out_500Hz,CP_1KHz);//在59分51秒、

53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点 //固定时刻定时

always @(Hour or Minute or Second)//所定时刻为23时58分,蜂鸣器发出低音1KHz

if (Hour==8'h23&Minute==8'h58)

case (Second)

8'h00, 8'h01, 8'h02, 8'h03,

8'h04:Alarm_Clock_1KHz=CP_1KHz;

信号,持续5秒钟

default Alarm_Clock_1KHz=1'b0; endcase

else Alarm_Clock_1KHz=1'b0; setclock

//任意时刻闹钟

SC1(Alarm_Clock,Set_Hour_Out,Set_Min_Out,Hour,Minute,Second,Set_Hour_key,Set_Min_key,CP_1KHz,Out_500Hz,Out_1Hz,Ctrl_Bell); //响铃

//**********分频模块,获得500Hz低频1Hz时钟源********** modulefre_divider(Out_1Hz,Out_500Hz,nCR,EN,In_1KHz); input nCR,EN,In_1KHz; output Out_1Hz,Out_500Hz; supply1Vdd;

wire Out_1Hz,Out_500Hz;

wire [11:0]Qn;//定义中间变量类型 wire EN1,EN2;

counter10 DU1(.Q(Qn[3:0]),.nCR(nCR),.EN(EN),.CP(In_1KHz)); counter10 DU2(.Q(Qn[7:4]),.nCR(nCR),.EN(EN1),.CP(In_1KHz)); counter10 DU3(.Q(Qn[11:8]),.nCR(nCR),.EN(EN2),.CP(In_1KHz)); assign EN1= (Qn[3:0]==4'd9);

assign EN2= (Qn[7:4]==4'd9)&(Qn[3:0]==4'd9); assign Out_500Hz=Qn[0]; assign Out_1Hz=Qn[11];

endmodule

//****************模10计数器******************

assign Alarm=Alarm_Ring||Alarm_Clock_1KHz||Alarm_Clock;

Choice_2to1 CU1(LED_Hour,Show,Set_Hour_Out,Hour);//Show为高电平时,显示Choice_2to1 CU2(LED_Minute,Show,Set_Min_Out,Minute); Choice_2to1 CU3(LED_Second,Show,8'h00,Second);

//数码管显示选择

闹钟所定时刻;为低电平时,显示正常计时

Endmodule

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4