verilogEDA数字秒表设计quartus

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程考查报告

课程名称 EDA技术

题目名称数字电子钟

学生学院信息工程学院

专业班级通信工程09(1)班

学号 310900xx 学生姓名陈 XX 任课教师李学易

2013 年12月27日

电子钟

设计目的:

根据实验板的资源和利用Quartus II软件编译、仿真可以实现电子钟的数字系统设计。

设计内容:

数字电子钟的功能:

1、时钟显示功能(显示时、分、秒)

2、时钟调整功能(小时、分钟的校准)

3、闹钟设置功能

设计方案:

根据程序设计需要,信号的定义如下:

Clk:标准时钟信号,频率为4Hz

Clk_1k:产生闹铃声、报时声的时钟信号,频率为1024Hz

Mode:功能控制信号,为0:计时功能;1:闹钟功能;2:手动校时功能

Turn:接按键,在手动校时功能时,选择的是校准小时,还是分钟;

若长时间按该键,可使秒信号清零

Change:接按键,在手动校时时,每按一次,计数器加一

若长按,则连续快速加一

Hour,min,sec:此三信号分别输出并显示时、分、秒信号

Alert:输出到扬声器的信号,产生闹钟音和报时音;

闹钟音为持续20秒的“嘀嘀嘀”音,若按住change键,

则可屏蔽该音;

报时音为“嘀嘀嘀嘀嘟”四短一长音。

Ld_alert:接发光二极管,指示是否设置了闹钟功能

Ld_hour:接发光二极管,指示当前调整的是小时信号Ld_min:接发光二极管,指示当前调整的是分钟信号

实验结果:

时序仿真图:

RTL图:

心得体会:

经过一周的EDA课程设计,对用verilog语言设计数字系统有了一定认识。设计过程当然有点累,可是当完成这个设计时,内心是无比的高兴。通过这次的课程设计,很好地把课堂理论和实践结合起来,认识更深刻了。设计中遇到过很多问题,这时耐心、细心是不可缺少的,通过查阅网上资料和其他参考文献以及和别人交流,最终都把问题解决了。当然其中也缺少不了庞老师的耐心指导,在此,感谢庞老师的教导!

参考文献:

《Verilog数字系统设计教程》第2版夏宇闻编著

《Verilog的135个经典设计实例》王金明编著

源代码:

module digital_watch(clk,clk_1k,mode,change,turn,alert,hour,min,sec,

LD_alert,LD_hour,LD_min);

input clk,clk_1k,mode,change,turn;

output alert,LD_alert,LD_hour,LD_min;

output[7:0] hour,min,sec;

reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;

reg[1:0] m,fm,num1,num2,num3,num4;

reg[1:0] loop1,loop2,loop3,loop4,sound;

reg LD_hour,LD_min;

reg clk_1Hz,clk_2Hz,minclk,hclk;

reg alert1,alert2,ear;

reg count1,count2,counta,countb;

wire ct1,ct2,cta,ctb,m_clk,h_clk;

always @(posedge clk)

begin

clk_2Hz<=~clk_2Hz;

if(sound==3) begin sound<=0; ear<=1; end

//ear 信号用于产生或屏蔽声音else begin sound<=sound+1; ear<=0; end

end

always @(posedge clk_2Hz) //由4Hz 的输入时钟产生1Hz 的时基信号clk_1Hz<=~clk_1Hz;

always @(posedge mode) //mode 信号控制系统在三种功能间转换begin if(m==2) m<=0; else m<=m+1; end

always @(posedge turn)

fm<=~fm;

always //该进程产生count1,count2,counta,countb 四个信号begin

case(m)

2: begin

if(fm)

begin count1<=change; {LD_min,LD_hour}<=2; end else

begin counta<=change; {LD_min,LD_hour}<=1; end {count2,countb}<=0;

end

1: begin

if(fm)

begin count2<=change; {LD_min,LD_hour}<=2; end else

begin countb<=change; {LD_min,LD_hour}<=1; end {count1,counta}<=2'b00;

end

default: {count1,count2,counta,countb,LD_min,LD_hour}<=0;

endcase

end

always @(negedge clk)

//如果长时间按下“change”键,则生成“num1”信号用于连续快速加1

if(count2)

begin

if(loop1==3) num1<=1;

else

begin loop1<=loop1+1; num1<=0; end

end

else begin loop1<=0; num1<=0; end

always @(negedge clk) //产生num2 信号

if(countb)

begin

if(loop2==3) num2<=1;

else

begin loop2<=loop2+1; num2<=0; end

end

else begin loop2<=0; num2<=0; end

always @(negedge clk)

if(count1)

begin

if(loop3==3) num3<=1;

else

begin loop3<=loop3+1; num3<=0; end

end

else begin loop3<=0; num3<=0; end

always @(negedge clk)

if(counta)

begin

if(loop4==3) num4<=1;

else

begin loop4<=loop4+1; num4<=0; end

end

else begin loop4<=0; num4<=0; end

相关文档
最新文档