FPGA编程设计电子表实验报告
- 格式:doc
- 大小:1.72 MB
- 文档页数:74
fpga秒表设计实验报告本次实验是基于FPGA设计的秒表。
秒表主要是用来计时的一种仪器,具有精准度高、显示清晰等优点。
在实验中,我们使用FPGA来实现秒表的设计。
1. 实验目的通过本次实验,我们的目的是掌握FPGA的使用方法,并设计出一个能够精准计时的秒表。
同时,也能够加深理解数字电路的基本原理和数字信号的处理方式。
2. 实验原理秒表的原理很简单,在起点按下计时键后,秒表开始计时,时间会显示在数码管或LCD屏幕上。
在终点按下停止键后,秒表停止计时。
我们需要用数字电路来实现这个过程,分为三个部分。
2.1. 时钟模块时钟模块是秒表实现的基础。
我们可以使用FPGA内置的时钟控制器IP,也可以自己实现时钟模块。
在这个实验中,我们使用了FPGA内置的时钟控制器IP。
2.2. 计时模块计时模块是实现秒表的关键。
我们可以使用FPGA内置的计数器IP,也可以自己实现计数器模块。
在这个实验中,我们使用了FPGA内置的计数器模块。
2.3. 显示模块显示模块用来显示计时结果。
我们可以使用数码管或LCD屏幕来显示计时结果。
在这个实验中,我们使用了数码管来显示计时结果。
3. 实验步骤3.1. 创建工程首先,我们需要在Vivado IDE中创建一个FPGA工程。
在创建工程时,需要选择适当的设备型号、板卡等参数。
3.2. 添加时钟控制器IP在Vivado IDE中,选择IP Catalog,搜索并添加时钟控制器IP。
3.3. 添加计数器IP在Vivado IDE中,选择IP Catalog,搜索并添加计数器IP。
3.4. 添加数码管IP在Vivado IDE中,选择IP Catalog,搜索并添加数码管IP。
3.5. 连接IP在Vivado IDE中,将时钟控制器IP、计数器IP和数码管IP进行连接。
3.6. 程序设计使用Vivado IDE中的HDL语言对秒表进行程序设计。
3.7. 烧录程序将程序烧录到FPGA中,实现秒表功能。
课程设计报告专业班级课程题目秒表的设计学号姓名同组人成绩2013年5月一、设计目的1.进一步熟悉七段码译码器的硬件接口。
2.掌握用扫描方法驱动多个数码管硬件接口。
3.掌握秒表VHDL的编程方法。
二、系统总体设计(1).设计要求:1.秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。
当计时达60分钟后,蜂鸣器鸣响10声。
2.整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
3.秒表的逻辑结构较简单,它主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。
在整个秒表中最关键的是如何获得一个精确的100HZ 计时脉冲。
(2).实验原理:秒表由于其计时精确,分辨率高(0.01秒),在各种竞技场所得到了广泛的应用。
秒表的工作原理与数字时基本相同,唯一不同的是秒表的计时时钟信号,由于其分辨率为0.01秒,所以整个秒表的工作时钟是在100Hz的时钟信号下完成。
当秒表的计时小于1个小时时,显示的格式是mm-ss-xx(mm表示分钟:0~59;ss 表示秒:0~59;xx表示百分之一秒:0~99),当秒表的计时大于或等于一个小时时,显示的和多功能时钟是一样的,就是hh-mm-ss(hh表示小时:0~99),由于秒表的功能和钟表有所不同,所以秒表的hh表示的范围不是0~23,而是0~99,这也是和多功能时钟不一样的地方。
在设计秒表的时候,时钟的选择为100Hz。
变量的选择:因为xx(0.01秒)和hh(小时)表示的范围都是0~99,所以用两个4位二进制码(BCD码)表示;而ss(秒钟)和mm(分钟)表示的范围是0~59,所以用一个3位的二进制码和一个4位的二进制码(BCD)码表示。
显示的时候要注意的问题就是小时的判断,如果小时是00,则显示格式为mm-ss-xx,如果小时不为00,则显示hh-mm-ss。
基于FPGA的数字跑表设计报告姓名:学号:指导老师:***摘要:本文详细介绍了数字秒表的设计指标,设计思路,设计方案,系统电路设计,系统单元模块设计,系统硬件实现与测试的结果。
一 引言 科技高度发展的今天,集成电路和计算机应用得到了高速发展。
尤其是计算机应用的发展。
它在人们日常生活已逐渐崭露头角。
大多数电子产品多是由计算机电路组成,如:手机、mp3等。
而且将来的不久他们的身影将会更频繁的出现在我们身边。
各种家用电器多会实现微电脑技术。
电脑各部分在工作时多是一时间为基准的。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。
秒表在很多领域充当一个重要的角色。
在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。
他们对时间精确度达到了几纳秒级别。
二 项目任务与设计思路 本项目的任务是掌握使用VHDL 语言的设计思想;熟悉ise 软件的使用;了解XILINX 学生EDA 实验板。
了解 EDA 技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时。
通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决 计算机技术实际问题的能力。
通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。
项目任务与设计思路本项目的指标:1、跑表精度为0.01秒2、跑表计时范围为:1小时3、设置开始计时/停止计时、复位两个按钮4、显示工作方式:用六位BCD 七段数码管显示读数。
显示格式:三 基于VHDL 方法设计方案 VHDL 的设计流程主要包括以下几个步骤:1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL 编辑环境。
通常VHDL 文件保存为.vhd文件2.功能仿真:将文件调入HDL 仿真软件进行功能仿真,检查逻辑功能是否正确。
3.逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。
FPGA实验报告5篇第一篇:FPGA实验报告FPGA实验报告专业:XXX 姓名:XXX 学号:XX一:实验目的1.熟悉Modelsim和Quartus II软件的运行环境和使用2.熟练使用Quartus II仿真软件生成网表。
3.熟悉FPGA前仿真和后仿真的整个流程。
二:实验内容编写counter计数器,在Quartus II仿真软件中生成网表,再在Modelsim中进行后仿真。
三: 实验步骤1.在Modelsim编写源程序(counter计数器及激励),编译源文件,确保程序的正确性,并进行前仿真,生成波形图如下:附:源程序如下:module counter(q,clk,reset);input clk,reset;output [3:0] q;reg [3:0] q;always @(posedge reset or negedge clk)if(reset)q <= 4'b0;elseq <= q + 1;endmodule module top;reg CLK,RESET;wire [3:0] Q;counter c1(Q,CLK,RESET);initialCLK=1'b0;always#1 CLK=~CLK;initial$monitor($time,“Q=%d”,Q);initialbeginRESET=1'b1;#5 RESET=1'b0;#180 RESET=1'b1;end endmodule 2.新建文件夹,将源程序counter.v放进去。
然后启动Quartus II仿真软件,生成网表。
1).在【File】下拉菜单中选中New Project Wizard选项,出现对话框。
并指定工程工作目录、工程名称和顶层模块名,如图(a)所示。
2).添加(Add)counter.v文件。
如图(b)所示。
3).选择器件系列4).指定其它EDA工具,如图(d)所示。
标准实验报告实验项目:基于FPGA数字秒表设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
实验1:状态机问题一:你觉得上面这段代码中,q 到底在怎样变化?答:首先语句中缺少begin,q <= q也不合理;如果有异步复位信号,q=0;否则,如果有上升沿且a不等于1,q=q;如果有上升沿且a=1,q直接等于b;问题二:本页中,q 到底在怎样变化?答:复位时,q=0;否则q=d。
问题三:sync电路图:仿真:该电路使输入信号与时钟同步,并产生稳定脉冲信号,进行节拍分配。
四、红路灯电路系统框图:问题分析:东西南北都有车时,状态转换时,东西绿灯时间长于60s;三秒后,南北通行,绿灯时间少于40s。
计数器不能使用同一个,但可以减少触发器数目实验2:数字钟环节二仿真时注意问题:1.仿真1小时需要多少时间?答:取决于输入信号clk的频率。
2.现在的时钟是秒时钟,实际系统的时钟是50MHz.那用50MHz的时钟的情况下,仿真1小时要多少时间?如何解决该问题?答:1/50000000*60*60=0.000072 s;可以将输入信号分频。
环节三1,复位如何输入的?按键防抖如何制作的?修改按键防抖的间隔会导致什么问题?答:复位信号由clock顶层文件输入,按键防抖思路是使按键信号通过触发器进行延迟,持续输入十个上升沿才认为按键一次,避免了抖动。
增加时间会导致按键时间边长,短按可能误认为是抖动。
2,数码管的显示使用组合逻辑输出好还是时序逻辑输出好?答:组合逻辑好环节四:闰年:y1和y2分别为输入的年高两位和年低两位,y为年份,当cout=1时为闰年,cou=0时为平年。
如果y2=0则y1能被4整除时为闰年:当y2!=0时y2能被4整除则为闰年。
后面通过将y1循环加100次再加上y2得到年份y。
process(y1,y2)variable i:integer;beginif y2=0 thenif (y1 rem 4)=0 thencout<='1';else cout<='0';end if;elsif y1 rem 4=0 thencout<='1';else cout<='0';end if;i:=y1;for n in 0 to 99 loopi:=i+i;end loop;y<=i+y2;end process;实验3:SRAM环节二、两种仿真的比较lab/lab3/step1/memtest.vhd用功能仿真和时序仿真两种方法,比较一下SS的状态数值的变化。
华中科技大学《电子线路设计、测试与实验》实验报告实验名称:用EDA技术设计多功能数字钟院(系):电子信息与通信学院专业班级:姓名:学号:时间:地点:实验成绩:指导教师:2018 年 3 月 27 日一. 实验任务及要求基本要求:电子秒表1)可计时的范围0.00s~99.99s(显示用七段数码管,显示小数点)。
2)能够暂停,能够在计时结束使用灯光或者声音报警提示。
提高要求: PWM波产生器1)可输出占空比按10%递进的PWM波(示波器测量查看)。
二.实验条件实验板:Nexys4 DDR实验软件:ISE14.7,ModelSim三.预习要求1.NEXYS 4 DDR开发板说明。
2.有限状态机。
3.数码管扫描显示。
四.实验原理1.电子秒表设计框图模块分析1)分频模块(Divider.v)将系统给定的100MHZ 的频率通过分频模块变成100Hz 的clk(用来计时)和4000Hz的clk_seg(用来扫描数码管)。
代码如下:原理:输入的100MHz 的信号为CLK_100MHz,每当CLK_100MHz 上升沿来时,Count_DIV 计数加1,且每当Count_DIV =100M/(2*100)=0.5M 时,CLK_Out取反一次并且Count_DIV <=0,这样会得到一个100Hz 的信号。
当需要得到4000Hz的clk_seg时,在顶层模块中修改parameter OUT_Freq=4000;这样,每当Count_DIV=100M/(2*4000)=12500时,CLK_Out取反一次并且Count_DIV <=0,这样会得到一个4000Hz 的信号。
在主程序中修改参数如下:仿真时,为便于观察,在testbench中,将CLK_100MHz的周期设为2ns:always #1 CLK_100MHz <= ~CLK_100MHz;并修改参数如下,验证分频模块的正确性(图中数字16,8,1只表示频率的倍数关系,并非真正的频率)其仿真图如下图:从图中可以看出,CLK_100MHz的周期为2ns,clk_seg的周期为4ns,clk的周期为32ns,符合倍数关系,故分频模块的正确性得到验证。
《FPGA系统设计》实验报告》QuartusII环境下运用VHDL语言的编程设计实验一 .实验目的(1)熟悉QuartusII环境下运用VHDL语言的编程开发流程,包括源程序的输入,编译,模拟仿真及程序下载。
(2)熟悉FPGA设计过程,比较原理图输入和文本输入的优劣。
二.实验要求例1 四位二进制加法计数器的设计设计一个具有异步复位功能的二进制加法计数器,加法计数器的动作是,每次时钟脉冲信号clk为上升沿时,计数器将加1。
例2 三态门电路的实现如图所示为三态门电路,三态门电路的输出状态除了具有逻辑值0和逻辑值1,还具有高祖态输出的第三种状态(也称禁止态),高阻状态的功能相当于三态门和它连接的电路处于断开状态。
三态门三态门真值表例3 四舍五入判别电路的设计设计一个四舍五入电路,其输入为8421BCD码,要求输入大于或等于5时,判别电路输出为1,反之为0.试分别使用简单地信号赋值语句,条件语句复制语句完成电路设计。
四舍五入电路真值表三.实验操作步骤1.新建一个VHDL文本文件;2.VHDL程序输入;3.使用IF语句完成设计,对源程序进行语法检查和编译;4.管脚锁定;5.硬件下载。
例1代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY plus42 ISPORT(CLK,RST:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY plus42;ARCHITECTURE BHV OF plus42 ISSIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(RST,CLK)BEGINIF(RST='0')THENQ1<="0000";ELSIF(CLK'EVENT AND CLK='1') THENQ1<=Q1+1;END IF;END PROCESS;Q<=Q1;END ARCHITECTURE BHV;例2代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY gate3 ISPORT(DIN,EN:IN STD_LOGIC;DOUT:OUT STD_LOGIC);END gate3;ARCHITECTURE ONE OF gate3 ISBEGINPROCESS(EN,DIN)BEGINIF(EN='0')THEN DOUT<='Z';ELSE DOUT <= DIN;END IF;END PROCESS;END ONE;例3代码如下:lIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jinwei45 ISPORT (D3,D2,D1,D0:IN STD_LOGIC;Y:OUT STD_LOGIC);END;ARCHITECTURE ONE OF jinwei45 ISBEGINY<=(D2 AND D1)OR(D2 AND D0)OR D3;END ONE;四.实验数据结果四位二进制加法计数器仿真结果EN为0,DOUT呈现高阻态;DIN为0,EN为1,DOUT为0;DIN为1,EN为1,DOUT为1。
fpga 实验报告
这是一份关于 FPGA 实验的报告,主要包括实验目的、实验原理、实验步骤、实验结果及分析等内容。
一、实验目的
本次实验的主要目的是熟悉 FPGA 的基本结构及开发流程,掌握 FPGA 的基本设计方法和原理,并提高实验操作技能。
二、实验原理
FPGA 是一种可编程逻辑器件,其原理是利用可编程逻辑单元和可编程互连资源实现数字逻辑电路功能。
FPGA 可以通过编程来实现不同的功能,具有灵活性和可重构性。
三、实验步骤
1.熟悉工具、芯片型号及开发板型号。
2.根据实验要求打开 Vivado 设计套件,创建一个新工程。
3.在工程中创建一个 VHDL 组合逻辑电路,并实现四个 NAND 门的功能。
4.合成电路,并进行布局和布线。
5.下载到 FPGA 开发板上。
6.测试电路功能。
四、实验结果及分析
实验中,我们成功设计并实现了四个 NAND 门,可以进行逻辑与、或、非运算。
并通过仿真和实际测试,验证了电路的正确性。
在布局和布线的过程中,我们也可以看到 FPGA 的内部结构和资源分配情况。
总的来说,这个实验使我们更深入地了解了 FPGA 的基本原理和开发流程,对我们今后的研究和开发工作都有很大的帮助。
电子表实验报告一.系统目标【基本要求】:⏹计时:计时显示格式中有时/分/秒;⏹对时:可以通过按键,设定电子表的时间;⏹定时:可以通过按键,设定电子表的“响闹”时间,具有“闹”钟的功能;【发挥部分】:⏹年月日计时功能;⏹秒表功能;⏹倒计时功能;⏹整点报时;⏹采用多种方式设置初始值:◆按键递增、键盘直接输入、拨盘输入;⏹按键发声。
二.系统规范【系统输入】⏹20M时钟信号输入—clk_20M:——用于生成时钟、数码管扫描控制时钟;⏹键盘列扫描输入—kin(3~0):——用于检测是否存在按键;⏹按键开关输入—sw1、sw2、sw7、sw12:——用于控制功能转换;⏹拨盘输入—s1(3~0)、s2(3~0):——用于设置倒计时功能的初始值。
【系统输出】⏹键盘行扫描信号输出—scan(3~0):——对键盘进行行扫描;⏹数码管8位数据信号输出—lcd(7~0):——控制数码管数据显示;⏹数码管显示使能信号输出—en(5~0):——选择6位数码管中的某一个显示数据;⏹发光二极管控制信号输出—led(7~0)——星期显示、上/下午显示、倒计时结束标志显示⏹音频输出端口—audio——闹钟铃声以及按键发声输出端口。
【系统功能】系统开机后,滚动显示当前的日期(年月日)和时间(时分秒),在此状态下,可通过sw1,sw2,sw7,sw12四个按键开关进入各个功能模块,在各个功能模块中均可以通过长时间按键sw1回到滚动显示状态,在此电子表系统中主要实现4个功能:1、日期和时间功能模块:●日期显示●时间显示●日期和时间的调整设置2、秒表功能模块:●秒表归零●秒表计时●秒表计时停止3、倒计时功能模块●利用拨盘进行倒计时初始值设置●利用键盘扫描输入进行初始值设置●重置上一次的初始值●倒计时开始,至0后停止倒计时4、闹钟设置模块●取消闹钟●设置闹钟时分秒●选择闹铃方式其它具体功能:1、数码管显示方式:●滚动显示:滚动显示年月日、时分秒;●全亮显示:6位数码管显示全亮——亮度相同;●部分亮显示:在调节时间的时分秒以及日期的年月日时,数码管相应部分的显示较其它部分亮度变暗。
2、按键方式由此把实验箱下方的4个按键输入变为5位的按键信号(增加一位长时按键标志)●短时按键:按键脉冲宽度小于1秒;●长时按键:按键脉冲宽度大于等于1秒。
3、闹铃以及按键发声方式●按键发声:由于实验箱部分按键接触存在问题,因此通过按键有效时发出鸣叫声来提醒操作者此时按键有效●闹铃1:普通滴滴声--鸣叫方式:当满足设置闹钟时,闹铃持续30秒,在此30秒钟,前10s发出缓慢的滴滴声,10s~20s时发出较快的滴滴声,20s~30s时发出急促的滴滴声,之后闹钟停止30s,之后再次想起,如此反复3次,如果在此期间按任意键,则闹钟不再响铃。
●闹铃2:曲1 《梁祝》●闹铃3:曲2 《小兔子乖乖》●闹铃4:曲3 《》4、设置时钟等主要方式●短时按up/down键以1为单位递增/递减●长时按键up/down以10HZ速度快增/快减●用拨盘直接设值●键盘输入直接设值三.系统框图1.主程序系统总框图用各系统功能模块的状态转移图来描述系统框图:2.时间/日期功能模块框图⏹按键控制状态转换:01111-短按sw1;10111-短按sw2;11011-短按sw7。
⏹正常走时及显示部分程序框图:各计时子模块框图3. 秒表功能模块:4. 倒计时功能模块:5. 闹钟设置功能模块四.VHDL程序的层次化结构主程序clock.vhd——滚动显示模块rolling_display.vhd——七段数码管显示模块lcd_display.vhd——日期(年月日)和时间(时分秒)模块Clock_date.vhd——Sub_year——Sub_month.vhd——Sub_day.vhd——Sub_hour.vhd——Sub_minute.vhd——Sub_second.vhd——Sub_week.vhd——秒表模块second_clk.vhd——倒计时模块Timer.vhd——闹钟设置模块Alarm.vhd——闹铃及按键发声模块Alarm_ring.vhd——Press_ring.vhd——Music.vhd——strike_ring.vhd——Music.vhd——ring.vhd——Ring0.vhd——Ring1.vhd——Ring2.vhd——Ring3.vhd——Music.vhd——时钟生成模块Clk_generate.vhd——输入转换模块Input_tran.vhd——七段数码管显示模块Lcd_display.vhd——键盘扫描模块Key_scan.vhd五.模块功能描述及基本设计思路1、主程序模块clock.vhd:●模块功能:——控制电子表4个功能之间的状态转换,并对在各个状态下的输出端口(数码管显示数据控制信号、使能信号以及发光二极管控制信号)进行分配赋值。
●模块实体描述●系统的输入输出见[系统规范]部分●实现算法和结构说明编程思想:在时钟控制下,定时监测在某一状态下是否存在按键,若存在按键,则根据按键的值进行状态转换。
例如若在倒计时状态,则倒计时元件模块开始工作并将此元件输出的倒计时数值进行数码管显示,并根据倒计时模块内部状态控制发光二极管的亮暗。
即此程序主要分为两大部分:状态转换部分和输出端口赋值部分(根据当前状态,选择相应的signal信号赋值给输出端口,控制系统的显示)。
结构说明:在主程序中主要包含以下几个部分:●signal信号的声明:⏹signal信号的主要作用:作为临时的变量来存储各个模块的年/月/日,时/分/秒等用于数码管显示的数值或发光二极管的指示信号。
然后根据当前的状态选择该状态下需要显示的数据传送给数码管显示模块。
⏹例如:signal lcd_data_reg : std_logic_vector(143 downto 0);-就是用来存储各个模块所返回的用于数码管显示的数据signal led_data_reg : std_logic_vector(23 downto 0);用来存储各个模块所返回的用于发光二极管显示的控制信号。
●元件例化:由于元件较多,选择以上几个暂作说明。
●状态转换部分:●功能实现部分:2、输入转换模块●模块功能——四位按键输入转换为五位按键输出(增加一个长时按键指示位);——对按键进行消抖处理。
●模块实体描述输入:⏹四位按键输入—对应于板子正下方的四个按键sw1、sw2、sw7、sw12;⏹100HZ时钟输入—作为脉冲计数的时钟,用于测量脉宽。
输出:⏹五位按键输出—相对四位的按键增加一个长时按键指示位,组合为五位按键输出。
●算法结构:共有四个状态,在时钟下跳沿进行状态转换:——准备状态/ready:无按键时,五位按键输出为“11111”;有按键时,进入short状态。
——短时按键状态/short:长时按键标志位为1。
——按键脉冲计数状态/count:若计数满100则进入long状态。
——长时按键状态/long:长时按键标志置为0。
●模块测试结果:资源消耗:功能仿真:短时按键效果如下图所示。
每次时钟下跳沿检测4位按键输入信号input,若有一个键被按下(即有一位为0),则输出5位键值(最后一位长时按键标志置1),且键值长度为一个100HZ时钟周期。
其它情况下5位键值输出为全1,即无按键输入。
同时实现了按键消抖。
长时按键效果如下图所示。
对输入的4位按键信号长度进行计数,若超过100个时钟周期(即1秒),判定为长时按键。
从第100个时钟下跳沿开始输出5位键值,同时长时按键标志位置0,直到该按键撤销。
2、滚动显示模块rolling_display.vhd●模块功能:——由于数码管只能显示六位值,为了能够使得使用者能够同时看到年月日/时分秒,因此采用在数码管上循环滚动显示的方式,从而达到同时显示年/月/日、时/分/秒的目的,从而使得用户界面友好。
●模块实体描述:输入:⏹20M时钟:扫描时钟⏹1hz时钟:控制滚动的速度⏹待显示的年月日时分秒的BCD码⏹数码管输出数据信号⏹数码管显示使能信号输出:⏹数码管输出数据信号⏹数码管显示使能信号●实现算法和结构说明编程思想:用1Hz时钟控制状态机的变换,在不同的状态下,给数码管显示模块分别传送不同的数据,从而形成滚动显示的效果。
结构说明:主要包括两个部分:●1hz时钟的控制屏幕滚动的速度●调用七段数码管显示模块进行显示:3、七段数码管显示模块lcd_display.vhd●模块功能——将输入的24位BCD码显示在6位数码管上。
●模块实体描述输入⏹20M时钟—clk_20M⏹输入24位BCD码—lcd_data⏹控制显示方式—flash输出⏹数码管数据信号—lcd_sub⏹数码管使能信号—en_sub●实现算法和结构说明编程思想:在较快扫描时钟(例如20M时钟)的控制下,6个扫描状态循环变换,在每一个扫描状态下,有且仅有一个数码管使能信号有效,即仅有一个数码管进行显示,由于视觉暂留效果,我们可以看到清晰的数码管显示。
为了能够部分亮度显示,需添加一个控制显示方式的标志,选择全亮还是高两位变暗,低两位变暗或中间两位变暗,实现方式主要是控制这两位的扫描时钟,使其降低,从而可以使得此两位变暗。
结构说明:lcd_display主要是根据当前的flash信号来进行显示,flash=“00”时全亮,flash=“01”时最高两位为暗……,以flash=“01”部分为例,程序代码如下:由程序可以看到,使该位变暗的方法主要是通过一个count来进行计数,当计数为4时才进行显示,这样就相当于是降低了该位的扫描频率,从而降低了亮度。
4.时间和日期功能模块clock_date.vhd●模块功能——时间(时/分/秒)和日期(年/月/日/星期)正常走时;——时间和日期的调整设值;——时制的切换(12小时制/24小时制);——时间/日期的切换显示。
●模块实体描述输入:⏹系统主状态输入/mainstate:判断系统当前所处状态,非时间/日期模式下不允许调整时间/日期⏹5位按键信号输入/input:状态切换,设置时间和日期⏹键盘有按键标志/presstag⏹键盘按键键值/keydata⏹100HZ时钟信号输入/clk100:控制进程转换⏹10HZ时钟信号输入/clk10:控制调整时间时的快增快减⏹1HZ时钟信号输入/clk1:计时时钟输出:⏹Led管显示/led:在时间状态(12小时制)显示上午/下午,在日期状态显示星期⏹24位数码管数据信号输出/dig_data:年月日或时分秒信号⏹闪烁信号输出/flash:00-不闪烁;01-时/年闪烁显示;10-分/月闪烁显示;11—秒/日闪烁显示。