Verilog数字钟数电实验报告
用Verilog语言编写的多功能数字钟
《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
verilog实验十七 数字时钟
实验十七数字时钟一、实验目的设计一个可以计时的数字时钟,其显示时间范围是00:00:00~23:59:59,且该时钟具有暂停计时、清零等功能。
二、实验器材1、SOPC实验箱2、计算机(装有Quartus II 7.0软件)三、实验预习1、了解时钟设计原理和各主要模块的设计方法。
2、提前预习,编写好主模块的verilog程序。
四、实验原理一个完整的时钟应由4部分组成:秒脉冲发生电路、计数部分、译码显示部分和时钟调整部分。
1、秒脉冲发生:一个时钟的准确与否主要取决秒脉冲的精确度。
可以设计分频电路对系统时钟50MHz进行50000000分频从而得到稳定的1Hz基准信号。
定义一个50000000进制的计数器,将系统时钟作为时钟输入引脚clk,进位输出即为分频后的1Hz信号。
2、计数部分:应设计1个60进制秒计数器、1个60进制分计数器、1个24进制时计数器用于计时。
秒计数器应定义clk(时钟输入)、rst(复位)两个输入引脚,Q3~Q0(秒位)、Q7~Q4(十秒位)、Co(进位位)9个输出引脚。
分、时计数器类似。
如需要设置时间可再增加置数控制引脚Set和置数输入引脚d0~d7。
3、译码显示部分:此模块应定义控制时钟输入、时分秒计数数据输入共25个输入引脚。
8位显示码输出(XQ7-XQ0)、6位数码管选通信号(DIG0-DIG5)共12个输出引脚。
在时钟信号的控制下轮流选择对时分秒输入信号进行译码输出至XQ7-XQ0,并通过DIG0-DIG5输出相应的选通信号选择数码管。
每位显示时间控制在1ms左右。
时钟信号可由分频电路引出。
五、实验内容1、启动Quartus II建立一个空白工程并命名。
2、新建VHDL 源程序文件,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
并生成图形符号文件。
代码:moduleshizhong(CLK,RST,EN,S1,S2,HOURH,HOURL,MINH,MI NL,SECH,SECL);input CLK,RST,EN,S1,S2;output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL; reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH;always @(posedge CLK or negedge RST)if(!RST) beginSECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0; HOURH<=0;end//系统复位else if(EN) //EN为低电平时时钟暂停beginif(!S1) //调节小时beginif(HOURL==9)begin HOURL<=0; HOURH<=HOURH+1;endelsebeginif(HOURH==2&&HOURL==3)beginHOURL<=0;HOURH<=0;endelse HOURL<=HOURL+1;endendelse if(!S2) //调节分钟beginif(MINL==9)beginMINL<=0;if(MINH==5) MINH<=0;else MINH<=MINH+1;endelse MINL<=MINL+1;endelse if(SECL==9) //时钟正常跳动状态beginSECL<=0;if(SECH==5)begin SECH<=0;if(MINL==9)beginMINL<=0;if(MINH==5)beginMINH<=0;if(HOURL==9) beginHOURL<=0;HOURH<=HOURH+1;endelse if(HOURH==2&&HOURL==3) begin HOURL<=0; HOURH<=0;endelse HOURL<=HOURL+1;endelse MINH<=MINH+1;endelse MINL<=MINL+1;endelse SECH<=SECH+1;endelse SECL<=SECL+1;endelsebeginHOURH<=HOURH;HOURL<=HOURL;MINH<=MINH;MINL<=MINL;SECH<=SECH;SECL<=SECL;endendmodule3、波形仿真验证。
数字钟实验报告_4
华中科技大学《电子线路设计、测试与实验》实验报告实验名称: 多功能数字钟设计院(系): 自动化学院专业班级:实验成绩:****: ***2014 年6 月11 日一、实验目的1.掌握可编程逻辑器件的应用开发技术, 设计输入、编译、仿真和器件编程;2.熟悉EDA软件使用;3.掌握Verilog HDL设计方法;4.分模块、分层次数字系统设计二、实验器材QUARTUS II软件PC DEO实验板三、实验要求1.能显示小时、分钟、秒钟(小时以24进制,时、分用显示器, 秒用LED)2.能调整小时、分钟的时间3.复位四、实验原理五、程序设计过程数字钟由2个60进制计数器和1个24进制计数器和4个译码器共7个模块构成,3个计数器公用一个时钟信号CP。
2个选择器分别用于选择分计数器和时计数器的使能控制信号,对时间进行校正时,在控制器的作用下,使能信号接高电平,此时每来一个时钟信号,计数器加一计数,从而实现对小时和分钟的校正.正常计时时,使能信号来自低位计数器的输出,即秒计数器达到59秒时,产生输出信号使分计数器加1,分秒计数器同时计到最大值时即59分59秒时,产生输出信号使小时计数器加一。
1.顶层模块:module clock (led0, led1, led2, led3, led_sec, _50mhzin, adjminkey, adjhrkey, ncr, h12, hour12);input _50mhzin;input adjminkey, adjhrkey;input h12;input ncr;output [6:0]led0, led1, led2, led3;wire [7:0] led_a, led_b;wire _1hz, _1khz, _5hz;wire [7:0] hour, minute, second, set_hr, set_min;output hour12;wire h12;output [7:0]led_sec;assign hour12 = h12;divided_frequency u0(_1hz,ncr,_50mhzin);top_clock u1(hour, minute, second, _1hz, ncr, adjminkey, adjhrkey, _50mhzin);display u2(_50mhzin, _5hz, ncr, led_a, led_b, led_sec, hour, minute, second,h12);SEG7_LUT u3(led_a[7:4], led3);SEG7_LUT u4(led_a[3:0], led2);SEG7_LUT u5(led_b[7:4], led1);SEG7_LUT u6(led_b[3:0], led0);endmodule2.分频模块:module divided_frequency(_1hzout,ncr,_50mhzin);input _50mhzin, ncr;output _1hzout;supply1 vdd;wire[11:0] q;wire _1khzin;wire en1, en2;divfreq50M_1Khz du00(_1khzin, ncr, _50mhzin);//先调用1khz分频counter10 du0(q[3:0], ncr, vdd, _1khzin);counter10 du1(q[7:4], ncr, en1, _1khzin);counter10 du2(q[11:8], ncr, en2, _1khzin);//再调用三个10计数器,将1khz分为1hzassign en1=(q[3:0] == 4'h9);assign en2=(q[7:4] == 4'h9) && (q[3:0] == 4'h9);assign _1hzout = q[11];assign _500hzout = q[0];endmodule3.时钟运行模块module top_clock(hour, minute, second, _1hz, ncr, adjminkey, adjhrkey, _50mhzin);input _1hz, _50mhzin, ncr, adjminkey, adjhrkey;output [7:0] hour, minute, second;wire [7:0] hour, minute, second;//时、分、秒每个用八位二进制表示两位BCD 码supply1 vdd; //高电平, 是使能一直打开wire mincp, hrcp, _5hz;//_5hz用于快速校时divfreq50M_5hz ut0(_5hz, ncr, _50mhzin);counter60 ut1(second, ncr, vdd, _1hz);counter60 ut2(minute, ncr, vdd, ~mincp);//秒和分使用60进制counter24 ut3(hour[7:4], hour[3:0], ncr, vdd, ~hrcp);//时钟为24进制(默认)assign mincp = adjminkey ? _5hz : (second==8'h59);assign hrcp = adjhrkey? _5hz : ({minute,second}==16'h5959);//进位或校时使能控制endmodule4.显示模块:module display(_50mhz,_5hz,cr,led_a,led_b,led_sec,hour,minute,second,h12);input [7:0]hour,minute,second;//时分秒input _50mhz,cr,_5hz;output [7:0]led_a,led_b,led_sec;//数码管显示缓存input h12;//12,24小时制切换reg [7:0]led_a,led_b,led_sec;reg [2:0]mod;//模式变量always@(posedge _50mhz)beginled_b=minute;led_sec=second;//模式0,显示时分秒if(~h12)beginled_a=hour;led_b=minute;led_sec=second;endelsebegincase(hour)8'h13,8'h14,8'h15,8'h16,8'h17,8'h18,8'h19,8'h22,8'h23,8'h24:led_a=hour-8'h12;8'h20:led_a=8'h08;8'h21:led_a=8'h09;default:led_a=hour;endcaseend//12/24小时切换,24到12,相应BCD码减endendmodule5.数码管操作模块module SEG7_LUT (iDIG,oSEG);input [3:0] iDIG;output [6:0] oSEG;reg [6:0] oSEG;always @(iDIG)begincase(iDIG)4'h1: oSEG = 7'b1111001; // ---t----4'h2: oSEG = 7'b0100100; // | |4'h3: oSEG = 7'b0110000; // lt rt4'h4: oSEG = 7'b0011001; // | |4'h5: oSEG = 7'b0010010; // ---m----4'h6: oSEG = 7'b0000010; // | |4'h7: oSEG = 7'b1111000; // lb rb4'h8: oSEG = 7'b0000000; // | |4'h9: oSEG = 7'b0010000; // ---b----4'ha: oSEG = 7'b0001000;4'hb: oSEG = 7'b0000011;4'hc: oSEG = 7'b1000110;4'hd: oSEG = 7'b0100001;4'he: oSEG = 7'b0000110;4'hf: oSEG = 7'b0001110;4'h0: oSEG = 7'b1000000;endcaseendendmodule六、功能仿真1.六进制2.十进制3.六十进制(分了几张图截图)4.24进制5.异步清零仿真6.正常计时仿真秒计时●分计时●小时计时23:59:59秒返07 手动校小时和分钟仿真ADJHrKey 与AdjMinKey均为高电平有效,七、思考题1.什么是分层次的电路设计方法?叙述分层次设计电路的基本过程.答: 在电路设计中,可以将两个或者多个模块组合起来描述电路逻辑功能,通常称为分层次的电路设计.自顶而下和自底而上是两种常用的设计方法.在自顶而下的设计中,先定义顶层模块,然后再定义顶层模块中用到的子模块.而在自底而上的设计中,底层的各个子模块首先被确定下来,然后将这些子模块组合起来构成顶层模块.2.在用MAX+PLUS II 软件设计数字钟电路时,简述对60进制计数器进行仿真分析的大致过程.若仿真时栅格的大小(GRID SIZE)为0.5ms,设置CP信号时倍率(Multiplied By)为软件默认值1,那么仿真文件的时间至少需要多长才能完整反映计数过程?答: 至少要0.5ms * 60 = 30ms八、试验中遇到的问题与解决办法这次实验主要是Verilog代码的编写和仿真, 在波形的仿真过程中, 有许多操作并不清楚, 尤其是部分功能的波形仿真输出和如何手动调整时钟的波形仿真, 虽然最后有同学帮忙, 但是最后还是操作得很不熟练。
Verilog数字钟数电实验报告
专业:电子信息工程班级:电信1305班日期:2015.5.5 第3次实验姓名:康健组别: 6 指导教师:成绩:实验课题:EDA多功能数字钟1、已知条件Quartus II软件、FPGA实验开发装置。
2、主要技术指标以数字形式显示时、分、秒的时间;小时计数器为同步24进制;要求手动校时、校分。
3、实验用仪器PC、FPGA开发板、示波器、稳压电源等4、电路工作原理所谓的时钟,其实本质上就是计数器。
以开发板上的晶振时钟作为时间基准。
然后通过分频模块(计数器)进行分频,得到1Hz的脉冲信号作为秒的信号脉冲,然后用模60的计数器构成秒的计数单元。
每记60下就自动清零且产生进位信号。
将这个进位信号作为分的计数器的使能信号,其中,分计数器也是模为60的计数器。
这里的计数器都是由模10和模6 组成的BCD码的计数器。
个位和十位分别是一个四位的数字。
同理,每记满60,分计数器就会产生一个进位信号,这个进位信号作为小时的使能信号。
小时的计数器就是模24的BCD计数器。
注意,这里的整个电路都是用1HZ的频率作为时间脉冲的,也就是说,这个电路是同步时序的电路。
通过使能,来控制各个部分的时序逻辑。
将小时和分的使能信号在总是为有效电平和下一级进位信号做选择,就是时钟调时状态和正常计时状态的切换。
当在调时状态的时候,时钟每完成一个周期,无论是分钟还是小时,就向前加1,。
最后,将分钟和小时通过译码器连接到数码管。
将秒直接连接到LED灯,完成整个工程的基本功能(扩展功能见选作的实验报告)。
5、电路设计与调试1、模10计数器的设计2、模6计数器的设计3、模60计数器设计(分、秒计数)4、模24计数器设计(小时计数)5、译码器设计6、分频器设计7、时钟整体结构设计6、电路的仿真:1、小时进位的验证:2、分钟进位的验证:3、秒进位的验证:4、testbench的源代码:7、主要技术指标的测量:板子上电以后,将程序下载到板子里面,按复位(rst),时钟开始从零点正常计时。
verilog实验报告时钟设计
课程名称:Verilog数字系统设计实验实验项目:时钟姓名:专业:计算机科学与技术班级:学号:计算机科学与技术学院201年月日哈尔滨理工大学计算机科学与技术学院实验报告实验项目名称:时钟设计一、实验目的1. 掌握 Verilog HDL 语言的基本运用;2. 熟悉 QuartusⅡ的简单操作;3. 掌握一个基本 EDA 工程设计流程;4. 掌握时钟的设计基本原理。
二、实验内容计数器部分中包含有三个主要计数部分,分别是十进制、六进制以及二十四进制,其中六进制和十进制共同组成六十进制,即实现分和秒的计数,之所以将其分开是便于分别显示个位和十位,通过编写计数器,来计数信号的数量,从而实现时分秒按各自的进制正常计数,同时,将前一时钟单位的进位信号作为下一时钟单位的clk,即从后向前驱动,这样便实现了时钟的正常运转。
三、实验要点及说明1.编写各个模块的 VHDL 代码并进行编译与波形仿真, 仿真无误后生成元件符号。
2.设计数字钟电路的顶层文件,在顶层文件中调入第一步中生成的元件符号,并根据连接关系将它们连接在一起。
3.引脚分配,为顶层设计文件中的各个输入输出端口分配芯片相应的引脚。
4.下载程序到芯片,观看实验现象是否为预想的那样。
同时使用清零按键看能否实现清零,时间正常走动情况下通过按键能否实现校时。
四、实验结果下载成功后,拨动开关 DP4至髙电平,使六个数码管复位淸零;拨动开关 DP4 至低电平,数字钟开始自动计,此过程中可以通过 1键设置小时数,2 键设置分钟数。
当秒数满 60 则进一位, 分钟数满60 进一位,当显示为 23:59:59 时,秒数在加一则显示 00:00:00,同时指示一天结束的 LED 灯亮 10 秒,之后从新计时。
五、程序代码module clock(clk,rst,load,data,lamp,de, led_g,st_stop,ledcom);// clk-时钟10M,rst-复位,load-初始值设置,st_stop-启动暂停input clk,rst,load,st_stop;input [7:0] data; //初始值output lamp; //倒计时结束指示灯output [2:0]de; //数码管位选output [7:0]led_g; //数码管段码output ledcom; //指示灯公共端reg clk_g; // ..... LED扫描时钟信号......reg clk_s;// 秒时钟reg[15:0] cnt1; // 10ms 分频计数器reg[23:0] cnt2; // 1s 分频器计数器reg[3:0] bcd1; // 个位bcd码reg[3:0] bcd2; // 十位bcd码reg lamp; // 指示灯reg[1:0]state1; // 2位数码管扫描位置寄存器reg[3:0]led_g_bcd; // bcd转段码寄存器parameterLED1=3'b000,//数码管1LED2=3'b001;//数码管2assign ledcom=1;//// 10Mhz 晶振用2个分频器分别产生数码管扫描时钟和秒时钟// 10ms方波时钟clk_galways @(posedge clk)beginif (cnt1 >=50000)begincnt1 <= 0;clk_g <= ~clk_g;endelsecnt1 <= cnt1 +1'b1;end// 1s方波时钟clk_salways @(posedge clk)beginif (cnt2 >=5000000)begincnt2 <= 0;clk_s <= ~clk_s;endelsecnt2 <= cnt2 +1'b1;endalways@(posedge clk_s or negedge rst or posedge load ) beginif(!rst) //复位初始状态beginlamp<=0; //灭灯bcd1<=0; //数码管输出0bcd2<=0; //endelseif (load)beginbcd1<=data[3:0];//设置初值bcd2<=data[7:4];//endelseif (st_stop) // 启动暂停切换//BCD倒计时计算,到0时亮灯beginif(bcd1==9) //个位/*******/beginif(bcd2==5) lamp<=1;elsebeginbcd1<=0;bcd2<=bcd2+1;endend/******/elsebeginbcd1<=bcd1+1;lamp<=0;endendend//数码管对应位置扫描输出always @(posedge clk_g or negedge rst)beginif(!rst)beginstate1<=LED1;led_g_bcd<= 0;endelsecase(state1)LED1:beginled_g_bcd<=bcd1;state1<=LED2;endLED2:beginled_g_bcd<=bcd2;state1<=LED1;endendcaseendassign de=state1; //位置//数码管段码表译码assign led_g=(led_g_bcd==0)? 8'h3F:(led_g_bcd==1)? 8'h06:(led_g_bcd==2)? 8'h5b:(led_g_bcd==3)? 8'h4f:(led_g_bcd==4)? 8'h66:(led_g_bcd==5)? 8'h6d:(led_g_bcd==6)? 8'h7d:(led_g_bcd==7)? 8'h07:(led_g_bcd==8)? 8'h7f:(led_g_bcd==9)? 8'h6f:8'h00; endmodule。
verilog实验报告
verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。
它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。
实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。
通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。
我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。
然后,我创建了一个测试模块,用于验证与门的正确性。
通过输入不同的组合,我能够验证与门的输出是否符合预期。
接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。
通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。
实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。
时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。
我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。
然后,我创建了一个测试模块,用于验证寄存器的正确性。
通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。
接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。
我还添加了一个复位输入,用于将计数器的值重置为初始状态。
通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。
通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。
实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。
组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。
用Verilog语言编写的多功能数字钟
《数字电子技术课程设计》报告专业班级:姓名:学号:设计日期:一.设计题目多功能数字钟电路设计二.设计任务及要求多功能数字钟应该具有的功能有:显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD 码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz 时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz 信号,必须对输入的系统时钟50Mhz进行分频。
对于整点报时功能,本实验设计的是当进行正点的倒计时5秒时,让LED来闪烁进行整点报时的提示。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。
另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
管脚分配如下表:三.基于Verilog HDL语言的电路设计、仿真与综合(一)顶层模块本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:LocationPIN_R16Option Value VCC S1INPUT Location PIN_P14Option Value VCC S2INPUT Location PIN_J3Option Value VCCCPINPUT Location PIN_M4Location PIN_F3Location PIN_F4Option Value SEL[2..0]OUTPUT Location PIN_L14Option Value LEDOUTPUTLocation PIN_N4Location PIN_G4Location PIN_H4Location PIN_L5Location PIN_L4Location PIN_K4Location PIN_K5Option Value LEDAG[6..0]OUTPUTCP CPoutf enpininst1CPoutS1S2RETHour[5..0]Minute[5..0]Second[5..0]LEDkongzhiqi inst2VCCRETINPUT CPout Hour[5..0]Minute[5..0]Second[5..0]SEL[2..0]LEDAG[6..0]xianshi inst图1:顶层结构框图(二)子模块 1.分频器分频器的作用是对50Mhz 的系统时钟信号进行分频,得到频率为1000hz 的信号,作为显示器的输入信号。
数电自主设计实验报告——Verilog秒表
姓名班级学号实验日期节次教师签字成绩基于BASYS2开发板的记忆秒表设计一、实验目的1、熟悉基于Verilog HDL语言输入方式的数字电路的设计方法。
2、掌握基于FPGA的设计流程。
3、熟悉BASYS2开发板的使用方法。
4、熟悉Xilinx ISE软件的使用方法。
5、培养自己独立自主设计并完成实验的能力。
二、总体设计方案或技术路线本实验利用BASYS2开发板的已有资源来进行设计实验,并用Xilinx ISE软件来编写和综合Verilog代码。
总体设计方案是设计一个带有记忆功能的秒表。
具体而言,该秒表通过BASYS2开发板的50M的时钟进行分频计时,最大计时时间为99.99s,用4位数码管动态显示计时时间,除了有基本的运行、暂停及复位清空功能,还有存储当前时间和查看存储时间的功能。
三、实验电路图BASYS2开发板原理图--数码管板上数码管为4位共阳极数码管,每段为低电平点亮,位选接了三极管增大驱动电流,同时为非逻辑,所以位选信号为低电平有效。
BASYS2开发板原理图--按键本实验用到了两个按键BTN0和BTN1,BTN0为复位按键,对应程序的clear信号,BTN1为存储按键,对应程序的btn[1]信号,按一次该按键数据存储一次,下一次按下时这一次存的数据将被替换掉。
BASYS2开发板原理图--开关本实验用到了两个开关SW7和SW1,SW7为运行、暂停开关,对应程序的sw[0]信号,开关打到上方为运行,下方为暂停,SW1为显示切换开关,对应程序的sw[1]信号,在计时暂停的前提下,将开关打到上方显示出存储的时间数据。
四、仪器设备名称、型号和技术指标硬件:BASYS2开发板软件:Xilinx ISE(编程)、Digilent Adept(下载)五、程序流程图六、程序源代码/////////////////////////////////////////////////////////程序文件`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// // Company:// Engineer://// Create Date: 15:45:01 11/26/2014// Design Name:// Module Name: miaobiao// Project Name:// Target Devices:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments://///////////////////////////////////////////////////////////秒表的顶层模块module miaobiao(input wire clk,///////////////////////////////开发板系统时钟50MHzinput wire[1:0] btn,////////////////////////两个按键:[0]复位和[1]存时间input wire[1:0] sw,/////////////////////////两个开关:[0]运行/暂停和[1]显示存储时间output wire[7:0] smg,/////////////////////数码管的8个段选信号output wire[3:0] smg_an/////////////////数码管的4个位选信号);wire clear;assign clear=btn[0];////////////////////////////////////将复位按键信号传给clear变量wire clk_1k;clkdiv #(50000) m0(clk,clear,clk_1k);//将50MHz进行5万分频输出1kHz时钟信号wire[15:0]number;timer m1(sw[0]&clk_1k,clear,number);///////////计时器模块,输出当前时间数据wire[15:0]num_save;save m2(clk,clear,btn[1],number,num_save);//////按键按下存储当前时间wire[15:0]num_display;/////////////////////////////////////////////////////////////////////////////根据开关状态选择显示内容choose_4num m3(sw,number,num_save,num_display);display m4(clk_1k,clear,num_display,smg,smg_an);///////将数字送给数码管显示endmodule///////////////////////////////////////////////////////////////////////////////4选1数据选择器模块module choose_4num(input wire[1:0]sw,input wire[15:0]number,input wire[15:0]num_save,output reg[15:0]num_display);always@(*)case(sw)0:num_display<=number;/////////////显示内容为当前时间1:num_display<=number;/////////////。
数电数字钟实验报告
数电数字钟实验报告篇一:西安交大数电数字钟实验报告西安交通大学数字电子技术实验报告数字钟设计姓名:**学院:**学院班级:**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.时钟显示功能,能够以十进制显示“时”、“分”、“秒”。
数电实验报告三
数电实验报告三《数电实验报告三:基于Verilog的数字时钟设计与仿真》实验目的:本实验旨在通过使用Verilog硬件描述语言,设计并仿真一个简单的数字时钟电路,以加深对数字电路原理和Verilog语言的理解,并掌握数字时钟电路的设计与仿真方法。
实验器材:1. 计算机2. Quartus Prime软件3. ModelSim仿真工具4. FPGA开发板实验原理:数字时钟电路由时钟模块、分频模块、计数模块和显示模块组成。
时钟模块产生基准时钟信号,分频模块将基准时钟信号分频得到秒、分、时等不同频率的时钟信号,计数模块对时钟信号进行计数,显示模块将计数结果转换为数码管显示。
实验步骤:1. 使用Verilog语言编写时钟模块、分频模块、计数模块和显示模块的硬件描述代码。
2. 在Quartus Prime软件中创建一个新的项目,将Verilog代码添加到项目中,并进行综合和布线。
3. 使用ModelSim仿真工具对设计的数字时钟电路进行仿真验证,检查时钟信号的频率和计数结果的正确性。
4. 将综合和布线后的设计文件下载到FPGA开发板上,进行实际的电路验证和数码管显示效果测试。
实验结果:经过仿真验证和实际测试,设计的数字时钟电路能够准确产生秒、分、时的时钟信号,并将计数结果正确地显示在数码管上。
整个设计过程顺利完成,实现了数字时钟电路的功能。
实验总结:通过本次实验,我们深入了解了Verilog硬件描述语言的基本语法和数字时钟电路的设计原理。
掌握了使用Quartus Prime和ModelSim工具进行数字电路设计和仿真的方法,提高了对数字电路设计和Verilog语言的实际应用能力。
同时,也加深了对数字时钟电路的工作原理和设计流程的理解,为今后的数字电路设计和实验打下了坚实的基础。
verilog hdl电子时钟实验报告
电子时钟:电子时钟的功能:可以显示时间,还可以修改时间。
结构图NO.7:此电路适合于设计时钟、定时器、秒表等。
因为可利用键8和键5分别控制时钟的清零和设置时间的使能;利用键7、5和1进行时、分、秒的设置。
D16D15D14D13D12D11D9D8PIO47D7PIO46D6PIO45D5PIO44D4PIO43D3PIO42D2PIO41PIO40D1NO.7实验电路结构图S P E A K E R扬声器FPGA/CPLD 目标芯片12345678PIO0PIO2PIO3PIO4PIO5PIO6PIO7单脉冲单脉冲单脉冲键1键2键3键4键5键6键7键8PIO47-PIO40PIO39-PIO36PIO35-PIO32PIO31-PIO28PIO27-PIO24PIO23-PIO20PIO19-PIO16译码器译码器译码器译码器译码器译码器实验代码:模块一:时间显示//clk:秒功能的时钟信号,为1Hz 的脉冲信号 //time_set_en:时间设置使能信号 //time_clear(键8):时钟显示的清零//hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set:设置后的小时、分、秒 //hourh,hourl:小时的高低位 //minh,minl:分的高低位 //sech,secl:秒的高低位//cout:进位输出,即计满24小时,向天产生的进位输出信号moduletime_count(clk,time_set_en,time_clear,hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set,h ourh,hourl,minh,minl,sech,secl);input clk;input time_set_en,time_clear;input[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;output[3:0]hourh,hourl,minh,minl,sech,secl;reg[3:0]hourh,hourl,minh,minl,sech,secl;reg c1,c2; //c1和c2分别为秒向分,分向时的进位always@(posedge time_set_en or posedge clk or posedge time_clear)beginif(time_set_en) //time_set_en:时间设置使能信号beginsech<=sech_set;secl<=secl_set;minh<=minh_set;minl<=minl_set;hourh<=hourh_set;hourl<=hourl_set;endelse if(time_clear) //time_clear(键8):时钟显示的清零beginhourh<=0;hourl<=0;minh<=0;minl<=0;sech<=0;secl<=0;endelsebeginif(secl==9) //sech,secl:秒的高低位设置beginsecl<=0;if(sech==5)beginsech<=0;c1<=1;if(minl==9) //minh,minl:分的高低位设置beginminl<=0;if(minh==5)beginminh<=0;c2<=1;if((hourh==2)&&(hourl==3))beginhourh<=0;hourl<=0;endif(hourl==9) //hourh,hourl:小时的高低位设置beginhourl<=0;if(hourh==2)hourh<=0;elsehourh<=hourh+1;endelsebeginhourl<=hourl+1;endendelsebeginminh<=minh+1;endendelsebeginminl<=minl+1;c2<=0;endendelsebeginsech<=sech+1;endendelsebeginsecl<=secl+1;c1<=0;endendendendmodule模块二:时间设置//key7:设置数码管8和7//key4:设置数码管5和4//key1:设置数码管2和1//time_set_en(键5):设置时间的使能端//hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set:设置后的小时、分、秒//hourh,hourl,minh,minl,sech,secl:当前的小时,分,秒moduletime_set(key7,key4,key1,time_set_en,hourh,hourl,minh,minl,sech,secl,hourh_set,hourl_set,minh_ set,minl_set,sech_set,secl_set);input key7,key4,key1;input time_set_en;input[3:0]hourh,hourl,minh,minl,sech,secl;output[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;reg[3:0]hourh_set,hourl_set,minh_set,minl_set,sech_set,secl_set;always@(posedge time_set_en)beginif(key7)beginif((hourh_set==2)&&(hourl_set==3))beginhourh_set<=0;hourl_set<=0;endelse if(hourl_set==9)beginhourl_set<=0;if(hourh_set==2)hourh_set<=0;elsehourh_set<=hourh_set+1;endelsebeginhourl_set<=hourl_set+1;endendelse if(key4)beginif(minl_set==9)beginminl_set<=0;if(minh_set==5)beginminh_set<=0;endelseminh_set<=minh_set+1;endelsebeginminl_set<=minl_set+1;endendelse if(key1)beginif(secl_set==9)beginsecl_set<=0;if(sech_set==5)beginsech_set<=0;endelsesech_set<=sech_set+1;endelsesecl_set<=secl_set+1;endelsebeginhourh_set<=hourh;hourl_set<=hourl;minh_set<=minh;minl_set<=minl;sech_set<=sech;secl_set<=secl;endendendmodule模块三:顶层模块//clk:时间计数的时钟信号//time_set_en:设置时间使能信号//time_clear:显示时间清零使能信号//hourh,hourl,minh,minl,sech,secl:当前或设置后的小时,分,秒//key7:设置数码管8和7//key4:设置数码管5和4//key1:设置数码管2和1moduletime_and_set(clk,time_set_en,time_clear,hourh,hourl,minh,minl,sech,secl,key7,key4,key1); input clk;input time_set_en,time_clear;input key7,key4,key1;output[3:0] hourh,hourl,minh,minl,sech,secl;wire[3:0]hh,hl,mh,ml,sh,sl;wire[3:0]hh_set,hl_set,mh_set,ml_set,sh_set,sl_set;time_countU1( .clk(clk),.time_set_en(time_set_en),.time_clear(time_clear),.hourh_set(hh_set),.hourl_set(hl_s et),.minh_set(mh_set),.minl_set(ml_set),.sech_set(sh_set),.secl_set(sl_set),.hourh(hourh),.hourl(ho url),.minh(minh),.minl(minl),.sech(sech),.secl(secl));time_setU2(.key7(key7),.key4(key4),.key1(key1),.time_set_en(time_set_en),.hourh_set(hh_set),.hourl_set (hl_set),.minh_set(mh_set),.minl_set(ml_set),.sech_set(sh_set),.secl_set(sl_set),.hourh(hourh),.hou rl(hourl),.minh(minh),.minl(minl),.sech(sech),.secl(secl));endmodule模块一的时序仿真图:RTL图:引脚图:实验体会:通过这次课程设计,对fpga有了很多的的认识,而且懂得了硬件的更多知识,课程设计过程中,总会遇到很多的问题,然后一起跟同学讨论,或者问老师,解决问题之后感觉收获很多,而且学会了自己独立思考,查询资料。
数电设计实验报告
一、实验目的1. 熟悉数字电路的基本组成和设计方法。
2. 学习组合逻辑电路和时序逻辑电路的设计与实现。
3. 掌握Verilog HDL语言进行数字电路的设计与仿真。
4. 提高数字电路分析与设计能力。
二、实验内容本次实验主要设计一个数字钟电路,要求实现以下功能:1. 显示时、分、秒,时间周期为24小时。
2. 时间基准为1秒对应1Hz的时钟信号。
3. 可通过按键进行校时。
三、实验原理数字钟电路主要由以下部分组成:1. 振荡器:产生基准时钟信号。
2. 分频器:将基准时钟信号分频,得到1Hz的时钟信号。
3. 计数器:对1Hz的时钟信号进行计数,实现秒、分、时的计时。
4. 显示器:将计时结果显示出来。
5. 校时电路:通过按键进行校时操作。
四、实验步骤1. 使用Verilog HDL语言编写数字钟电路的代码。
2. 使用ModelSim进行仿真,验证电路功能。
3. 将代码编译并下载到FPGA芯片上。
4. 在FPGA开发板上进行实验,测试电路功能。
五、实验代码```verilogmodule digital_clock(input clk, // 基准时钟信号input rst_n, // 复位信号,低电平有效 input set, // 校时按键output [5:0] h, // 时output [5:0] m, // 分output [5:0] s // 秒);reg [23:0] counter; // 计数器reg [23:0] h_counter; // 时计数器reg [23:0] m_counter; // 分计数器reg [23:0] s_counter; // 秒计数器// 时计数器always @(posedge clk or negedge rst_n) beginif (!rst_n) beginh_counter <= 24'd0;end else beginif (counter >= 24'd86400) beginh_counter <= h_counter + 24'd1;counter <= 24'd0;end else begincounter <= counter + 24'd1;endendend// 分计数器always @(posedge clk or negedge rst_n) begin if (!rst_n) beginm_counter <= 24'd0;end else beginif (h_counter >= 24'd24) beginm_counter <= m_counter + 24'd1; h_counter <= 24'd0;end else beginm_counter <= m_counter + 24'd1; endendend// 秒计数器always @(posedge clk or negedge rst_n) begin if (!rst_n) begins_counter <= 24'd0;end else beginif (m_counter >= 24'd59) begins_counter <= s_counter + 24'd1;m_counter <= 24'd0;end else begins_counter <= s_counter + 24'd1;endendend// 时、分、秒输出assign h = h_counter[5:0];assign m = m_counter[5:0];assign s = s_counter[5:0];endmodule```六、实验结果1. 仿真结果:使用ModelSim对代码进行仿真,验证电路功能。
数字钟课程设计实验报告
数字钟课程设计实验报告
实验名称:数字钟课程设计实验
实验目的:设计并制作一款数字钟,学习数字电路的基本构成及工作原理,并深入掌握Verilog 语言的设计和仿真技术。
实验原理:数字钟由时钟电路、驱动电路、显示电路三部分组成。
时钟电路以晶体振荡器为基础,产生高精度的基准时钟信号;驱动电路通过将时钟信号分频、选择和转换,来控制数字显示管的亮灭和数字显示内容;显示电路则将数字经过解码、整合,转换成人类可以识别的时间。
实验步骤:
1. 选择合适的FPGA芯片和数字显示管,根据其接口特点,确定各部分电路的 Pin Assignment。
2. 采用Verilog语言,编写时钟电路模块,实现一个基于晶体振荡器的高精度时钟信号。
3. 编写驱动电路模块,根据时钟信号,实现数字显示管LED的闪烁。
4. 编写显示电路模块,把数码管的8个数字位置写入代码中,并将显示电路模块与时钟电路模块和驱动电路模块相连接。
5. 通过FPGA仿真,进行数字钟模块的验证和测试。
6. 将程序下载到FPGA芯片中,并进行实际调试测试。
实验结果:
本实验设计的数字钟可以按照设定时间进行准确的数字显示,且易于调整时钟的显示时间。
数字钟在 FPGS 上实现良好,实验结果满意。
实验总结:
通过本实验,学习了数字电路的基本构成及工作原理,并深入掌握了Verilog语言的设计和仿真技术。
对于数字电路的实际应用,我有了更加深入的认识。
同时,对于FPGA的开发和调试过程也有了初步的了解,掌握了相关的基本操作和流程。
数电实验数字钟报告(含程序代码)
多功能数字钟设计一、实验目的1. 掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2. 熟悉一种EDA软件使用;3. 掌握Verilog设计方法;4. 掌握分模块分层次的设计方法;5. 用Verilog完成一个多功能数字钟设计。
二、实验任务1. 已知条件MAX+Plus II软件FPGA实验开发装置(该装置可以提供3路时钟信号和译码显示电路)基本功能具有“秒”、“分”、“时”计时功能,小时按24小时制计时。
具有校时功能,能对“分”和“小时”进行调整2. 扩展功能仿广播电台正点报时。
在59分51秒、53秒、55秒、57秒发出低音512Hz信号,在59分59秒时发出一次高音1024Hz信号,音响持续1秒钟,在1024Hz音响结束时刻为整点。
定时控制,其时间自定;3. 选做内容任意时刻闹钟自动报整点时数小时计数器改为12翻1三、数字钟设计分析-功能框图四、设计编译1.设计输入module top_clock (Second,ap,CP,nCR,EN,Adj_Min,Adj_Hour,ctrlbell,sethrkey,setminkey, alarm,_1khz,_500hz,rhr,rmin);input CP,nCR,EN,Adj_Min,Adj_Hour,ctrlbell,_1khz,_500hz,sethrkey,setminkey;output[7:0] rhr,rmin,Second;output alarm;wire[7:0] set_hr,set_min,Hour,Minute;wire alarm_clock,alarm_r,alarm_r1;wire _1khz,_500hz,CP;output ap;reg[7:0] rhr,rmin,Second;supply1 Vdd;wire MinL_EN,MinH_EN,Hour_EN,Ap;wire hrh_equ,hrl_equ,minh_equ,minl_equ;wire time_equ;//Hour:Minute:Second countercounter10 U1(Second[3:0],nCR,EN,CP);counter6 U2(Second[7:4],nCR,(Second[3:0]==4'h9),CP);assign MinL_EN=Adj_Min?Vdd:(Second==8'h59);assignMinH_EN=(Adj_Min&&(Minute[3:0]==4'h9))||(Minute[3:0]==4'h9)&&(Second==8'h59);counter10 U3(Minute[3:0],nCR,MinL_EN,CP);counter6 U4(Minute[7:4],nCR,MinH_EN,CP);assign Hour_EN=Adj_Hour?Vdd:((Minute==8'h59)&&(Second==8'h59));counter24 U5(Hour[7:4],Hour[3:0],nCR,Hour_EN,CP,Ap);//若闹钟调整使能端开启,数码管显示闹铃设置时间,反之显示时钟时间。
verilog电子钟实验报告
深圳大学实验报告课程名称:硬件描述语言与逻辑综合实验项目名称:电子时钟Verilog HDL的设计与仿真学院:电子科学与技术学院专业:微电子科学与工程指导教师:一、实验目的1、掌握Quartus ii 软件的使用方法以及各种语句使用方法;2、学习如何运用verilog HDL 设计简单的数字电路3、掌握基本时序逻辑仿真的实现,以及上机运行的操作;4、掌握Verilog HDL 中模块运用的思想,为以后的实践打下基础。
二、实验原理数字时钟模块组织结构如图所示:数码管显示模块计时模块分频模块Clk 实验原理图如上图所示。
所谓的时钟,其实本质上就是计数器。
以开发板上的晶振时钟27MHZ 作为时间基准。
然后通过分频模块(计数器)进行分频,得到1Hz 的脉冲信号作为1秒的信号脉冲,然后用模60的计数器构成秒的计数单元。
每记60下就自动清零且产生进位信号。
将这个进位信号作为分的计数器的使能信号,其中,分计数器也是模为60的计数器。
这里的计数器都是由模10和模6组成的BCD码的计数器。
个位和十位分别是一个四位的数字。
同理,每记满60,分计数器就会产生一个进位信号,这个进位信号作为小时的使能信号。
小时的计数器就是模24的BCD计数器。
注意,这里的整个电路都是用1HZ的频率作为时间脉冲的,也就是说,这个电路是同步时序的电路。
通过使能,来控制各个部分的时序逻辑。
当在调时状态的时候,时钟每完成一个周期,无论是分钟还是小时,就向前加1。
最后,将分钟和小时通过译码器连接到数码管。
将秒直接连接到LED灯,完成整个工程的基本功能。
每个计数器要配两个译码器模块,以保证数值能正确的显示到DE2板上。
三、实验过程(附源代码)本实验需要用到四个模块,分别是27MHz的分频器模块,模为60的加法计数器模块,模为24的加法计数器模块以及七段数码管的译码器模块。
由四个模块和主函数构成整个源程序。
源程序所有代码如下:Moduleclock(reset,stop,clk,load_sec,load_min,load_hour,data,de_sec1,de_sec2,de_min1,de_min2,de_hour1,de_hour2);output[6:0]de_sec1,de_sec2,de_min1,de_min2,de_hour1,de_hour2;input reset,clk,load_sec,load_min,load_hour,stop;input[7:0]data;wire[7:0]sec,min,hour;wire one_second,sec_min,min_hour;//定义变量和数据类型等divider FP(one_second,stop,clk);//27MHZ分频成1HZ//计时部分count60miao(sec,sec_min,data,load_sec,1,reset,one_second);count60fen(min,min_hour,data,load_min,sec_min,reset,one_second);count24shi(hour,data,load_hour,min_hour,reset,one_second);//七位数码管显示部分decode4_7sec_1(de_sec1,sec[3:0]);decode4_7sec_2(de_sec2,sec[7:4]);decode4_7min_1(de_min1,min[3:0]);decode4_7min_2(de_min2,min[7:4]);decode4_7hour_1(de_hour1,hour[3:0]);decode4_7hour_2(de_hour2,hour[7:4]);endmodule//divider代码,分频器模块module divider(one_second,reset,clk);output one_second;input reset,clk;reg one_second;reg[23:0]cnt;always@(posedge clk)beginif(reset)begincnt<=0;one_second<=0;endelse if(cnt===13499999)begincnt<=0;one_second<=~one_second;endelsecnt<=cnt+1;endendmodule//代码结束//count60代码,秒、分计数模块module count60(qout,cout,data,load,cin,reset,clk); output[7:0]qout;output cout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[3:0]==9)//低位是否为9,如果是则beginqout[3:0]<=0;//回0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]<=0;elseqout[7:4]<=qout[7:4]+1;//高位不为5,则加1 endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendassign cout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmodule//代码结束//count24代码,时计数模块module count24(qout,data,load,cin,reset,clk);output[7:0]qout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[7:4]==2)beginif(qout[3:0]==3)qout<=0;elseqout[3:0]<=qout[3:0]+1;endelsebeginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0qout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendendendmodule//结//decode4_7代码开始,七位数码管显示模块module decode4_7(decodeout,indec);output[6:0]decodeout;input[3:0]indec;reg[6:0]decodeout;always@(indec)begincase(indec)//用case语句进行译码,共阴4'd0:decodeout=7'b1000000;4'd1:decodeout=7'b1111001;4'd2:decodeout=7'b0100100;4'd3:decodeout=7'b0110000;4'd4:decodeout=7'b0011001;4'd5:decodeout=7'b0010010;4'd6:decodeout=7'b0000010;4'd7:decodeout=7'b1111000;4'd8:decodeout=7'b0000000;4'd9:decodeout=7'b0010000;default:decodeout=7'bz;endcaseendendmodule//结束四、时序仿真结果1、分频器时序仿真源代码:module divider(one_second,reset,clk);output one_second;input reset,clk;reg one_second;reg[23:0]cnt;always@(posedge clk)beginif(reset)begincnt<=0;one_second<=0;endelse if(cnt===5)//13499999改成5,为了使波形能够在时序仿真中顺利出现begincnt<=0;one_second<=~one_second;endelsecnt<=cnt+1;endendmodule2、模为60的加法计数器模块仿真源程序:module count60(qout,cout,data,load,cin,reset,clk);output[7:0]qout;output cout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]<=0;elseqout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendassign cout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmodule3、模为24的加法计数器模块仿真源程序:module count24(qout,data,load,cin,reset,clk);output[7:0]qout;input[7:0]data;input load,cin,clk,reset;reg[7:0]qout;always@(posedge clk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位else if(load)qout<=data;//同步置数else if(cin)beginif(qout[7:4]==2)beginif(qout[3:0]==3)qout<=0;elseqout[3:0]<=qout[3:0]+1;endelsebeginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回0qout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendendendmodule4、七段数码管译码器模块源程序:module decode4_7(decodeout,indec);output[6:0]decodeout;input[3:0]indec;reg[6:0]decodeout;always@(indec)begincase(indec)//用case语句进行译码4'd0:decodeout=7'b1000000;4'd1:decodeout=7'b1111001;4'd2:decodeout=7'b0100100;4'd3:decodeout=7'b0110000;4'd4:decodeout=7'b0011001;4'd5:decodeout=7'b0010010;4'd6:decodeout=7'b0000010;4'd7:decodeout=7'b1111000;4'd8:decodeout=7'b0000000;4'd9:decodeout=7'b0010000;default:decodeout=7'bz;endcaseendendmodule五、上机测试结果程序烧录到DE2板上后,由13个拨码开关控制整个程序的进行,SW17是置0功能,SW13是暂停功能,SW14到SW16则分别是三个计数器模块的置数开关,置数数据由SW0到SW7输入。
Verilog数字钟设计实验报告
基于FPGA实现多功能数字钟——电子系071180094王丛屹摘要本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真。
此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能。
[关键词] FPGA;Verilog HDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。
能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。
能够利用按键实现“较时”、“较分”功能,随时对数码管的显示进行校正和校对。
数字中系统主要由系统时钟,三个功能按键(mode ,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。
图: 多功能数字钟总体设计模块以下就各个模块说明其功能1. 分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法。
RTL图如下:代码如下:最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz ,clk_100Hz,clk_1k。
2、计时模块原理:m是模式按键,当m=0时,进入计时模式,在计时模式下可以进行时间调整。
num3,num4产生加速调整时间,当其值为1时,可以快速调整时间,该调整时间的频率由clk提供。
counta,count1是手动调节时间。
Turn接按键,可以改变当前调节的是小时还是分钟,长按turn键还可以使秒钟信号清零。
sec1,min1,hour1输出的是计时的秒,分,时。
RTL图如下:代码如下:input count1,counta;output [7:0] sec1,min1;output [7:0] hour1;wire clk_1Hz,ct1,cta,turn,num3,num4;reg [7:0] sec1=0,min1=0;reg [7:0] hour1=0;reg [1:0] m;wire count1,counta;reg minclk,hclk;always @(posedge mode) //mode 信号控制系统在三种功能间转换beginif(m==4) m<=0;else m<=m+1;end/////秒钟计时模块//////always @(posedge clk_1Hz)if((sec1==8'h59)|turn&(!m))///////若长时间按住该键,还可使秒信号清零,用于精确调时。
数电编程实验报告
实验名称:基于Verilog HDL的数字频率计设计实验日期:2023年11月1日实验目的:1. 掌握Verilog HDL编程语言的基本语法和编程技巧。
2. 理解数字频率计的工作原理和设计方法。
3. 培养团队合作和问题解决能力。
实验内容:本次实验要求设计一个基于Verilog HDL的数字频率计,能够测量输入信号的频率,并将结果显示在数码管上。
实验原理:数字频率计的基本原理是利用计数器对输入信号的周期进行计数,然后通过计算得到频率。
具体步骤如下:1. 使用一个时钟信号作为计数器的时钟输入。
2. 计数器在时钟信号的作用下对输入信号的周期进行计数。
3. 当计数器达到预设的值时,停止计数,并计算出频率。
4. 将计算出的频率显示在数码管上。
实验步骤:1. 环境搭建:在Quartus II软件中创建一个新的工程,并添加Verilog HDL源文件。
2. 模块设计:设计一个名为`frequency_counter`的模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。
- 输出信号:计数器输出`count`、频率输出`frequency`。
- 功能:对输入信号的周期进行计数,并计算出频率。
3. 数码管驱动模块设计:设计一个名为`segment_display`的模块,该模块包含以下功能:- 输入信号:计数器输出`count`、数码管段选信号`seg`。
- 输出信号:数码管显示信号`display`。
- 功能:将计数器输出转换为数码管显示信号。
4. 顶层模块设计:设计一个名为`top`的顶层模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。
- 输出信号:数码管显示信号`display`。
- 功能:调用`frequency_counter`和`segment_display`模块,实现数字频率计的功能。
基于verilog数字钟设计报告
一、课程设计目标1. 熟悉并掌握verilog 硬件描述语言2. 熟悉quartus 软件开发环境3.学会设计大中规模的数字电路,并领会其中的设计思想二、课程设计实现的功能(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);(2)可以调节小时,分钟。
(3)能够进行24小时和12小时的显示切换。
(4)可以设置任意时刻闹钟,并且有开关闹钟功能。
(5)有整点报时功能,几点钟LED灯闪亮几下。
(6)有复位按键,复位后时间从零开始计时,但闹钟设置时间不变。
三、设计原理:1、总原理框图:2、各个子模块设计:(1)、分频模块:分频模块的作用主要是要获得各种频率的时钟信号。
输入信号为50MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对50MHZ信号分频。
通过计数的方式,当计数从0开始到24 999999时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。
对于其他信号也是如此,只是计数值不一样,得到的分频信号不同。
部分代码如下:always@(posedge _50MHZ or negedge nCR)beginif(~nCR)beginQ1<=32'd0;endelse if(Q1>=32'd2*******)beginQ1<=32'd0;_1HZ=~_1HZ;endelse beginQ1<=Q1+1'd1;end(2)、计数模块:秒计数:在1HZ脉冲下进行秒计时,当计时达到59秒后,在下一个脉冲来临变0,并发出一个脉冲信号,可供下面分钟计数作为输入脉冲信号计时。
分钟计数:在输入脉冲下,分钟开始计时,当计时达到59后,在下一个脉冲来临变0,并发出一个脉冲,供小时计数的输入脉冲新号。
小时计数:脉冲信号来临时,计数加1,达到23后在下一个脉冲的作用下清零,从新计时。
如果有复位信号,则时分秒全部清零。
部分代码如下:module second(cp,reset,mode_flag,BT2,SH,SL,co);input cp,reset,BT2;input[3:0]mode_flag;output co=1'b0; //输出脉冲信号reg co;output [3:0]SL,SH; //输出秒计时的十位、各位reg[3:0]SH,SL;reg[7:0]cnt;always@(posedge cp or negedge reset )beginif(!reset) begin //有复位,清零cnt<=8'd0;SH<=4'd0;SL<=4'd0;endelse if((mode_flag==4'b0010)&&(!BT2)) begin// 如果分钟调节,秒清零cnt<=8'd0;SH<=4'd0;SL<=4'd0;endif(cnt==8'd59) //计时达到59,下一个脉冲下从新计时begincnt<=8'd0;SH<=4'd0;SL<=4'd0;co<=1'b1;endelsebeginco=1'b0;cnt=cnt+8'd1;SL<=cnt%10; //秒十位SH<=cnt/10; //秒各位endendendendmodule分计时和小时计时代码和上述类似,不再举出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业:电子信息工程班级:电信1305班日期:2015.5.5 第3次实验
姓名:康健组别: 6 指导教师:成绩:
实验课题:EDA多功能数字钟
1、已知条件
Quartus II软件、FPGA实验开发装置。
2、主要技术指标
以数字形式显示时、分、秒的时间;小时计数器为同步24进制;要求手动校时、校分。
3、实验用仪器
PC、FPGA开发板、示波器、稳压电源等
4、电路工作原理
所谓的时钟,其实本质上就是计数器。
以开发板上的晶振时钟作为时间基准。
然后通过分频模块(计数器)进行分频,得到1Hz的脉冲信号作为秒的信号脉冲,然后用模60的计数器构成秒的计数单元。
每记60下就自动清零且产生进位信号。
将这个进位信号作为分的计数器的使能信号,其中,分计数器也是模为60的计数器。
这里的计数器都是由模10和模6 组成的BCD码的计数器。
个位和十位分别是一个四位的数字。
同理,每记满60,分计数器就会产生一个进位信号,这个进位信号作为小时的使能信号。
小时的计数器就是模24的BCD计数器。
注意,这里的整个电路都是用1HZ的频率作为时间脉冲的,也就是说,这个电路是同步时序的电路。
通过使能,来控制各个部分的时序逻辑。
将小时和分的使能信号在总是为有效电平和下一级进位信号做选择,就是时钟调时状态和正常计时状态的切换。
当在调时状态的时候,时钟每完成一个周期,无论是分钟还是小时,就向前加1,。
最后,将分钟和小时通过译码器连接到数码管。
将秒直接连接到LED灯,完成整个工程的基本功能(扩展功能见选作的实验报告)。
5、电路设计与调试
1、模10计数器的设计
2、模6计数器的设计
3、模60计数器设计(分、秒计数)
4、模24计数器设计(小时计数)
5、译码器设计
6、分频器设计
7、时钟整体结构设计
6、电路的仿真:
1、小时进位的验证:
2、分钟进位的验证:
3、秒进位的验证:
4、testbench的源代码:
7、主要技术指标的测量:
板子上电以后,将程序下载到板子里面,按复位(rst),时钟开始从零点正常计时。
8个led 显示秒十位和个位的二进制数码。
数码管显示分和小时的二进制数字。
按下调试按钮,分钟或者小时开始不断的+1,达到调节时间的效果。
8、实验的分析研究:
1、调试仿真代码时应该分快进行仿真,保证所有的子模块逻辑无误后,再进行模块的的联调联试。
如果一开始就对于整体进行仿真,很有可能出现无法检查出来的逻辑错误。
2、只有在仿真没有错误的前提下再下载到板子上面进行调试。
否则可能烧坏板子。
3、在仿真的时候,可以将分频器去掉,这样虽然时间与实际的时间不相符,但是可以更快的得到仿真结果。
同样可以看到时钟是否存在逻辑错误。
4、板子上电以后,复位以后再观察结果。
9、实验总结:
1、本次实验,学会了如何用Verilog设计简单的数字电路。
而且学会了对于电路进行仿真。
2,、更加深刻的理解了同步时序电路和异步时序电路的区别。
3、深刻了对于Verilog以及FPGA的热爱。
感受到了eda的方便简单。
4、在实现了基本功能的基础上,后续又添加了闹钟、整点计时等附加功能。
详见附加实验的实验报告。