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;/////////////。
- 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、在实现了基本功能的基础上,后续又添加了闹钟、整点计时等附加功能。
详见附加实验的实验报告。