基于verilog数字秒表的设计实现

合集下载

Verilog秒表设计 精品

Verilog秒表设计 精品

课程名称:数字系统设计一、实验目的1、进一步熟悉ISE软件的使用,熟悉FPGA开发流程;2、掌握编写Verilog代码的步骤,学会绘制ASM图;3、学会自顶向下的设计方法,使用不同的模块实现系统的设计。

二、实验设备1、装有ISE软件的PC机一台;2、Nexys3开发板一块。

三、实验内容与要求设计一个秒表它具有计时功能。

此秒表有两个按键(reset, start)按下reset键后,秒表清零。

开始默认秒表计时,按下start键后,停止计时,再次按下start键后,又开始计时,如此反复。

用FPGA开发板上的两个七段数码管显示时间(以秒为单位),计时由0 到 59 循环。

三、实验步骤1、设计系统框图,设计采取自顶向下的设计方案,整个秒表系统的原理图如下所示。

主要包括五个模块——按键消抖模块、分频模块、按键功能控制模块、计数模块、数码管驱动显示模块。

2、根据系统的原理图,画出各个模块的ASM图。

(1)利用D触发器对按键进行消抖处理,其电路图如下。

利用下面这个电路即可实现对start键和reset键的消抖。

只有连续输入三个周期的高电平时,按键才有效。

(2)分频模块的ASM图。

此ASM图将100MHz的信号分频为100Hz的信号,用于计数和数码管的扫描。

(3)start键与reset键功能控制模块的ASM图。

图中rst为复位信号,sta为计时信号。

利用状态机实现不同状态之间的转换并输出复位信号与计时信号。

默认状态是start_time,即计时状态。

(4)计数模块的ASM图。

输入100Hz的时钟用于计数,当复位信号有效时,将所有的数全部置0。

否则sta信号有效时开始计数。

最后输出秒位与十秒位。

(5)数码管驱动模块的ASM图。

使用100Hz的信号扫描数码管,并将对应的数字以十进制形式显示在数码管上。

因为只用到两个数码管,所以前两个数码管置1,即保持不亮,只点亮后两个数码管。

3、根据所绘制各个模块的ASM图和系统的原理图,编写Verilog代码。

用Verilog HDL语言编写的电子秒表

用Verilog  HDL语言编写的电子秒表

module jian_kong(rest,kon,clk001,clk001out);//开始与暂停按键的控制电路 input rest; input kon; input clk001; output clk001out; wire k; wire d; assign d=~k; assign clk001out=k&clk001; D_FF D_FF0(rest,kon,d,k); endmodule module D_FF(rest,clk,d,q); input rest; input clk; input d; output q; reg q; always@(posedge rest or posedge clk) if(rest==1'b1) begin q<=1'b0; end else begin q<=d; end endmodule //到此程序全部结实
Module shumaguan(a_to_g,A_TO_D,clk,qian,bai,shi,ge);//数码管驱动 output reg [6:0]a_to_g; output reg [3:0]A_TO_D; input wire clk; input wire [3:0]qian; input wire [3:0]bai; input wire [3:0]shi; input wire [3:0]ge; reg [3:0]duan; reg [1:0]wei; reg a; reg [16:0]q; always@(posedge clk) begin if(q==49999) begin q<=0; a<=~a; end else q<=q+1; end
always@(*)//4位位选译码 case(wei) 3:begin A_TO_D=4'b1110; duan=qian; end 2:begin A_TO_D=4'b1101; duan=bai; end 1:begin A_TO_D=4'b1011; duan=shi; end 0:begin A_TO_D=4'b0111; duan=ge; end default:A_TO_D=4'b1110; endcase always@(posedge a)//四个状态循环 if(wei==3) wei<=0; else wei<=wei+1; endmodule //到此数码管驱动模块结束

基于verilog数字秒表的设计实现

基于verilog数字秒表的设计实现

生产实习报告班级:通信13-2班姓名:闫振宇学号:成绩:电子与信息工程学院信息与通信工程系基于verilog数字秒表的设计实现1. 概述硬件描述语言HDL ( HardwareDescription Langyage) 是一种用形式化方法来描述数字电路和系统的语言。

数字电路系统的设计这里用这种语言可以从上层倒下层逐层描述自设计思想用一系列分层的模块来表示极其复杂的数字系统,然后用EDA 工具逐层验证,把其中需要为具体物理电路的模块组合由自动综合工具转换到门级电路网表。

Verilog HDL 是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

使用VERILOG 进行系统设计时采用的是从顶至下的设计,自顶向下的设计是从系统机开始巴西同划分为若干个基本单元,然后再把每个单元划分为下一层的基本单元,这样下去直到可以直接用EDA 元件库中的基本元件来实现为止。

2. 设计目的及要求a.有源晶振频率:50MHZ;b.测试计时范围:00’00”00 ~ 59’59”99,显示的最长时间为59分59 秒;c.数字秒表的计时精度是10ms;d.显示工作方式:六位BCD七段数码管显示读数,两个按钮开关(一个按钮使秒表复位,另一个按钮控制秒表的启动/暂停)。

3.设计原理秒表的逻辑结构较简单,它主要由四进制计数器、十六进制计数器、分频器、数据选择器、和显示译码器等组成。

在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。

秒表有共有6个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应;6个计数器的输出全都为BCD 码输出,这样便与同显示译码器连接。

数电自主设计实验报告——Verilog秒表

数电自主设计实验报告——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;/////////////。

基于verilog HDL 的数字计时器的设计

基于verilog HDL 的数字计时器的设计

EDA设计基础实验课程论文题目基于verilog HDL 的数字计时器的设计学院通信与电子工程学院专业班级电子081班学生姓名大彬哥指导教师大力会2013 年6月12 日摘要当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,用电省的方向发展。

推动该潮流迅速发展的决定性因素就是使用了现代化的 EDA 设计工具。

本论文先确定了系统的逻辑功能,建立算法流程,选择电路结构,然后确定并设计电路所需的数据处理以及控制模块,在 Quartus II 上以verilog HDL为系统逻辑描述方法完成了数字计时器所需的按键输入消抖模块,控制模块,分频模块,计数模块,存储器模块,显示译码模块的设计与顶层设计和引脚分配,并讨论了 FPGA 设计中的常见的毛刺及其消除方法以及系统资源优化,利用计算机的强大运算能力在 Quartus II 上对用 VHDL 建模的复杂数字逻辑进行编译,自动综合地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑行局布线、逻辑仿真,生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路,然后生成该工艺条件下这种具体电路的延时模型,并下载到 FPGA板上实际验证,通过本设计对数字系统自动化的基本概念、基本原理、特性及实现方法都有了较好的了解和理解,同时锻炼了计算机应用能力和 verilog HDL 语言的编程能力和 Quartus II 以及 MaxplusII 的使用能力,本设计圆满完成了用 verilog HDL 语言设计 1/10秒数字计时器并仿真和实际下载到 ALTERA 公司的 Cyclone II 系列的 EP2C8Q208C 中实现。

关键词:电子设计自动化,现场可编程门阵列/复杂可编程逻辑器件,硬件描述语言,数字系统设计。

AbstractThe current design of electronic systems is developing to fast speed, large capacity, small size, light weight, Low power consumption. What decisively promote the rapid development of this trend is the use of modern EDA design tools. In this thesis, we firstly determine the system's logic functions, build the algorithm of system, and select the circuit, then Identify and design the data processing and control module circuit requires. Complete the key input debounce module, controlmodule, frequency modules, counter modules, memory modules, display decoding module digital timer requires with verilog HDL in Quartus II, and finish the design of top-level entity and Pin assignment. Discuss the reason of glitch and the elimination of glitch in FPGA.Automatically complete compile logic, logic simplification, logic partitioning, logic synthesis and logic optimization, logic board wiring, logic simulation, generate the digital logic netlist which meets the requirements and can be implemented on the circuit, automatically generate a specific circuit according to the netlist and the device. and then build this specific delay model circuit under these conditions,then download to the FPGA board and actually verify the design. Through this design, we have better knowledge and understanding for EDA's basic concepts, basic principles, characteristics and methods, also improve the ability of using computer and Quartus II and Maxplus II and Verilog HDL programming ability. The design of digital timer based on Verilog HDL is completed successfully and has been simulated and downloaded to ALTERA's EP2C8Q208C and works Successfully.Key Words:EDA, FPGA/CPLD, verilog HDL, Digital System Desig n.目录摘要 (I)第一章引言 (1)1.1 EDA 现状 (1)1.2 硬件描述语言 (2)1.3 设计指标 (4)第 2 章 EDA设计方法及其应用 (5)2.1 分析方法 (5)2.2 描述方法 (6)2.3 实现方法 (7)第 3 章设计思想与方案论证 (8)3.1 设计思想 (8)3.2 论证分析 (8)第 4 章系统设计 (10)4.1 顶层电路设计 (10)4.2 数字秒表的设计原理 (10)4.3 键输入消抖模块 (11)4.4 时钟分频电路模块 (12)4.5 控制电路模块 (12)4.6 计时电路模块 (13)4.7 模式选择模块 (14)4.8 存储器模块 (15)4.9 动态扫描译码显示模块 (15)第5章程序设计 (17)第 6 章仿真下载实现 (20)参考文献 (22)第一章引言随着人们生活水平的日益提高,社会体系的日益完善,人们对于各种应用器材的要求也越来越高.秒表作为日常生活中,特别是体育运动中应用的特别广泛,所以精确且方便使用的秒表就被越来越多的人所选择.本秒表计时器用于体育竞赛及各种要求有较精确时的各领域,以往常利用中小规模集成电路实现,但一般体积大,使用携带不方便。

基于verilog语言编程的数字秒表设计

基于verilog语言编程的数字秒表设计

数字秒表设计系别:电子通信工程系专业:电子信息工程班级:学号:姓名:数字秒表(基于verilong语言编程)课程设计一、设计要求用verilong语言编写程序,结合实际电路,设计一个4位LED数码显示“秒表”,显示时间为99.9~00.0秒,每秒自动减一,精度为0.1。

另设计一个“开始”按键和一个“复位”按键。

再增加一个“暂停”按键。

按键说明:按“开始”按键,开始计数,数码管显示从99.9开始每秒自动减一;按“复位”按键,系统复位,数码管显示99.9;按“暂停”按键,系统暂停计数,数码管显示当时的计数。

二、设计目的1、通过本次课程设计加深对verilong语言课程的全面认识、复习和掌握,对EPM7064芯片的应用达到进一步的了解。

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将软硬件结合起来,对程序进行编辑,调试。

使其能够通过电脑下载到芯片,正常工作。

4、实际操作Quartus II软件,复习巩固以前所学知识。

三、总体设计本秒表系统具有复位、暂停、秒表计时等功能。

clk为系统工作时钟,采用Altera DE2上的50M时钟信号,经过分频器产生秒表计时周期为0.01s的时钟,再经过计数器,分别对秒表的百分位、十分位、秒、秒十位、分、分十位进行计数。

onoff为启动/暂停控制信号,当它为0时,启动计时,当它为1时,计时暂停。

clr为复位信号,当该信号有效时,计数器和译码清零,此时数码管显示输出为00:00:00。

在总体电路图中,根据设计要求,需要两个输入控制信号onoff和clr。

由于开发板上除了拨动开关就是瞬时的按键开关,且按键开关平时都呈高电平,按一下为低电平。

故在实际测试时采用了拨动开关SW0来控制秒表的启动/暂停,通过KEY0来控制秒表的清零。

四、设计思路描述该实验要求进行计时并在数码管上显示时间,通过相关软件Quartus II编译,利用JTAG 下载电路到核心芯片,驱动硬件工作。

EDA基于Verilog数字秒表

EDA基于Verilog数字秒表

石家庄经济学院信息工程学院电子信息工程专业EDA技术课程设计报告题目:数字秒表姓名学号 412109 班级电子一班指导教师王军芬2015年 1 月 16日课程设计任务书3。

2总电路连线及波形仿真图:图2 电路原理总图3.3 5个模块原理图、波形仿真图及源程序:(1)分频模块:图3 分频模块原理图因为将50MHz的频率分成100Hz和2000HZ的过程中涉及到到频率范围太大,进行波形仿真时,无法正常显示。

设计原理:将50MHz分频为clk1100Hz和clk2 2000HZ的频率,先分频到2000HZ,分频倍数,N1=25000,所以此处用到的是偶数倍分频,其原理如下:使用一模N1计数器模块即可实现,即每当模N1计数器上升沿从0开始计数至N1时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,在把2000赫兹频率分为100赫兹,分频倍数为N2=20,每当模N2计数器上升沿从0开始计数至N2时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,为以此循环即可。

源程序:module fenpin(clk,clk1,clk2);input clk;output clk1;output clk2;reg [15:0]k2;reg[7:0] k1;reg clk2;reg clk1;always@(posedge clk)beginif(k2<16'd12499)k2=k2+8'd1;else k2=0;if(k2==16'd12499)clk2=clk2+1;//clk2=2000hzendalways @(posedge clk2)beginif(k1〈8’d9)k1=k1+8’d1;else k1=0;if(k1==8'd9)clk1=clk1+1;//clk1=100hzendendmodule(2)计数模块:图4 计数模块原理图图5 波形仿真图设计原理:此处rst是复位键键,当其处于高电平时,全部清零,start是开始键,pause是暂停键,三个按键都用了一个T触发器,按下复位键,其他二个按键没用,按下开始键计数开始,按下暂停键计数停止,再按开始键计数开始.其计数部分由一个六进制的计数器和三个十进制的计数器组成,首先是百分秒位msl开始从零计数,当其计数到九时,向十分秒位msh进一,同时将百分秒位清零;当十分位计数到九时,向秒位sl进一,同时将十分妙位和百分秒位清零;当秒位计数到九时,向十秒位sh进一,同时将秒位、十分秒位和百分秒位清零;当十秒位计数到五时,将所有位清零。

时钟的verilog实现

时钟的verilog实现

实验五秒表设计及验证一、功能介绍该SPEC指导设计一个具有秒表功能的模块,功能描述如下:·秒表计时功能。

当rst_n无效时,sw_en使能后,从00:00开始计时,当计时到达预设的定时时间,产生time_out高电平信号,计时继续;sw_en置低时计时停止,当前时间保持不变;·Pause信号有效时,当前显示时间不变,但计时仍继续。

当pause信号无效后,恢复计时,显示当前计时时间。

·Clear信号有效时,计时清零。

·计时到达59’99时,从零重新计时并且将time_out信号置为无效;·输出当前计时的秒数,精度为0.01秒(显示毫秒数的百位和个位);·全局rst_n信号(低电平有效)发生时,秒表清零,计时停止,并且将之前的time_out信号置低。

二、端口定义表1 秒表端口定义三、FPGA验证完成对上述SPEC描述的StopWatch设计,请务必保证可综合的代码风格。

该部分描述使用Virtex-5 XC5VLX50T开发板,通过PS2外接键盘控制,通过HDMI接口外接屏幕来直观的显示和验证上述设计功能的正确性。

验证要求:·FPGA输入时钟为100MHZ晶振,需要将其分频为100HZ(时间精度是0.01 second); ·用拨码开关作为rst_n信号;·使用一个按键←作为计时使能信号,模拟sw_en的功能;按一次开始计时,第二次,停止,以此类推;·使用一个按键↓作为暂停信号,模拟pause功能;计时过程中,按一次屏幕暂停计时,但stopwatch内核仍在计时,第二次,屏幕恢复计时,以此类推;·使用一个键盘键↑作为StopWatch的清零信号,按一次对计时清零;·当前计时时间显示外接屏幕上,共四个数字,前两个数显示秒数,后两个数显示毫秒数,并且显示秒数与毫秒数之间的小数点。

屏幕的显示需要一个扫描时钟,频率为25MHz,需要从100MHz的系统时钟分频得到。

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

生产实习报告班级:通信13-2班姓名:闫振宇学号:成绩:电子与信息工程学院信息与通信工程系基于verilog数字秒表的设计实现1. 概述硬件描述语言HDL ( HardwareDescription Langyage) 是一种用形式化方法来描述数字电路和系统的语言。

数字电路系统的设计这里用这种语言可以从上层倒下层逐层描述自设计思想用一系列分层的模块来表示极其复杂的数字系统,然后用EDA 工具逐层验证,把其中需要为具体物理电路的模块组合由自动综合工具转换到门级电路网表。

Verilog HDL 是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

使用VERILOG 进行系统设计时采用的是从顶至下的设计,自顶向下的设计是从系统机开始巴西同划分为若干个基本单元,然后再把每个单元划分为下一层的基本单元,这样下去直到可以直接用EDA 元件库中的基本元件来实现为止。

2. 设计目的及要求a.有源晶振频率:50MHZ;b.测试计时范围:00’00”00 ~ 59’59”99,显示的最长时间为59分59 秒;c.数字秒表的计时精度是10ms;d.显示工作方式:六位BCD七段数码管显示读数,两个按钮开关(一个按钮使秒表复位,另一个按钮控制秒表的启动/暂停)。

3.设计原理秒表的逻辑结构较简单,它主要由四进制计数器、十六进制计数器、分频器、数据选择器、和显示译码器等组成。

在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个清零信号,以便秒表能随意停止、启动以及清零复位。

秒表有共有6个输出显示,其中6个显示输出数据,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应;6个计数器的输出全都为BCD 码输出,这样便与同显示译码器连接。

利用一块芯片完成除时钟源,按键和显示器之外的所有数字电路功能。

所有数字逻辑功能都在CPLD器件上用Verilog语言实现。

这样设计具有体积小,设计周期短,调试方便,故障率地和修改升级容易等特点。

本设计采用依次采用以下设计方法:1)按键输入缓存,键盘消抖设计;2)分频产生秒信号,产生100HZ的时钟信号设计;3)数码管动态扫描显示设计;4)3-8译码器显示(译码)设计;5)流水线式计数方法设计。

4.设计原理框图秒表计时器设计原理框图,如图4-1所示。

图4-1 秒表计时器设计原理框图根据设计原理框图4-1,以及设计的要求及目的,可以将Verilog HDL语言设计的秒表计时程序分为四大模块:1)按键输入缓存,按键消抖模块;2)分频产生100HZ的时钟信号模块;3)数码管动态扫描显示驱动模块;4)计时处理部模块。

5.软件设计按键输入缓存,按键消抖模块常在按键较少时可用硬件方法消除抖动,一般采用RS触发器作为常用的消抖电路,如果按键较多时,常用软件消除抖动。

在EDA的设计应用中,软件消抖的方法即可使用RS触发器进行消抖,也可通过检测按键按下的时间进行消抖。

按键输入缓存,按键消抖程序:always@(posedge count[16])beginkey_inner<=key;endalways@(posedge key_inner[0])beginkey_flag=~key_flag;end键盘消抖工作原理:设置输入信号key[1:0],设置一个模值为4的控制计数器key_inner,判断计数寄存器count的第16位的上升沿,检测到key_inner为高电平。

由于计数寄存器的位数为18位。

则说明在内可以检测到4次高电平。

在人工按键key=‘1’时,key_inner为‘1’,如连续4次检测到高电平则key_inner一直为‘1’。

4次以上检测到高电平key_inner依旧为‘1’,也一直输出高电平。

这就确保了当按键信号持续高电平以上按键信号才有效。

抖动期间的高电平持续时间不足以输出高电平。

如没有连续4次以上检测到高电平,则key_inner为‘0’。

再判断key_inner的上升沿(按键按下为下降沿,弹起为上升沿),每当key_inner[0]出现一次上升沿(按键按下并弹起),key_flag 将取反一次(设置key_flag 的初值为‘0’)。

分频产生100HZ 的时钟信号模块分频产生100HZ 的时钟信号程序:always@(posedge clk) begin if(count==249999) begin clk_100hz<=~clk_100hz; count<=0;endelsecount<=count+1;end分频原理图,如图5-1所示。

图5-1 分频原理图分频原理:由于开发板的输入频率为50MHZ 的时钟信号,说明1s 产生7510⨯个时钟信号。

每个时钟信号持续的时间为71510⨯s ,由于秒表计时器的最小单位为,所以要将50MHZ 的时钟信号进行5510⨯分频,得到100HZ 的时钟信号,即。

数码管动态扫描显示驱动模块数码管动态扫描显示驱动程序:always@(posedge count[15])begincount3b=count3b+1;case(count3b)3'd5:dis_dat=hour[3:0];3'd4:dis_dat=hour[7:4];3'd3:dis_dat=hour[11:8];3'd2:dis_dat=hour[15:12];3'd1:dis_dat=hour[19:16];3'd0:dis_dat=hour[23:20];default:dis_dat=4'bxxxx;endcasesel=count3b;endalways@(dis_dat)begincase(dis_dat)0 : seg = 8'b1100_0000;erilog秒表设计.2012:15:17.[2]大彬哥.基于Verilog HDL的数字计时器的设计.2013:11.附件:module led_on(input[1:0]key, //输入信号input clk, //输入频率为50MHZ的时钟output reg [2:0]sel, //数码管位选output reg [7:0]seg, //数码管段选output en //3-8译码器使能);reg[2:0]count3b;reg[3:0]dis_dat; //定义显示数据寄存器reg[18:0]count; //定义计数寄存器reg[23:0]hour; //定义现在时刻寄存器reg clk_100hz; //50MHZ的时钟信号500000分频,得到100HZ的时钟信号reg key_flag; //启动/暂停的切换标志reg[1:0]key_inner;assign en=0;//(1)按键输入缓存,按键消抖设置always@(posedge count[16])//在内,扫描2的2次方,可以检测到4次高电平beginkey_inner<=key;endalways@(posedge key_inner[0])beginkey_flag=~key_flag;end//(2)秒信号产生部分,产生100HZ的时钟信号always@(posedge clk)beginif(count==249999)beginclk_100hz<=~clk_100hz;count<=0;endelsecount<=count+1;end//(3)数码管动态扫描显示部分always@(posedge count[15]) //时序逻辑,由于有6个数码管,则在一秒内扫描2的6次方begincount3b=count3b+1;case(count3b)3'd5:dis_dat=hour[3:0];3'd4:dis_dat=hour[7:4];3'd3:dis_dat=hour[11:8];3'd2:dis_dat=hour[15:12];3'd1:dis_dat=hour[19:16];3'd0:dis_dat=hour[23:20];default:dis_dat=4'bxxxx;endcasesel=count3b;endalways@(dis_dat)begincase(dis_dat)0 : seg = 8'b1100_0000;//显示“0”1 : seg = 8'b1111_1001;//显示“1”2 : seg = 8'b1010_0100;//显示“2”3 : seg = 8'b1011_0000;//显示“3”4 : seg = 8'b1001_1001;//显示“4”5 : seg = 8'b1001_0010;//显示“5”6 : seg = 8'b1000_0010;//显示“6”7 : seg = 8'b1111_1000;//显示“7”8 : seg = 8'b1000_0000;//显示“8”9 : seg = 8'b1001_0000;//显示“9”default:seg = 8'bxxxxxxxx;endcaseend//(4)计时处理部分always@(posedge clk_100hz) //计时处理beginif(~key_inner[1]&&key_flag==1) //判断是否复位键,beginhour=24'h0;endelse if(!key_flag)beginhour[3:0]=hour[3:0]+1;if(hour[3:0]==4'ha)beginhour[3:0]=4'h0;hour[7:4]=hour[7:4]+1;if(hour[7:4]==4'ha)beginhour[7:4]=4'h0;hour[11:8]=hour[11:8]+1;if(hour[11:8]==4'ha)beginhour[11:8]=4'h0;hour[15:12]=hour[15:12]+1;if(hour[15:12]==4'h6)beginhour[15:12]=4'h0;hour[19:16]=hour[19:16]+1;if(hour[19:16]==4'ha)beginhour[19:16]=4'h0;hour[23:20]=hour[23:20]+1;endif(hour[23:20]==4'h6)hour[23:20]=4'h0;endendendendend end endmodule。

相关文档
最新文档