西安交大数电数字钟实验报告

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

交通大学数字电子技术实验报告

数字钟设计

姓名:**

学院:**学院

班级:**22

学号:212******5

一、实验名称

基于Verilog HDL设计的多功能数字钟

二、试验任务及要求

实验要求以Verilog HDL语言为手段,设计多功能数字钟。多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的围为0~23时。

在实验中为了显示与编写方便,该设计采用一个位24位二进制码[23:0]cnt 记录时间,每四位记录一个数,从高到低分别为时针十位、时针个位、分针十位、分针个位、秒针十位、秒针个位。

实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟50Mhz进行分频。

关于调整时间功能,该设计采用四个按钮调整对应位的数值,从而调整时间。

三、实验条件

该实验以Verilog HDL语言为手段,以Xilinx ISE Design Suite 13.4_1软件实现源程序的综合与仿真,并用BASYS2开发板作为目标器件。

四、设计过程

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

2.拟定数字钟的组成框图,在Xilinx ISE Design Suite 1

3.4_1软件中,使用Verilog语言输入,采用分层次分模块的方法设计电路;

3.设计各单元电路并进行仿真;

4.对数字钟的整体逻辑电路图,选择器件,分配引脚,进行逻辑综合;

5.下载到Basys2实验平台上,实际测试数字钟的逻辑功能。

五、Verilog代码

module clock(input clk,

input en,

input key1,

input key2,

input key3,

input key4,

output sec,

output wire[7:0] seg,

output wire[3:0] digit

);

wire[3:0] num0,mum1,num2,num3;

disp u0(clk,num0,mum1,num2,num3,seg,digit);

clk_gen u1(clk,en,key1,key2,key3,key4,sec,num0,mum1,num2,num3);

endmodule

////////////////////////////////////

module disp(input clk,

input [3:0] num0,

input [3:0] num1,

input [3:0] num2,

input [3:0] num3,

output reg[7:0] sm_seg,

output reg[3:0] an

);

reg[1:0] s;

reg[3:0] digit;

reg[16:0] clkdiv;

always@(*)

begin

an=4'b1111;

s<=clkdiv[16:15];

an[s]=0;

case(s)

0:digit<=num0;

1:digit<=num1;

2:digit<=num2;

3:digit<=num3;

default:digit<=num0;

endcase

case(digit)

4'h0 : sm_seg = 8'hc0; // "0"

4'h1 : sm_seg = 8'hf9; // "1"

4'h2 : sm_seg = 8'ha4; // "2"

4'h3 : sm_seg = 8'hb0; // "3"

4'h4 : sm_seg = 8'h99; // "4"

4'h5 : sm_seg = 8'h92; // "5"

4'h6 : sm_seg = 8'h82; // "6"

4'h7 : sm_seg = 8'hf8; // "7"

4'h8 : sm_seg = 8'h80; // "8"

4'h9 : sm_seg = 8'h90; // "9"

default : sm_seg = 8'hff; // "x"

endcase

end

always@(posedge clk)

clkdiv<=clkdiv+17'd1;

Endmodule

/////////////////////////////////////////// module clk_gen(input clk,

input en,

input bt0,

input bt1,

input bt2,

input bt3,

output reg sec,

output [3:0] num0,

output [3:0] num1,

output [3:0] num2,

output [3:0] num3

);

reg[25:0] ctr;

reg[3:0] mytime[3:0];

reg[7:0] s;

assign num0=mytime[0];

assign num1=mytime[1];

assign num2=mytime[2];

assign num3=mytime[3];

always@(posedge clk)

begin

ctr<=ctr+26'd1;

if(ctr==25000000-1)

begin

ctr<=0;

sec<=~sec;

end

end

//wire sen;

//assign sen=(sec)|(bt0)|(bt1)|(bt2)|(bt3);

always@(negedge sec)

if(!en)

begin

if(bt0)

begin

mytime[0]<=mytime[0]+4'd1;

if(mytime[0]==9) mytime[0]<=0;

相关文档
最新文档