秒表电路设计
数字逻辑电路(数电)课程设计_电子秒表_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’即可。
单片机(汇编语言)秒表课程设计设计

题目名称:秒表电路设计姓名:班级:学号:指导教师:日期:2016年7月13日《单片机原理及接口技术课程设计》教学大纲课程代码:课程名称:单片机原理及接口技术课程设计周数: 2 学分:1.0学分一、课程设计的性质、任务与目的单片机原理及接口技术课程设计是在学生学习完理论课和实验课的基础上开设的,通过完成一个涉及MCS-51或其他系列单片机多种资源应用并具有综合功能的设计与编程应用,使学生能够将课堂上学到的理论知识与实际应用结合起来,同时在软件编程、仿真调试及相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的设计开发工作打下一定的基础。
本课程设计的主要目的如下:1、增进对单片机的感性认识,加深对单片机理论知识的理解,掌握单片机内部功能模块(如定时/计数器、中断、片内外存贮器、I/O口、串行口等)的应用;2、掌握单片机应用系统的软硬件设计过程及实现方法,为以后设计和实现单片机应用系统打下良好基础;3、提高综合应用所学理论知识独立分析和解决实际问题的能力。
二、本课程设计的基本理论本课程设计的基本理论是单片机原理及接口技术的基本理论,主要包括单片机的硬件结构原理、指令系统、汇编语言、中断系统、定时/计数器、串行接口、I/O接口等。
在学习掌握单片机原理及接口技术课程的前提下,利用实验室提供的单片机实验条件或基于仿真软件,采用汇编语言或C51编程,设计实现一个具体的单片机应用系统项目,熟悉单片机系统设计开发的完整过程。
三、课程设计的方式与基本要求课程设计的方式:每个班级学生按2~3人分为一组,以组为单位进行课程设计(也可一人独立进行),课程设计的题目从教师给定的题目中选取,也可以是指导教师审核通过的学生自选题目。
基本要求:每组选定题目后,按题目要求,首先进行方案论证,通过查阅资料、集体讨论,确定设计方案;然后进行具体的硬件和软件设计;完成设计后,进行硬件/软件调试;最后撰写课程设计报告。
数电课程设计:电子秒表

数电课程设计:电子秒表
电子秒表是一种常见的计时工具,它通过使用电子元件实现高精度的计时功能。
下面是一个基于数电的电子秒表的设计方案:
1. 运算部分设计:
- 使用一个1Hz的时钟源,可以通过计数器或者振荡器实现。
- 使用一个可重置的二进制计数器,位数根据需要的计时范
围确定。
例如,如果计时范围为1小时,可使用一个4位二进制计数器。
- 计时开始/停止控制逻辑:这可以通过一个开关电路实现,可以使用一个门电路或者触发器电路。
- 计数器重置逻辑:可以使用一个按钮或者开关来重置计数
器的值。
2. 显示部分设计:
- 使用数码管或者液晶显示器来显示计时结果。
数码管可以
使用共阳或者共阴的7段数码管。
- 使用译码器将计数器的二进制输出转换为译码信号,用于
控制数码管显示的数字。
3. 其他功能:
- 可以添加一个暂停功能,通过一个按钮或者开关来实现。
当计时中按下暂停按钮时,计时器会停止计数,再次按下暂停
按钮时,计时器继续计数。
- 可以添加一个拆表功能,通过一个按钮或者开关来实现。
按下拆表按钮时,计时器会记录当前的计时值,然后重置为0,再次按下拆表按钮时,计时器恢复原来的计时状态。
该设计方案中的电子秒表可根据实际需求进行调整和扩展,例如增加更多的功能按钮、调整计时范围和精度等。
同时,需要注意电路的稳定性和可靠性,以及对供电电源和信号的处理。
4位简易秒表的设计与制作

4位秒表的设计与制作一、任务要求该任务要求设计并制作一个4位秒表,秒表有启动、停止和清零功能,显示时间为0到9999秒。
该任务是综合应用数码管动态显示、单片机定时计数器和中断系统设计一个具有启动、停止、清零和校时功能的,能显示0到9999秒的4位秒表。
二、设计方案提示4位秒表的设计与1位秒表设计基本相似,所不同的是4位秒表要显示4位数据,而且要有校时功能,所以它只是综合了键盘、定时器、中断系统和动态显示的应用。
多位数显示器是用数码管显示4位十进制数,如果采用数码管静态显示方法,4个数码管要占用4个I/O端口,将占用单片机的所有I/O口而无法实现其他功能,因此不能用静态显示方法实现多位数据的显示。
如何用单片机控制数码管实现多位数据的现实,而又不占用太多的I/O口呢?这就要用到--------数码管的动态显示。
4位秒表设计与1位秒表的设计在原理上是一样的,不同的是:4位秒表要显示4位数,利用前面的数码管显示方法需要4个并行I/0口,而启动停止和清零要占用2个I/O线,89C52单片机只有4个并行I/O口,因此这种显示方法不能满足4位秒表的功能。
那么,如何实现4位秒表的设计呢?这就是该任务的关键------数码管动态显示技术三、系统硬件设计参考:4位秒表电路原理图如图3-21所示,有启动停止、清零和校时电路;数码管的位选端分别接P2口的P2.0~P2.3,段选端接P0口,74LS245是驱动电路。
图3-21 4位秒表电路原理图硬件电路设计图3-17 4位数据显示器的硬件原理图图3-17是4位数据显示器的硬件原理图,数码管是共阳连接,P2口输出显示段码,74LS245驱动数码管显示,CE是片选端,低电平有效;4位数码管的公共端分别由P3.0、P3.1、P3.2、P3.3控制。
四、系统软件设计参考程序//功能:4位数码管动态显示“1234”//函数名:delay50ms//函数功能:采用定时器1、工作方式1实现50ms延时,晶振频率12MHz//形式参数:无//返回值:无void delay50ms(){ TH1=0x3c; // 置定时器初值TL1=0xb0;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时到,TF1=1TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零}void main() //主函数{unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92}; //设置数字0~5字型码unsigned char i,w;TMOD=0x10; //设置定时器1工作方式1while(1) {w=0x01; //位选码初值为01Hfor(i=0;i<4;i++){P2=~w; //位选码取反后送位控制口P2口w<<=1; //位选码左移一位,选中下一位LEDP1=led[i]; //显示字型码送P1口delay50ms(); //延时50ms}}}4位秒表流程图如图3-22所示:包括主函数流程、定时器中断函数和显示函数流程图。
电子秒表电路实验报告

电子技术课程设计报告设计题目:电子秒表院(部):物理与电子信息学院专业班级:电子信息工程学生姓名:学号:指导教师:摘要秒表应用于我们生活、工作、运动等需要精确计时的方面。
它由刚开始的机械式秒表发展到今天所常用的数字式秒表。
秒表的计时精度越来越高,功能越来越多,构造也日益复杂。
本次数字电路课程设计的数字式秒表的要求为:显示分辨率为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设计任务电子秒表在生活中可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。
有机械秒表和电子秒表两类。
机械秒表与机械手表相仿,但具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示,可精确至千分之一秒,广泛应用于科学研究、体育运动及国防等方面在当今非常注重工作效率的社会环境中。
秒表计时电路设计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. 学生能够运用所学的电子知识,解释电子秒表中时间测量精度的影响因素。
技能目标:1. 学生能够运用所学知识设计简单的电子秒表电路,并进行模拟组装。
2. 学生通过小组合作,能够完成电子秒表的调试和故障排查,提高实际动手操作能力。
3. 学生能够使用适当的工具和仪器,对电子秒表进行性能测试,并做出准确记录。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发他们探索科学技术的热情。
2. 通过团队合作设计电子秒表,培养学生解决问题的能力和合作精神。
3. 学生在学习过程中能够体会到科技进步对日常生活的影响,增强创新意识和实践能力。
课程性质分析:本课程为电子技术实践课程,注重理论联系实际,通过设计制作电子秒表,提高学生对电子技术的理解和应用能力。
学生特点分析:假设学生为初中八年级学生,已经具备基础的物理知识和电子技术原理,动手能力强,对新鲜事物充满好奇心。
教学要求:课程需结合学生的认知水平,通过实践操作和小组合作,使学生能够将所学知识应用于实际问题的解决中,培养创新思维和科学探究能力。
教学过程中,注重引导学生主动参与,鼓励学生提问和思考,确保学习目标的达成。
二、教学内容本课程依据课程目标,结合以下教学内容展开:1. 电子秒表基础知识:介绍电子秒表的组成、工作原理及各部分功能,涉及课本第三章“计时器原理”相关内容。
2. 电路设计与分析:讲解电子秒表电路的设计方法,包括振荡器、分频器、计数器等关键部分的设计,参照课本第四章“数字电路设计基础”。
3. 元器件选择与使用:教授如何选择合适的元器件,如晶体振荡器、集成电路、显示屏等,对应课本第五章“常用元器件”。
4. 实践操作:指导学生进行电子秒表的组装、调试与测试,强调实践操作技能的培养,结合课本第六章“电子制作实践”。
14年春数字电路课程设计任务书

重庆大学城市科技学院电气学院数字电路课程设计任务书课题:数字秒表的电路设计一、设计目的1.掌握数字秒表的设计、组装与调试方法。
2.熟悉集成电路的使用方法。
二、设计任务与要求1.设计任务设计一个能以两位数显示的数字秒表。
2.设计要求基本要求:(1) 两位数码显示功能,能够从“0”到“59”依次显示,显示到“56”时,蜂鸣器持续发出5秒的报警。
(2) 具有手控记秒、停摆和清零功能。
发挥部分:自动报警时,在56秒时,自动发出鸣响声,步长1s,每隔1s鸣叫一次,前两响是低音,最后一响结束为下一个循环开始。
3.设计步骤(1)根据课题,查阅相关资料。
(2)根据提供的元器件,画出系统原理框图,确定基本电路。
(3)用Multism进行仿真验证,修改。
(4)用万能电路板焊接电路,并调试。
(5)撰写课程设计报告。
三、提供的器材清单四、总结报告1.总结数字秒表电路的整体设计、安装与调试过程。
要求有电路图、原理说明、电路所需元件清单、电路参数计算、元件选择、测试结果分析。
2.分析安装与调试中发现的问题及故障排除的方法。
3.设计心得体会。
五、安装要求1、无件安装:电阻平装,二极管紧贴板,三极管根部距板0.5CM。
2、焊点:圆润光滑、无毛刺,无虚焊、假焊、错焊。
3、布线:做到“横平竖直”,无交叉,布线清爽美观。
4、连线细心,耐心,不连错,不漏连,照图反复检查。
附件1:课程设计报告格式课题:专业:班级:学号:姓名:指导教师:设计日期:成绩:重庆大学城市科技学院电气学院×××设计报告(二号黑体)一、设计目的作用(三号宋体,加粗)××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××(小四号宋体)二、设计要求(三号宋体,加粗)说明:指所设计题目的具体要求××××××××××××××××××××××××××××××××××。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
wire [3:0] ge,shi;
fenpin inst (
.CLK_50M(CLK),
always @ (A)
//8段码译码模块
begin
case(A)
0: LED7<=8'b00111111;
1: LED7<=8'b00000110;
2: LED7<=8'b01011011;
3: LED7<=8'b01001111;
4: LED7<=8'b01100110;
5: LED7<=8'b01101101;
知识回顾
分频器电路设计
本讲知识点
掌握层次化系统设计方法 元件例化语句 模块化设计
一、设计任务
采用Verilog HDL语言,设计简 易秒表电路,在数码管上显示结 果。
二、设计原理
采用计数器原理,如果计数器时钟信号是1Hz(基准单位周期为1S),那么计 数结果即可表示0~59秒,然后采用数码管动态扫描进行译码显示。
end
endmodule
//组合电路之过程,构建进位信号
//当counter=59时,输出进位标志为1 //否则,输出进位标志为0
3.动态扫描显示模块
,
•【例3-16】秒表显示模块设计
•
module display (CLK,SEC_GE,SEC_SHI,LED7_CS,LED7);
•
input
// 输入时钟上升沿
•
begin
•
if (counter1==25000000)
//如果计数器等于分频比一半
•
begin
•
counter1<=0;
//分频计数器清0
•
clk1<= ~ clk1;
//clk1hz进行翻转
•
end
•
else counter1<=counter1+1;
//计数器累加
•
end
•
reg address;
•
always @(posedge CLK)
选状态变量
//构建2个数码管对应的2个状态位t;=address+1;
•
end
•
always @(address)
数码管位置和与内容统一
//2选1多路选择器,确定
•
begin
•
if (address) begin A<=SEC_SHI; LED7_CS<='B001; end
设计方案
三、实现过程
分频器模块 计数器模块 动态扫描显示模块 顶层设计(原理图或文本)
1.分频器模块
1Hz 根据系统功能需求,此分频器模块需要实现两个信号分频输出,一个是
的标准秒信号提供基准时钟,另一个是用于数码管动态显示的扫描信号,频率为
1KHz。
,
•【例3-14】分频器设计
• module fenpin(CLK_50M,CLK_1Hz,CLK_1KHz);
always @ (posedge CLK_50M ) begin if (counter2==25000) begin counter2<=0; clk1k<= ~ clk1k; end else counter2<=counter2+1; end
assign CLK_1Hz=clk1; assign CLK_1KHz=clk1k; endmodule
//计数器对10取余,提取个位
•
assign SEC_SHI=counter/10;
//对10取整,提取十位
•
always @(posedge CLK or negedge RST )
•
begin
•
if ( ! RST) counter<=0;
//RST=0时,异步清0
•
else if (EN)
// EN=1,同步使能允许计数
•
input CLK_50M;
//输入时钟信号50MHz
•
output CLK_1Hz;
//分频输出信号1Hz
•
output CLK_1KHz;
•
reg clk1,clk1k;
//中间变量clk1
•
reg [24:0] counter1;
•
reg [14:0] counter2;
•
always @ (posedge CLK_50M )
•
begin
•
if ( counter<59 ) counter<=counter+1;
•
else counter<=0;
//否则counter>=9时,清0
•
end
•
end
always @ ( counter )
begin
if (counter==59) COUT<=1;
else
COUT<=0;
//频率为1KHz的扫描信号
CLK;
•
input [3:0] SEC_GE,SEC_SHI;
十位
//输入的秒个位和
•
output [7:0] LED7;
段码
//8位
•
output [2:0] LED7_CS;
//3位位选
•
reg
[2:0] LED7_CS;
•
reg
[7:0] LED7;
•
reg
[3:0] A;
6: LED7<=8'b01111101;
7: LED7<=8'b00000111;
8: LED7<=8'b01111111;
9: LED7<=8'b01101111;
default : LED7<=8'b00000000;
endcase
end
endmodule
4.顶层设计(原理图)
,
4.顶层设计(文本)
•
input CLK,RST,EN;
//时钟、复位和暂停
•
output [3:0] SEC_GE,SEC_SHI;
//秒的个位、十位输出0~9
•
output COUT;
//分钟进位信号
•
reg [5:0] counter;
//定义计数器变量
•
reg COUT;
•
assign SEC_GE=counter %10;
【例3-17】秒表顶层设计代码
module miaobiao_top (CLK,RST,EN,LED7_CS,LED7,COUT);
input CLK,RST,EN; output [7:0] LED7;
//8位段码
output [2:0] LED7_CS;
output COUT;
wire clka, clkb;
// 输入时钟上升沿 //如果计数器等于分频比一半
//分频计数器清0 //clk1khz进行翻转 //计数器累加 //将中间结果向端口输出
2.计数器模块
该模块功能主要是实现0-59的计数,并将计数结果的个位和十位分别输出。
,
•【例3-15】秒表计数器设计
• module cnt60(CLK,RST,EN,SEC_GE,SEC_SHI,COUT);