计算机与信息技术学院综合性实验报告
专业:通信工程 年级/班级: 08级 2010—2011学年第二学期 课程名称 EDA技术 指导教师 xxx 本组成员 xxxx 学号姓名 计科楼111 2011年5月24日 实验地点 实验时间 计科楼503 8:00-11:50 项目名称 24小时时钟 实验类型 综合性 一、实验目的 1.掌握EDA的设计流程和Verilog HDL; 2.掌握计数器是实现方法;
3.设计一个24小时的时钟,具有开始、暂停、清零等功能。 二、实验仪器或设备
装Quartue II 5.0软件的微机一台 三、总体设计(设计原理、设计方案及流程等) (一) 设计原理:
1.对于一个矩形脉冲信号,如果在其上升沿计数一次,就可以编写代码对其脉冲个数进行计数。
2.要设置一个时钟,要考虑到时钟的时、分、秒之间的进制关系。 3.可以将时、分、秒分别用8位二进制码来表示,高四位为它们的十位,低四位为它们的个位。
4.考虑到要让输出显示为十进制的格式,可以让低四位位从0计到9时,高四位加1。
5.由于时是24进制,可以设置当时间到23时59分59秒时,直接给时、分、秒赋值为0。
6.可以控制时钟的暂停、开始,可在秒进行加1之前先判断控制信号rst是0还是1。当rst为0时,时钟暂停;当rst为1时,时钟接着开始计时。
7.可以设置一个清零信号clr。当clr为0时,执行上述的操作;当clr为1时,给时、分、秒赋值为0。 (二)设计方案及流程图 1.设计方案
(1)判断清零信号clr是否为0。如果为0,开始计数,如果为1,给时、分、秒赋值为0。
(2)在计时过程中,首先要判断控制信号rst是否1,为1时秒才加1,否则秒保持不变。
2.流程图(见下页)
四、实验步骤(包括主要步骤、代码分析等) (一)主要步骤
1.打开Quartue II 5.0集成调试软件
2.单击“File”-“New” -“Verilog HDL File”,新建一个Verilog HDL文件,命名为“clock.v”。
3.新建工程,命名为“clock”,进行“编译”。
4.编译无误后,进行波形仿真。选“File”-“New”-“Other File”-“Vector Waveform File”新建一个波形仿真文件,根据需要添加clk、rst、clr、hour、min、sec的波形,对输入波形设置后,进行仿真。 5.观察波形图,分析实验结果 (二)主要代码分析
if(!clr) 当清零信号为0是执行一下操作 if((hour==8'h23)&(min==8'h59)&(sec==8'h59)) 当时间为23时59分59秒
时执行下列操作
begin hour<=0; sec<=0; min<=0; end else
if((min==8'h59)&(sec==8'h59)) 当时间为59分59秒时执行下列操作 begin min<=0; sec<=0;
if((hour[3:0]==4'b1001)) 当时的个位为9时执行下列操作 begin hour[3:0]<=4'b0000; hour[7:4]<=hour[7:4]+1; end else hour[3:0]<=hour[3:0]+1; end
else 当分和秒不为59分59秒时执行下列操作 if((sec==8'h59)) 当秒为59时执行下列操作 begin sec<=0;
if((min[3:0]==4'b1001))
begin min[3:0]<=4'b0000; min[7:4]<=min[7:4]+1; end else min[3:0]<=min[3:0]+1;
end
else 当秒不为59时执行下列操作 begin
if((sec[3:0]==4'b1001))
begin sec[3:0]<=4'b0000; sec[7:4]<=sec[7:4]+1; end else
if(rst) 当暂停信号为1时,执行下列操作 begin sec[3:0]<=sec[3:0]+1; end
else 当暂停信号为0时,执行下列操作 sec[3:0]<=sec[3:0]; end
else 当清零信号为1时,执行下列操作 begin hour<=0; min<=0; sec<=0; end 五、结果分析与总结
通过此次实验,我掌握了计数器的实现方法,可以熟练运用Quartue II 5.0的Verilog HDL平台,并设计一个24小时时钟,编程所需要的功能。 六、附录
(一)实验结果
(二)源程序 /*信号定义:
clk: 时钟信号 hour: 时 min: 分 sec: 秒
rst: 为0时暂停,为1时开始 clr: 为1时清零 **/
module clock(clk,hour,min,sec,rst,clr); input clk,clr,rst;
output[7:0] hour,min,sec; reg[7:0] hour,min,sec; always @(posedge clk) if(!clr)
if((hour==8'h23)&(min==8'h59)&(sec==8'h59)) begin hour<=0; sec<=0; min<=0; end else
if((min==8'h59)&(sec==8'h59)) begin
min<=0; sec<=0;
if((hour[3:0]==4'b1001)) begin
hour[3:0]<=4'b0000; hour[7:4]<=hour[7:4]+1; end else
hour[3:0]<=hour[3:0]+1; end else
if((sec==8'h59)) begin sec<=0;
if((min[3:0]==4'b1001)) begin
min[3:0]<=4'b0000; min[7:4]<=min[7:4]+1; end else
min[3:0]<=min[3:0]+1; end else begin
if((sec[3:0]==4'b1001)) begin
sec[3:0]<=4'b0000; sec[7:4]<=sec[7:4]+1; end else
if(rst) begin
sec[3:0]<=sec[3:0]+1; end else
sec[3:0]<=sec[3:0]; end else begin
hour<=0; min<=0; sec<=0; end endmodule
教师签名:
年 月 日