数字跑表
数字跑表要求

1.数字跑表
要求:利用8031的计数器实现数字跑表功能,利用6个LED数码管显示计时的时间,
最大计时时间为59’59”99,计时分辨率0.01秒。
控制功能:利用开关K1控制电子钟的工作方式(K1=1为正常工作方式,K1=0为清零复位方式),通过利用单脉冲发生器发出脉冲的来启动或停止计时。
使用的主要元器件:8031、6MHz的晶振、74LS373、74LS138、2764、75452、8155、
74LS240、LED数码管LC5011-11、拨动开关K1、单脉冲发生器等。
结果验证:运行程序,将拨动开关K1拨向下方(K1=0),看6个LED数码管是否显示全为0;将拨动开关K1拨向上方(K1=1),按动单脉冲发生的微动开关发出启动计时信号,看数码管上是否显示递加的计时时间;再按动单脉冲发生的微动开关发出停止计时信号,看数码管上显示的计时时间是否停止。
通过与普通跑表的比较,验证计时是否准确。
数字跑表课程设计研究内容

数字跑表课程设计研究内容一、课程目标知识目标:1. 学生能理解数字跑表的基本概念,掌握其计时原理和操作方法;2. 学生能运用所学知识,分析并解释数字跑表在实际运动中的应用;3. 学生了解数字跑表在体育赛事中的重要作用,掌握相关赛事规则。
技能目标:1. 学生能够熟练操作数字跑表,进行简单的计时和数据处理;2. 学生通过实际操作,培养观察、分析、解决问题的能力;3. 学生学会运用数字跑表进行运动训练,提高运动效果。
情感态度价值观目标:1. 学生培养对体育运动的兴趣,增强运动参与的积极性和主动性;2. 学生通过数字跑表的学习,认识到科技在体育领域的重要作用,增强科技创新意识;3. 学生在学习过程中,培养团队合作精神和公平竞争意识,树立正确的价值观。
课程性质:本课程为实践性较强的学科课程,结合理论知识与实际操作,注重培养学生的动手能力和实际应用能力。
学生特点:学生处于好奇心强、求知欲旺盛的年级,具有一定的逻辑思维能力和动手能力,但需加强对体育运动和科技知识的了解。
教学要求:教师应结合学生特点,采用启发式教学,引导学生主动探究数字跑表的知识,注重培养学生的实际操作能力和运动素养。
同时,关注学生的情感态度价值观培养,使学生在学习过程中形成正确的价值观。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 数字跑表基础知识:- 数字跑表的定义与功能;- 计时原理与计时方法;- 数字跑表在体育赛事中的应用。
2. 数字跑表操作与使用:- 数字跑表的结构与按键功能;- 数字跑表的操作流程;- 实际操作练习与问题解决。
3. 数字跑表在运动训练中的应用:- 运动训练中的计时需求;- 数字跑表在跑步、游泳等运动项目中的使用;- 提高运动训练效果的方法与策略。
4. 体育赛事规则与数字跑表:- 常见体育赛事的规则要点;- 数字跑表在赛事中的重要作用;- 赛事现场操作注意事项。
教学大纲安排:第一课时:数字跑表基础知识学习;第二课时:数字跑表操作与使用;第三课时:数字跑表在运动训练中的应用;第四课时:体育赛事规则与数字跑表。
电子实验数字跑表

电子科技大学基于FPGA的数字系统设计——数字跑表的设计学生姓名:学号:指导教师:摘要本文利用XILINX-ISE开发软件和XILINX EDA教学实验开发板实现数字跑表的开始、暂停以及复位等功能。
ISE工程利用VHDL语言编写,单模块包含时钟分频进程、始能及清零进程、时钟数据产生进程、位码产生进程和显示进程;分模块设计包含时钟分频模块、控制模块、计数器模块、显示模块。
计时区间00’00’’00到59’59’’99。
课余设计的单模块源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity paobiao isPort ( clkin : in STD_LOGIC;enable : in STD_LOGIC;clear : in STD_LOGIC;seg : out STD_LOGIC_VECTOR (7 downto 0);wei : out STD_LOGIC_VECTOR (2 downto 0);enout : out STD_LOGIC);end paobiao;architecture Behavioral of paobiao issignal cnt100: integer range 1 to 240000;signal cnt1k: integer range 1 to 24000;signal clk100: std_logic:='0';signal clk1k : std_logic:='0';signal en: std_logic:='0';signal d1: integer range 0 to 5:=0;signal d2: integer range 0 to 9:=0;signal d3: integer range 0 to 5:=0;signal d4: integer range 0 to 9:=0;signal d5: integer range 0 to 9:=0;signal d6: integer range 0 to 9:=0;signal num: integer range 1 to 6:=1;beginenout<='0';process(clkin)beginif clkin'event and clkin='1' thenif cnt100=240000 thencnt100<=1;clk100<=not clk100;elsecnt100<=cnt100+1;end if;if cnt1k=24000 thencnt1k<=1;clk1k<=not clk1k;elsecnt1k<=cnt1k+1;end if;end if;end process;process(enable,clear)beginif clear='0' thenen<='0';elseif enable'event and enable='1' thenen<=not en;end if;end if;end process;process(clear,d1,d2,d3,d4,d5,d6)beginif clear='0' thend1<=0;d2<=0;d3<=0;d4<=0;d5<=0;d6<=0;-- en<=0;elseif en='1' and clk100'event and clk100='1' then if d6=9 thend6<=0;if d5=9 thend5<=0;if d4=9 thend4<=0;if d3=5 thend3<=0;if d2=9 thend2<=0;if d1=5 thend1<=0;elsed1<=d1+1;end if;elsed2<=d2+1;end if;elsed3<=d3+1;end if;elsed4<=d4+1;end if;elsed5<=d5+1;end if;elsed6<=d6+1;end if;end if;end if;end process;process(num)beginif clk1k'event and clk1k='1' thenif num=6 thennum<=1;elsenum<=num+1;end if;end if;end process;process(num)variable data: integer range 0 to 9;begincase num iswhen 1 => wei<="111";data:=d1;when 2 => wei<="110";data:=d2;when 3 => wei<="100";data:=d3;when 4 => wei<="011";data:=d4;when 5 => wei<="001";data:=d5;when 6 => wei<="000";data:=d6;end case;case data iswhen 0 => seg<="00000011";when 1 => seg<="10011111";when 2 => seg<="00100101";when 3 => seg<="00001101";when 4 => seg<="10011001";when 5 => seg<="01001001";when 6 => seg<="01000001";when 7 => seg<="00011111";when 8 => seg<="00000001";when 9 => seg<="00001001";end case;end process;end Behavioral;管脚分配NET "clkin" LOC = T8;NET "enout" LOC = D7;NET "seg<0>" LOC = C11;NET "seg<1>" LOC = A11;NET "seg<2>" LOC = B12;NET "seg<3>" LOC = A12;NET "seg<4>" LOC = C12;NET "seg<5>" LOC = C13;NET "seg<6>" LOC = A13;NET "seg<7>" LOC = B14;NET "wei<0>" LOC = F8;NET "wei<1>" LOC = D8;NET "wei<2>" LOC = E7;NET "clear" LOC = E4;NET "enable" LOC = G6;课时设计一、系统总体设计指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD七段数码管显示读数。
数字跑表的设计与仿真

EAST CHINA INSTITUTE OF TECHNOLOGY EDA设计与应用课程设计:数字跑表的设计与仿真学院:机械与电子工程学院专业:电子科学与技术班级:1221402学号:201220140223姓名:杨卡2014年11月一、实验目的:1)进一步学习更复杂的EDA项目设计,更熟练地掌握VHDL语言设计。
2)学习动态数码管的VHDL编程。
3)更加熟练计时显示、进位和校时的编程方法。
二、实验要求:1)设计一个具有、‘分'、‘秒'、‘ 1/100 秒'的十进制数字显示的数字跑表。
2)要有外部开关,控制计数器的直接清零、启动和暂停/ 连续计时功能。
三、实验内容:1)数字跑表功能:计时精度10ms,计时范围为59分59.99秒。
设置两种模式,模式一:对单个人计数,能实现暂停、显示及清零功能,并在数码管上实时显示;模式2:实现对多个人的同时计时,在数码管上实时显示,并能在液晶显示屏上回显出 6 个时间,可控制显示。
2)数字跑表分模块设计:数字跑表设置如下的子模块。
分频模块;模式 1 控制模块;模式 2 控制模块;计时模块;数码管译码模块;液晶译码模块;液晶显示模块。
百分秒、秒和分等信号即采用BCD译码计数方式,根据上述设计要求,用Verilog 对数字跑表的描述如下。
仍然采用引脚属性定义语句进行引脚的锁定。
四、设计程序(此处只写出与课本中不同的部分)为了便于显示,百分秒、秒和分钟信号皆采用BCD码计数方式,并直接输出到6 个数码管显示出来。
根据上述设计要求,用Verilog HDL 语言对数字跑表描述如下。
/* 信号定义:CLK: CLR: PAUSE: MSH,MSL:时钟信号;异步复位信号;暂停信号;百分秒的高位和低位;SH,SL :秒的高位和低位;MH,ML:分钟的高位和低位。
*/module paobiao(CLK,CLR,PAUSE,MSH,MSL,SH,SL,MH,ML); input CLK,CLR,PAUSE; output[3:0] MSH,MSL,SH,SL,MH,ML; reg[3:0] MSH,MSL,SH,SL,MH,ML;reg cn1,cn2; //cn1 为百分秒向秒进位,cn2 为秒向分进位//**************** 百分秒计数进程,每计满100,cn1 产生一个进位*******always @(posedge CLK or posedge CLR)begin if(CLR) begin {MSH,MSL}<=8'h00; cn1<=0;end // 异步复位else if(!PAUSE) //PAUSE 为0 时正常计数,为1 时暂停计数begin if (MSL==9) begin MSL<=0;if (MSH==9) begin MSH<=0;cn1<=1;endelse MSH<=MSH+1;endelse begin MSL<=MSL+1;cn1<=0;endendend秒计数进程,每计满60,cn2 产生一个进位********* always @(posedge cn1 or posedge CLR)begin if(CLR) begin {SH,SL}<=8'h00;cn2<=0; end // 异步复位else if(SL==9)begin SL<=0;if (SH==5) begin SH<=0;cn2<=1; end else SH<=SH+1;endelse begin SL<=SL+1;cn2<=0;end end //****************** 分钟计数进程,每计满60,系统自动清零********* always @(posedge cn2 or posedge CLR) begin if(CLR) begin {MH,ML}<=8'h00;end // 异步复位else if (ML==9) begin ML<=0;if(MH==5) MH<=0;else MH<=MH+1;endelse ML<=ML+1;endendmodule五、心得体会:此次课程设计,从程序设计到仿真,我经历了一个困难重重,愈挫愈勇的过程。
基于fpgh数字跑表课程设计

基于fpgh数字跑表课程设计一、教学目标本课程旨在通过fpgh数字跑表的学习,让学生掌握数字跑表的基本原理、使用方法及其在实际中的应用。
具体的教学目标如下:1.了解数字跑表的基本原理。
2.掌握数字跑表的使用方法。
3.掌握数字跑表在实际中的应用。
4.能够独立操作数字跑表进行测量。
5.能够根据实际需要选择合适的数字跑表。
6.能够对数字跑表进行简单的故障排查和维护。
情感态度价值观目标:1.培养学生对科学技术的兴趣和好奇心。
2.培养学生勇于实践、积极探究的科学精神。
3.培养学生珍惜时间、高效利用时间的意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.数字跑表的基本原理:介绍数字跑表的工作原理、组成部分及其功能。
2.数字跑表的使用方法:讲解如何正确操作数字跑表进行测量,包括基本操作和注意事项。
3.数字跑表在实际中的应用:举例说明数字跑表在各个领域的实际应用,如运动、交通、工程等。
4.数字跑表的维护与故障排查:介绍数字跑表的日常维护方法及故障排查技巧。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
具体包括:1.讲授法:讲解数字跑表的基本原理、使用方法及其应用。
2.讨论法:学生针对数字跑表的实际应用展开讨论,分享彼此的经验和心得。
3.案例分析法:通过分析具体案例,使学生更好地理解数字跑表在实际中的应用。
4.实验法:安排实验室实践环节,让学生亲自动手操作数字跑表,提高操作技能。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用权威、实用的数字跑表教材,为学生提供系统的理论知识。
2.参考书:提供相关的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作精美的PPT、视频等多媒体资料,提高学生的学习兴趣。
4.实验设备:准备充足的数字跑表设备,确保每个学生都能动手操作。
5.网络资源:利用网络资源,为学生提供更多的学习资料和实践案例。
五、教学评估为了全面、客观地评估学生在fpgh数字跑表课程中的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问回答等情况,评估其对课程内容的理解和掌握程度。
数字跑表实验报告

数字跑表实验报告数字跑表实验报告一、引言数字跑表是一种用于测量时间的仪器,广泛应用于各个领域,包括运动训练、科学研究等。
本实验旨在通过使用数字跑表,探究其测量精度和使用方法,并对其优缺点进行评估。
二、实验步骤1. 实验准备在实验开始前,我们首先确认数字跑表的电池是否充足,并检查其屏幕是否清晰可见。
同时,我们还准备了一个标准的计时器作为对照组,以便比较两者的测量结果。
2. 测量准确性为了评估数字跑表的测量准确性,我们进行了多组实验。
首先,我们使用数字跑表测量了一个已知时间长度的事件,例如一个钟摆的周期。
然后,我们将数字跑表的测量结果与标准计时器的结果进行比较,计算它们之间的误差。
3. 使用方法在实验中,我们还研究了数字跑表的使用方法。
我们通过阅读说明书和观察其他人的实验过程,学习如何正确地启动和停止数字跑表,并掌握其它功能,如计次和计时。
4. 优缺点评估在实验结束后,我们对数字跑表的优缺点进行了评估。
其中,数字跑表的优点包括测量精度高、操作简便、功能多样等。
然而,它也存在一些缺点,如对电池的依赖性、容易受到外界干扰等。
三、实验结果通过多组实验,我们得出了以下结论:1. 数字跑表的测量准确性较高,与标准计时器的误差在可接受范围内。
2. 使用数字跑表的方法相对简单,只需按下启动和停止按钮即可完成计时操作。
计次和计时功能也易于掌握。
3. 数字跑表的优点包括测量精度高、操作简便、功能多样等。
这使得它在运动训练、科学研究等领域得到广泛应用。
4. 然而,数字跑表也存在一些缺点。
首先,它对电池的依赖性较高,电池电量不足时会影响正常使用。
其次,数字跑表容易受到外界干扰,如电磁波等,可能导致测量结果的误差。
四、讨论与改进在实验过程中,我们也发现了一些问题,并提出了改进的建议:1. 电池寿命:为了减少对电池的依赖性,我们建议增加数字跑表的电池容量,或者提供可充电电池选项。
2. 抗干扰能力:为了提高数字跑表的抗干扰能力,我们建议在设计中加入屏蔽措施,以减少外界干扰对测量结果的影响。
数字跑表设计

学号:课程设计题目数字跑表设计学院自动化学院专业班级姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 数字跑表设计初始条件:1.运用所学的模拟电路和数字电路等知识;2.用到的元件:实验板、电源、连接导线、74系列芯片、555芯片或微处理器等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.设计一个具有、‘分’、‘秒’、‘1/100秒’的十进制数字显示的计时器。
2.要有外部开关,控制计数器的直接清零、启动和暂停/连续计时功能;3.严格按照课程设计说明书要求撰写课程设计说明书。
时间安排:第1天下达课程设计任务书,根据任务书查找资料;第2~4天进行方案论证,软件模拟仿真并确定设计方案;第5天提交电路图,经审查后领取元器件;第6~8天组装电路并调试,检查错误并提出问题;第9~11天结果分析整理,撰写课程设计报告,验收调试结果;第12~14天补充完成课程设计报告和答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录引言 (1)1设计意义及要求 (2)1.1设计意义 (2)1.2设计要求 (2)2方案设计 (3)2.1设计思路 (3)2.2 方案设计 (4)2.2.1设计方案一(个人方案)电路图 (4)2.2.2设计方案二(小组方案)电路图简单说明 (5)2.3方案比较 (6)3部分电路设计 (7)3.1计数单元 (7)3.2开始和暂停单元 (11)3.3清零功能单元 (12)3.4脉冲输出电路 (14)3.5译码及显示电路 (15)4调试与检测 (18)4.1调试中故障及解决办法 (18)4.2 调试与运行结果 (18)5仿真操作步骤及使用说明 (19)结束语 (20)参考文献 (21)附录1 (22)附录2 (23)本科生课程设计成绩评定表......................... 错误!未定义书签。
引言过去的三个世纪,我们经历了第一次工业革命,人类开始进入蒸气时代,第二次工业革命,人类开始进入电气时代并在信息革命资讯革命中达到顶峰。
EDA课程设计——数字跑表

第一章引言数字电子技术的应用一直在向着广度和深度扩展。
时至今日,“数字化”的浪潮几乎席卷了电子技术应用的一切领域。
由于电子产品的更新周期日益缩短,新产品开发速度日益加快,因而对电子设计自动化(EDA)提出了更高的要求,也有力地促进了EDA技术的发展和普及。
在数字集成电路方面,电路的集成度如摩尔定律(Moore’s Law)所预言的那样,以每1-2年翻一番的速度增长,使电路的复杂程度越来越高、规模越来越大。
同时,在基本技能方面,对使用EDA工具的能力也提出了更高的要求。
因此,学好EDA课程设计至关重要。
第二章 设计说明1.器件介绍-集成十进制加法计数器74160集成同步十进制加法计数器74160。
图2-1给出了74160的引脚排列图和逻辑符号图。
除了具有十进制加法计数功能外,还具有异步复位、同步预置数和计数状态保持、对输入的时钟信号进行分频等功能。
CLRN 为异步复位端,LDN 为预置数控制端,A-D 为预置状态输入端,RCO 为进位输出端,ENT 和ENP 为工作状态控制端(双使能端)。
图2-1 74160逻辑符号图 表2-1 74160功能特性 表2-2是74160的功能表,它给出了各种控制信号作用下计数器的工作状态,具体如下。
序号 CLK CLRN LDN ENP ENT 工作状态 1 × 0 × × × 复位 2 ↑ 1 0 × × 预置数 3 ↑ 1 1 1 1 正常计数 4 × 1 1 × 0 保持,且C=0 5×110 1保持表2-2 74160的功能表⑴当CLRN=0时,无论其他功能端为何状态,计数器都将复位,有QD ~QA=0000(注:QD 为状态端最高位)。
⑵当CLRN=1、LDN=0时,计数器处于预置数状态。
在出现此情况后的第一个CLK 上升沿,将预置输入端加载的数据送入计数器,即有QD ~QA=D ~A(注:D 为置入端最高位)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
清华大学信息工程学院课程设计报告书题目: 数字跑表课程:数字系统设计专业:电子信息科学与技术班级:学号:学生姓名:指导教师:2014年 6月 20日目录1简介 (4)1.1任务的提出 (4)1.2方案论证 (4)2总体设计 (5)2.1整体方案设计和功能分割 (5)2.2计时电路 (5)3详细设计及仿真 (7)3.1各功能模块的设计和实现 (7)3.1.1控制模块 (7)3.1.2计时器模块 (8)3.1.3时基分频器模块 (9)3.2软件设计 (10)4总结 (11)5总程序 (12)参考文献 (15)摘要本设课程设计是基于FPGA的数字跑表的设计,利用VerilogHDL语言和QuartusII软件以及FPGA实验操作平台来实现的。
本论文的重点是用硬件语言VerilogHDL来描述数字跑表,偏重于软件设计。
大致内容是首先简单介绍了EDA的现状和前景VerilogHDL语言特点,应用平台FPGA,之后阐述了数字跑表的设计思想和大体的设计流程,最后进入本设计的核心设计部分,用VerilogHDL语言设计数字跑表电路,着重对各个模块进行了详细的分析和说明。
关键词:Verilog、HDL语言、QuartusII软件、数字秒表1简介1.1任务的提出V erilog HDL语言是1983年GDA公司的Phil Moorby首创的,之后Moorby有设计了Verilog-XL仿真器获得很大成功,也使得Verilog HDL语言得到发展和推广。
Verilog HDL 语言是在C语言的基础上发展而来的。
从语法结构上看,Verilog HDL继承和借鉴了C语言的很多语法,两者有许多的相似之处,但Verilog HDL作为一种硬件描述语言,还是有本质的区别。
即可适于可综合的电路设计,也可胜任电路和系统的仿真;能在多层次上对所设计的系统加以描述,从开关级、门级,寄存器传输级到行为级等都可以担任,而且没规模限制;灵活多变的电路描述风格,可进行行为描述,也可进行结构描述等;应用十分的广泛。
QuartusⅡ软件是Atlera的CPLD/FPGA集成开发软件,具有完善的可视化设计环境,并具有标准的EDA工具接口,基于QuartusⅡ进行EDA设计开发需要以下步骤:设计输入、编译、仿真、编程与验证等。
根据设计要求,首先对数字跑表进行结构和功能的划分。
计数器部分设三个输入端,分别为时钟输入(CLK),复位(CLR)和启动/暂停(PAUSE)按键。
复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时,跑表开始计时,高电平时暂停,变低后在原来的数值基础上继续计数。
然后计数器的每个位的值赋给六选一数据选择器,数据选择器选择的位值再赋给七段数码管译码器,这样就可以显示数字了。
1.2方案论证本字跑表首先要从最低位的百分秒计数器开始,按照系统时钟进行计数。
计数至100后向秒计数器仅为,秒计数器一百分秒计数器的进位位为时钟进行计数。
计数至60后向分计数器进位,分计数器以秒计数器的进位位为时钟进行计数。
数字跑表巧妙地运用进位位作为时钟来减少计数的位数。
如果统一使用系统时钟作为计数时钟,那秒计数器将是一个6000进制的计数器,额分计数器将是一个3600000进制的计数器。
这将极大的浪费FPGA的逻辑资源。
而使用进位位作为计数时钟,只需要一个100进制的计数器和两个60进制的计数器。
在实际的设计中,为了是计数器更加简单,计数器使用高低位两个计时器来实现。
100进制计数器分别是最高位10进制计数器,地位10进制计数器,60进制计数器分别是高6进制计数器,低位10进制计数器。
这样整个数字跑表使用6个计数器来实现。
同时由于10进制计数器重复使用了5次,可以使用独立的模块实现十进制计数器,这样就可以通过模块复用来节省整个模块使用的资源。
数字跑表提供了清零为CLR和暂停位PAUSE,百分秒的时钟信号可以通过系统时钟分频提供。
分频至1/100s,即可实现真实的时间计数。
详细的时钟分频设计渎职可以参考相关的资料实现。
代码中端口信号的定义:CLK:时钟信号CLR:异步复位信号PAUSE:暂停信号MSH、MSL:百分秒的高位和低位SH、SL:秒信号的高位和低位MH、ML:分钟信号的高位和低位2总体设计2.1整体方案设计和功能分割根据设计要求,对数字跑表进行结构和功能的划分。
计数器部分设三个输入端,分别为时钟输入(CLK),复位(CLR)和启动/暂停(PAUSE)按键。
复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时,跑表开始计时,基于FPGA的数字跑表的设计高电平时暂停,变低后在原来的数值基础上继续计数。
然后计数器的每个位的值赋给六选一数据选择器,数据选择器选择的位值再赋给七段数码管译码器,这样就可以实现显示当前数字。
按照自顶而下的设计方法数字跑表的功能分割,如下图:功能分割图2.2计时电路计时电路的作用是计时,计时的一般方法是对时钟脉冲进行计数。
本设计在外部提供了1kHzs时钟,计时精度是1ms。
根据精度要求,需要设计分频器,对时钟信号进行10分频,产生周期为10ms的时基信号。
时基信号由时基分频器模块产生。
显示电路的作用是将计时值显示在数码管上。
计时电路产生的计时值通过BCD/七段译码后,驱动LED七段数码管。
计时显示电路存在一个方案选择的问题,即采用并行显示还是扫描显示,这关系到器件的资源利用。
并行显示同时驱动6个数码管,它需要同时对6组BCD数据进行译码并输出6组LED 七段驱动信号,需要较多的内部逻辑和I/O资源。
以ispLSI器件为例,驱动6个数码管的7个显示段,共需要42(7*6)个I/O引脚;另外还需要6个BCD/七段译码器,共需要12(6*2)个GLB。
采用扫描显示则每次只驱动一位数据,各位数据轮流进行显示;如果是扫描的速度足够快,由于人眼存在视觉残留现象,看不到闪烁。
扫描显示的资源少。
设计中采用扫描显示的方式,由于是扫描显示每次只有一位视觉进行译码和输出,所以可以共享BCD/七段译码器和七段驱动信号输出引脚。
同样用ispLSI器件实现,数码管七段驱动信号需要7个输出引脚,另外还要6个位驱动信号,共需要13个I/O引脚。
扫描显示电路可以继续分割为BCD 译码器和数据选择器两个子模块。
下面确定模块之间的接口关系,各模块的接口信号说明如下:计时控制器:计时控制器的输入信号时启动、暂停、和清零信号。
为了方便,将启动和暂停功能设置在同一个案件上;按一次是启动,按第二次是暂停,按第三次则是继续,以此类推。
所以计时控制器共有两个开关输入信号,记启动/暂停和清零。
计时器的输出信号为计数允许/保持信号和清零信号。
计时电路:计时电路的输入信号为1kHz时钟、计时允许/保持信号和清零信号;输出为10ms,100ms,s,min的计时数据。
它的下一级模块的接口信号如下: 1、时基电路大的输入信号频率为1kHz,输出时钟周期为10ms。
2、计数器的输入信号为计数允许信号、清零信号和1kHz时钟,输出为10ms,100ms,s,min 的计时数据。
显示电路:显示电路的输入信号为计时器的10ms,100ms,s,min计时数据。
输出为七段译码驱动信号和位选择信号。
3详细设计及仿真3.1各功能模块的设计和实现自顶而下完成各层次的设计描述,数字跑表可以划分为5个功能模块:顶层模块、计时模块、时基分频器模块、数据选择模块、数码管显示模块。
本设计中部分模块都用原理图和VerilogHDL语言两种方法设计。
以VerilogHDL语言设计为主。
顶层模块顶层模块只说明功能的分配、内部功能块和对外接口关系,功能模块实际的逻辑功能和具体的实现由下一层模块描述。
3.1.1控制模块RESET端为全局清零按钮,接到控制模块和计时模块的清零端,负责将计数器清零。
当RESET为低电平时,控制模块和总计数器模块清零,跑表重新开始工作。
与门可控制时钟信号是否被输出到下一级。
START_STOP为启动\暂停按钮,当跑表为START状态时CLK 端为高电平,QA为1,时钟信号输出,当跑表为STOP状态时CLK端为低电平,QA为0,时钟信号不输出,从而实现开始和暂停的功能。
电路图如下:仿真波形:3.1.2计时器模块PAUSE为低电平时开始计数,百分秒低位自加一,加到九时归零,百分秒高位自加一,加到九时归零,且向秒位发出一个高电平,秒低位自加一,加到九时归零,秒高位自加一,且向分位发出一个高电平,分低位自加一,加到九时清零,且向分高位发出一个高电平,分高位自加一,加到六时清零。
PAUSE为低电平时暂停。
电路图如下:仿真波形:100进制计数器(count100):仿真波形:60进制计数器(count60):仿真波形:3.1.3时基分频器模块时基分频器要求对1kHz的时钟(此设计的输入时钟信号)分频,产生100Hz(10ms)时基信号输出,此时基信号即为计时器的输入信号。
基分频器可由十进制计时器设计。
电路图如下所示:仿真波形:3.2软件设计以上分析了数字跑表的功能和性能参数要求,确定了数字跑表的主要功能块、内部连接关系及I/O关系,各模块的连接如下图所示。
4总结这一次的设计给了我很深的体会,感觉自己学的东西的实用的地方。
以前总是觉得自己学的知识都只是纸上谈兵,这一次的数字跑表的设计让我学到了很多。
在上HDL的实验的时候,我们做的实验也做过数字跑表,但是那是用单片机做的,连线什么的也简单,我的主要工作知识编程而已。
而这一次我做的数字跑表用的是HDL的知识,没有用到程序的部分,也实现了用单片机同样的功能。
感觉自己以前学的知识还有很多不足的地方,思维被局限在很小的范围里,而这一次的设计也开拓了我的眼光,让我了解。
其实知识都是想通的很多地方都可以联系起来,让我在课堂之外也能学到很多的知识,而且自己一个人完成一项事情的乐趣也是不错的。
然而在这一次的学习中,我也感到了自己的很多不足,自己学知识在以前是不扎实的,也缺乏把知识都联系到一起的能力,这一次的设计对我自己而言是很重要的一次体验。
在我设计数字钟的过程中,也很多地方是不足的,我只是设计了一个能实现基本功能的数字钟而已,和现在市场上的数字钟在功能上是有很多差距的。
可以说片这一次设计的体验对我而言是很重要的,也为我以后的毕业设计做了一个很好的铺垫,给了我更多的信心。
5总程序CLR:为异步复位信号;PAUSE:为暂停信号;MSH,MSL:百分秒的高位和低位;SH,SL:秒信号的高位和低位;MH,ML:分钟信号的高位和低位。
*/module paobiao(clk,clr,seg,pause,msh,msl,sh,sl,mh,ml,ss,clk1); input clk,clr,clk1;input pause;output[3:0] msh,msl,sh,sl,mh,ml,ss;reg[3:0] msh,msl,sh,sl,mh,ml;reg cn1,cn2;//cn1为百分秒向秒的进位,cn2为秒向分的进位output [7:0]seg;// seg是数码段选择;wei是选择需要显示的数码管reg [7:0]seg;reg[3:0]coder;reg[15:0]count;reg[2:0]ss;//百分秒计数进程,每计满100,cn1产生一个进位1always@(posedge clk or posedge clr)beginif(clr)begin//异步复位{msh,msl}<=8'h00;cn1<=0;endelse if(!pause) //PAUSE为0时正常计数,为1时暂时计数beginif(msl==9) beginmsl<=0;if(msh==9)begin msh<=0;cn1<=1;endelse msh<=msh+1;endelse beginmsl<=msl+1;cn1<=0;endendend//秒计数进程,每计满60,cn2产生一个进位always@(posedge cn1 or posedge clr)beginif(clr) begin //异步复位{sh,sl}<=8'h00;cn2<=0;endelse if(sl==9) //低位是否为9beginsl<=0;if(sh==5) begin sh<=0;cn2<=1;endelse sh<=sh+1;endelsebegin sl<=sl+1;cn2<=0;endend//分钟计数进程,每计满60,系统自动清零always@(posedge cn2 or posedge clr)beginif(clr)begin{mh,ml}<=8'h00;end //异步复位else if(ml==9)beginml<=0;if(mh==5) mh<=0else mh<=mh+1;endelse ml<=ml+1;end//数据选择器always@(posedge clk1)beginif(ss>3'd7)ss<=1'b0;else ss<=ss+1'b1;endalways@(posedge clk1)begincase(ss)//选择需要的显示数据3'd5:coder<=msl;3'd4:coder<=msh;3'd3:coder<=sl;3'd2:coder<=sh;3'd1:coder<=ml;3'd0:coder<=mh;3'd6:coder<=3'd0;3'd7:coder<=3'd0;endcaseend//七段数码管译码器always@(coder)//译码...把值赋给数码管显示begincase(coder)4'd0:seg=7'b00111111;//4'd1:seg=7'b00000110;//4'd2:seg=7'b01011011;4'd3:seg=7'b01001111;4'd4:seg=7'b01100110;4'd5:seg=7'b01101101;4'd6:seg=7'b01111101;4'd7:seg=7'b00000111;4'd8:seg=7'b01111111;4'd9:seg=7'b01101111;endcaseendEndmodule参考文献[1] 朱如琪. FPGA设计实践教程[M].北京:科学出版社,2009.[2] 王金明. 数字系统设计与Verilog HDL[M]. 北京:电子工业出版社,2010.[3] 黄智伟. FPGA系统设计与实践[M]. 北京:电子工业出版社,2008.[4] 李宥谋. 基于V erilog的FPGA设计基础[M]. 西安:西安电子科技大学出版社,2009。