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

合集下载

数电时钟实验报告

数电时钟实验报告

数电时钟实验报告
《数电时钟实验报告》
实验目的:
本次实验旨在通过搭建数字电子时钟电路,加深对数字逻辑电路的理解,掌握数字电子时钟的工作原理及实现方法。

实验原理:
数字电子时钟是一种基于数字电路的计时装置,其主要由振荡器、计数器、分频器、显示装置等组成。

振荡器产生稳定的方波信号作为时钟信号,计数器进行计数并输出计数结果,分频器对计数结果进行分频,最终通过显示装置将时间信息显示出来。

实验材料:
1. 74LS90(分频器);
2. 74LS47(BCD-7段译码器);
3. 555定时器;
4. 4位共阳极数码管;
5. 电路面包板、导线等。

实验步骤:
1. 按照电路图连接电路,注意电路连接的正确性;
2. 调节555定时器的参数,使其输出1Hz的稳定方波信号;
3. 将方波信号输入74LS90分频器,进行分频处理;
4. 将分频后的信号输入74LS47译码器,将其转换成7段数码管可以显示的信号;
5. 将译码后的信号输入数码管,观察数码管的显示效果;
6. 调节555定时器的参数,观察数码管的显示效果是否与实际时间一致。

实验结果:
经过调试,成功搭建了数字电子时钟电路,并且通过调节555定时器的参数,实现了数码管的秒表功能。

在实验过程中,我们深入理解了数字逻辑电路的工作原理,加深了对数字电子时钟的理解。

实验总结:
通过本次实验,我们不仅掌握了数字电子时钟的工作原理及实现方法,还加深了对数字逻辑电路的理解。

数字电子时钟作为数字电路的一个典型应用,对我们的专业学习和工程实践具有重要意义。

希望通过今后的实验学习,能够进一步提升自己的实验能力和理论水平。

西安交通大学数电实验报告

西安交通大学数电实验报告

数电实验实验名称:数字钟设计班级:姓名:学号:一、实验简介数字钟设计的关键在于产生秒脉冲、对秒脉冲计数并产生分和小时以及动态显示时、分、秒信息。

二、实验要求1)在开发板上运行有关程序2)设计一个完整的数字钟,小时和分钟用数码管显示,秒用发光二极管闪烁显示,每秒显示一次。

如有可能,请增加校时功能。

三、实验内容1.工程文件代码:module DigitalClock(input clk,input clr,input [1:0]en,input [5:0]data,output regsecled,output reg [6:0]atg,output reg [3:0]an);reg [3:0]led1,led2,led3,led4; reg [16:0]clkdiv;reg [3:0]hour1;reg [3:0]hour2;reg [3:0]min1;reg [3:0]min2;reg [26:0]q1;reg [3:0]digit;reg [7:0]sec;reg [1:0]s;integer i;initial beginhour2=1;hour1=2;min2=1;min1=2;sec=0;led4=hour2;led3=hour1;led2=min2;led1=min1;secled=0;clkdiv=0;endalways @(*)beginan=4'b1111;s<=clkdiv[16:15];an[s]=0;case(s)0: digit<=led4;1: digit<=led3;2: digit<=led2;3: digit<=led1;default: digit<=led4;endcasecase(digit)0: atg = 7'b0000001;//01: atg = 7'b1001111;//12: atg = 7'b0010010;//23: atg = 7'b0000110;//34: atg = 7'b1001100;//45: atg = 7'b0100100;//56: atg = 7'b0100000;//67: atg = 7'b0001111;//78: atg = 7'b0000000;//89: atg = 7'b0000100;//9'hA: atg = 7'b0000001;//10-10 to be revised'hB: atg = 7'b1001111;//11-10'hC: atg = 7'b0010010;//12-10'hD: atg = 7'b0000110;//13-10'hE: atg = 7'b1001100;//14-10'hF: atg = 7'b0100100;//15-10default: atg = 7'b0000001;endcaseendalways @(posedgeclk)beginclkdiv<= clkdiv+1;end(时钟程序)always @(posedgeclk or posedgeclr)beginif(clr == 1)beginsec<=0;q1<=0;hour1<=0;hour2<=0;min1<=0;min2<=0;led4=0;led3=0;led2=0;led1=0;end(分钟调节模块)else if(en==2'b00)beginif(q1 == 50000000)beginq1<=0;secled=1;led4=hour2;led3=hour1;led2=min2;led1=min1;sec<=sec+1;if(sec == 59)beginsec<=0;min1<=min1+1;if(min1 == 9)beginmin1<=0;min2<=min2+1;endif(min1==9&&min2==5)beginmin1<=0;min2<=0;hour1<=hour1+1;if(hour1==9)beginhour1<=0;hour2<=hour2+1;endif(hour2==2&&hour1==3)beginhour1<=0;hour2<=0;endendendendelse if(q1==25000000)beginsecled=0;q1<=q1+1;endelseq1<=q1+1;end(小时调节模块)else if(en==2'b01)//change minbeginif (data<60)beginfor(i=0;i<6;i=i+1)beginif(data-i*10<10)beginmin1<=data-10*i;min2<=i;i=6;endendled4=hour2;led3=hour1;led2=min2;led1=min1;endendelse if(en==2'b10)//change hourbeginif(data<24)beginfor(i=0;i<3;i=i+1)beginif(data-i*10<10)beginhour1<=data-10*i;hour2<=i;i=3;endendendled4=hour2;led3=hour1;led2=min2;led1=min1;endendendmodule2.约束文件代码:NET "atg[0]" LOC = M12;NET "atg[1]" LOC = L13;NET "atg[2]" LOC = P12;NET "atg[3]" LOC = N11;NET "atg[4]" LOC = N14;NET "atg[5]" LOC = H12;NET "atg[6]" LOC = L14;NET "an[0]" LOC = K14;NET "an[1]" LOC = M13;NET "an[2]" LOC = J12;NET "an[3]" LOC = F12;NET "clk" LOC = B8;NET "clr" LOC = G12;NET "secled" LOC = M5;NET "en[1]" LOC = N3;NET "en[0]" LOC = E2;NET "data[5]" LOC = F3;NET "data[4]" LOC = G3;NET "data[3]" LOC = B4;NET "data[2]" LOC = K3;NET "data[1]" LOC = L3;NET "data[0]" LOC = P11;四、实验心得体会相比之前的几次上机实验,这次的实验代码花的时间要多一些,不过这次实验同样成就感也要高一些,毕竟数字钟和生活关联比较大,这让我初步了解了Verilog语音和生活中我们所用的一些电子器件的联系。

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

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

西安交通大学数字电子技术实验报告实验三、ISE基础实验预习:(1)安装ISE13.4软件。

(2)按照视频文件“Verilog语言输入法D_Flip_Flop.exe”进行演练。

实验内容和步骤:下载开发板相关器件的Datasheet,了解其性能。

按照P249附录A“FPGA实验预习报告模板”中的内容和步骤,完成D触发器的设计、综合、实现、仿真和下载全过程,熟悉ISE编程环境和用Adept下载编程文件的方法。

1.在G盘用自己的学号建立文件夹,进入用自己学号建立的文件夹后,再建立本次实验的文件夹,及本次实验所建工程的文件夹,文件夹名可以起名为:D_Flip_Flop、My_FirstISE、或Experiment_1、或Test_1,等等。

2.建立工程文件。

3.输入D触发器的Verilog程序。

4.编写D触发器的约束文件。

5.综合、实现及生成编程文件。

6.基于ISim的行为仿真。

7.采用Adept软件下载*.bit 程序到开发板。

8.测试D触发器的逻辑功能。

通过D触发器设计熟悉ISE软件后,自己设计一个门电路,例如与非门,重复以上ISE 软件的使用步骤。

验收:1.按照老师布置的逻辑门电路设计Verilog语言程序、约束文件、下载、仿真。

要能说明任一时刻输入输出的逻辑关系。

2.能够用开发板演示所设计的逻辑功能。

实验程序1.VERILOG工程文件module D_Flip_Flop(input clk,input set,input D,input clr,output reg q //注意:always模块中的输出必须是寄存器型变量);always @(posedge clk or posedge clr or posedge set)beginif(clr) q<=0;else if(set) q<=1;else q<=D;endendmodule2.约束文件NET "clk" LOC ="B8"; //时钟NET "D" LOC ="N3"; //SW7NET "set" LOC ="L3"; //SW1NET "clr" LOC ="P11"; //SW0NET "q" LOC ="G1"; //LD73.仿真文件module test_D_Flip_Flop;// Inputsreg clk;reg set;reg D;reg clr;// Outputswire q;// Instantiate the Unit Under Test (UUT) D_Flip_Flop uut (.clk(clk),.set(set),.D(D),.clr(clr),.q(q));initial begin// Initialize Inputsclk=0;set=1;D=0;clr=0;// Wait 100 ns for global reset to finish #100;// Add stimulus hereEndalways#10clk=~clk;always#12D=~D;always#33clk=~clk;always#42set=~set;endmodule仿真结果:实验四、组合逻辑电路实验Ⅰ(2学时)组合逻辑Ⅰ:(1)使用VERILOG设计一个新的逻辑功能(比如四输入或门、或非门、与或非门等等),并在开发板上验证,比如:进实验室前编写好VERILOG源文件、约束文件和仿真文件(见4.1.2,P101(2))。

大学数字钟实训报告

大学数字钟实训报告

一、摘要本次实训旨在通过设计和制作一个数字时钟,加深对数字电子技术理论知识的理解,提高动手实践能力。

在实训过程中,我们学习了数字钟的原理、电路设计、元件选择、焊接调试等技能。

最终,我们成功制作出了一个具有时、分、秒显示功能的数字时钟,并通过实际运行验证了其功能。

二、实训目的1. 掌握数字电子钟的原理和设计方法。

2. 熟悉常用数字电路元件的功能和特性。

3. 提高动手实践能力,培养创新意识。

4. 增强团队协作精神,提高沟通能力。

三、实训内容1. 数字钟原理数字钟是一种将时间信息转换为数字信号,并通过数码管显示的电子计时设备。

其基本原理是利用石英晶体振荡器产生稳定的时钟信号,通过计数器进行计数,并通过译码器和数码管显示时间。

2. 电路设计本次实训采用以下电路设计:(1)时钟信号产生:利用555定时器产生1Hz的时钟信号。

(2)秒计数器:采用CD4060计数器,实现秒的计数。

(3)分计数器:采用CD4518计数器,实现分的计数。

(4)时计数器:采用CD4518计数器,实现时的计数。

(5)译码器:采用CD4511译码器,将计数器的输出信号转换为数码管所需的信号。

(6)数码管显示:采用共阴极七段数码管,显示时、分、秒。

3. 元件选择本次实训选用的元件如下:(1)时钟信号产生:555定时器、电阻、电容。

(2)计数器:CD4060、CD4518。

(3)译码器:CD4511。

(4)数码管显示:共阴极七段数码管。

(5)其他元件:电阻、电容、电位器、晶体管、开关等。

4. 焊接调试(1)按照电路图进行元件焊接。

(2)检查电路连接是否正确,并进行初步调试。

(3)调整电位器,使数码管显示正确的时间。

(4)测试电路功能,确保时、分、秒显示准确。

四、实训总结1. 通过本次实训,我们掌握了数字电子钟的原理和设计方法,熟悉了常用数字电路元件的功能和特性。

2. 在实训过程中,我们提高了动手实践能力,培养了创新意识。

3. 团队协作精神得到了加强,沟通能力得到提高。

数字电路数字时钟课程实验报告

数字电路数字时钟课程实验报告

数字时钟设计实验报告一、设计要求:设计一个24小时制的数字时钟。

要求:计时、显示精度到秒;有校时功能。

采用中小规模集成电路设计。

发挥:增加闹钟功能。

二、设计方案:由秒时钟信号发生器、计时电路和校时电路构成电路。

秒时钟信号发生器可由振荡器和分频器构成。

计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。

校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。

三、电路框图:图一数字时钟电路框图四、电路原理图:(一)秒脉冲信号发生器秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。

由振荡器与分频器组合产生秒脉冲信号。

振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz脉冲。

分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能扩展电路所需要的信号,选用三片74LS290进行级联,因为每片为1/10分频器,三片级联好获得1Hz标准秒脉冲。

其电路图如下:译码器译码器译码器时计数器分计数器秒计数器校时电路秒信号发生器图二秒脉冲信号发生器(二)秒、分、时计时器电路设计秒、分计数器为60进制计数器,小时计数器为24进制计数器。

60进制——秒计数器秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。

当计数到59时清零并重新开始计数。

秒的个位部分的设计:利用十进制计数器CD40110设计10进制计数器显示秒的个位。

个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位功能。

利用74LS161和74LS11设计6进制计数器显示秒的十位,当十位计数器由0增加到5时利用74LS11与门产生一个高电平接到个位、十位的CD40110的清零端,同时产生一个脉冲给分的个位。

其电路图如下:图三 60进制--秒计数电路60进制——分计数电路分的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。

数字钟实验报告5篇范文

数字钟实验报告5篇范文

数字钟实验报告5篇范文第一篇:数字钟实验报告数字钟实验报告班级:电气信息i类112班实验时间:实验地点:指导老师:目录一、实验目的-----------------3二、实验任务及要求--------3三、实验设计内容-----------3(一)、设计原理及思路3(二)、数字钟电路的设计--------------------------4(1)电路组成---------4(2)方案分析---------10(3)元器件清单------11四、电路制版与焊接---------11五、电路调试------------------12六、实验总结及心得体会---13七、组员分工安排------------19一、实验目的:1.学习了解数码管,译码器,及一些中规模器件的逻辑功能和使用方法。

2.学习和掌握数字钟的设计方法及工作原理。

熟悉集成电路的引脚安排,掌握各芯片的逻辑功能及使用方法了解面包板结构及其接线方法。

3.了解pcb板的制作流程及提高自己的动手能力。

4.学习使用protel软件进行电子电路的原理图设计、印制电路板设计。

5.初步学习手工焊接的方法以及电路的调试等。

使学生在学完了《数字电路》课程的基本理论,基本知识后,能够综合运用所学理论知识、拓宽知识面,系统地进行电子电路的工程实践训练,学会检查电路的故障与排除故障的一般方法锻炼动手能力,培养工程师的基本技能,提高分析问题和解决问题的能力。

二、实验任务及要求1.设计一个二十四小时制的数字钟,时、分、秒分别由二十四进制、六十进制、六十进制计数器来完成计时功能。

2.能够准确校时,可以分别对时、分进行单独校时,使其到达标准时间。

3.能够准确计时,以数字形式显示时、分,发光二极管显示秒。

4.根据经济原则选择元器件及参数;5..小组进行电路焊接、调试、测试电路性能,撰写整理设计说明书。

三、实验设计内容1、设计原理及思路 3.1数字钟的构成数字钟一般由振荡器、分频器、计数器、译码器、显示器、较时电路、报时电路等部分组成,这些都是数字电路中应用最广的基本电路3.2原理分析数字钟实际上是一个对标准频率(1hz)进行计数的计数电路。

数电数字钟实验报告

数电数字钟实验报告

数电数字钟实验报告篇一:西安交大数电数字钟实验报告西安交通大学数字电子技术实验报告数字钟设计姓名:**学院:**学院班级:**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 13.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,nu m3);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@(*)beginan=4'b1111;s an[s]=0;case(s)0:digit1:digit2:digit3:digit default:digit endcasecase(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 endalways@(posedge clk)clkdiv 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)beginctr if(ctr==-1)beginctr sec endend//wire sen;//assign sen=(sec)|(bt0)|(bt1)|(bt2)|(bt3);always@(negedge sec)if(!en)beginif(bt0)beginmytime[0] if(mytime[0]==9) mytime[0] else if(bt1)beginmytime[1] if(mytime[1]==5) mytime[1] else if(bt2)beginmytime[2] if(mytime[2]==9) mytime[2] else if(bt3)beginmytime[3] if(mytime[3]==2) mytime[3] end elsebegins if(s==59)篇二:数电课程实验报告——数字钟的设计《数字电子技术》课程设设计题目:班级学号:学生姓名:指导教师:时间:计报告数字钟的设计 XX年12月27日~XX年1月2日《数字电子技术》课程设计任务书一、设计题目:数字钟的设计二、设计任务与要求:1.时钟显示功能,能够以十进制显示“时”、“分”、“秒”。

数字电路时钟实训报告(一)

数字电路时钟实训报告(一)

数字电路时钟实训报告(一)数字电路时钟实训报告1. 概述•本报告旨在介绍数字电路时钟实训的相关内容,包括实训目的、实训过程和实训结果。

2. 实训目的•熟悉数字电路时钟的基本原理和设计思路•掌握数字电路时钟的硬件组成和功能模块•实践运用数字电路知识,完成时钟的设计和制作3. 实训过程1.准备材料–数字电路实验箱–电源线、信号线等连接器–电路元件:集成电路、电容器、电阻等–示波器、万用表等测试仪器2.设计方案–根据时钟的要求和功能需求,设计数字电路时钟的电路图–确定所需的集成电路和其他电路元件3.电路搭建–使用实验箱和连接器搭建数字电路时钟的电路–按照电路图连接电路元件和集成电路4.测试和调试–使用示波器、万用表等测试仪器对电路进行测试–检查电路是否按照设计要求工作5.验证功能–测试时钟的各项功能是否正常工作–验证时钟在不同时间段的准确性和稳定性4. 实训结果•完成数字电路时钟的设计和制作•时钟的各项功能正常工作•时钟在不同时间段具有准确性和稳定性5. 总结•通过本次数字电路时钟的实训,我深入了解了数字电路时钟的工作原理和设计流程。

通过实践操作,我掌握了数字电路时钟的搭建和调试方法,提高了数字电路设计能力。

这次实训对我的专业技能和实践能力的提升具有重要意义。

以上是本次数字电路时钟实训的报告内容。

实训过程中,我认真完成了任务,获得了实践经验,并与同学们共同交流和学习,提高了团队合作能力。

希望今后能继续深入学习和应用数字电路知识,为未来的科研和工作打下坚实的基础。

6. 遇到的问题和解决方法•在实训过程中,我遇到了几个问题:1.电路搭建困难:由于电路图复杂,部分连接容易混淆和出错。

解决方法是多次仔细核对电路图,注意连接的正确性,并请教老师和同学的帮助。

2.电路测试困难:有时测试仪器的操作和数据读取不够准确,导致测试结果不确定。

解决方法是认真阅读仪器的使用说明书,熟悉操作步骤,并与同学们共同研究和解决问题。

  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 13.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@(*)beginan=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;endcasecase(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"endcaseendalways@(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)beginctr<=ctr+26'd1;if(ctr==25000000-1)beginctr<=0;sec<=~sec;endend//wire sen;//assign sen=(sec)|(bt0)|(bt1)|(bt2)|(bt3);always@(negedge sec)if(!en)beginif(bt0)beginmytime[0]<=mytime[0]+4'd1;if(mytime[0]==9) mytime[0]<=0;endelse if(bt1)beginmytime[1]<=mytime[1]+4'd1;if(mytime[1]==5) mytime[1]<=0;endelse if(bt2)beginmytime[2]<=mytime[2]+4'd1;if(mytime[2]==9) mytime[2]<=0;endelse if(bt3)beginmytime[3]<=mytime[3]+4'd1;if(mytime[3]==2) mytime[3]<=0;endendelsebegins<=s+1;if(s==59)begins<=0;mytime[0]<=mytime[0]+4'd1;if(mytime[0]==9)beginmytime[0]<=0;mytime[1]<=mytime[1]+4'd1;if(mytime[1]==5)beginmytime[1]<=0;mytime[2]<=mytime[2]+4'd1;if(mytime[3]==2 && mytime[2]==3)beginmytime[2]<=0;mytime[3]<=0;endif(mytime[2]==9)beginmytime[2]<=0;mytime[3]<=mytime[3]+4'd1;endendendendendEndmodule约束文件NET "clk" LOC = "B8";NET"seg[0]" LOC="L14";NET"seg[1]" LOC="H12";NET"seg[2]" LOC="N14";NET"seg[3]" LOC="N11";NET"seg[4]" LOC="P12";NET"seg[5]" LOC="L13";NET"seg[6]" LOC="M12";NET"seg[7]" LOC="N13";NET "digit[0]" LOC = "F12";NET "digit[1]" LOC = "J12";NET "digit[2]" LOC = "M13";NET "digit[3]" LOC = "K14";NET "key4" LOC = "A7"; # Bank = 2, Signal name = BTN3 NET "key3" LOC = "M4"; # Bank = 2, Signal name = BTN2 NET "key2" LOC = "C11"; # Bank = 2, Signal name = BTN1 NET "key1" LOC = "G12"; # Bank = 2, Signal name = BTN0 NET "en" LOC = "P11"; # Bank = 2, Signal name = sw0NET "sec"LOC="M5";测试代码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@(*)beginan=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;endcasecase(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"endcaseendalways@(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)beginctr<=ctr+26'd1;if(ctr==25000000-1)beginctr<=0;sec<=~sec;endend//wire sen;//assign sen=(sec)|(bt0)|(bt1)|(bt2)|(bt3);always@(negedge sec)if(!en)beginif(bt0)beginmytime[0]<=mytime[0]+4'd1;if(mytime[0]==9) mytime[0]<=0;endelse if(bt1)beginmytime[1]<=mytime[1]+4'd1;if(mytime[1]==5) mytime[1]<=0;endelse if(bt2)beginmytime[2]<=mytime[2]+4'd1;if(mytime[2]==9) mytime[2]<=0;endelse if(bt3)beginmytime[3]<=mytime[3]+4'd1;if(mytime[3]==2) mytime[3]<=0;endendelsebegins<=s+1;if(s==59)begins<=0;mytime[0]<=mytime[0]+4'd1;if(mytime[0]==9)beginmytime[0]<=0;mytime[1]<=mytime[1]+4'd1;if(mytime[1]==5)beginmytime[1]<=0;mytime[2]<=mytime[2]+4'd1;if(mytime[3]==2 && mytime[2]==3).beginmytime[2]<=0;mytime[3]<=0;endif(mytime[2]==9)beginmytime[2]<=0;mytime[3]<=mytime[3]+4'd1;endendendendendendmodule六、实验总结:将程序下载到BASYS2板子上后,能够实现简易数字钟的功能,可以看到LED灯1s闪一下,4个数码管实现了数字钟小时和分钟的显示,而且通过开关控制可以将六位二进制数赋值给小时或分钟位,实现校表的功能。

相关文档
最新文档