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 的信号,作为显示器的输入信号。
VerilogHDL语言数字时钟
VerilogHDL语言数字时钟EDA与数字系统设计报告实验名称:带有设臵时间功能和闹钟功能的数字钟一、设计内容和要求实验要求使用Verilog HDL进行多功能时钟的设计具体要求如下:1.能将基本的小时、分钟、及秒钟显示在数码管上2.能利用拨码开关进行时间的校正3.具有整点报时和闹钟的功能二、设计原理1.工作原理多功能数字钟系统共包括三个模块,即分频器模块、计数器模块和显示译码模块。
多功能数字钟的功能可以从整体上分为三类,分别是正常计时、时钟校对和闹钟设臵,所以考虑在系统中设臵一个模式控制信号mode。
模式控制信号对应一个按键,每按一次按键相当于工作模式进行一次变换,多次按下则数字钟将在正常计时、时间校对和闹钟设臵三个工作模式下依次循环。
在设计中,时钟校对和闹钟设臵工作模式都需要对时间进行设臵,通常是对小时和分钟进行设臵,所以需要在系统中设臵一个时间设臵信号set,对应一个按键,每按一次相当于在小时设臵和分钟设臵之间进行转换。
时间设臵时,分钟和小时计时单位之间互相独立,不存在进位关系。
同时设臵一个时间调整信号accum,每按一次与accum对应的按键,相当于对需要调整的分钟或小时的数字进行加1操作。
数字钟的计时输出信号时必不可少的,用hour,min和sec信号分别表示需要显示的小时、分钟和秒钟的计时结果,上述计时结果将通过译码显示模块进行译码后,连接到外部的七段数码显示器。
在带有闹钟设臵功能的数字钟中,闹钟输出信号也是必不可少的,到达到闹钟设臵的时间后,要向外部扬声器发送一个闹铃信号,设臵alert。
另外,我们还提供了闹钟铃声信号voice,当voice为0的时候,闹钟处于静音状态下,即使时间达到闹钟设定的时间也不会发声,当voice为1的时候,可以正常闹铃,voice信号对应一个拨码开关。
本设计中的小时、分钟和秒钟的计时结果采用BCD码表示方法。
采用这种表示方法便于对数结果的高位和低位分别进行译码。
用Verilog语言编写的多功能数字钟
这次的闹钟电路设计和多功能数字钟有一些相似的地方,不同在于整体构思和细
节上要求的差异。
构思根据要求采用的是状态机设计方法。从一个状态进入另一个状态最适合这个
设计了。细节上和数字钟也有很大的差异。中间的控制逻辑有时候需要反馈。前
后都是有联系的,并不是独立存在的。
本次设计基本上完成的所以的要求,但是由于时间紧急,一些细节并不是很完美,
分频器的作用是对 50Mhz 的系统时钟信号进行分频,得到频率为 1hz 的信号,
作为时钟的输入信号。
2
2.控制器和计数器 控制器的作用是,调整小时和分钟的值,并能实现清零功能。计数器的
作用是实现分钟和秒钟满 60 进 1,小时则由 23 跳到 00。当到达 59 分 55 秒的时 候,LED 灯会闪烁来进行报时。
end 2:
begin state<=2; s=1;
end 3:
begin s=0; if(k1==0) //时调整
7
begin
if(nz_h_l==3)
begin
nz_h_l=0;
if(nz_h_h==2)nz_h_h=0;
else nz_h_h=nz_h_h+1;
end
else nz_h_l=nz_h_l+1;
end
else if(k3==0) finish=1;
//设置完成
else if(k4==0) spker_en=1; //停止声响
end
8
4: begin s=0; if(k4==0) begin on_off<=!on_off;state=0;end end
endcase end end endmodule 3.显示器 显示器的作用是将时:分的值在数码管上依次显示出来。从分频器输出的 1Khz 的信号作为数码管的扫描信号。SEL 表示 6 个数码管选择位,它的取值表示八个 数码管,从左至右依次是 111~000。seg 表示七段数码管,它的取值决定特定位 数上显示的数字。
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数字时钟课程设计一、课程目标知识目标:1. 学生能理解Verilog硬件描述语言的基本语法和结构;2. 学生能掌握数字时钟的工作原理,包括分频器、计数器等关键模块的功能与实现;3. 学生能运用Verilog语言设计并实现一个具有时、分、秒显示功能的数字时钟。
技能目标:1. 学生能运用所学知识,进行模块化设计和编程,具备初步的数字系统设计能力;2. 学生能通过仿真工具验证数字时钟设计的正确性,并解决简单的问题;3. 学生能通过课程学习,提高逻辑思维能力和团队协作能力。
情感态度价值观目标:1. 学生对数字电路设计产生兴趣,培养探究精神和创新意识;2. 学生在课程实践中,树立正确的工程观念,注重实际操作和实际应用;3. 学生在团队合作中,学会沟通与协作,培养集体荣誉感和责任感。
课程性质:本课程为电子信息类专业高年级学生设计,以实践性为主,结合理论教学。
学生特点:具备一定的电子技术和编程基础,对数字电路有一定了解。
教学要求:注重理论与实践相结合,强调动手能力培养,提高学生解决实际问题的能力。
通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高综合素养。
二、教学内容1. 数字时钟原理介绍:包括时钟信号产生、分频器、计数器等基本概念和工作原理。
- 教材章节:第三章 数字电路基础,第四节 时序逻辑电路。
2. Verilog语言基础:Verilog语法结构、数据类型、运算符、模块定义等。
- 教材章节:第四章 硬件描述语言Verilog,第一、二、三节。
3. 数字时钟设计:基于Verilog语言,分别设计秒、分、时计数器,以及分频器等模块。
- 教材章节:第四章 硬件描述语言Verilog,第四节 实例分析。
4. 仿真与验证:使用仿真工具(如ModelSim)对设计进行功能仿真和时序仿真。
- 教材章节:第五章 数字电路仿真,第一、二节。
5. 数字时钟综合与实现:将各模块整合,实现一个完整的数字时钟,并进行板级测试。
用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设计)
设计目标与要求
设计一个简单的数字 时钟,能够显示时、 分、秒。
时钟应具有可靠性、 稳定性和可扩展性。
要求使用Verilog语 言实现,并能够在 FPGA或ASIC上实现。
设计思路及流程
• 设计思路:采用模块化设计方法,将数字时钟划分为不同的模 块,如计数器模块、显示模块等。每个模块负责实现特定的功 能,并通过接口与其他模块进行通信。
设计思路及流程
设计流程 1. 确定设计需求和目标。 2. 制定设计方案和计划。
设计思路及流程
3. 编写Verilog代码,实现各个模块的功能。 5. 根据测试结果进行调试和优化。
未来改进方向探讨
提高计时精度
通过改进算法或采用更高 性能的硬件平台,提高数
字时钟的计时精度。
降低资源占用
优化代码结构,减少不 必要的资源占用,提高 时钟系统的运行效率。
增加实用功能
拓展应用领域
考虑增加闹钟、定时器 等实用功能,使数字时 钟更加符合用户需求。
探索将数字时钟应用于 更多领域,如智能家居、
数据类型与运算符
Verilog中的数据类型包括
整型、实型、时间型、数组、结构体等。
Verilog中的运算符包括
算术运算符、关系运算符、逻辑运算符、位运算符等。
顺序语句与并行语句
Verilog中的顺序语句包括
赋值语句、条件语句、循环语句等,用于描述电路的时序行为。
Verilog中的并行语句包括
模块实例化、连续赋值语句、门级电路描述等,用于描述电路的并行行为。
课程设计用verilog实现简易数字钟
合肥工业大学电子科学与技术专业集成电路前端课程设计报告设计题目:简易数字钟设计姓名学号班级电子科学与技术1班日期2010年12月6日模式:7按键7 PIO6 引脚7 change4 3 4 t_hou1 0 1 t_min时钟显示hou2 PIO 39-36 84 83 78 77hou1 35-32 76 75 74 73min2 31-28 72 71 70 69min1 27-24 68 67 52 51sec2 23-20 50 49 48 47sec1 19-16 42 41 40 39灯at 47 106clock clock0 123(选择1Hz的信号)模式1 正常计时模式at=0 灯灭模式2 手动较时模式at=1 灯亮按建功能:change 控制数字钟在计时和手动调整两个状态之间转换t_min 分钟手动调整按键t_hou 小时手动调整按键clock 标准1HZ时钟信号中间变量tun 秒到分的进位信号mod 分到时的进位信号mt 分钟的控制信号上升沿触发nt 时钟的控制信号上升沿触发输出sec1 秒个位sec2 秒十位min1分个位min2分十位hou1时个位hou2时十位at 表示模式的变量0为正常计时模式,1表示手动调整模式概述:要求:1设计一个能显示时、分、秒的简易数字钟。
具有时间调整功能。
2利用GW48-PK2系统上的数码管显示时间。
3 调整时间用的按键也使用GW48-PK2系统上的按键。
目的:本次课程设计的目的是为了掌握FPGA技术的层次化设计方法,掌握ModelSim和QuartusⅡ的使用方法。
步骤:用verilog语言在记事本编写程序,然后在ModelSim中仿真,查看波形,再用QuartusⅡ仿真,定义针脚,在面板上模拟。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的寿命,因此得到广泛的应用。
用verilog-HDL多功能数字钟
用verilog-HDL多功能数字钟Verilog HDL实验报告基于Verilog HDL语言的多功能数字钟设计一、试验目的设计一个有如下功能的数字钟:(1)计时功能:包括时、分、秒。
(2)定时与闹钟功能:能在所设定的时间发出铃音。
(3)校时功能:对小时、分钟和秒钟进行手动校时。
(4)整点报时功能:每到整点能够发出“嘀嘀嘀嘀嘟”四短一长的报时。
二、试验原理ALERT HOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MINCLK CLK_1K MODE TURN CHANGEclockCLK CLK_1K MODE TURN CHANGEALERTHOUR[7..0]MIN[7..0]SEC[7..0]LD_ALERT LD_HOUR LD_MIN多功能数字钟端口示意图数字钟设有五个输入端,分别为时钟输入(CLK )、模式(MODE )、产生声音的时钟信号(CLK_1K )、切换(TURN )和调时(CHANGE )键。
输出共七个,其中HOUR[7..0]、MIN[7..0]和SEC[7..0]采用BCD 计数方式,分别驱动2个数码管。
硬件电路原理图如下:三、试验内容1. 代码/*信号定义:clk: 标准时钟信号,其频率为4Hz;clk_1k:产生闹铃声、报时音的时钟信号,其频率为1024Hz;mode:功能控制信号;为0:计时功能;为1:闹钟功能;为2:手动校时功能;turn:接按键,在手动校时功能时,选择是调整小时还是分钟;若长时间按住改建,还可使秒信号清零,用于精确调时;change: 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快速加1,用于快速调时和定时;hour,min,sec:此三信号分别输出并显示时、分、秒信号,皆采用BCD码计数,分别驱动6个数码管显示时间;alert:输出到扬声器的信号,用于产生闹铃音和报时音;闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,则可屏蔽该音;整点报时音为“嘀嘀嘀嘀嘟”四短一长音;LD_alert:接发光二极管,指示是否设置了闹钟功能;LD_hour:接发光二极管,指示当前调整的是小时信号;LD_min:接发光二极管,指示当前调整的是分钟信号*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_mi n);input clk,clk_1k,mode,change,turn;output alert,LD_alert,LD_hour,LD_min;output[7:0] hour,min,sec;reg[7:0] hour,min,sec,hour1,min1,sec1,ahour,amin;reg[1:0] m,fm,num1,num2,num3,num4;reg[1:0] loop1,loop2,loop3,loop4,sound;reg LD_hour,LD_min;reg clk_1Hz,clk_2Hz,minclk,hclk;reg alert1,alert2,ear;reg count1,count2,counta,countb;wire ct1,ct2,cta,ctb,m_clk,h_clk;always @(posedge clk)beginclk_2Hz<=~clk_2Hz;if(sound==3) begin sound<=0; ear<=1; end //ear信号用于产生或屏蔽声音else begin sound<=sound+1; ear<=0; endendalways @(posedge clk_2Hz) //由4Hz的输入时钟产生1Hz的时基信号clk_1Hz<=~clk_1Hz;always @(posedge mode) //mode信号控制系统在三种功能间转换begin if(m==2) m<=0; else m<=m+1; endalways @(posedge turn)fm<=~fm;always //产生count1,count2,counta,countb四个信号begincase(m)2:begin if(fm)begin count1<=change; {LD_min,LD_hour}<=2; endelsebegin counta<=change; {LD_min,LD_hour}<=1; end{count2,countb}<=0;end1:begin if(fm)begin count2<=change; {LD_min,LD_hour}<=2; endelsebegin countb<=change; {LD_min,LD_hour}<=1; end{count1,counta}<=2'b00;enddefault:{count1,count2,counta,countb,LD_min,LD_hour}<=0;endcaseendalways @(negedge clk) //如果长时间按下“change”键,则生成“num1”信号用于连续快速加1if(count2) beginif(loop2==3) num2<=1;elsebegin loop2<=loop2+1; num2<=0;endendelse begin loop2<=0; num2<=0; endalways @(negedge clk) //产生num2信号if(count1) beginif(loop3==3) num3<=1;elsebegin loop3<=loop3+1; num3<=0; endendelse begin loop3<=0; num3<=0; endalways @(negedge clk)if(counta) beginif(loop4==3) num4<=1;elsebegin loop4<=loop4+1; num4<=0; endendelse begin loop4<=0; num4<=0; endassign ct1=(num3&clk)|(!num3&m_clk); //ct1用于计时、校时中的分钟计数assign ct2=(num1&clk)|(!num1&count2); //ct2用于在定时状态下调整分钟信号assign cta=(num4&clk)|(!num4&h_clk); //cta用于计时、校时中的小时计数assign ctb=(num2&clk)|(!num2&countb); //ctb用于在定时状态下调整小时信号always @(posedge clk_1Hz) //秒计时和秒调整进程if(!(sec1^8'h59)|turn&(!m))beginsec1<=0;if(!(turn&(!m))) minclk<=1;end//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时else beginif(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; endelse sec1[3:0]<=sec1[3:0]+1; minclk<=0;endassign m_clk=minclk||count1;always @(posedge ct1) //分计时和分调整进程beginif(min1==8'h59) begin min1<=0; hclk<=1; endelse beginif(min1[3:0]==9)begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; endelse min1[3:0]<=min1[3:0]+1; hclk<=0;endendassign h_clk=hclk||counta;always @(posedge cta) //小时计时和小时调整进程if(hour1==8'h23) hour1<=0;else if(hour1[3:0]==9)begin hour1[7:0]<=hour1[7:4]+1; hour1[3:0]<=0; endelse hour1[3:0]<=hour1[3:0]+1;always @(posedge ct2) //闹钟定时功能中的分钟调节进程if(amin==8'h59) amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; endelse amin[3:0]<=amin[3:0]+1;always @(posedge ctb) //闹钟定时功能中的小时调节进程if(ahour==8'h23) ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0; ahour[7:4]<=ahour[7:4]+1; endelse ahour[3:0]<=ahour[3:0]+1;always //闹铃功能if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))//若按住“change”键不放,可屏蔽闹铃音if(sec1<8'h20) alert1<=1; //控制闹铃的时间长短else alert1<=0;else alert1<=0;always //时、分、秒的现实控制case(m)3'b00: begin hour<=hour1; min<=min1; sec<=sec1; end//计时状态下的时、分、秒显示3'b01: begin hour<=ahour; min<=amin; sec<=8'hzz; end//定时状态下的时、分、秒显示3'b10: begin hour<=hour1; min<=min1; sec<=8'hzz; end//校时状态下的时、分、秒显示endcaseassign LD_alert=(ahour|amin)?1:0; //指示是否进行了闹铃定时assign alert=((alert1)?clk_1k&clk:0)|alert2; //产生闹铃音或整点报时音always //产生整点报时信号alert2beginif((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))if(sec1>8'h54) alert2<=ear&clk_1k; //产生短音else alert2<=!ear&clk_1k; //产生长音else alert2<=0;endendmodule2. 仿真图四、小结及体会为了做多功能数字钟,我借了多本关于Verilog HDL的程序设计书。
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有了很多的的认识,而且懂得了硬件的更多知识,课程设计过程中,总会遇到很多的问题,然后一起跟同学讨论,或者问老师,解决问题之后感觉收获很多,而且学会了自己独立思考,查询资料。
数字钟verilog
目录1 设计任务及要求 (1)2 总体设计分析 (1)3 各模块设计 (2)3.1 数字钟主体部分 (2)3.1.1小时计数器 (2)3.1.2 分、秒计数器 (3)3.2 分频部分 (4)3.3 秒表模块 (5)3.4 闹钟模块 (5)3.5 时间设置模块 (7)3.6 报时模块 (7)3.7 控制显示模块 (8)3.8 顶层模块 (11)4 总结 (11)4.1 本次作业遇到的问题 (11)4.2 建议和总结 (12)附件 (13)1 设计任务及要求本次大作业的要求为设计一个多功能数字钟,其具体要求如下:1.有基础的实时数字钟显示功能,即时、分、秒的正常显示模式,并且在此基础上增加上,下午显示。
2.手动校准。
按动方式键,将电路置于校时状态,则计时电路可用手动方式校准,每按一下校时键,时计数器加1;按动方式键,将电路置于校分状态,以同样方式手动校分。
3.整点报时,仿中央人民广播电台整点报时信号,从59分50秒起每隔2秒发出一次低音“嘟”信号(信号鸣叫持续时间1S,间隙时间1S)连续5次,到达整点(00分00秒时),发一次高音“哒”信号(信号持续时间1S)。
4.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。
当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。
5.秒表功能。
按start键开始计秒,按stop键停止计秒并保持显示数不变,直到复位信号加入。
2 总体设计分析设计的总体部分按照要求可以分为基本的数字时钟显示、手动校准、整点报时、闹钟功能和秒表功能5大部分。
其总体设计框图如下:图1 总体设计框图其中整点报时跟闹钟部分要求不同频率的声响,所以需要加入分频器模块将输入的1kHZ的分频产生500HZ及1HZ的方波信号,其中1HZ的信号对应1S 的周期,可以用作时钟秒的显示及秒表部分。
verilog数字钟设计(FPGA)[15页].doc
verilog数字钟设计(FPGA)[15页].doc一、课程设计目标1. 熟悉并掌握verilog 硬件描述语言2. 熟悉quartus 软件开发环境3. 学会设计大中规模的数字电路,并领会其中的设计思想二、课程设计实现的功能(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);(2)可以调节小时,分钟。
(3)能够进行24小时和12小时的显示切换。
(4)可以设置任意时刻闹钟,并且有开关闹钟功能。
(5)有整点报时功能,几点钟LED 灯闪亮几下。
(6)有复位按键,复位后时间从零开始计时,但闹钟设置时间不变。
三、设计原理:1、总原理框图:是是计数模块译码显示模块分频模块设置闹钟小时分钟校正小时校正模式选择模块设置闹钟分钟复位是否到闹钟时间切换12进制显示输出闹钟信号到达整点输出整点报时信号附全部代码:总模块:moduleclock(clk,reset,MODE,Alarm_ctr,BT2,H12_24,DSH,DSL,DMH,D ML,DHH,DHL,dian,bao_signa l,nao_signal);input clk;//50MHzinput reset,MODE,Alarm_ctr,BT2,H12_24;//复位键,模式选择按钮,闹钟开关档,调节按钮,12—24小时切换档output [7:0]DMH,DML,DHH,DHL; //4个数码管显示输入信号output dian,bao_signal,nao_signal; //时分间隔点,报时信号,闹钟信号output [3:0]DSH,DSL; //秒钟输出信号wire [3:0] SH,SL,MH,ML,HH,HL;wire [3:0] LED_mode;wire [3:0] HH12,HL12,HH24,HL24,MH24,ML24,SH24,SL24;wire [3:0] set_HH,set_HL,set_MH,set_ML;wire _1HZ,_10ms,_250ms,_500ms;wire Keydone1;wire Keydone2;wire co1,co11,co111,co2,co22,co222,set_co2;wire [3:0]mode_flag;assign dian=1'b0;devide_f u1(_1HZ,_10ms,_250ms,_500ms,reset,clk); //分频,得到4种不同频率的时钟信号key_press u2(_10ms,MODE,Keydone1); //模式档按钮去抖动key_press u20(_10ms,BT2,Keydone2); //调节按钮去除抖动mode u3(Keydone1,mode_flag); //通过模式按钮产生不同模式second u4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1); //秒计时minute u5(co11,reset,MH24,ML24,co2); //分计时hour u6(co22,reset,HH24,HL24); //小时计时SEG7_LUT u7(DML,ML); //4个数码管显示SEG7_LUT u8(DMH,MH);SEG7_LUT u9(DHL,HL);SEG7_LUT u10(DHH,HH);display_LED u11(DSL,SL); //LED灯显示秒或模式灯display_LED u12(DSH,SH);mode_chooseu13(mode_flag,Keydone2,_250ms,co1,co2,set_co2,co11,co22,co 111,co222); //选择模式进行不同操作hour12_24 u14(HH24,HL24,HH12,HL12); //12--24小时切换boshi u15(HH,HL,MH,ML,SH,SL,_1HZ,bao_signal); //整点报时set_naozhongu16(co111,co222,set_HH,set_HL,set_MH,set_ML,set_co2); //设置闹钟时间Naozhongu17(Alarm_ctr,_500ms,set_HH,set_HL,set_MH,set_ML,HH24, HL24,MH24,ML24,nao_signal);//任意闹钟响应LUT_modeu18(mode_flag,H12_24,HH12,HL12,HH24,HL24,MH24,ML24, set_HH,set_HL,set_MH,set_ML, MH,ML,HH,HL);//通过模式选择数码管显示LED_mode u19(mode_flag,SH24,SL24,SH,SL); 模式选择LED灯显示Endmodule分频模块:分频模块的作用主要是要获得各种频率的时钟信号。
基于Verilog HDL设计的数字时钟
深圳大学考试答题纸(以论文、报告等形式考核专用)二○18 ~二○19 学年度第一学期课程编1602080001 评分刘春平课程名称主讲教师硬件描述语言与逻辑综合号学电子科学与技术16级1班姓名李思豪专业年级号设计的数字时钟Verilog HDL基于题目:摘要:本文利用V erilog HDL语言自顶向下的设计方法设计多功能数字钟,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过Altera QuartusⅡ6.0和cyclnoe IIEP2C35F672C6完成综合、仿真。
此程序通过下载到FPGA芯片后,可应用于实际的数字钟显示中关键词:Verilog HDL;硬件描述语言;FPGA1目录一、实验任务 (3)实验目的 (3)实验要求 (3)二、设计思路 (3)三、实验结果 (10)四、总结与收获 (14)2一、实验任务实验目的1.深入了解基于quartus ii工具的复杂时序逻辑电路的设计。
理解并熟练利用EDA工具进行综合设计。
2.熟练掌握芯片烧录的流程及步骤。
3.掌握Verilog HDL 语言的语法规范及时序电路描述方法。
4.实验要求设计一个带秒表功能的24 小时数字钟,它包括以下几个组成部分:①显示屏,由6 个七段数码管组成,用于显示当前时间(时:分,秒)或设置的秒表时间;②复位键复位所有显示和计数③设置键,用于确定新的时间设置,三个消抖按键分别用于时分秒的设置④秒表键,用于切换成秒表功能基本要求(1) 计时功能:这是本计时器设计的基本功能,每隔一秒计时一次,并在显示屏上显示当前时间。
(2) 秒表功能:设置时间,进行倒计时功能(3) 设置新的计时器时间:按下设置键后,用户能通过时分秒三个消抖按键对时间进行设置。
二、设计思路、总原理框图:13原理如上图所示,时钟由分频器模块,数码管显示模块,计时器模块三个模块构成,每个模块实现如下的不同功能,最后通过在顶层模块的调用,来实现时钟功能。
verilog HDL课设(数字钟).pdf
心得体会......................................................................................................................................... 25 参考文献......................................................................................................................................... 26 附 录 ............................................................................................................................................27
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设计)
3、计时
if (second0<4'b1001) second0<=second0+4'b1; else second0<=4'b0; if (second1<4'b0101) second1<=second1+4'b1; else second1<=4'b0; if (minute0<4'b1001) minute0<=minute0+4'b1; else minute0<=4'b0; if (minute1<4'b0101) minute1<=minute1+4'b1; else minute1<=4'b0; if (hour1<2'b10) if (hour0<4'b1001) hour0<=hour0+4'b1; else hour0<=4'b0; hour1<=hour1+2'b1; if (hour1==2'b10) if (hour0<4'b0011) hour0<=hour0+4'b1; else hour0<=4'b0; hour1<=2'b0;
谢谢!
2、确认
if (miao==1) nz1<=1;
3、闹铃
if (nz1==1) begin lednz[1]<=1; if((hour_1==hour1)&&(hour_0==hour0)&&(minute_1==minute1)&&(m inute_0==minute0)) lednz[0]<=lednz[0]+1; end
实现数字时钟设计的Verilog代码
下面给出实现数字时钟设计的Verilog代码module top(inc_hour,sub_hour,inc_min,sub_min,rst,clk,sel,q); input inc_hour,sub_hour,inc_min,sub_min;input rst,clk;output reg [2:0] sel;output reg [6:0] q;reg [9:0] scan;reg [2:0] scan_clk;reg div_clk;reg [19:0] counter_clk;reg [3:0] sec_counter1,sec_counter2;reg [3:0] min_counter1,min_counter2;reg [3:0] hour_counter1,hour_counter2;always @ (negedge rst or posedge clk)beginif(~rst)begincounter_clk<=20'h00000;div_clk<=1'b0;endelsebeginif(counter_clk==20'h7a11f)begincounter_clk<=20'h00000;div_clk<=~div_clk;endelse counter_clk<=counter_clk+1;endendalways @(negedge rst or posedge div_clk)beginif(~rst)beginsec_counter1<=4'h0;sec_counter2<=4'h0;min_counter1<=4'h0;min_counter2<=4'h0;hour_counter1<=4'h0;hour_counter2<=4'h0;endelseif(inc_min==1'b0) beginif(min_counter1==4'h9) begin min_counter1<=4'h0;if(min_counter2==4'h5)min_counter2<=4'h0;elsemin_counter2<=min_counter2+1; endelsemin_counter1<=min_counter1+1; endelse if(sub_min==4'b0) beginif(min_counter1==4'h0) begin min_counter1<=4'h9;if(min_counter2==4'h0)min_counter2<=4'h5;elsemin_counter2<=min_counter2-1; endelsemin_counter1<=min_counter1-1; endelse if(inc_hour==4'b0) beginif(hour_counter2==4'h2) beginif(hour_counter1==4'h3) begin hour_counter2<=4'h0;hour_counter1<=4'h0;endelsehour_counter1<=hour_counter1+1; endelse beginif(hour_counter1==4'h9) begin hour_counter1<=4'h0;hour_counter2<=hour_counter2+1; endelsehour_counter1<=hour_counter1+1; endendelse if(sub_hour==1'b0) beginif(hour_counter1==1'b0) beginif(hour_counter2==1'b0) beginhour_counter1<=4'h3;hour_counter2<=4'h2;endelse beginhour_counter2<=hour_counter2-1; hour_counter1<=4'h9;endendelsehour_counter1<=hour_counter1-1; endelse beginif(sec_counter1>=4'h9) beginsec_counter1<=4'h0;if(sec_counter2>=4'h5) beginsec_counter2<=4'h0;if(min_counter1>=4'h9) begin min_counter1<=4'h0;if(min_counter2>=4'h5) begin min_counter2<=4'h0;if(hour_counter2==4'h2) beginif(hour_counter1==4'h3) begin hour_counter1<=4'h0;hour_counter2<=4'h0;endelsehour_counter1<=hour_counter1+1; endelse beginif(hour_counter1==4'h9) begin hour_counter1<=4'h0;hour_counter2<=hour_counter2+1; endelsehour_counter1<=hour_counter1+1; endendmin_counter2<=min_counter2+1; endmin_counter1<=min_counter1+1; endsec_counter2<=sec_counter2+1; endsec_counter1<=sec_counter1+1;endendalways @(negedge rst or posedge clk) beginif(~rst) scan_clk<=3'b000;elsebeginif(scan_clk==3'b101) scan_clk<=3'b000; else scan_clk<=scan_clk+1;endendalways @(scan_clk)begincase (scan_clk)3'b000 :beginq<=disp(sec_counter1);sel<=3'b000;end3'b001 :beginq<=disp(sec_counter2);sel<=3'b001;end3'b010 :beginq<=disp(min_counter1);sel<=3'b010;end3'b011 :beginq<=disp(min_counter2);sel<=3'b011;end3'b100 :beginq<=disp(hour_counter1);sel<=3'b100;end3'b101 :beginq<=disp(hour_counter2);sel<=3'b101;enddefault : ;endcaseendfunction[6:0] disp;input[3:0] a;case (a)4'h0 : disp=7'b0111111; 4'h1 : disp=7'b0000110; 4'h2 : disp=7'b1011011; 4'h3 : disp=7'b1001111; 4'h4 : disp=7'b1100110; 4'h5 : disp=7'b1101101; 4'h6 : disp=7'b1111101; 4'h7 : disp=7'b0000111; 4'h8 : disp=7'b1111111;4'h9 : disp=7'b1101111; default : disp=7'b1111111; endcaseendfunction endmodule。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十七数字时钟
一、实验目的
设计一个可以计时的数字时钟,其显示时间范围是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 源程序文件,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
并生成图形符号文件。
代码:
module
shizhong(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) begin
SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0; HOURH<=0;
end//系统复位
else if(EN) //EN为低电平时时钟暂停
begin
if(!S1) //调节小时
begin
if(HOURL==9)
begin HOURL<=0; HOURH<=HOURH+1;
end
else
begin
if(HOURH==2&&HOURL==3)
begin
HOURL<=0;HOURH<=0;
end
else HOURL<=HOURL+1;
end
end
else if(!S2) //调节分钟
begin
if(MINL==9)
begin
MINL<=0;
if(MINH==5) MINH<=0;
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else if(SECL==9) //时钟正常跳动状态begin
SECL<=0;
if(SECH==5)
begin SECH<=0;
if(MINL==9)
begin
MINL<=0;
if(MINH==5)
begin
MINH<=0;
if(HOURL==9) begin
HOURL<=0;HOURH<=HOURH+1;end
else if(HOURH==2&&HOURL==3) begin HOURL<=0; HOURH<=0;end
else HOURL<=HOURL+1;
end
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else SECH<=SECH+1;
end
else SECL<=SECL+1;
end
else
begin
HOURH<=HOURH;
HOURL<=HOURL;
MINH<=MINH;
MINL<=MINL;
SECH<=SECH;
SECL<=SECL;
end
endmodule
3、波形仿真验证。
正常计数
正常调时调分
末尾正常跳转
清零
暂停
六、实验小结
1、在做实验前应该先充分理解实验原理,并根据原理编写语言。
2、编写语言时要在注意语法错误的同时注意逻辑错误。
3、实验波形中存在毛刺,是因为存在竞争冒险现象。