数字跑表设计说明
数字跑表要求

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),按动单脉冲发生的微动开关发出启动计时信号,看数码管上是否显示递加的计时时间;再按动单脉冲发生的微动开关发出停止计时信号,看数码管上显示的计时时间是否停止。
通过与普通跑表的比较,验证计时是否准确。
数字跑表设计说明书

学号:0121011360219课程设计题目数字跑表设计学院自动化学院专业自动化专业班级自动化1002姓名李志强指导教师杨莉林伟2012 年07 月02 日课程设计任务书学生姓名:李志强专业班级:自动化1002班指导教师:杨莉林伟工作单位:自动化学院题目: 数字跑表设计初始条件:1.运用所学的模拟电路和数字电路等知识;2.用到的元件:实验板、电源、连接导线、74系列芯片、555芯片或微处理器等。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.设计一个具有、‘分’、‘秒’、‘1/100秒’的十进制数字显示的计时器。
2.要有外部开关,控制计数器的直接清零、启动和暂停/连续计时功能;3.严格按照课程设计说明书要求撰写课程设计说明书。
时间安排:第1天下达课程设计任务书,根据任务书查找资料;第2~4天进行方案论证,软件模拟仿真并确定设计方案;第5天提交电路图,经审查后领取元器件;第6~8天组装电路并调试,检查错误并提出问题;第9~11天结果分析整理,撰写课程设计报告,验收调试结果;第12~14天补充完成课程设计报告和答辩。
指导教师签名: 2012年 6月25日系主任(或责任教师)签名: 2012年 6月25日目录引言 (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 连续和暂停单元 (10)3.3清零功能单元 (12)3.4脉冲产生电路 (13)3.5 译码及显示电路 (15)4 调试与检测 (17)4.1 调试中故障及解决办法 (17)4.2 调试与运行结果 (17)5 仿真操作步骤及使用说明 (18)结束语 (19)参考文献 (20)附录1 (21)附录2 (22)附录3 (23)引言21世纪,电子技术获得了飞速的发展,电子计算机、数码产品、汽车、空调等都是电子科技的典型应用,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
实验五数字跑表的设计与实现

实验五数字跑表的设计与实现一.实验目的1.设计数字跑表,实现对单人的精确计时。
2. 设计数字跑表,实现对多人的精确计时。
二.实验内容1.数字跑表功能:计时精度为10ms,计时范围为59分59.99秒。
设置一下两种模式。
模式1:对单人计时,能实现暂停、显示及清零功能,并在数码管上实时显示;模式2:实现多人的同时计时,在数码管上实时显示,并能在数码管上回显出6个时间,可控制显示。
模式1中设置了两个按键,即启动/暂停键和清零键,由其产生计数允许/保持和清零信号。
启动/暂停键是多用途按键,在“按下、松开、再按下、松开”的过程中,所起的作用分别是“计数、暂停、置数(置到59分59秒)、继续计数”。
状态转换图如下图1示。
图1模式2也设置了两个按键,分别为清零键RST和取时键K2,产生清零信号和实时中断取时信号。
取时信号能够对当前时间进行显示中断却不会中断后台的继续计时,取时键在“按下、松开”的一个过程中实现对时间的实时显示。
也就是说K2每按一次实现对一个人的计时,计时的结果通过调用RAM来依次保存,当RAM的WREN信号为高电平时,写入数据,当WREN信号为低电平时,读出数据。
状态转换图如图2所示。
图中s0和s3记录实时时间,而s1和s2保持。
状态转换表如表1所示。
图2表1三.实验步骤1. 建立工程2. 建立顶层文件3. 建立引脚约束文件4. 硬件下载四.实验结论(一)模式1:对单人计数,能实现暂停、显示及清零功能。
1. 顶层文件2. 主要控制模块的Verilog代码3. 引脚约束文件4. 硬件下载结果(二)模式2:实现对多人的同时计时,在数码管上实时显示,并能回显至少4人的时间,可控制显示。
1. 顶层文件2. 主要控制模块的Verilog代码3. 引脚约束文件4. 硬件下载结果。
数字跑表

第1章设计说明1.1设计思路根据设计要求,首先对数字跑表进行结构和功能的划分。
计数器部分设三个输入端,分别为时钟输入(CLK),复位(CLR)和启动/暂停(PAUSE)按键。
复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时,跑表开始计时,高电平时暂停,变低后在原来的数值基础上继续计数。
然后计数器的每个位的值赋给六选一数据选择器,数据选择器选择的位值再赋给七段数码管译码器,这样就可以显示数字了。
1.2模块介绍计数器模块:PAUSE为低电平时开始计数,百分秒低位自加一,加到九时归零,百分秒高位自加一,加到九时归零,且向秒位发出一个高电平,秒低位自加一,加到九时归零,秒高位自加一,加到五时归零,且向分位发出一个高电平,分低位自加一,加到六时系统清零。
数据选择模块:定义三位二进制数ss作为选择数码管的变量,ss自加一,当ss大于7时归零,当ss为5、4、3、2、1时分别将msl,msh,sl,sh,ml,mh的值赋给coder,当ss为6、7时赋值为零。
七段数码管译码器模块:根据数字的显示形状编制真值表,当上一模块coder为0~9时,分别给seg赋以一组八位二进制数,使数码管显示相应的数字。
1.3真值表根据设计要求,用verilog语言对数字跑表描述如下:/*信号定义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 clk1k;//frequency division //1khzreg [7:0]seg;reg [3:0]coder;//decoding//每一个需要显示的数据reg [15:0]count;//count for frequency divisionreg [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;endend//秒计数进程,每计满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<=0;else mh<=mh+1;endelse ml<=ml+1;end//数据选择器always@(posedge clk1)//gernerally 1ms is finebeginss<=1'b0;else ss<=ss+1'b1;endalways@(posedge clk1)//select and read from tabbegincase(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;//显示04'd1:seg=7'b00000110;//显示14'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第3章波形仿真图2、设计题目“数字跑表”波形仿真图:第4章管脚锁定及硬件连线第5章总结为期两周的EDA课程设计结束了,通过近两周的学习实践,我初步掌握了Verilog HDL这种目前应用最广泛的硬件描述语言的编写方法以及联机验证的整个流程,圆满完成了任务书的设计任务。
数字跑表设计资料

1 设计意义及要求1.1 设计意义随着社会的发展,在一些竞技比赛中,尤其是体育运动中,数字跑表的精度已经越来越高了,数字跑表扮演着越来越重要的角色,而通过一学期对数字电子技术的学习,学校安排了这次的课程设计,而我们小组的课题是数字跑表的简单设计,目的在与让学生综合运用所学的知识,对各基本器件的运用更加熟练,也更好的锻炼学生的设计思维和动手设计能力,而这也是我们作为电气专业学生的必备技能。
1.2 设计要求1)设计一个具有、‘分’、‘秒’、‘1/100秒’的十进制数字显示的计时器。
2)要有外部开关,控制计数器的直接清零、启动和暂停/连续计时功能;3)严格按照课程设计说明书要求撰写课程设计说明书。
2.1 设计思路电路主要由秒脉冲发生器,计数器,译码器显示电路和控制电路四个部分组成。
其中计数器为系统的主要部分,计数器完成计数功能;秒脉冲发生器提供脉冲信号;译码显示器显示当前数字,控制电路完成计数的启动,暂停和清零功能。
设计框图如图2—1。
图2—1 设计思路框图2.2.1设计方案一电路图在设计过程中,为了满足设计的要求,应正确处理各个信号间的关系。
该电路是由秒脉冲电路,计数器,译码器显示电路和控制电路组成。
其中计数器和控制电路是系统的主要模块,计数器是由6个74LS90构成。
控制电路完成计数器的直接清零、启动计数、暂停/连续计数、译码显示电路的显示等功能。
当启动开关闭合时,555振荡器将产生的信号送至计数器的CP信号输入端,计数器开始计时功能。
当清零//置数端处于置数端时,启动开关闭合,控制电路应封锁时钟信号CP,同时计数器完成置数功能,译码显示电路显示“00”字样;当启动开关断开时,计数器开始计数;将暂停与连续的控制开关放在555电路模块中,通过控制脉冲信号的传送来达到相应的目的。
当计数器R0端输入高电平时则全部计数器清零,进而实现整个课程设计的要求。
原理图如图2—2所示。
图2—2 方案一电路原理图2.2.2设计方案二电路图方案二和方案一的原理大同小异,该电路同样由秒脉冲电路,计数器,译码器显示电路和控制电路组成。
数字跑表设计eda课程设计

数字跑表设计eda课程设计摘要:一、引言1.课程背景介绍2.数字跑表设计意义二、数字跑表设计原理1.跑表系统架构2.数字跑表核心模块三、EDA工具介绍1.EDA工具的作用2.EDA工具的选择四、数字跑表设计流程1.设计输入2.设计仿真3.物理布局4.物理验证5.结果分析与优化五、数字跑表设计实践1.设计参数设定2.使用EDA工具进行设计3.设计验证与优化六、数字跑表设计成果与应用1.设计成果展示2.设计实用性分析3.设计前景展望七、总结与展望1.课程学习总结2.数字跑表设计发展趋势正文:一、引言随着科技的飞速发展,电子设计自动化(EDA)技术在电子设计领域中的应用越来越广泛。
数字跑表作为一种实用且具有较高技术含量的电子设备,其设计过程离不开EDA技术的支持。
本课程设计旨在让学生掌握数字跑表的设计方法,熟悉EDA工具的使用,提高实际动手能力和创新能力。
二、数字跑表设计原理数字跑表设计主要包括系统架构设计和核心模块设计两部分。
系统架构设计要求明确整个跑表的组成,包括时钟模块、计数模块、显示模块、控制模块等。
核心模块设计则是针对各个功能模块提出具体的实现方案,如采用何种器件、电路拓扑结构等。
三、EDA工具介绍EDA工具在数字跑表设计过程中发挥着至关重要的作用。
它能帮助设计师快速完成电路设计、仿真、验证及优化等任务。
常见的EDA工具包括原理图编辑器、布图布线工具、仿真器、时序分析工具等。
本课程将使用某款EDA工具进行数字跑表的设计。
四、数字跑表设计流程1.设计输入:根据数字跑表的功能需求,编写设计说明书,明确各个模块的功能、性能参数及接口关系。
2.设计仿真:利用EDA工具进行电路仿真,验证电路的正确性。
3.物理布局:根据电路原理图,进行物理布局设计,考虑器件摆放、连线走向等因素。
4.物理验证:对物理布局进行验证,确保电路符合制程要求。
5.结果分析与优化:分析仿真结果,找出存在的问题,对设计进行优化。
五、数字跑表设计实践1.设计参数设定:根据数字跑表的实际需求,设定各项性能参数,如时钟频率、计数范围等。
简易数字跑表设计5篇

简易数字跑表设计5篇第一篇:简易数字跑表设计西安郵電大学数字控制系统课程设计报告书院(系)名称:学生姓名:专业名称:班级:时自动化学院自动化自动1103 间: 2014年9月1日至2014年9月12日乘法器设计一、设计要求:计时精度10ms,计时范围59.99秒。
(1)对单人计时,能实现暂停、显示及清零功能,在数码管上实时显示,设置启动/暂停、清零按键;(2)对多个人同时计时,在数码管上实时显示,并能回显出六个时间。
可控制显示,设置清零、取时按键;(3)采用状态机设计;(4)百分秒在数码管上实时显示,秒利用多个数码管显示BCD 值。
二、设计过程: 1.方案设计:1)画状态图:按键状态输出复位:00开始:S0清零:z=0;启/停:01计数:S1不清零:z=1;存/回显:10暂停:S2存/回显:S32)写程序:·在一个module模块里,有多个always块;·有分频、计数、存储、输出等模块;·测试模块的输入输出与源程序的输入输出相反; 2.系统仿真:Verilog仿真所需仿真环境:modelsim 3.管脚配置:1.四、软件设计:源程序module paobiao(clk,rst,pause,save,mg,md,bg,bd);//秒高,秒低,百分秒高,百分秒低input clk,rst,pause,save;output reg [3:0] mg,md,bg,bd;reg [15:0] zd,zz,zg;//中间变量reg [17:0] count1;reg clk1;//100ms reg pause_temp,save_temp;//取上升沿 reg [13:0] count2,reg0,reg1,reg2,reg3,reg4,reg5;reg [2:0] count3;// reg [1:0] state,next_state;reg cn1;parameter S0=2'b00,S1=2'b01,S2=2'b11;//分频always @(posedge clk or negedge rst)begin if(!rst)count1<=0;else if(count1==200000)count1<=0;//200000else count1<=count1+1;endalways @(posedge clk)begin if(!rst)clk1<=0;else if(count1==99999)clk1<=~clk1;//99999 else clk1<=clk1;end //总计时always @(negedge clk1 or negedge rst)//clk1 begin if(!rst)count2<=0;else if(state==S1)count2<=count2+1;// else if(state==S2)count2<=count2;else count2<=count2;end//存储个数计数always @(negedge rst or negedge save)begin if(!rst) count3<=0;else if(next_state==S1)count3<=count3+1;else if(next_state==S2)count3<=count3-1;else count3<=count3;end//毫秒低位显示结果always @(negedge rst or posedge clk)beginif(!rst)bd<=0;else if(state==S1)bd<=count2%10;else if(state==S2)begin case(count3)3'b000: bd<=reg0%10;3'b001: bd<=reg1%10;3'b010: bd<=reg2%10;3'b011: bd<=reg3%10;3'b100: bd<=reg4%10;3'b101: bd<=reg5%10;default:bd<=reg0%10;endcaseendelsebd<=bd;end//毫秒高位显示结果always @(negedge rst or posedge clk)begin if(!rst)bg<=0;else if(state==S1)bg<=(count2/10)%10;else if(state==S2)begin case(count3)3'b000: bg<=(reg0/10)%10;3'b001: bg<=(reg1/10)%10;3'b010: bg<=(reg2/10)%10;3'b011: bg<=(reg3/10)%10;3'b100: bg<=(reg4/10)%10;3'b101: bg<=(reg5/10)%10;default:bg<=(reg0/10)%10;endcaseendelsebg<=bg;end//秒位显示结果always @(negedge rst or posedge clk)begin if(!rst)md<=0;else if(state==S1)md<=(count2/100)%10; else if(state==S2)begincase(count3)3'b000: md<=(reg0/100)%10;3'b001: md<=(reg1/100)%10;3'b010: md<=(reg2/100)%10;3'b011: md<=(reg3/100)%10;3'b100: md<=(reg4/100)%10;3'b101: md<=(reg5/100)%10;default:md<=(reg0/100)%10;endcase endelsemd<=md;end//十秒位显示结果always @(negedge rst or posedge clk) beginif(!rst)mg<=0;else if(state==S1)mg<=(count2/1000)%10; else if(state==S2)begincase(count3)3'b000: mg<=(reg0/100)%10;3'b001: mg<=(reg1/100)%10;3'b010: mg<=(reg2/100)%10;3'b011: mg<=(reg3/100)%10;3'b100: mg<=(reg4/100)%10;3'b101: mg<=(reg5/100)%10;default:mg<=(reg0/100)%10;endcaseendelsemg<=mg;endalways @(negedge rst or posedge clk)//定义当前状态begin if(!rst)state<=S0;//异步复位,S0为初始状态elsestate<=next_state;end//状态转移always @(state or pause orpause_temp)begincase(state)S0:begin if(pause==0&&pause_temp==1)next_state<=S1; else next_state<=S0;endS1:begin if(pause==0&&pause_temp==1)next_state<=S2; else next_state<=S1;endS2:begin if(pause==0&&pause_temp==1)next_state<=S1; else next_state<=S2;enddefault:next_state<=S0;endcaseend//存数always@(negedge rst or negedge save)begin if(!rst)begin reg0<=0;reg1<=0;reg2<=0;reg3<=0;reg4<=0;reg5<=0;end elsebegin if(count3==0)reg0<=count2;else if(count3==1)reg1<=count2;else if(count3==2)reg2<=count2;else if(count3==3)reg3<=count2;else if(count3==4)reg4<=count2;else if(count3==5)reg5<=count2;else begin reg0<=0;reg1<=0;reg2<=0;reg3<=0;reg4<=0;reg5<=0;endend end//取启停键上升沿always @(posedge clk)begin if(!rst)pause_temp<=0;elsepause_temp<=pause;end//取保存翻看上升沿always @(posedge clk)begin if(!rst)save_temp<=0;elsesave_temp<=save;endendmodule2.测试程序module paobiao_tp;reg clk,rst,pause,save;wire[3:0] mg,md,bg,bd;parameter DELY=10;paobiao u1(clk,rst,pause,save,mg,md,bg,bd);always #(DELY/2) clk=~clk;initialbegin clk=0;pause=0;save=0;rst=0;#DELY rst=1;save=0;pause=0;#DELY pause=1;#DELY pause=0;#DELY save=1;end endmodule五、实验结果 1.仿真图像2.硬件电路显示六、个人完成工作及心得体会我们组设计的是数字跑表,我负责画状态图和系统程序和仿真。
数字跑表课程设计

数字跑表课程设计数字跑表是计算机科学中的一个经典问题,它是一个倒计时程序,用于计算比赛或活动的时间。
以下是数字跑表课程设计的一个示例:1.教学目标(1)理解数字跑表的原理和倒计时算法;(2)掌握使用C语言实现数字跑表的方法;(3)能够根据实际需求,自定义数字跑表的计时长度和精度。
2.教学内容(1)数字跑表的原理和倒计时算法介绍数字跑表的原理和倒计时算法,包括计时器的初始化、时间的显示和更新等。
(2)使用C语言实现数字跑表通过C语言实现数字跑表,使用循环结构控制倒计时过程,使用数组存储数字字符,使用printf函数将数字字符输出到控制台。
(3)自定义数字跑表的计时长度和精度通过编写自定义函数,实现计时长度的自定义和精度的控制,使用float类型存储时间,并实现倒计时过程中的时间转换。
3.教学方法(1)讲解数字跑表的原理和算法;(2)演示使用C语言实现数字跑表的过程;(3)通过实例演示自定义数字跑表的计时长度和精度的过程。
4.课程实施(1)介绍数字跑表的原理和倒计时算法,包括计时器的初始化、时间的显示和更新等;(2)使用C语言实现数字跑表,包括循环结构、数组、printf函数等;(3)自定义数字跑表的计时长度和精度,包括float类型、时间转换等。
5.课程评估(1)检查程序的运行结果;(2)检查自定义数字跑表的计时长度和精度是否符合要求;(3)通过实际应用场景的测试,评估程序的稳定性和可靠性。
6.课程反思(1)总结数字跑表课程设计的经验和教训;(2)总结学生对于数字跑表课程设计的理解和掌握程度;(3)总结课程设计中存在的问题和改进措施。
通过数字跑表课程设计,学生可以深入理解计算机科学中的计时原理和倒计时算法,掌握使用C语言实现数字跑表的方法,并能够根据实际需求自定义数字跑表的计时长度和精度。
同时,学生还可以学习到如何测试程序的稳定性和可靠性,提高其编程能力和编程素养。
在课程设计中,学生也可以通过反思自己的经验和教训,不断改进自己的编程方法和编程思路,提高自己的编程能力和编程水平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南科技大学设计报告课程名称:基于FPGA的现代数字系统设计设计名称:基于原理图的数字跑表设计姓名:学号:班级:指导教师:西南科技大学信息工程学院一、实验目的1、设计一个数字跑表,具有复位、暂停、秒表等功能二、实验原理1.完成一个具有数显输出的数字跑表计数器设计,原理图如下图所示。
、数字跑表计数器原理图任务分析:输入端口:1)复位信号CLR,当CLR=1,输出全部置0,当CLR=0,系统正常工作。
2)暂停信号PAUSE,当PAUSE=1,暂停计数,当PAUSE=0,正常计数。
3)系统时钟CLK,CLK=50MHz输出端口:数码管驱动----DATA1,位宽14位,其中,DATA1[7:0]是数码管显示值,DATA1[14:8]是数码管控制端口屏蔽未用端口---ctr,位宽是2,将未用的两个数码管显示关闭(1)跑表的计时范围为0.01s~59min59.99s,计时精度为10ms;(2)具有异步复位清零、启动、计时和暂停功能;(3)输入时钟频率为100Hz;(4)要求数字跑表的输出能够直接驱动共阴极7段数码管显示.按照自顶向下设计,应该分为以下模块:分频----将下载板上50MHz时钟分频为周期是0.01秒的时钟,提供给百分计数计数1----百分计数,输入周期是0.01秒的时钟,计数,满100进位,注意个位,十位的不同生成计数2---60进制计数器,输入百分位,或者秒位的进位,计数,满60向高位进位,注意个位,十位的不同生成数码管显示控制----驱动数码管数据,显示控制端口。
三、实验步骤1、数码管显示驱动模块的设计(1)建立工程:file->New Project,并注意器件、EDA工具的正确选择(2)建立新Verilog HDL模块编辑窗口,选择资源类型为Verilog Module,并输入合法文件名,在文本编辑窗口输入代码。
(3)执行综合得到综合后的电路,并进行功能时序仿真。
2.计数器模块的设计设计步骤同数码管的设计,并完成模块的设计输入、综合、功能仿真。
3.数码管和计数器组合为一个系统用Verilog HDL将数码管和计数器组合为一个模块,完成综合、功能仿真,分析波形,修正设计。
4.把电路进行综合的编译之后,锁定引脚,下载到板子上进行实际仿真验证四、实验结果及分析1.在Design窗口中,选择Design Utilities→Create Schematic Symbol创建跑表模块;2.时序图激励文件代码`timescale 1ns / 1psmodule TSET;reg CLK;reg CLR;reg PAUSE;wire [13:0] DATA1;paobiao uut (.CLK(CLK), .CLR(CLR), .PAUSE(PAUSE), .DATA1(DATA1));initial beginCLK = 0;CLR = 0;PAUSE = 0;#10 CLR=1;#10 CLR=0;forever begin#10 CLK=!CLK;endendEndmodule解释:过了10时间后clk=1,再过10时间后clk=0;每过10个时间后,clk的值进行一次翻转,从而生成的时钟周期是20个时间单位3.锁定引脚# PlanAhead Generated physical constraintsNET "CLK" LOC = V10;NET "CLR" LOC = D14;NET "PAUSE" LOC = C14;NET "DATA1[0]" LOC = R7;NET "DATA1[1]" LOC = V7;NET "DATA1[2]" LOC = U7;NET "DATA1[3]" LOC = V6;NET "DATA1[4]" LOC = T6;NET "DATA1[5]" LOC = P6;NET "DATA1[6]" LOC = N5;NET "DATA1[7]" LOC = P7;NET "DATA1[13]" LOC = N8;NET "DATA1[12]" LOC = M8;NET "DATA1[11]" LOC = T8;NET "DATA1[10]" LOC = R8;NET "DATA1[9]" LOC = V9;NET "DATA1[8]" LOC = T9;用开关一来实现对数字的清除操作用开关二来实现对数字的暂停操作五、体会我初步掌握了Verilog HDL这种目前应用最广泛的硬件描述语言的编写方法以及联机下载到硬件验证的整个流程,圆满完成了设计任务。
程序设计是这次实验的重点,通过老师上课讲的内容自己实际做了进位程序以及分频程序,基本掌握了它的使用。
在写完程序后,发现不能调用各个程序模块,后来在同学的点拨下改成使用程序模块来生成具体的模块来使整个系统正常工作。
程序设计遇到了数码管无法显示的瓶颈,在老师的指导下最终解决了这一问题。
在此次课程设计过程中,我提升了自己的自学能力和动手能力,这也是一笔很大的收获。
代码:`timescale 1ns / 1psmodule paobiao(CLK,CLR,PAUSE,DATA1);input CLK,CLR;input PAUSE;output[13:0] DATA1;reg[3:0] MSH,MSL,SH,SL,MH,ML,dig;reg cn1,cn2;reg [10:0] div_count1;reg [18:0] div_count;reg timer_clk;always @(posedge CLK or posedge CLR)if(CLR) div_count <= 19'h0;elseif(div_count == 19'h7a11f)div_count <= 19'h0;else div_count <= div_count+1'b1;always @ (posedge CLK or posedge CLR)if(CLR) timer_clk <= 1'b0;elseif(div_count== 0)timer_clk <= 1'b1;elsetimer_clk <= 1'b0;always @(posedge timer_clk or posedge CLR)beginif(CLR) begin{MSH,MSL}<=8'h00;cn1<=0;endelse if(!PAUSE)beginif(MSL==9) beginMSL<=0;if(MSH==9)begin MSH<=0; cn1<=1; endelse MSH<=MSH+1;endelse beginMSL<=MSL+1; cn1<=0;endendendalways @(posedge cn1 or posedge CLR) beginif(CLR) begin{SH,SL}<=8'h00;cn2<=0;endelse if(SL==9)beginSL<=0;if(SH==5)begin SH<=0; cn2<=1; end else SH<=SH+1;endelsebegin SL<=SL+1; cn2<=0; end endalways @(posedge cn2 or posedge CLR) beginif(CLR)begin {MH,ML}<=8'h00; endelse if(ML==9) beginML<=0;if(MH==5) MH<=0;else MH<=MH+1;endelse ML<=ML+1;endfunction[7:0] Xrom;input [3:0] sum;case(sum)4'b0000 : Xrom = 7'b1111110 ;4'b0001 : Xrom = 7'b0110000 ;4'b0010 : Xrom = 7'b1101101 ;4'b0011 : Xrom = 7'b1111001 ;4'b0100 : Xrom = 7'b0110011 ;4'b0101 : Xrom = 7'b1011011 ;4'b0110 : Xrom = 7'b1011111 ;4'b0111 : Xrom = 7'b1110000 ;4'b1000 : Xrom = 7'b1111111 ;4'b1001 : Xrom = 7'b1111011 ;4'b1010 : Xrom = 7'b1110111 ;4'b1011 : Xrom = 7'b0011111 ;4'b1100 : Xrom = 7'b1001110 ;4'b1101 : Xrom = 7'b0111101 ;4'b1110 : Xrom = 7'b1001111 ;4'b1111 : Xrom = 7'b1000111 ;default : Xrom = 7'b1111110 ;endcaseendfunctionalways @ (posedge CLK or posedge CLR)if(CLR)begindiv_count1 <= 11'h0;dig <= 3'b000; endelse begindiv_count1 <= div_count1 + 1;if(div_count1 == 0)if(dig==3'b101)dig <= 3'b000;elsedig <= dig + 1'b1;else dig <= dig;endreg[13:0] DATA1;always @(posedge CLK or posedge CLR)if(CLR)DATA1 <= 14'b0;elsecase(dig)3'b000:DATA1<={~6'b111110,Xrom(MSL)};3'b001:DATA1<={~6'b111101,Xrom(MSH)};3'b010:DATA1<={~6'b111011,Xrom(SL)};. . . .3'b011:DATA1<={~6'b110111,Xrom(SH)};3'b100:DATA1<={~6'b101111,Xrom(ML)};3'b101:DATA1<={~6'b011111,Xrom(MH)};default:DATA1<=14'h3fff;endcaseendmodule. word资料可编辑.。