第一篇:基于EDA技术的数字时钟设计 最终版范文
物理与电子学院
《》 课程考核论文
论文作者姓名:
作
者 学 号:
所
学 专 业:
理科
物理方向
任
课 教 师:
高伟
完
成 时 间:
2015年6月
基于EDA技术的数字时钟设计
目录
摘要··················································································2 一.绪论·············································································3 1.课题的研究背景·································································3 2.数字电子钟的发展简况·························································3 二.系统设计········································································4 1.整体规划·········································································4 2.时基信号产生电路·······························································5 3.调时、调分信号的产生电路····················································5 4.计数显示电路····································································6 三.基本功能实现···································································6 1.时钟计数··········································································7 2.校时设置··········································································7 3.清零功能··········································································8 4.定时、报时功能··································································9 四.系统软件实现···································································9 1.详细模块描述·····································································9 2.总体设计及引脚设置·····························································9 五.系统仿真及分析································································10 1.各模块时序仿真·································································10 2.总体时序仿真····································································11 3.实验结果·········································································11 六.设计总结········································································12 ·参考文献···········································································12 附录:参考程序······································································13
摘要
随着基于PLD的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。本文详细介绍EDA课程设计任务——数字钟的设计的详细设计过程及结果,并总结出心得体会。
主体:主要涉及模60与模24计数器、动态显示控制电路、分频器主要整点报时电路,这些电路都是以模块封装好的,以便其他电路调用。以计数器构成计时部件,通过分频器分出的1HZ脉冲计时,调用动态显示电路显示,通过整点报时电路控制蜂鸣器。在计数器级联时采用内部同步外部异步的方式,但通过简单的改变达到了同步的效果而且比同步还可靠。显示控制时为了节约资源采用动态原理。
关键字 多功能数字时钟
整点报时 EDA技术 VHDL语言
Abstract
This article is based on the QuartusII software and the corresponding experimental platform to complete a multi-function digital timer experiment, so that we clearly understand to us digital table function is how to achieve.Used in the design of the level design thought, function decreases progressively step by step.The experiment mainly includes the mainbody-the basic functions of the circuit of clock.Subject: mainly relates to mode 60and mode 24counter, dynamicdisplay of control circuit, the primary divider the whole point timekeeping circuit, the circuit is in module a good package, so that other circuit calls.To counter through a frequency divider which timing components, from1HZ pulse timing,called dynamic display circuit displays, through the wholepoint timekeeping circuit control buzzer.In counter cascade usesinternal synchronous external asynchronous manner, but bysimplychanging the synchronization effect and is more reliable thansynchronous.Display control in order to save resources by the dynamic principle.Key word: Level design Multifunctional digital clock Synchronization The whole point timekeeping The language of VHDL
一.绪论
1.课题的研究背景
当面对这样一个信息爆炸的时代,时间变得越来越宝贵,人们无疑需要一个良好的计划时间表,而这就需要一个系统完善成熟的定时系统来及时提醒人们。然而在这个新技术、新产品不断涌现,各类产品功能日益强大,这就需要我们带着战略性眼光选择。多功能数字电子钟无意是人们最好的选择之一,多功能数字时钟小巧、价格低廉,外观造型日益精美、精确度高、功能齐全、使用方便,不仅仅可以显示钟表的功能也具备计时、测温、定闹钟、显示日历、语音报表等功能,其集成化高而受到广大人们群众喜爱。在人们不断的要求下,多功能数字钟已经成为现代设计时钟研究生产的主导方向。
2.数字电子钟的发展简况
在国外,公元以前,人们也是主要利用天文现象来计时,比如观察太阳日出日落、星相的转移,此后当在德国的亨莱思创造了小型机械钟开始,国外的钟表行业逐渐掀起,到了19世纪,钟表制造业已经成为人们必不可少的一个行业,钟表制造业也逐渐的实现了工业化生产,在20世纪,随着电子潮流的飞速发展,钟表行业也出现了翻天覆地的变化,由单一的机械表转向多元式的钟表,有电池驱动钟、电机械表、指针式电子钟表、数字式电子钟表等种类,并且功能不断的增多如现在出现的多功能数字电子钟,它采用的是数字电路来显示分秒,它的作用早已不仅限于计时的功能,它还可以显示日历、定闹、报时、测温等功能。它人性化的设计给人们的生活带来了很多的方便,成为人们日常生活的必需品。
二.系统设计
1.整体规划
数字电子时钟主干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用12进制计时器,可实现12小时的累计。通过六个LED显示器显示出来。整点报时电路根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路用来对“时”、“分”、“秒”显示数字进行校对调整。
电子时钟系统总体规划如图1所示:
(1)根据电路特点,用层次设计概念,将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,同时加深层次化设计概念。
(2)软件的元件管理深层含义,以及模块元件之间的连接概念,对于不同目录下的同一设计,如何融合。
(3)适配划分前后的仿真内容有何不同概念,仿真信号对象有何不同,有更深一步了解。
(4)按适配划分后的引脚锁定,同相关功能模块硬件电路的接口连线。(5)所有模块采用VHDL硬件描述语言设计。
图1 总体方案框图
2.时基信号产生电路
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
3.调时、调分信号的产生电路
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。
4.计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
1、计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。
2、数据选择器:84 输入14 输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。
3、译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。
三.基本功能实现
1.时钟计数:
首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。
由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计
数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6 DOWNTO 0)上的信号来点亮指定的LED七段显示数码管。
2.校时设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
通过一个开关的两种电平,来打开个关闭一个二输入与非门,另一个输入端接1Hz的信号。因此这个开关实现了1Hz信号是否加入电路的作用,开关打在高电平上,1Hz信号通过与非门,开关打在低电平上,与非门输出为高电平。把与非门的输出信号,和时钟正常走时所需要的时钟信号,一起通过与门,加给分个位时钟信号的输入端即可,这样分校时开关打在高电平上,分个位以1Hz的频率跳动起来,分校时开关打在低电平上时,正常走时。同理小时校准与此相同。
3.清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
清零电路设计的关键就是要解决好同步问题,在发出清零信号时,所有计数器的时钟信号是一致的,而且处于有效的边沿。为此可以设计当清零信号有效时,很高频率的信号同时加入个计数器的时钟端,而当清零信号无效时,各计数器上时钟端加的是正常走时所需要的时钟信号。也可以用与门,或门和非门实现上述的功能。当清零信号为低时,清零信号经过一个非门变为高电平信号,将与门打开,高频信号通过与门,在与秒各位计数器的时钟端上的信号相或,与其他各位计数器时钟输入端上的信号相与。这样,当清零信号有效时,每一位计数器上的时钟输入端实现了同步的功能,实现了同步清零的功能。当清零信号无效时,时钟正常走时。
4.定时、报时功能:
整点报时电路根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。它通过对定时和计时的比较来完成报时,由两个计数器组成,计数器由两个开关控制,用来对定时的分钟和时钟设定,当开关都打到不送脉冲的状态,两个计数器都保持,从而达到存储的目的。比较电路用来比较定时时间和计时时间,当它们一致时,输出为1,这样可以驱动报时模块。最后,利用显示电路将定的时间设定输出。要使定时起到提醒作用,还要有铃声,这里用1hz脉冲作为蜂鸣器的信号源。
四.系统软件实现
1.详细模块描述
(1)Second模块为秒计数模块。Clk作为秒脉冲,reset复位,setmin用于调整分钟,接按键,enmin是当秒计数记到59后产生分脉冲,秒计数重新从0开始计数。Daout为秒计数。
(2)Minute模块为分计数模块。Clk作为分脉冲,接second模块的enmin,reset用于复位,sethour用于调整小时,接按键,enhour是当分计数记到59后产生时脉冲,分计数重新从0开始计数。Daout为分计数。
(3)Hour模块为时计数模块,clk为时脉冲,接minute模块的enhour,reset复位,daout为时计数。
(4)Alert模块为整点报时模块。其中clk1用于在其上升沿判断是否为整点时刻,若是则加clk秒脉冲从speak端口输出到扬声器作为声音信号,报时10秒。Stop为停止报时控制,接按键,按动按键时若在报时则报时停止。Reset复位端。dainsh和dianm分别接分计数和秒计数,用于判断整点和报时。
2.总体设计及引脚设置
在软件中设置后顶层原理图显示为
设计思想,利用脉冲时钟产生一个1Hz的信号来实现一秒钟的控制,要产生1Hz的信号就要用到分频器,实验中用三个百分频器把1MHz的信号变成1Hz。然后信号进入控制秒的计数器,当 的仿真时间域以便有足够长的观察时间。波形文件存盘后运行仿真器,直到出现仿真结果。
24进制的时控制模块中当clk为上升沿时,hour1输出由9变为0,并且hour1都是由0到9循环,hour2输出由2变为0,并且hour2都是由0到2循环。
60进制的分控制模块中当clk和carry为上升沿时,min1输出由9变为0,并且min1都是由0到9循环,min2输出由5变为0,并且min2都是由0到5循环。
60进制的秒控制模块中当clk和carry为上升沿时,sec1输出由9变为0,并且sec1都是由0到9循环,sec2输出由5变为0,并且sec2都是由0到5循环。
仿真波形
3.实验结果
首先,由石英晶体振荡器输出稳定的脉冲信号,经过振荡器输出标准的秒脉冲信号,秒计数电路为六十进制计数器,秒计数电路将振荡器产生的秒脉冲信号作为输入信号,进行计数,并通过秒显示器显示秒;其次,当秒计数器完成60个秒计数后,秒计时电路清零,输出一个“分计时信号”,分计时电路收到秒计时电路产生的信号后,开始计数并显示分;再次,当分计时电路完成60个分计数后,分计数器清零,输出一个“时计时信号”,时计时电路收到分计时电路产生的信号后,开始计数并显示时;最后,时计时电路完成24个时计数后,清零。完成电子钟基本功能仿真结果。
六.设计总结
通过毕业论文设计,我进一步加深了对电子设计的认识,进一步熟练了对QuartusII软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。通过同学探讨和请教老师的方式,终于把问题都解决了。对数字时钟原理和设计思路的更详细的了解,掌握了做毕业设计的一般流程,为以后的电路设计积累了一定的经验。做毕业设计时,我先查阅了相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。通过这次的设计,我深入了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
经过这次的毕业设计我学到的也不止是一些新的理论知识和具体的动手实践。更重要的是一种思路,大的问提可以转换成小的问题解决,困难的问题通过转换成简单的问题解决。相信这将会对我今后的学习工作带来帮助。设计论文过程中我认识到我专业知识缺少的还很多,实践经验也相当匮乏。因此在今后我还需要不断的去学习新的知识,不断的充实自身。
在此,再次感谢梁勇老师的悉心指导,您让使我学到了很多很多!
·参考文献
1.EDA技术实用教程----vhdl版(carry:out std_logic);end second;architecture rt1 of second is signal sec1_t,sec2_t:std_logic_vector(3 downto 0);begin process(clk,reset)begin if reset='1'then sec1_t<=“0000”;sec2_t<=“0000”;elsif clk'event and clk='1'then if sec1_t=“1001”then sec1_t<=“0000”;if sec2_t=“0101”then sec2_t<=“0000”;else sec2_t<=sec2_t+1;end if;else sec1_t<=sec1_t+1;end if;if sec1_t=“1001” and sec2_t=“0101”then carry<='1';else carry<='0';end if;end if;end process;sec1<=sec1_t;sec2<=sec2_t;end rt1;
分模块 程序如下:
library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port(clk,reset:in std_logic;min1,min2:out std_logic_vector(3 downto 0);carry:out std_logic);end minute;architecture rt1 of minute is signal min1_t,min2_t:std_logic_vector(3 downto 0);begin process(clk,reset)begin if reset='1'then min1_t<=“0000”;min2_t<=“0000”;elsif clk'event and clk='1'then if min1_t=“1001”then min1_t<=“0000”;if min2_t=“0101”then min2_t<=“0000”;else min2_t<=min2_t+1;end if;else min1_t<=min1_t+1;end if;if min1_t=“1001” and min2_t=“0101”then carry<='1';else carry<='0';end if;end if;end process;min1<=min1_t;min2<=min2_t;end rt1;
时模块
程序如下:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(clk,reset:in std_logic;hour1,hour2:out std_logic_vector(3 downto 0));end hour;architecture rt1 of hour is signal hour1_t,hour2_t:std_logic_vector(3 downto 0);begin process(clk,reset)begin if reset='1'then hour1_t<=“0000”;hour2_t<=“0000”;elsif clk'event and clk='1'then if hour1_t=“0011” and hour2_t=“0010”then hour1_t<=“0000”;hour2_t<=“0000”;else if hour1_t=“1001”then hour1_t<=“0000”;if hour2_t=“0010”then hour2_t<=“0000”;else hour2_t<=hour2_t+1;end if;else hour1_t<=hour1_t+1;end if;end if;end if;end process;hour1<=hour1_t;
hour2<=hour2_t;end rt1;译码显示模块 程序如下: library ieee;use ieee.std_logic_1164.all;entity segment7 is port(data:in std_logic_vector(3 downto 0);dout:out std_logic_vector(6 downto 0));end segment7;architecture behav of segment7 is begin process(data)begin case data is when “0000”=>dout<=“0111111”;when “0001”=>dout<=“0000110”;when “0010”=>dout<=“1011011”;when “0011”=>dout<=“1001111”;when “0100”=>dout<=“1100110”;when “0101”=>dout<=“1101101”;when “0110”=>dout<=“1111101”;when “0111”=>dout<=“0100111”;when “1000”=>dout<=“1111111”;when “1001”=>dout<=“1101111”;when others=>dout<=“0000000”;end case;end process;end behav;
第二篇:EDA课程设计 数字时钟
EDA
课程设计报告
一·设计任务
使用硬件描述语言,在CPLD/FPGA上实现一个多功能数字钟。
二·设计要求
除按键、LED、扬声器、时钟信号外,整个数字钟的功能要求在一块芯片上实现。
a)具有时,分,秒,计数显示功能,以24小时循环计时; b)具有时间清零功能;
c)具有小时、分钟和秒钟调整功能(个位和十位分开调或合起来调)。
d)具有闹钟功能,能预设闹钟时间,精确到秒。
整个数字钟只设一个时钟输入端口,所需不同频率信
号在内部分频实现。(LED扫描频率设为50Hz以上)。
三·设计方案
设计采用模块方式,分别为分频模块:产生1Hz的脉冲作为秒的输入,和产生1kHz的脉冲作为数码管显示的动态扫描。计时模块:秒模块,分模块,时模块。闹钟模块,显示模块,控制模块。
四·模块端口设置
1.分频模块
输入:clkin :
本实验输入为50MHz晶振
输出:clk : 为显示模块及始终调节提供1KHz脉冲
clkt: 为计数器模块提供1Hz脉冲
2.计时模块
m 是模式按键,当m=0 时,进入计时模式,在计时模式下可以进行时间调整。num3,num4 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的频率由clk 提
供。counta,count1 是手动调节时间。Turn 接按键,可以改变当前调节的是小时还是分钟,长按turn 键还可以使秒钟信号清零。sec1,min1,hour1 输出的是计时的秒,分,时。
3.闹钟模块
原理:num1,num2 产生加速调整时间,当其值为1 时,可以快速调整时间,该调整时间的
频率由clk 提供。countb,count2 是手动调节闹钟时间。amin,ahour 是输出的闹钟的分钟和 小时 4.控制模块
m 是模式按键,当m=0 时,指当前输出的是计时功能;当m=1 时,指当前调整的是
闹钟时间;当m=2 时,指当前调整的是计时时间;当m=3 时,此时turn 按键可用于跑表的
暂停与开始。change 接按键,手动调整时,每按一次,计数器加1;如果长按,则连续快
速加1,用于快速调时和定时;turn 接按键,在手动校时功能时,选择是调整小时,还是分
钟;若长时间按住该键,还可使秒信号清零,用于精确调时。count1,count2,counta,countb 分
别是用来调节计时时间和闹钟时间。LD_min,LD_hour,指示当前调节的是分钟还是小时。5 显示模块
输入:clk--1kHz时钟,提供高频扫描
in0、in1…in5--分别为时、分、秒的个位与十位信号
输出:a、b…g--数码管输入
d0、d1…d5--数码管选通
五.程序。
分频模块
module fenpin(clk,clkt,clkin);input clkin;output clk,clkt;reg clk,clkt;reg [31:0]out,t1;
initial t1<=0;initial out<=0;initial clk<=0;initial clkt<=0;
always@(posedge clkin)begin
out<=out+1;
if(out==20000)
begin
out<=0;
clk<=!clk;
end end
always@(posedge clk)
begin
t1<=t1+1;
if(t1==1000)
begin
clkt<=1;
t1<=0;
end
else
clkt<=0;end endmodule
计时模块 module jishi(clk,clk_1Hz, turn,mode,count1,counta,sec1,min1,hour1,num3,num4);input clk,clkt,turn,num3,num4;input mode;input count1,counta;output [7:0] sec1,min1;output [7:0] hour1;wire clkt,ct1,cta,turn,num3,num4;reg [7:0] sec1=0,min1=0;reg [7:0] hour1=0;reg [1:0] m;wire count1,counta;reg minclk,hclk;always @(posedge mode)//mode 信号控制系统在三种功能间转换 begin if(m==4)m<=0;else m<=m+1;end /////秒钟计时模块////// always @(posedge clkt)
if((sec1==8'h59)|turn&(!m))///////若长时间按住该键,还可使秒信号清零,用于精确调时。begin sec1<=0;//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时
if(!(turn&(!m)))minclk<=1;///产生进位 end else begin if(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000;sec1[7:4]<=sec1[7:4]+1;end else sec1[3:0]<=sec1[3:0]+1;minclk<=0;end ////////分钟计时模?/// assign m_clk=minclk||count1;/////m_clk 产生进位或校正改变 assign ct1=(num3&clk)|(!num3&m_clk);//ct1 用于计时、校时中的分钟计数
always @(posedge ct1)begin if(min1==8'h59)begin min1<=0;hclk<=1;end else begin if(min1[3:0]==9)
begin min1[3:0]<=0;min1[7:4]<=min1[7:4]+1;end else min1[3:0]<=min1[3:0]+1;hclk<=0;end end ////////小时计时模块/// assign h_clk=hclk||counta;//////h_clk 产生进位或校正改变 assign cta=(num4&clk)|(!num4&h_clk);//cta 用于计时、校时中的小时计数
always @(posedge cta)if(hour1==8'h23)hour1<=0;else if(hour1[3:0]==9)begin hour1[7:4]<=hour1[7:4]+1;hour1[3:0]<=0;end else hour1[3:0]<=hour1[3:0]+1;Endmodule
闹钟模块
module alarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);input clk,num1,num2,count2,countb;output [7:0] amin;
output [7:0] ahour;output LD_alert;wire LD_alert;reg [7:0] amin=0;reg [7:0] ahour=0;assign ct2=(num1&clk)|(!num1&count2);//ct2 用于定时状态下调整分钟信号
assign LD_alert=(ahour|amin)?1:0;//指示是否进行了闹铃定时 always @(posedge ct2)if(amin==8'h59)amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0;amin[7:4]<=amin[7:4]+1;end else amin[3:0]<=amin[3:0]+1;assign ctb=(num2&clk)|(!num2&countb);////ctb 用于定时状态调节小时信号 always @(posedge ctb)if(ahour==8'h23)ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0;ahour[7:4]<=ahour[7:4]+1;end else ahour[3:0]<=ahour[3:0]+1;Endmodule 控制模块
module ctrol(change,turn,count1,count2,counta,countb,pause,LD_min,LD_hour,mode);input change,mode,turn;output count1,count2,counta,countb,pause,LD_min,LD_hour;reg [1:0] m;reg fm=0,count1=0,count2=0,counta=0,countb=0,pause=0,LD_min=0,LD_hour=0;wire mode,turn,change;always @(posedge mode)//mode 信号控制系统在三种功能间转换 begin if(m==4)m<=0;else m<=m+1;end always @(posedge turn)//////////接按键,在手动校时功能时,选择是调整小时,还是分钟; begin fm<=~fm;end
always @(m or fm or change)begin case(m)2: begin ////////2:调节时间功能; if(fm)begin count1<=change;{LD_min,LD_hour}<=2;end//////指示当前调整的是分钟
Else
begin counta<=change;{LD_min,LD_hour}<=1;end/////指示当前调整的是小时 {count2,countb}<=0;end 1: begin //////1:调节闹钟功能 if(fm)begin count2<=change;{LD_min,LD_hour}<=2;end/////指示当前调整的是分 else begin countb<=change;{LD_min,LD_hour}<=1;end/////指示当前调整的是小时 {count1,counta}<=0;end
0: begin {count1,count2,counta,countb,LD_min,LD_hour}<=0;end ////0:计时功能 endcase end endmodule 显示模块
module show(min1,sec1,amin,hour1,ahour,MSH,MSL,SH,SL,MH,ML,min,sec,hour,mode);input [7:0] min1,sec1,amin;input [7:0] hour1,ahour;input[3:0] MSH,MSL,SH,SL,MH,ML;input mode;output [7:0] min,sec;output [7:0] hour;reg [7:0] min,sec;reg [7:0] hour;reg [1:0] m;always @(posedge mode)//mode 信号控制系统在三种功能间转换
begin if(m==4)m<=0;else m<=m+1;end always @(min1 or sec1 or amin or hour1 or ahour or m)begin case(m)0: begin hour<=hour1;min<=min1;sec<=sec1;end 1: begin hour<=ahour;min<=amin;sec<=8'hzz;end 2: begin hour<=hour1;min<=min1;sec<=8'hzz;end 3: begin
hour<={SH,SL};
min<={MSH,MSL};sec<={MH,ML};end endcase end Endmodule
六
实验分析 七
实验总结
八、参考资料
1、《EDA技术实用教程》
2、实验箱使用说明;
第三篇:EDA课程设计——数字时钟
Hefei University
EDA课程综述
论文题目: EDA课程综述
专 业: 09通信(2)班
姓 名: 唐吉祥
学 号: 0905072035 指导老师: 查长军
前
言
随着基于PLD的EDA技术的发展和应用领域的扩大和深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益提高。
作为现在的大学生应熟练掌握这门技术,为以后的发展打下良好的基础,本实验设计是应用QuartusII环境及VHDL语言设计一个时间可调的数字时钟。使自己熟练使用QuartusII环境来进行设计,掌握VHDL语言的设计方法。要注重理论与实践之间的不同,培养自己的实践能力!
目录
一、课程设计任务及要求............................................................................................3
1.1实验目的..........................................................................................................3 1.2功能设计..........................................................................................................3
二、整体设计思想........................................................................................................3
2.1性能指标及功能设计......................................................................................3 2.2总体方框图......................................................................................................4
三、详细设计................................................................................................................4
3.1数字钟的基本工作原理:..............................................................................4
3.1.1时基T 产生电路..................................................................................4 3.1.2调时、调分信号的产生......................................................................4 3.1.3计数显示电路.......................................................................................5 3.2设计思路..........................................................................................................5 3.3设计步骤..........................................................................................................6
3.3.1工程建立及存盘...................................................................................6 3.3.2工程项目的编译...................................................................................7 3.3.3目标芯片的选择...................................................................................7 3.3.4时序仿真...............................................................................................8 3.3.5引脚锁定.............................................................................................10 3.3.6硬件测试.............................................................................................11 3.3.7实验结果.............................................................................................11
四、设计总结..............................................................................................................12
五、附录......................................................................................................................12
5.1 VHDL源程序..................................................................................................12 5.2配置符号图....................................................................................................17
一、课程设计任务及要求
1.1实验目的
1)掌握VHDL语言的基本运用
2)掌握QuartusII的简单操作并会使用EDA实验箱 3)掌握一个基本EDA课程设计的操作
1.2功能设计
1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制以24小时循环计时
2)设置复位、清零等功能
3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间 4)时钟计数显示时有LED灯显示
二、整体设计思想
2.1性能指标及功能设计
1)时、分、秒计时器
时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2)校时电路
当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。2.2总体方框图
三、详细设计
3.1数字钟的基本工作原理:
3.1.1时基T 产生电路
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。
由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
3.1.2调时、调分信号的产生
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数 器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。
3.1.3计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
1、计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。
2、数据选择器:84 输入14 输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。
3、译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。
3.2设计思路
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。
1)时钟计数:
首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。
由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。
用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT(6 DOWNTO 0)上的信号来点亮指定的LED七段显示数码管。
2)时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。3)清零功能: reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
3.3设计步骤
3.3.1工程建立及存盘
1.打开 QuartusⅡ,单击“File”菜单,选择 File→New Project Wizard,对话框如下:分别输入项目的工作路径、项目名和实体名,单击Finish。
2.单击“File”菜单,选择New,弹出小对话框,双击“VHDL File“,即选中了文本编辑方式。在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→Save As,即出现“Save As”对话框。选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。
3.建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。3.3.2工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译完成后的屏幕如图所示:
3.3.3目标芯片的选择
选择菜单 Assignments 选项的下拉菜单中选择器件 Device „,如图所示: 在弹出的对话框中的 Family(器件序列栏)对应的序列名,EP1C3 对应的是 Cyclone 系列。在 Available Devices里选择 EP1C3T144-C8(有时需要把 Show advanced devices的勾消去,以便显示出所有速度级别的器件)。注意:所选器件必须与目标板的器件型号完全一致。
在图中,单击“Device and Pin Options„”,在弹出的“Device and Pin Options„”窗口中,单击“Unused Pins”标签。选择“As output driving an unspecified signal ”(由于学习机的“FPGA”具有很多功能,为了避免使用引脚对其它器件造成影响,保证本系统可靠工作,将未使用引脚设定为输出不定状态)后,单击确定后,无误后单击“OK”。
3.3.4时序仿真
建立波形文件:选择 File→New,在New窗中选中“Other File”标签。在出现的屏幕中选择“Vector Waveform File”项出现一新的屏幕。在出现的新屏幕中,双击“Name”下方的空白处,弹出“Insert Nod or Bus”对话框,单击该对话框的“Node Finder„„”。在屏幕中的 Filter 中选择 Pins,单击“List”。而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。然后单击屏幕右上脚的 “OK”。在出现的小屏幕上单击“OK”。
设定仿真时间宽度。选择 Edit → End time„选项,在End time选择窗中选择适当的仿真时间域,以便有足够长的观察时间。
波形文件存盘。选择File→Save as 选项,直接存盘即可。运行仿真器。在菜单中选择项,直到出现,仿真结束。
未曾编辑的仿真波形
仿真波形 3.3.5引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择 Assignments → Assignments Editor ,即进入 Assignments Editor编辑器。在Category 栏选择 Pin,或直接单击右上侧的 Pin 按钮。
2.双击 TO 栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如 D[0]);然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
3.最后存储这些引脚锁定信息后,必须再编译(启动)一次,才能将引脚锁定信息编译进编程下载文件中。此后就可以准备将编译好的 SOF 文件下载到试验系统的FPGA中去了。
引脚锁定 3.3.6硬件测试
1.首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源,选择模式7。
2.打开编辑窗和配置文件。选择,弹出一个编辑窗。在Mode栏中选择JTAG,并在选项下的小方框打勾。注意核对下载文件路径与文件名。如果文件没有出现或者出错,单击左Add file侧按钮,手动选择配置文件 clock.sof。
3.最后单击下载标符Start,即进入对目标器件 FPGA 的配置下载操作。当 Progress 显示100%,以及在底部的处理栏中出现 Configuration Succeeded 时,表示编程成功,如图所示。注意,如果必要时,可再次单击 Start,直至编程成功。
4.下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。如果是代码出现问题,须修改代码;若是时序波形图有问题,须重新设置。
3.3.7实验结果
实验箱使用模式7,键8为复位按键,键8为1时正常工作。键4设置小时,键7设置分钟。
下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,之后从新计时。
四、设计总结
通过这次课程设计,我进一步加深了对电子设计自动化的了解。并进一步熟练了对QuartusII软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对数字时钟原理和设计思路的了解。
同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
在此,也感谢康老师的悉心指导,使自己学到了很多东西!
五、附录
5.1 VHDL源程序
Alert模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS
PORT(clk:IN STD_LOGIC;
dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
speak:OUT STD_LOGIC;
lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END alert;ARCHITECTURE fun OF alert IS
SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN speaker:PROCESS(clk)
BEGIN
--speak<=count1(1);
IF(clk'event and clk='1')THEN
IF(dain=”0000000“)THEN
speak<=count1(1);
IF(count1>=”10“)THEN
count1<=”00“;--count1为三进制加法计数器
ELSE
count1<=count1+1;--speak<=count1(0);
END IF;
END IF;
END IF;
END PROCESS speaker;lamper:PROCESS(clk)
BEGIN
IF(rising_edge(clk))THEN
IF(count<=”10“)THEN
IF(count=”00“)THEN
lamp<=”001“;--循环点亮三只灯
ELSIF(count=”01“)THEN
lamp<=”010“;
ELSIF(count=”10“)THEN
lamp<=”100“;
END IF;
count<=count+1;
ELSE
count<=”00“;
END IF;
END IF;
END PROCESS lamper;END fun;Hour模块
LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour IS
PORT(clk,reset:IN STD_LOGIC;
daout:out STD_LOGIC_VECTOR(5 DOWNTO 0));END ENTITY hour;ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
daout<=count;
PROCESS(clk,reset)
BEGIN
IF(reset='0')THEN count<=”000000“;--若reset=0,则异步清零
ELSIF(clk'event and clk='1')THEN
--否则,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若个位计时恰好到”1001“即9
IF(count<16#23#)THEN
--23进制
count<=count+7;
--若到23D则
else
count<=”000000“;
--复0
END IF;
ELSIF(count<16#23#)THEN
--若未到23D,则count进1
count<=count+1;
ELSE
--否则清零
count<=”000000“;
END IF;
--END IF(count(3 DOWNTO 0)=”1001“)
END IF;
--END IF(reset='0')
END PROCESS;END fun;Minute模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS
PORT(clk,clk1,reset,sethour:IN STD_LOGIC;
enhour:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY minute;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enhour_1, enhour_2: STD_LOGIC;--enmin_1为59分时的进位信号 BEGIN
--enmin_2由clk调制后的手动调时脉冲信号串
daout<=count;
enhour_2<=(sethour and clk1);--sethour为手动调时控制信号,高电平有效
enhour<=(enhour_1 or enhour_2);PROCESS(clk,reset,sethour)
BEGIN
IF(reset='0')THEN--若reset为0,则异步清零
count<=”0000000“;
ELSIF(clk'event and clk='1')THEN--否则,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若个位计时恰好到”1001“即9
IF(count <16#60#)THEN--又若count小于16#60#,即60
IF(count=”1011001“)THEN--又若已到59D
enhour_1<='1';--则置进位为1
count<=”0000000“;--count复0
ELSE
count<=count+7;--若count未到59D,则加7,即作”加6校正“
END IF;--使前面的16#60#的个位转变为8421BCD的容量
ELSE
count<=”0000000“;--count复0(有此句,则对无效状态电路可自启动)
END IF;
--END IF(count<16#60#)
ELSIF(count <16#60#)THEN
count<=count+1;--若count<16#60#则count加1
enhour_1<='0' after 100 ns;--没有发生进位
ELSE
count<=”0000000“;--否则,若count不小于16#60# count复0
END IF;--END IF(count(3 DOWNTO 0)=”1001“)
END IF;--END IF(reset='0')
END process;END fun;Second模块
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second IS PORT(clk,reset,setmin:STD_LOGIC;
enmin:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY second;ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC;
--enmin_1为59秒时的进位信号
BEGIN
--enmin_2由clk调制后的手动调分脉冲信号串
daout<=count;
enmin_2<=(setmin and clk);--setmin为手动调分控制信号,高电平有效
enmin<=(enmin_1 or enmin_2);--enmin为向分进位信号
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='0')THEN count<=”0000000“;--若reset为0,则异步清零
ELSIF(clk 'event and clk='1')then--否则,若clk上升沿到
IF(count(3 downto 0)=”1001“)then
--若个位计时恰好到”1001“即9
IF(count<16#60#)then--又若count小于16#60#,即60H IF(count=”1011001“)then
--又若已到59D
enmin_1<='1';count<=”0000000“;--则置进位为1及count复0
ELSE
--未到59D
count<=count+7;--则加7,而+7=+1+6,即作”加6校正“
END IF;
ELSE
--若count不小于16#60#(即count等于或大于16#60#)
count<=”0000000“;
--count复0
END IF;
--END IF(count<16#60#)
ELSIF(count<16#60#)then--若个位计数未到”1001“则转此句再判
count<=count+1;
--若count<16#60#则count加1
enmin_1<='0'after 100 ns;--没有发生进位
ELSE
--否则,若count不小于16#60#
count<=”0000000“;
--则count复0
END IF;
--END IF(count(3 DOWNTO 0)=”1001")
END IF;
--END IF(reset='0')END PROCESS;END fun;5.2配置符号图
第四篇:EDA课程设计 数字时钟(闹钟)
课 程 设 计 说 明 书
题目: 闹钟
学院(系): 年级专业: 学 号: 学生姓名: 指导教师: 教师职称:
共 16 页
第 1 页
目 录
第1章 摘要…………………………………………………………………………………1 第2章 设计方案……………………………………………………………………………
2.1 VHDL简介…………………………………………………………………………… 2.2 设计思路…………………………………………………………………………… 第3章 模块介绍…………………………………………………………………………… 第4章 Verilog HDL设计源程序………………………………………………………… 第5章 波形仿真图………………………………………………………………………… 第6章 管脚锁定及硬件连线……………………………………………………………… 心得体会 ……………………………………………………………………………………17 参考文献 ……………………………………………………………………………………18
共 16 页
第 2 页
第一章 摘要
在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。
在此次EDA课程,我的设计课题是闹钟,使用VHDL语言进行编程完成。报告书主要由设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。
共 16 页
第 3 页
第二章 设计方案 §2.1 VHDL简介
数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。
EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了计算机辅助设计(Computer Assist Design,简称CAD)、计算机辅助工程设计(Computer Assist Engineering Design,简称CAE)和电子设计自动化(Electronic Design Automation,简称EDA)三个发展阶段。
常用的硬件描述语言有VHDL、Verilog、ABEL。
EDA技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶
共 16 页
第 4 页
颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了独立于工艺和厂家的系统级的设计工具。EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。目前应用比较广泛的硬件描述语言就是Verilog HDL。Verilog HDL简介
Verilog HDL是目前大规模集成电路设计中最具代表性、使用最广泛的硬件描述语言之一。具有如下特点:
(1)能够在不同的抽象层次上,如系统级、行为级、RTL级、门级和开关级,对设计系统进行精确而简练的描述。
(2)能够在每个抽象层次的描述上对设计进行仿真验证,及时发现及时发现可能存在的错误,缩短设计周期,并保存整个设计过程的正确性。
(3)由于代码描述与工艺过程实现无关,便于设计标准化,提高设计的可重用性。如国有C语言的编程基础经验,只需很短的时间就能学会和掌握Verilog HDL,因此,Verilog HDL可以作为学习HDL设计方法的入门和基础。
§2.2 设计思路
一、设计要求
1、设计简易的一分钟闹钟;
2、可手动输入定时时间(0~59s),如30s;
3、两个动态数码管上跟踪显示时间的变化:如30,29,28……到了指定时间蜂鸣器发出5s的提示音;
4、采用2个动态数码管显示时间;
5、用蜂鸣器发出提示音;
6、拨码开关设置定时时间。
二、设计思路
根据上述的设计要求,整个系统大致包括如下几个组成部分:它包括以下几个组成
共 16 页
第 5 页
部分:1)显示屏,由2个七段动态数码管组成,用于显示当前设置的闹钟时间并进行跟踪显示;2)6个拨码开关,用于输入闹钟时间;3)复位键,确定新的闹钟时间设置,或显示已设置的闹钟时间;4)蜂鸣器,在当前时钟时间与闹钟时间相同时,发出报警声。
共 16 页
第 6 页
第三章 模块介绍
一、计时模块
此模块共有6个拨码开关作为输入信号,当开关无输入时,都处于低电平状态,D5、D4、D3、D2、D1和D0是并行数据输入端,CRN是异步复位输入端,LDN是预置控制输入端。当开关有输入时,会产生一个六位的二进制输出信号num,此信号表示动作的开关序号,它是作为动态显示模块的输入信号。
二、数码显示模块
这个模块有两个输入信号和两个输出信号。其中一个是信号输入模块的输出num作为输入,另外一个是时钟输入端,作为扫描数码管的频率信号,采用1024HZ的中高频信号。输出信号为SS0、SS1、SS2,是动态数码管的片选段。
三、报警模块
报警模块共有两个输入信号ET和CLK1,一个输出信号COUT。当从信号输入模块检测到有开关输入时,ET信号已置1,CLK上升沿到来时,程序将COUT置1,蜂鸣器发出时间为10s的报警信号,时间到达后,跳出循环,蜂鸣器停止报警。
四、顶层模块
顶层模块的作用是将各个模块组合到一起,从而实现最终的功能。其输入即为各个模块的输入,一个时钟信号,还有6个拨码开关的输入,其输出为数码管显示和报警器。
共 16 页
第 7 页
第四章Verilog HDL设计源程序
一、计时模块
module counter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN;output[5:0] Q;output OC;reg OC;reg[5:0] Q;reg[5:0] Q_TEMP;reg[3:0] NUM;always@(posedge CLK or negedge CRN)begin
if(~CRN)Q_TEMP=6'b000000;else if(~LDN)begin Q_TEMP={D5,D4,D3,D2,D1,D0};NUM=4'b0000;end else if(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)begin if(NUM<4'b1000&&NUM>=4'b0000)NUM=NUM+1;else NUM=4'b0001;if(NUM==4'b1000)Q_TEMP=Q_TEMP-1;end
共 16 页
第 8 页
else Q_TEMP=6'b000000;end always begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;else OC=1'b0;Q=Q_TEMP;end endmodule
二、数码显示模块
module showtime(A,Q,CLKM,SS0,SS1,SS2);input[5:0] A;input CLKM;output[6:0] Q;output SS0,SS1,SS2;reg[6:0] Q;reg SS0,SS1,SS2;reg M;reg[5:0] B;reg[5:0] C;always@(posedge CLKM)begin M=M+1;end always begin
共 16 页
第 9 页
if(A<='b001001)begin B=A;C=0;end else if(A>'b001001&&A<='b10011)begin B=A-10;C=1;end else if(A>'b10011&&A<='b11101)begin B=A-20;C=2;end else if(A>'b11101&&A<='b100111)begin B=A-30;C=3;end else if(A>'b100111&&A<='b110001)begin B=A-40;C=4;end else if(A>'b110001&&A<='b111011)
共 16 页
第 10 页
begin B=A-50;C=5;end else if(A=='b111100)begin B=0;C=6;end if(M=='b1)begin SS0=1;SS1=0;SS2=0;case(B)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;'b000111:Q='b0000111;'b001000:Q='b1111111;'b001001:Q='b1101111;default:Q='b0111111;endcase end
共 16 页
第 11 页
else if(M=='b0)begin SS0=0;SS1=0;SS2=0;case(C)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;default:Q='b0111111;endcase end end endmodule
三、报警模块
module speaker(CLK1,ET,COUT);input CLK1,ET;output COUT;reg COUT;reg[5:0] TEMP;always@(posedge CLK1)begin
if(~ET)TEMP=6'b000000;else if(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
共 16 页
第 12 页
else TEMP=6'b101001;end always begin if(TEMP<6'b101001&&TEMP!=6'b000000)COUT=1'b1;else COUT=1'b0;end endmodule
四、顶层模块 module timer(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,COUT,LED,SS0,SS1,SS2,CLKM);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,CLKM;output[6:0] LED;output COUT,SS0,SS1,SS2;wire X6;wire[5:0] X;counter u1(.LDN(LDN),.D5(D5),.D4(D4),.D3(D3),.D2(D2),.D1(D1),.D0(D0),.CLK(CLK),.CRN(CRN),.Q(X[5:0]),.OC(X6));showtime u2(.A(X[5:0]),.Q(LED[6:0]),.CLKM(CLKM),.SS0(SS0),.SS1(SS1),.SS2(SS2));speaker u3(.CLK1(CLK1),.ET(X6),.COUT(COUT));endmodule
共 16 页
第 13 页
第五章 波形仿真图
一、计时模块波形仿真图
二、报警模块波形仿真图
三、顶层模块波形仿真图
共 16 页
第 14 页
第六章 管脚锁定及硬件连线
一、管脚锁定
CLK>chip=timer;Input Pin=75 CLKM>chip=timer:Input Pin=83 CLK1> chip=timer;Input Pin=85 COUT> chip=timer;Output Pin=38 CRN> chip=timer;Input Pin=39 DO> chip=timer;Input Pin=53 D1> chip=timer;Input Pin=47 D2> chip=timer;Input Pin=46 D3> chip=timer;Input Pin=45 D4> chip=timer;Input Pin=44 D5> chip=timer;Input Pin=41 LDN> chip=timer;Input Pin=40 LED0> chip=timer;Output Pin=173 LED1> chip=timer;Output Pin=174 LED2> chip=timer;Output Pin=175 LED3> chip=timer;Output Pin=176 LED4> chip=timer;Output Pin=177 LED5> chip=timer;Output Pin=179 LED6> chip=timer;Output Pin=187 SSO> chip=timer;Output Pin=191 SS1> chip=timer;Output Pin=192 SS2> chip=timer;Output Pin=193 引线说明:拨码开关使用数字开关组A,需外接引线。
共 16 页
第 15 页
心得体会
通过这次设计,初步对EDA有一个了解。
出于没有学习过这门课程,所以再课程设计开始时对于EDA就是一无所知。课程设计之初是做了一个简单的培训,关于软件和硬件的设计,算是入门训练吧。通过前两天的课程讲解,我对其有了初步的了解。之后就开始按照指导书中的例题就行练习,仿真,有进一步的掌握后就开始了自己的课程设计。由于我C++程序设计知识不扎实,所以导致这次软件设计困难重重,也让我明白了在这个领域知识的串联是非常普遍的,学好学扎实是我们必须要做到的要求。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力。在设计的过程中,可以说得是困难重重,但这毕竟第一次做,同时在设计的过程中发现了自己的不足之处。
在此还需要感谢郑兆兆老师和吕宏诗老师耐心的指导与帮助,使课设能够更加顺利的完成。
共 16 页
第 16 页
参考文献
1、阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.2006.5,168-175页 ;
2、李国丽、朱维勇、何剑春主编 《EDA与数字系统设计》(第2版).机械工业出版社.2009.3,105-146页
共 16 页
第 17 页
第五篇:EDA课程设计时钟
EDA
课程设计
姓名:
学号:
班级:自动化
设计题目
多功能数字钟电路设计
设计任务及要求
多功能数字钟应该具有的功能有:显示时—分—秒、小时和分钟可调等基本功能。整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式
显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟50Mhz进行分频。
调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。另外用S8按键作为系统时钟复位,复位后全部显示00—00—00。
三.基于Verilog
HDL语言的电路设计、仿真与综合(一)顶层模块
本程序采用结构化设计方法,将其分为彼此独立又有一定联系的三个模块,如图1所示:
图1:顶层结构框图
(二)子模块
1.分频器
分频器的作用是对50Mhz的系统时钟信号进行分频,得到频率为1000hz的信号,作为显示器的输入信号。
源程序如下:
module
fenpin(input
CP,output
CPout);
reg
CPout;
reg
[31:0]
Cout;
reg
CP_En;
always
@(posedge
CP)
//将50MHz分频为1kHz
begin
Cout
<=
(Cout
==
32'd50000)
?
32'd0
:
(Cout
+
32'd1);
CP_En
<=
(Cout
==
32'd50000)
?
1'd1
:
1'd0;
CPout
<=
CP_En;
end
endmodule
功能仿真波形如图2所示(以五分频为例):
2.控制器和计数器
控制器的作用是,调整小时和分钟的值,并能实现清零功能。计数器的作用是实现分钟和秒钟满60进1,小时则由23跳到00。当到达59分55秒的时候,LED灯会闪烁来进行报时。因为控制器和计数器的驱动信号频率均为1Hz,故从分频器输出的信号进入控制器后,要进行二次分频,由1Khz变为1Hz。
if(Clk_En)
begin
if(R1==1)
begin
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
end
R1=0;
end
if(R2==1)
begin
if(Minute<60)
Minute=Minute+1;
if(Minute==60)
begin
Minute=0;
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
End
end
R2=0;
end
if(Second<60)
Second=Second+1;
if(Second==60)
begin
Second=0;
if(Minute<60)
Minute=Minute+1;
源程序如下:
module
kongzhiqi(CPout,S1,S2,RET,Hour,Minute,Second,LED);
input
CPout,S1,S2,RET;
output
[5:0]
Hour;
output
[5:0]
Minute;
output
[5:0]
Second;
output
LED;
reg
[5:0]
Hour;
reg
[5:0]
Minute;
reg
[5:0]
Second;
reg
R1;
reg
R2,R8,LED;
reg
[10:0]
Cout;
reg
Clk_En;
always@(posedge
CPout)
begin
if(S1==0)
begin
R1=1;
end
if(S2==0)
begin
R2=1;
end
if(RET==0)
begin
R8=1;
end
Cout=(Cout==32'd1000)?32'd0:(Cout
+
32'd1);
Clk_En=(Cout==32'd1000)?1'd1:1'd0;
LED=1;
end
else
LED=0;
if(R8==1)//清零
begin
Hour=0;
Minute=0;
Second=0;
R8=0;
end
end
end
endmod
if(Minute==60)
begin
Minute=0;
if(Hour<24)
Hour=Hour+1;
if(Hour==24)
begin
Hour=0;
end
end
end
if((Minute==59)&&(Second>55))
begin
if(LED==1)
LED=0;
else
功能仿真波形如图3所示:
3.显示器
显示器的作用是将时—分—秒的值在数码管上依次显示出来。从分频器输出的1Khz的信号作为数码管的扫描信号。SEL
表示三个数码管选择位,它的取值表示八个数码管,从左至右依次是111~000。LEDGA表示七段数码管,它的取值决定特定位数上显示的数字。
源程序如下:
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b100)
Led=7'b1000_000;
if(SEL==3'b011)
case(shiwei2)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
module
xianshi(CPout,Hour,Minute,Second,SEL,LEDAG);
input
CPout;
input
Hour,Minute,Second;
output
SEL,LEDAG;
reg
[2:0]
SEL;
reg
[6:0]
Led;
reg
[3:0]
shi1,ge1,shi2,ge2,shi3,ge3;
always
@(posedge
CPout)
begin
shiwei1=Hour/10;
gewei1=Hour%10;
shiwei2=Minute/10;
gewei2=Minute%10;
shiwei3=Second/10;
gewei3=Second%10;
if(SEL==3'b110)
case(shiwei1)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b101)
case(gewei1)
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b111)
case(gewei3)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
SEL
=
SEL
+
3'd1;
end
assign
LEDAG=Led;
endmodule
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b010)
case(gewei2)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
default:
Led
=
7'b0000_000;
endcase
if(SEL==3'b001)
Led=7'b1000_000;
if(SEL==3'b000)
case(shiwei3)
4'b0000:
Led
=
7'b0111_111;
4'b0001:
Led
=
7'b0000_110;
4'b0010:
Led
=
7'b1011_011;
4'b0011:
Led
=
7'b1001_111;
4'b0100:
Led
=
7'b1100_110;
4'b0101:
Led
=
7'b1101_101;
4'b0110:
Led
=
7'b1111_101;
4'b0111:
Led
=
7'b0000_111;
4'b1000:
Led
=
7'b1111_111;
4'b1001:
Led
=
7'b1101_111;
总结体会
这次课程设计虽然只有短短的四天,但我的收获却很大。通过这次实习,我掌握了EDA设计的基本流程(即设计输入—编译—调试—仿真—下载),领会了自顶而下结构化设计的优点,并具备了初步的EDA程序设计能力。
我感觉,这个程序最难的地方在于顶层模块的设计,因为顶层模块需要将各个子模块按照电路原理有机地结合起来,这需要扎实的理论功底,而这正是我所欠缺的。相比而言,子模块的设计就容易多了,因为Verilog语言和C语言有很多相似之处,只要明白了实验原理,就不难完成,水平的高下只体现在程序的简洁与否。Verilog源程序的编写很容易出现错误,这就需要耐心的调试。因为很多情况下,一长串的错误往往是由一个不经意的小错误引起的。当程序屡调屡错的时候,最好和其他同学沟通交流一下,他们不经意的一句话,就可能给我启发,使问题迎刃而解。
这次实习,给我感触最深的还是行为态度问题。人的能力有大有小,但只要端正态度,不抛弃,不放弃,任何人都能取得令自己满意的成绩。在此,我由衷的感谢在这次课程设计中给了我巨大帮助的老师和同学们!