课题:多功能数字钟的设计使用verilog HDL语言

设计任务

使用硬件描述语言,在CPLD/FPGA上实现一个多功能数字钟。

设计要求
  除按键、LED、扬声器、时钟信号外,整个数字钟的功能要求在一块芯片上实现。
  
具有时,分,秒,计数显示功能,以24小时循环计时;
具有时间清零功能;
具有小时、分钟和秒钟调整功能(个位和十位分开调或合起来调)。
具有闹钟功能,能预设闹钟时间,精确到秒。
整个数字钟只设一个时钟输入端口,所需不同频率信号在内部分频实现。(LED扫描频率设为50Hz以上)

时间安排

整体方案制定,模块划分(1天)

HDL程序设计及调试(4天)

检验及编写设计报告(1天)

四、参考资料

   1、《EDA技术实用教程》 潘松 电子科技大学出版社;
   
  2、实验箱使用说明;

第1个回答  2014-01-04
提供一个时钟计数、设置、闹钟的verilog代码,供参考。

module clock(clk,rst,set, set_typ, set_data, yr, mon, dt, hr, min, sec,
alarm_en, alm_typ, alm_yr, alm_mon, alm_dt, alm_hr, alm_min, alm_sec, alarm_output);
input clk,rst,set;
input [2:0] set_typ; //
input [6:0] set_data;//
output [6:0] yr, mon, dt, hr, min, sec;

input alarm_en;
input [2:0] alm_typ; //
input [6:0] alm_yr, alm_mon, alm_dt, alm_hr, alm_min, alm_sec;
output alarm_output;

parameter C_FR = 32'd20_000_000-32'd1; //定义系统时钟20MHz

reg [31:0] fr_cnt;
reg [3:0] sec_cnt;

reg pp1s; //秒脉冲
//==================================================
//fr_cnt
always@(posedge clk)//
if(!rst)
fr_cnt <= 32'b0;
else if (fr_cnt >= C_FR)
fr_cnt <= 32'b0;
else
fr_cnt <= fr_cnt + 1'b1;

//pp1s
always@(posedge clk)//
if(!rst)
pp1s <= 1'b0;
else if (fr_cnt == C_FR)
pp1s <= 1'b1;
else
pp1s <= 1'b0;

///time counter
always@(posedge clk)
if(!rst)
begin
yr <= 7'b0;
mon <= 7'b0;
dt <= 7'b0;
hr <= 7'b0;
min <= 7'b0;
sec <= 7'b0;
end
else if (set)
begin
case (set_typ)
3'b000: yr <= set_data;
3'b001: mon <= set_data;
3'b010: dt <= set_data;
3'b011: hr <= set_data;
3'b100: min <= set_data;
3'b101: sec <= set_data;
end
else if (pp1s)
begin
if (sec >= 7'd59)
sec <= 7'd0;
else
sec <= sec + 1'b1;

if (sec >= 7'd59)
begin
if (min >= 7'd59)
min <= 7'd0;
else
min <= min + 1'b1;
end

if (sec >= 7'd59 && min >= 7'd59)
begin
if (hr >= 7'd23)
hr <= 7'd0;
else
hr <= hr + 1'b1;
end

///data,mon, year, 大月小月,闰年等,依此类推
//
end

//=================================
//alarm
always@(posedge clk)
if(!rst)
alarm_output <= 1'b0;
else if (alarm_en)
case (alm_typ)
3'b000:
if (yr == alm_yr && mon == alm_mon && dt == alm_dt && hr == alm_hr && min == alm_min && sec == alm_sec)
alarm_output <= 1'b1;
else
alarm_output <= 1'b0;
3'b001:
if (mon == alm_mon && dt == alm_dt && hr == alm_hr && min == alm_min && sec == alm_sec)
alarm_output <= 1'b1;
else
alarm_output <= 1'b0;
3'b010:
if (dt == alm_dt && hr == alm_hr && min == alm_min && sec == alm_sec)
alarm_output <= 1'b1;
else
alarm_output <= 1'b0;
3'b011:
if (hr == alm_hr && min == alm_min && sec == alm_sec)
alarm_output <= 1'b1;
else
alarm_output <= 1'b0;
3'b100:
if (min == alm_min && sec == alm_sec)
alarm_output <= 1'b1;
else
alarm_output <= 1'b0;
default
alarm_output <= 1'b0;
endcase

endmodule本回答被提问者和网友采纳
第2个回答  2014-01-03
多功能数字钟
要求的是
最理想的追问

我需要整个设计过程,我现在一点思路都没有,求大神