秒表显示电路
数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目:电子秒表学生姓名:指导老师:一、实验内容利用FPGA设计一个电子秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。
二、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显示。
2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显示”、“重置”等功能。
系统上电复位后,按下1键“开始”后,开始计时,记录的时间一直显示在数码管上;按下1键“记录第一次”,次按1键“记录第二次”,再按1键“记录第三次”,分别记录三次时间。
其后按下2键“显示第一次”,次按2键“显示第二次”,再按2键“显示第三次”,数码管上分别显示此前三次记录的时间;显示完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。
三、设计思路1、整体设计思路先对按键进行去抖操作,以正确的得到按键信息。
同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显示、以及其之间的7次等待状态。
因为需要用数码管显示,故显示的过程中需要对数码管进行片选和段选,因此要用到4输入的多路选择器。
在去抖、计时、显示的过程中,都需要用到分频,从而得到理想频率的时钟信号。
2、分频设计该实验中有3个地方需要用到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显示分频(需得到25kHZ时钟)。
分频的具体实现很简单,需首先算出系统时钟(50MHZ)和所需始终的频率比T,并定义一个计数变量count,当系统时钟的上升沿每来到一次,count就加1,当count=T时就将其置回1。
这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。
电子秒表电路实验报告

电子技术课程设计报告设计题目:电子秒表院(部):物理与电子信息学院专业班级:电子信息工程学生姓名:学号:指导教师:摘要秒表应用于我们生活、工作、运动等需要精确计时的方面。
它由刚开始的机械式秒表发展到今天所常用的数字式秒表。
秒表的计时精度越来越高,功能越来越多,构造也日益复杂。
本次数字电路课程设计的数字式秒表的要求为:显示分辨率为1s/100,外接系统时钟频率为100KHz;计时最长时间为60min,五位显示器,显示时间最长为59m59.99s;系统设置启/停键和复位键。
复位键用来消零,做好计时准备、启/停键是控制秒表起停的功能键。
针对上述设计要求,先前往校图书馆借阅了大量的数字电路设计方面的书籍,以及一本电子元件方面的工具书,以待查阅各种设计中所需要的元件。
其次安装并学习了数字电路设计中所常用的Multisim 仿真软件,在课程设计过程的电路图设计与电路的仿真方面帮助我们发现了设计电路方面的不足与错误之处。
关键字:555定时器十进制计数器六进制计数器多谐振荡器目录1.选题与需求分析 (1)1.1设计任务 (1)1.2 设计任务 (1)1.3设计构思 (1)1.4设计软件 (2)2.电子秒表电路分析 (3)2.1总体分析 (3)2.2电路工作总体框图 (3)3.各部分电路设计 (4)3.1启动与停止电路 (4)3.2时钟脉冲发生和控制信号 (4)3.3 设计十进制加法计数器 (6)3.4 设计六进制加法计数器 (7)3.5 清零电路设计 (8)3.7 总体电路图: (10)4 结束语与心得体会 (12)1.选题与需求分析1.1设计任务电子秒表在生活中可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。
有机械秒表和电子秒表两类。
机械秒表与机械手表相仿,但具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示,可精确至千分之一秒,广泛应用于科学研究、体育运动及国防等方面在当今非常注重工作效率的社会环境中。
电子秒表电路图

电子技术课程设计报告书课题名称电子秒表姓名学号2009010551院、系、部物理与电子科学系专业电子信息科学与技术指导教师张彩荣2012年 12 月 20日电子秒表的设计1 设计目的(1)学习数字电路中基本RS触发器、单稳态触发器、时钟发生器、译码显示器等单元电路的综合应用。
(2)学习电子秒表的调试方法2 设计思路(1)设计基本RS触发器构成的控制电路。
(2)设计单稳态触发器。
(3)设计时钟发生器。
(4)设计计数及译码显示电路。
3 设计过程3.1方案论证电子秒表总体方框图如图1所示。
图1其工作原理为:首先由时基脉冲产生电路产生 1Hz 时基 脉冲信号,将此信号作为计数芯片的计数输入端 CP 的输入信 号。
根据 60 秒为 1 分,60 分为 1 小时,24 小时为 1 天的进制,分别设定 “秒”、“分”、“时”的计数器,分别为六十进制,六十进 制,二十四进制计数器,并输出 1 分,1 小时,1 天的时间信号。
再将计数电路的输出状态输入到译码器芯片,产生驱动数码显 示器信号,使数码显示器呈现出“秒”、“分”、“时”对应的计时数字。
当需要对时、分进行校时时,校正控制电路工作,其中一个 开关控制“分”时钟的正常计数和校正,另一个开关控制“时”时钟的正常计数和校正。
3.2电路设计 总原理图 如图2图2总原理图(1)基本RS触发器电路如图3所示。
图3 基本RS触发器电路如图此单元采用集成与非门构成的基本RS触发器。
属于低电平直接触发的触发器,有直接置位、复位功能。
他的一路输出Q'作为单稳态触发器的输入,另一路输出Q作为与非门的输入控制信号。
按动按钮开关K1(接地),则门1输出Q'=1;门2输出Q=0,K2复位后Q、Q'状态保持不变。
再按动按钮开关K1,则Q由0变为1,门5开启。
为计数器启动做好准备。
Q'由1变为0,送出负脉冲,启动单稳态触发器工作。
(2)单稳态触发器(图4)图4 单稳态触发器实验模块单稳态触发器的输入触发负脉冲信号V i由基本的RS触发器Q'端提供,输出负脉冲V o通过非门加到计数器的清除端R。
简易数字秒表的电路设计 概述及解释说明

简易数字秒表的电路设计概述及解释说明1. 引言1.1 概述本文主要介绍了一种简易数字秒表的电路设计。
秒表是一种用于计算时间间隔的常见工具,广泛应用于日常生活和各行各业中。
传统的机械秒表用起来不够便捷,因此我们将使用电路设计来实现一个数字秒表,使其更加方便使用。
1.2 文章结构本文分为四个主要部分进行阐述。
首先,在“引言”部分中我们将对文章进行概述和介绍。
接下来,在“简易数字秒表的电路设计”部分中,我们将详细介绍设计原理、电路元件选择与说明以及电路连接与布局等内容。
然后,在“解释说明”部分中,我们将解释秒表功能的实现方法,并探讨其功能扩展可能性,并指出在电路设计过程中需要注意的问题。
最后,在“结论”部分中,我们对本次设计成果进行总结,并就可能存在的改进空间进行分析和未来应用进行展望和思考。
1.3 目的本文旨在通过详细描述并解释简易数字秒表的电路设计,提供一个清晰易懂、全面深入的指南,帮助读者了解该设计思路及其实现方法。
同时,通过对功能扩展可能性的探讨和对电路设计过程中需要注意的问题的分析,可以引导读者在实际应用和改进中做出更好的决策。
最后,通过总结和展望,为未来的研究和发展提供参考思路。
2. 简易数字秒表的电路设计2.1 设计原理:简易数字秒表的电路设计基于计时器和显示器组成。
其主要原理是利用计时器模块产生一个稳定的时间基准,然后将该时间以数字形式显示在显示器上。
2.2 电路元件选择与说明:在设计简易数字秒表的电路时,我们需要选取合适的电子元件来实现功能。
以下是一些常见的元件选择:- 计时器芯片:可选择集成型计时器芯片,如NE555等,它们具有稳定的时钟信号输出。
- 显示屏:一般选用7段LED数码管,由于它们能够直观地显示数字。
- 驱动芯片:如果使用多个7段LED数码管进行显示,则必须选择合适的驱动芯片,如74HC595等。
这些元件经过合理的选择和配套可以实现精确、稳定地测量和显示时间。
2.3 电路连接与布局:简易数字秒表电路连接和布局对功能稳定性有重要影响。
电子秒表电路的设计

摘要在数字测量仪表和各种数字系统中,都需要将数字量直观的显示出来,数字显示电路通常由译码驱动器和显示器等部分组成。
数码显示器就是用来显示数字、文字或符号的器件。
七段式数字显示器是目前常用的显示方式,它利用不同发光段的组合,可以显示0~9等阿拉伯数字。
充分运用芯片74LS90的逻辑功能,用四片74LS90芯片实现秒表示0.1~60秒。
利用集成与非门构成的基本RS触发器(低电平直接触发)实现电路的直接置位、复位功能。
利用集成与非门构成的微分型单稳态触发器为计数器清零提供输出负脉冲。
利用555定时器构成的多谐振荡器为电路提供脉冲源以驱动电路工作。
ﻫ关键词:基本RS触发器,单稳态触发器,多谐振荡器,译码显示器。
ﻬ1电子秒表简介电子秒表是一种较先进的电子计时器,目前国产的电子秒表一般都是利用石英振荡器的振荡频率作为时间基准,采用6位液晶数字显示时间。
电子秒表的使用功能比机械秒表要多,它不仅能显示分、秒,还能显示时、日、月及星期,并且有1/l00s的功能。
本实验设计的电子秒表电路的基本组成框图如图1-1所示,它主要由基本RS触发器、单稳态触发器、多谐振荡器、计数器和译码显示器5个部分组成。
图1-1 电子秒表电路的基本组成框图2单元电路设计及相关元器件的功能简介2.1基本RS触发器本实验设计电路所选用的基本RS触发器为用集成与非门构成的基本RS触发器。
属低电平直接触发的触发器,有直接置位、复位的功能。
其功能表如表2-1所示。
RSQn Qn+1功能0 0 0 不用不允许0 0 0 不用0 1 00 Qn+1=0,置00 1 1 01011Qn+1=1,置110 0 11 1 11Qn+1=Qn,保持1 1 0 0表2-1 基本RS触发器如图2-1所示,它的一路输出Q作为单稳态触发器的输入,另一路输出Q作为与非门5的输入控制信号。
切换按钮开关K1(接地),则门1输出Q =1;门2输出Q=0,K1复位后Q、Q状态保持不变。
数字秒表设计报告

摘要要求设计一个计数范围在0.0-9.9秒的数字秒表,精确度为0.1秒。
电路设计基本包括0.1秒脉冲发生器、信号控制端、整形电路、计数电路、译码电路和显示器这几部分构成。
0.1秒脉冲发生器由555定时器构成的多谐振荡电路实现,信号控制端由D触发器实现,即74LS74N,能够对整个电路进行清零、计数、停止和复位的作用。
计数器由两个十进制BCD 码74LS160级联而成。
在计数器的四个输出端分别接译码器的四个置数端,译码器由74LS48实现。
这个电路设有两个开关s1,s2,来实现对电路的清零、计数、暂停、复位的控制。
这样,一个简易的数字秒表便设计完成了。
关键字:555定时器、D触发器、编码、译码ABSTRACTDesign a digital stopwatch counting range in 0.0-9.9 seconds, accuracy of 0.1 seconds. Basic including 0.1 second pulse generator circuit design, signal control terminal, shaping circuit, counting circuit, decoding circuit and a display of this a few parts. More than 0.1 second pulse generator composed of 555 timer harmonic oscillation circuit implementation, signal control comprised D flip-flop, namely 74LS74N, can be reset to the whole circuit, counting, stop and reset. Two decimal counter by BCD 74LS160 cascade. In the four output end of the counter four load respectively at the decoder side, decoder by 74LS48 implementation. This circuit is equipped with two switch S1, S2, to implement to reset circuit, counting, suspend, and reset the control. So will design a simple digital stopwatch is complete.Key Word:555 timer, D flip-flop, encoding and decoding目录摘要------------------------------------------------------------------------1 1.设计目的及要求------------------------------------------------------31.1设计目的-----------------------------------------------------------31.2设计要求-----------------------------------------------------------32.设计原理及分析------------------------------------------------------42.1设计构想框图-------------------------------------------------------42.2设计原理分析-------------------------------------------------------42.2.1多谐振荡电路------------------------------------------------42.2.2开关控制端与D触发器----------------------------------------52.2.3与非门电路--------------------------------------------------52.2.4显示译码电路------------------------------------------------53.制作过程--------------------------------------------------------------73.1布局连线-----------------------------------------------------------73.2调试---------------------------------------------------------------73.3遇到问题及解决方法-------------------------------------------------84.心得感悟--------------------------------------------------------------8参考文献------------------------------------------------------------------9附录附录一元器件清单------------------------------------------------------10 附录二电路图----------------------------------------------------------101.设计目的及要求1.1设计目的通过对数字秒表的设计,熟练掌握555定时器脉冲信号产生的原理和D触发器的功能及原理,利用所学的电子技术基础(模拟部分)知识,回顾脉冲信号产生、计数、编码、译码的原理机制,进行对生活中不可或缺的秒表的设计。
单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位

标准文档9创新实践实训报告学院信息电子技术学院专业电子信息工程班级14学籍号姓名指导教师蒋野2017年06月29日单片机控制秒表电路一、电路工作原理1.工作原理用STC89C52设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“暂停”键S2和一个“继续”键S3。
为使本设计系统更加完善,可以引入一个“复位”键S1,以方便对系统的控制。
如图。
本系统采用STC89C51单片机为中心器件,利用其定时器/计数器定时计数的原理,结合硬件电路如电源电路,晶振电路,复位电路和显示电路,以及一些按键电路等来设计计数器,将软硬件有机结合起来,其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,硬件系统利用Protues强大的功能来实现,简单易于观察,在仿真中就可以观察到实际的工作状态。
2.元器件作用(1)STC89C52单片机在电子行业中有着广泛的应用。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
(2)时钟电路作用是为电路提供唯一的时钟信号。
(3)复位电路外接一个开关,控制电路复位,接通电源电路直接复位,如果没有开关亦可将复位电路引出导线接电源后断开。
(4)本设计要求使用共阳极的数码管,如下是共阳极的数码管的0-9编码:0xc0,0x92,0x82,0xf8,0x80,0x90,0xf9,0xa4,0xb0,0x99.(5)控制电路:S2按下电路停止计时,S3按下电路恢复计时。
二、程序流程图主程序流程图三、检测安装与调试1.元件检测共阳极数码管检测管脚序号利用万用表二极管档红表笔接一个抵住两个管脚,利用另一个接触其他,找出1,2两个管脚,继续分别找出A,D,C,D,E,F,G,Dp管脚。
秒表计时电路设计verilog

电子科技大学通信学院秒表计时电路实验报告班级通信一班学生学号教师秒表计时电路秒表计时电路一、设计思路概述1.设计要求秒表计时功能,显示分、秒、0.01秒具有启动、暂停、停止和清空功能增加有趣的流水灯输入信号:4bit按键,50MHz时钟输出信号:6位数码管2.设计分析本设计要求秒表计时功能,显示分、秒、0.01秒,而这可以由分频电路实现,将电路的输入时钟进行分频,得到1/60Hz,1Hz,和100Hz信号,就可以达到本设计要求的显示要求了。
本设计要求具有启动、暂停、停止和清空功能,而这个可以由状态机实现,通过合理的配置状态转换,就可以达到要求。
流水灯的实现说来简单,其实也可以做的复杂,漂亮的流水灯其观赏性还是很好地,这里我们只讨论简单流水灯的实现,即单个灯从左到右逐步发光。
这实际是一个移位寄存器,我们可以通过不同的时钟来驱动它,实现不同的流水速度。
这里,我们实现了一个1Hz,和一个10Hz的流水灯电路。
二、总体设计框图及详细说明三、各部分代码设计1、500000进制计数器(分频器)设计:always @(negedge clk or negedge rst10ms)beginif (~rst10ms) beginclk10ms<=0;clk10msreg<=0;endelse if (clk10msreg == 249999) beginclk10ms<=~clk10ms ;clk10msreg<=clk10msreg+1;endelse if (clk10msreg==499999) beginclk10ms<=~clk10ms;clk10msreg<=0;endelse begin clk10msreg<=clk10msreg+1;endend2、状态机设计always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate: beginif(~start)beginstate<= prestate; rst<=0;rst10ms<=0;endelsestate<=idlestate; endprestate: beginstate<=runstate;rst<=1;rst10ms<=1;endholdstate: beginif(~stop)beginstate<=idlestate; rst<=1;rst10ms<=0;endelse if(~start)beginstate<= runstate; rst<=1;rst10ms<=1;endelsestate<=holdstate; endrunstate: beginif(~stop)beginstate<=idlestate; rst<=1;rst10ms<=0;endelse if(~hold)beginstate<= holdstate; rst<=1;rst10ms<=0;endelsestate<=runstate;enddefault: state <= state;endcaseendend3.10进制计数器(分频器)设计module count10(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) begin clkout<=0;counter<=0;endelse if (counter == 4) begin clkout<=~clkout;counter<=counter+1; endelse if (counter == 9) begin clkout<=0;counter<=0; endelse begin counter<=counter+1;endendendmodule4、6进制计数器(分频器)设计module count6(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) beginclkout <= 0;counter <= 0;endelse if (counter == 2) beginclkout <= ~clkout;counter <= counter + 4'b1;endelse if (counter == 5) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b1;endendendmodule5、流水灯设计always @(negedge clk1s or negedge rst)beginif (~rst)ledg <= 8'b0;else if (ledg == 8'b0)ledg<=8'b10000000;elseledg<=(ledg>>1);endalways @(negedge clk100ms or negedge rst) beginif (~rst)ledr <= 18'b0;else if (ledr == 18'b0)ledr<=18'b100000000000000000;elseledr<=(ledr>>1);end6、显示译码电路设计always @(negedge clk or negedge rst) begin if (~rst) begindisplayreg <= 3'b000;segcode[0] <= 7'b1111111;segcode[1] <= 7'b1111111;segcode[2] <= 7'b1000000;segcode[3] <= 7'b1000000;segcode[4] <= 7'b1000000;segcode[5] <= 7'b1000000;segcode[6] <= 7'b1000000;segcode[7] <= 7'b1000000;endelse begincase (timeout[displayreg])0: segcode[displayreg] <= 7'b1000000;1: segcode[displayreg] <= 7'b1111001;2: segcode[displayreg] <= 7'b0100100;3: segcode[displayreg] <= 7'b0110000;4: segcode[displayreg] <= 7'b0011001;5: segcode[displayreg] <= 7'b0010010;6: segcode[displayreg] <= 7'b0000010;7: segcode[displayreg] <= 7'b1011000;8: segcode[displayreg] <= 7'b0000000;9: segcode[displayreg] <= 7'b0010000;default: segcode[displayreg] <= 7'b1111111;endcasedisplayreg <= displayreg + 3'b1;endend四、总体电路设计module today(key, ledr, ledg, hex, clk);input [3:0] key;input clk;output reg [17:0] ledr;output reg [7:0] ledg;output [55:0] hex;wire clear;wire start;wire stop;wire hold;assign clear = key[0];assign start = key[1];assign stop = key[2];assign hold = key[3];reg [19:0] clk10msreg;reg clk10ms;wire clk100ms;wire clk1s;wire clk10s;wire clk1min;wire clk10min;wire clk1h;reg [1:0] state;parameter idlestate = 2'b00, prestate = 2'b01, holdstate = 2'b10, runstate = 2'b11;reg rst;reg rst10ms;reg [2:0] displayreg;wire [3:0] timeout [7:0];reg [6:0] segcode[7:0];assign hex = {segcode[7], segcode[6], segcode[5], segcode[4], segcode[3], segcode[2], segcode[1], segcode[0]};always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate: beginif(~start)beginstate<= prestate;rst<=0;rst10ms<=0;endelsestate<=idlestate;endprestate: beginstate<=runstate;rst<=1;rst10ms<=1;endholdstate: beginif(~stop)beginstate<=idlestate;rst<=1;rst10ms<=0;endelse if(~start)beginstate<= runstate;rst<=1;rst10ms<=1;endelsestate<=holdstate;endrunstate: beginif(~stop)beginstate<=idlestate;rst<=1;rst10ms<=0;endelse if(~hold)beginstate<= holdstate;rst<=1;rst10ms<=0;endelsestate<=runstate;enddefault: state <= state;endcaseendendalways @(negedge clk or negedge rst10ms)beginif (~rst10ms) beginclk10ms<=0;clk10msreg<=0;endelse if (clk10msreg == 249999) beginclk10ms<=~clk10ms ;clk10msreg<=clk10msreg+1;endelse if (clk10msreg==499999) beginclk10ms<=~clk10ms; clk10msreg<=0;endelse begin clk10msreg<=clk10msreg+1;endendcount6 min10counter(rst, clk10min, clk1h, timeout[7]); count10 min1counter (rst, clk1min,clk10min, timeout[6]); count6 sec10counter(rst, clk10s,clk1min, timeout[5]); count10 sec1counter (rst, clk1s, clk10s, timeout[4]); count10 ms100counter(rst, clk100ms, clk1s, timeout[3]); count10 ms10counter (rst, clk10ms, clk100ms, timeout[2]); assign timeout[1] = 4'b1111;assign timeout[0] = 4'b1111;always @(negedge clk or negedge rst) beginif (~rst) begindisplayreg <= 3'b000;segcode[0] <= 7'b1111111;segcode[1] <= 7'b1111111;segcode[2] <= 7'b1000000;segcode[3] <= 7'b1000000;segcode[4] <= 7'b1000000;segcode[5] <= 7'b1000000;segcode[6] <= 7'b1000000;segcode[7] <= 7'b1000000;endelse begincase (timeout[displayreg])0: segcode[displayreg] <= 7'b1000000;1: segcode[displayreg] <= 7'b1111001;2: segcode[displayreg] <= 7'b0100100;3: segcode[displayreg] <= 7'b0110000;4: segcode[displayreg] <= 7'b0011001;5: segcode[displayreg] <= 7'b0010010;6: segcode[displayreg] <= 7'b0000010;7: segcode[displayreg] <= 7'b1011000;8: segcode[displayreg] <= 7'b0000000;9: segcode[displayreg] <= 7'b0010000;default: segcode[displayreg] <= 7'b1111111;endcasedisplayreg <= displayreg + 3'b1;endendalways @(negedge clk1s or negedge rst)beginif (~rst)ledg <= 8'b0;else if (ledg == 8'b0)ledg<=8'b10000000;elseledg<=(ledg>>1);endalways @(negedge clk100ms or negedge rst) beginif (~rst)ledr <= 18'b0;else if (ledr == 18'b0)ledr<=18'b100000000000000000;elseledr<=(ledr>>1);endendmodulemodule count6(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) begin if (~rst) beginclkout <= 0;counter <= 0;endelse if (counter == 2) beginclkout <= ~clkout;counter <= counter + 4'b1;endelse if (counter == 5) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b1;endendendmodulemodule count10(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) begin clkout<=0;counter<=0;endelse if (counter == 4) begin clkout<=~clkout;counter<=counter+1; endelse if (counter == 9) begin clkout<=0;counter<=0; endelse begin counter<=counter+1;endendendmodule五、总结及心得体会通过这次试验,我们基本掌握了状态机的实现方法,进一步熟悉和掌握了Verilog HDL的基本使用方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告学生姓名学号指导教师日期实验项目名称:秒表计时电路报告评分:教师签字:一、设计思路概述输入信号为4位状态切换位加上50MHz的时钟,状态分别为保持、清零、运行和置位,需要一个时钟同步状态机加以控制。
输出信号为6位数码管,分别显示秒表的时、分、秒。
每一位数码管都采用不同的时钟信号进行控制,可以通过系统时钟进行不断地分频得到所需求的时钟信号。
二、总体设计框图及详细说明三、模块设计框图、相关时序状态机设计时钟分频clk10ms → clk100ms → clk1s → clk10s → clk1min → clk10min → clk1h分频单元采用六分频和十分频。
50MHz时钟信号到100Hz时钟信号的分频采用500000分频。
四、代码及必要注释//6进制分频计数器module count6(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) begin clkout <= 0; counter <= 0; endelse if (counter == 4'b0010) beginclkout <= ~clkout;counter <= counter+4'b0001;endelse if (counter == 4'b0101) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b0001;endendendmodule//10进制分频计数器module count10(rst, clk, clkout, counter);input rst;input clk;output reg clkout;output reg [3:0]counter;always @(negedge clk or negedge rst) beginif (~rst) beginclkout <= 0;counter <= 0;endelse if (counter == 4'b0100) beginclkout <= ~clkout;counter <= counter + 4'b0001;endelse if (counter == 4'b1001) beginclkout <= ~clkout;counter <= 0;endelse begincounter <= counter + 4'b0001;endendendmodulemodule parkerxie(key, ledr, ledg, hex, clk);input [3:0] key;input clk;output reg [17:0] ledr;output reg [7:0] ledg;output [55:0] hex;wire clear;wire start;wire stop;wire hold;assign clear = key[0];assign start = key[1];assign stop = key[2];assign hold = key[3];reg [19:0] clk10msreg;reg clk10ms;wire clk100ms;wire clk1s;wire clk10s;wire clk1min;wire clk10min;wire clk1h;reg [1:0] state;parameter idlestate = 2'b00, prestate = 2'b01, holdstate = 2'b10,runstate = 2'b11;reg rst;reg rst10ms;reg [2:0] displayreg;wire [3:0] timeout [7:0];reg [6:0] segcode[7:0];assign hex = {segcode[7],segcode[6],segcode[5],segcode[4],segcode[3], segcode[2],segcode[1],segcode[0]};//状态机always @(negedge clk or negedge clear) beginif (~clear) beginstate <= idlestate; rst <= 0; rst10ms <= 0;endelse begincase (state)idlestate: beginif (~start) beginstate <= prestate;rst <= 0;rst10ms <= 0;endelse beginstate <= idlestate;endendprestate: beginstate <= runstate;rst <= 1;rst10ms <= 1;endholdstate: beginif (~start) beginstate <= runstate;rst <= 1;rst10ms <= 1;endelse if (~stop) beginstate <= idlestate;rst <= 1;rst10ms <= 0;endelse beginstate <= holdstate;endendrunstate: beginif (~hold) beginstate <= holdstate;rst <= 1;rst10ms <= 0;endelse if (~stop) beginstate <= idlestate;rst <= 1;rst10ms <= 0;endelse beginstate <= runstate;endenddefault: state <= state;endcaseendend// 50MHz 100Hzalways @(negedge clk or negedge rst10ms) beginif (~rst10ms) beginclk10ms <= 0;clk10msreg <= 0;endelse if (clk10msreg == 249999) beginclk10ms <= ~clk10ms;clk10msreg <= 0;endelse beginclk10msreg <= clk10msreg + 16'b1;endend// 各级分频count6 min10counter(rst, clk10min, clk1h, timeout[7]); count10 min1counter (rst, clk1min, clk10min, timeout[6]); count6 sec10counter(rst, clk10s, clk1min, timeout[5]); count10 sec1counter (rst, clk1s, clk10s, timeout[4]); count10 ms100counter(rst, clk100ms, clk1s, timeout[3]); count10 ms10counter (rst, clk10ms, clk100ms, timeout[2]); assign timeout[1] = 4'b1111;assign timeout[0] = 4'b1111;//显示译码输出电路always @(negedge clk or negedge rst) beginif (~rst) begindisplayreg <= 3'b000;segcode[0] <= 7'b1111111;segcode[1] <= 7'b1111111;segcode[2] <= 7'b1000000;segcode[3] <= 7'b1000000;segcode[4] <= 7'b1000000;segcode[5] <= 7'b1000000;segcode[6] <= 7'b1000000;segcode[7] <= 7'b1000000;endelse begincase (timeout[displayreg])0: segcode[displayreg] <= 7'b1000000;1: segcode[displayreg] <= 7'b1111001;2: segcode[displayreg] <= 7'b0100100;3: segcode[displayreg] <= 7'b0110000;4: segcode[displayreg] <= 7'b0011001;5: segcode[displayreg] <= 7'b0010010;6: segcode[displayreg] <= 7'b0000010;7: segcode[displayreg] <= 7'b1011000;8: segcode[displayreg] <= 7'b0000000;9: segcode[displayreg] <= 7'b0010000;default: segcode[displayreg] <= 7'b1111111;endcasedisplayreg <= displayreg + 3'b1;endend//流水灯always @(negedge clk1s or negedge rst) begin if (~rst)ledg <= 8'b0;else if (ledg == 8'b0)ledg <= {ledg[6:0], 1'b1};elseledg <= {ledg[6:0], ledg[7]};endalways @(negedge clk100ms or negedge rst) begin if (~rst)ledr <= 18'b0;else if (ledr == 18'b0)ledr <= {ledr[16:0], 1'b1};elseledr <= {ledr[16:0], ledr[17]};endendmodule。