基于VHDL的数字电子钟系统设计
基于VHDL的数字电子钟的设计

参考文献 [1]阎 石 . 数 字 电 子 技 术 基 础 [M]. 北 京 : 高 等 教 育 出 版 社 , 2000. [2]卢 毅 , 赖 杰 .VHDL 与 数 字 电 路 设 计 [M ]. 北 京 : 科 学 出 版 社 , 2002. [3]刘 丽 华 . 专 用 集 成 电 路 设 计 方 法 [M]. 北 京 :北 京 邮 电 大 学 出 版 社 , 2000.
( 上 接 第 435 页)
ln S +r(r- ρ)T+ 1 σ2T2H
'
d3 =
G
2 σTH
,
''
d4 =d3 -
σTH。
参考文献 [1]张 艳 , 孙 彤 . 关 于 欧 式 缺 口 期 权 定 价 模 型 的 研 究 [J]. 徐 州 师 范 大 学 学 报 ,2006,24(12):44- 47. [2]Ducan T E, Hu Y, Pasik- Ducan B. Stochastic calculus for fractional Brownian motion [J].SIAM J. Control Optim,2000,38:
参考文献 [1]林 群,严 宁 宁.高 效 有 限 元 构 造 与 分 析[M].保 定 : 河 北 大 学 出 版 社 , 1996 [2]朱 起 定 , 林 群 . 有 限 元 超 收 敛 理 论 [M]. 长 沙 : 湖 南 科 技 出 版 社 , 1989
582- 612. [3]Hu Y, Φksendal B. Fractional White Noise and Applica-
( 上 接 第 437 页)
" # 即 P
p-
u 1-
α ·!p(1-
用VHDL语言实现数字电子钟的设计(EDA课程设计报告-含源程序)

课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子 0901学号: XXXXXXXX姓名:XXXXXXXXX指导教师:XXXXXXXXX设计时间:现代电子设计技术的核心已转向基于计算机的电子设计自动化技术,即EDA (Electronic Design Automation)技术。
EDA技术就是依赖计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
EDA技术使得设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
硬件描述语言是EDA技术的重要组成部分,常见的HDL语言有VHDL、Verilog、HDL、ABLE、AHDL、System Verilog和System C。
其中VHDL、Verilog在现在的EDA设计中使用最多,也拥有几乎所有主流EDA工具的支持。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化硬件设计任务,提高了设计效率和可靠性。
在这次设计中,主要使用VHDL语言输入。
此次设计很好地完成了数字钟的定时、切换显示年月日和时分秒的功能,完成了小型FPGA的设计开发,锻炼了动手实践能力,达到了课程设计的目的。
关键词:EDA技术硬件描述语言VHDL 设计数字电子钟摘要 (2)1、课程设计目的 (4)2、课程设计内容及要求 (4)2.1 设计内容 (4)2.2 设计要求 (4)3、VHDL程序设计 (5)3.1 方案论证 (5)3.2 设计思路与方法 (6)3.2.1 设计思路 (6)3.2.2 设计方法 (7)4、仿真与分析 (7)5、器件编程下载及设计结果 (9)6、课程设计总结 (10)7、参考文献 (10)8、程序清单 (11)8.1 顶层模块 (11)8.2 秒脉冲模块 (13)8.3 数码管显示模块 (14)8.4 时分秒模块 (15)8.4.1 分秒模块 (16)8.4.2 小时模块 (18)8.5 年月日模块 (19)8.5.1 日期模块 (21)8.5.2 月份模块 (24)8.5.3 年份模块 (25)1、课程设计目的EDA技术课程设计在课程结束以后进行,在实践中验证理论知识,不仅是为了巩固课堂上所学知识,更是为了加深我们对EDA技术和VHDL语言的理解;为了让我们自己动手完成从设计输入、逻辑综合、功能仿真、设计实现到实现编程、时序仿真,一直到器件的下载测试的整个过程,真切感受利用EDA技术对FPGA进行设计开发的过程,锻炼和提高我们对器件的编程调试能力。
电子时钟课程设计--基于VHDL的电子钟的设计

电子技术课程设计题目基于VHDL的电子钟的设计学院名称电气工程学院指导教师 XXX职称教授班级电力XXX班学号 2007XXX学生姓名XXX2010年 01 月 15 日课程设计任务书学院电气工程学院专业电气工程及其自动化班级电力XXX班学号 2007XXXXXXX姓名 XXX 指导老师 XXX一设计课题名称基于VHDL的电子钟的设计二电子钟功能本课题要求所设计的电子钟能够正常进行时、分、秒计时,并显示计时结果。
同时具有校时功能。
三设计要求1.详细说明设计方案;2.用VHDL编写设计程序;3.给出系统仿真结果;4.进行硬件验证。
目录第一章1.1引言----------------------------------------------------------------4 1.2 课题设计的背景、目的---------------------------------------4第二章2.1 EDA的简单介绍------------------------------------------------ 6 2.2 VHDL的简单介绍----------------------------------------------- 6 2.3 Quartus2 软件----------------------------------------------- 7 第三章3.1电子钟的结构图--------------------------------------------------9 3.2小时模块------------------------------------------------ 9 3. 3分钟模块---------------------------------------------- 11 3.4 秒钟模块-------------------------------------------12 3.5 时间设置模块--------------------------------------------- 14 心得体会------------------------------------------------------------17参考文献------------------------------------------------------------18第一章1.1 引言随着科学技术的不断发展,人们对时间计量的精度要求越来越高。
基于VHDL的数字电子时钟的设计

目录基于VHDL的数字电子时钟的设计.............................................................. 错误!未定义书签。
目录 .. (1)摘要 (2)引言 (2)一、设计分析 (3)1.1 设计要求 (3)1.2 性能指标及功能设计性能指标 (3)二、设计方案 (3)三、设计环境 (4)3.1 硬件设计环境 (4)3.1.1 可编程器件EP2C5Q208C8N 及开发板系统 (5)3.1.2 64位的计算机一台 (5)3.2 软件设计环境 (5)3.2.1 QuartusⅡ软件开发平台(8.0版本) (5)3.2.2 Windows7操作系统 (5)3.2.3 硬件描述语言VHDL (5)四、整体设计流图 (7)4.1 各模块的原理性功能介绍 (7)4.1.1 可编程器件EP2C5Q208C8N (7)4.1.2 CPLD-JTAG接口 (7)4.1.3 晶振和蜂鸣器 (7)4.1.4 LED数码管显示 (8)4.1.5 独立按键 (9)4.1.6 拨码开关 (9)4.1.7 QuartusⅡ软件开发平台(8.0版本) (9)4.2 设计的整体框架 (10)4.2.1在各个模块都编译通过的基础上在顶层用原理图的方法实现。
(10)4.2.2 设计原理及流程图 (11)4.2.3逻辑流程图 (12)4.2.4状态转移图 (13)五、系统的模块化设计 (13)5.1 软件程序模块化设计 (13)5.1.1 秒/分/时输入模块的软件设计 (13)5.1.2 秒/分/时计数模块的软件设计 (14)5.1.3 模式选择模块的软件设计 (14)5.1.4 数码管 (15)5.1.5 闹钟模块的软件设计 (16)5.1.5 系统时钟的软件设计 (18)5.2 硬件的测试 (20)5.2.1模拟时钟电路图与实物图 (20)设计心得 (23)致谢 (24)参考文献 (24)摘要随着人类的不断进步,现代电子设计技术已进入一个全新的阶段,传统的电子设计方法、工具和器件在更大的程度上被EDA所取代。
VHDL电子时钟的设计

VHDL电子时钟的设计VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于设计和模拟数字电路和系统。
在这篇文章中,我们将探讨VHDL电子时钟的设计。
设计一个VHDL电子时钟需要考虑以下几个方面:时钟的显示方式、时钟的时钟源以及时钟的控制逻辑。
首先,我们需要确定时钟的显示方式。
常见的电子时钟显示方式有7段LED显示和LCD显示。
在这里,我们选择使用7段LED显示。
7段LED 显示由7个LED灯组成,可以显示0到9的数字。
此外,还需要考虑到显示小时和分钟的两个时钟。
接下来,我们需要确定时钟的时钟源。
时钟源决定了时钟的精度和稳定性。
在VHDL设计中,常用的时钟源有晶体振荡器和时钟发生器。
晶体振荡器由晶体和振荡电路组成,可以提供非常精确和稳定的时钟信号。
时钟发生器则基于计数器和除频器的原理产生时钟信号。
根据实际需求选择合适的时钟源。
最后,我们需要设计时钟的控制逻辑。
控制逻辑决定了时钟的功能和操作方式。
在这里,我们将设计一个简单的时钟,包括设置时间、调节时间、显示时间和闹钟功能。
我们可以使用按钮和开关控制时钟的功能。
下面是一个VHDL电子时钟的示例设计代码:```vhdl--时钟显示模块entity ClockDisplay isportclk : in std_logic;reset : in std_logic;hours : in integer range 0 to 23;minutes : in integer range 0 to 59;alarm : in std_logic;seg7 : out std_logic_vector(6 downto 0) end entity ClockDisplay;architecture Behavioral of ClockDisplay is signal count : integer := 0;signal sec : integer := 0;signal disp_hours : integer := 0;signal disp_minutes : integer := 0;beginprocess (clk, reset)beginif reset = '1' thencount <= 0;sec <= 0;disp_hours <= 0;disp_minutes <= 0;elsif rising_edge(clk) thencount <= 0;sec <= sec + 1;elsecount <= count + 1;end if;end if;end process;process (sec, reset, hours, minutes, alarm)beginif reset = '1' thendisp_hours <= 0;disp_minutes <= 0;elsif rising_edge(sec) thenif alarm = '1' and hours = disp_hours and minutes = disp_minutes then--闹钟触发逻辑elsif sec = 59 thenif minutes = 59 thenif hours = 23 thendisp_hours <= 0;disp_minutes <= 0;elsedisp_hours <= hours + 1; disp_minutes <= 0;end if;elsedisp_hours <= hours;disp_minutes <= minutes + 1; end if;elsedisp_hours <= hours;disp_minutes <= minutes;end if;end if;end process;process (disp_hours, disp_minutes)begincase disp_hours is...end case;case disp_minutes is...end case;end process;end architecture Behavioral;```这个代码中,我们使用了两个进程来处理时钟的计时和显示逻辑。
基于VHDL语言的数字电子钟课程设计

基于VHDL语言的简易电子钟设计[摘要] VHDL是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、综合和模拟等多个阶段。
随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD结构,成为设计专用集成电路和其他集成电路的主流。
通过应用VHDL对数字时钟的设计,到达对VHDL的理解,同时对CPLD器件加深了解。
该系统在开发软件Quartus Ⅱ环境中设计完成,本文给出了设计该数字时钟系统的流程和方法,最后通过CPLD实现预定功能。
关键词:电子钟;硬件描述语言;VHDL;Quartus Ⅱ;CPLD目录引言 (1)第一章设计任务及功能要求 (1)1.1设计课题内容 (1)1.2功能要求说明 (1)第二章系统设计方案 (2)2.1电子钟工作原理 (2)2.2总体方案设计 (2)第三章电子钟顶层设计 (2)3.1顶层设计分析 (2)3.2 顶层电路图 (3)第四章各功能模块的设计 (4)4.1正常计时模块 (4)分频模块设计 (4)4.1.2 60进制计数器设计 (5)4.1.3 24进制计数器设计 (5)4.2整点报时模块 (6)整点报时设计思路及原理图 (6)整点报时仿真波形 (7)4.3分时校对模块 (7)分时校对设计思路及原理图 (7)分时校对仿真波形 (7)4.4扫描输出模块 (8)扫描输出设计思路及原理图 (8)扫描输出仿真波形 (8)4.5译码显示模块 (9)译码显示设计思路及原理图 (9)译码显示仿真波形 (10)第五章系统硬件实现分析 (10)5.1 引脚分配 (10)5.2 系统硬件测试及分析 (11)第六章结束语 (11)参考文献 (11)附录1顶层电路图 (12)附录2程序代码 (12)引言数字时钟是一种用数字电路技术实现时、分、秒计时的装置,数字时钟走时精度高,稳定性好,使用方便,不需要经常调校,数字式时钟用秒脉冲发生器的精度稳定保证了数字钟的质量。
电子设计自动化〔EDA〕技术开展越来越迅速,利用计算机辅助设计已成为开展趋势。
电子秒表设计VHDL
一、设计题目:基于VHDL语言的电子秒表设计(可调时,有闹钟、定时功能)二、设计目的:⑴掌握较复杂的逻辑设计和调试⑵学习用原理图+VHDL语言设计逻辑电路⑶学习数字电路模块层次设计⑷掌握QuartusII软件及Modelsim软件的使用方法三、设计内容:(一)设计要求1、具有以二十四小时计时、显示、整点报时、时间设置和闹钟的功能。
2、设计精度要求为1S。
(二).系统功能描述1 . 系统输入:系统状态及校时、定时转换的控制信号为k、set、ds;时钟信号clk,采用实验箱的50MHz;系统复位信号为reset。
输入信号均由按键产生。
系统输出:8位LED七段数码管显示输出,蜂鸣器声音信号输出。
多功能数字钟系统功能的具体描述如下:2. 计时:set=1,ds=1工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
3. 校时:在set=0,ds=0状态下,按下“k键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒校准”状态,之后如此循环。
1)“小时”校准状态:在“小时”校准状态下,显示“小时”数码管以1Hz的频率递增计数。
2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以1Hz的频率递增计数。
3)“秒”复零状态:在“秒复零”状态下,显示“分”的数码管以1Hz的频率递增计数。
4. 整点报时:蜂鸣器在“59”分钟的第50—59,以1秒为间隔分别发出1000Hz,500Hz的声音。
5. 显示:采用扫描显示方式驱动8个LED数码管显示小时、分、秒。
闹钟:闹钟定时时间到,蜂鸣器发出交替周期为1s的1000Hz、500Hz的声音,持续时间为一分钟;6. 闹钟定时设置:在set=0,ds=1状态下,按下“k”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k 键”则进入“秒”设置状态, 之后如此循环。
1)闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管以1Hz 的频率递增计数。
基于VHDL的数字电子钟系统设计
集成电路软件设计基于VHDL的数字电子钟系统设计学院信息工程学院班级电科1112姓名闭应明学号 2011850057 成绩指导老师卫雅芬2013 年12 月10 日目录一、摘要 (1)二、关键词 ............................................ 错误!未定义书签。
三、引言............................................... 错误!未定义书签。
四、设计要求.......................................... 错误!未定义书签。
五、技术指标 (1)六、设计思想 (1)七、设计原理 (2)八、设计方案 (2)九、设计各个模块的功能 (3)十、各个模块的波形仿真结果 (1)十一、各个电路模块的DV综合的网标和电路模型 (12)十二、设计结果分析 (19)十三、论文结论 (20)十四、参考文献 (20)十五、附录 (21)十六、致谢 (50)一、摘要:本设计采用层次化设计方法,自顶向下进行设计。
设计中根据系统的功能要求合理划分出层次,进行分级设计和仿真验证,将较为复杂的数字系统逻辑简化为基本的模型从而降低实现的难度。
突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过ModelSim SE 6.1完成综合、仿真。
二、关键词:Modelsim VHDL 硬件描述语言设计数字钟三、引言:硬件描述语言HDL(Hardware Description Language)是一种用形式化方法来描述数字电路和系统的语言。
目前.电子系统向集成化、大规模和高速度等方向发展,以硬件描述语言和逻辑综合为基础的自顶向下的电路设计方法在业界得到迅猛发展,VHDL在这种形势下显示出了巨大的优势,展望将来VHDL在硬件设计领域的地位将与c语言和c++在软件设计领域的地位一样,在大规模数字系统的设计中,它将逐步取代传统的逻辑状态表和逻辑电路图等硬件描述方法,而成为主要的硬件描述工具。
基于vhdl语言的的电子钟设计说明书
通信电路EDA课程项目基于VHDL语言的的电子钟设计负责人:xxxxxxxxxxx成员:xxxxxxxxxxxxx、xxxxxxxxxxxx完成日期:xxxxxxxx目录1、设计要求与目的2、设计原理3、设计流程4、编程构想及项目程序代码5、项目仿真与分析6、项目说明Part 1设计要求:设计一个电子钟,在输入时钟脉冲的作用下,采用24小时制计时,可以显示时、分、秒,用户也可以自行设置时间设计目的:1.掌握多位计数器相连的设计方法。
2.掌握十六进制,二十四进制,六十进制计数器的设计方法。
3.掌握程序的层次化设计方法。
4.培养团队合作,分析问题,解决问题的能力。
Part 2设计原理:1、电子时钟是一个将“时”“分”“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时;显示满刻度为23时59分59秒,另外具备校时功能。
因此,一个基本的数字钟电路主要由“时”“分”“秒”计数器校时电路组成。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累加60秒发送一个“分脉冲”信号,该信号将被送到“分计数器”。
“分计数器”也采用60进制计数器,每累加60分发送一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计数器,可实现对一天24小时的累计。
译码显示电路“时”“分”“秒”计数器的输出状态六段显示译码器译码。
通过六位LED七段显示器显示出来。
校时电路器是用来对“时”“分”“秒”显示数字进行校时调整的,可以根据当前需要的时间来设置电子时钟的时间,使它从这个时间开始计时。
也可以对电子钟复位,重新开始计时。
2、各模块及其功能电子钟计数采用层次化设计,将设计任务分成若干个模块。
规定每一模块的功能和各模块之间的接口。
1)SECOND模块:用来对秒进行计时,当记到计数器的低四位为1001时,若高三位不是101时,则秒计数器加7,目的是使计数值变为BCD码。
若高三位是101时,则有一进位。
基于VHDL的多功能数字钟设计报告之欧阳育创编
基于VHDL的多功能数字钟设计报告021215班卫时章02121451一、设计要求1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。
2、设计精度要求为1秒。
二、设计环境:Quartus II三、系统功能描述1、系统输入:时钟信号clk采用50MHz;系统状态及较时、定时转换的控制信号为k、set,校时复位信号为reset,均由按键信号产生。
2、系统输出:LED显示输出;蜂鸣器声音信号输出。
3、多功能数字电子钟系统功能的具体描述如下:(一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。
(二)校时:在计时显示状态下,按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按下“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按下“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按下“k”键恢复到正常计时显示状态。
若校时过程中按下“reset”键,则系统恢复到正常计数状态。
(1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。
(4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。
(三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集成电路软件设计基于VHDL的数字电子钟系统设计实验地点实验时间 2012.12.19 学院信息工程学院班级姓名学号成绩指导老师2012 年12 月19 日数字电子钟的设计一、设计项目基于VHDL的数字电子钟系统设计二、设计要求1、采用自顶向下的设计思想;2、使用本学期学习的设计语言VHDL和集成电路设计软件实现;三、设计任务(设计指标)1、设计数字电子钟的基本功能:年、月、日、时以24小时制显示,月日为阳历显示,起始时间为:2012年11月26日14:00;2、支持闹铃功能;3、随时校时功能;4、闰年提醒;5、中国传统节假日提醒。
四、设计思想电子时钟是电子设计中用来显示时间和年月日的一种装置。
是采用自顶向下的设计方法,将数字电子时钟分成五个子模块和一个顶层模块,然后将各个子模块再细化成为更小的功能块,直到最后能用vhdl语言进行描述为止。
当各个模块都描述完成并仿真确认无误后,再采用元件例化,将各个元件一层一层的例化连接起来,直到最后完成系统设计。
五、设计原理数字钟是一个将“时”,“年”,“月”,“日”显示于人的视觉器官的计时装置。
它的计时周期分别为24小时,365天(非闰年),12个月,31天显示满刻度为2030年12月31日23时,另外应有闹钟报时、闰年提醒,中国传统节假日提醒等附加功能。
因此,该数字钟电路主要由“时”,“日”,“年”,“月”,计数器、闹钟报时电路和转换器组成,其中年月日是以万年的整体形式体现。
时信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“时计数器”,“时计数器”采用24进制计数器,每累计24小时发出一个“分脉冲”信号,该信号将作为“万年历计数器”的时钟脉冲。
万年历的年月日的输出端一方面输出显示,另一方面输入到闹钟中当作闹钟中的比较时间当输入的信息与设定好的一致时,响铃信号触发。
并在万年历中制作出当有闰年或是中国传统节假日的时候发出高平的信号进行提醒。
六、设计方案设计中使用的时元件例化和进程结合的方案。
每个元件主要采用进程语句实现,在每个进程主要使用了if_else、if_eslif_elsif_----_else 、case以及赋值语句,实现了模块化设计,使得整个程序一目了然。
整个电子钟的顶层设计实体为dzz(电子时钟)模块,其下又分为:fenpin(分频)、shi (时脉冲)、万年历(年月日)、zhuanhuan(过渡转换)和naozhong(闹钟)五个模块。
需要注意的是,在年月日模块中的日期模块对于2月份要按照平年闰年的情况分别处理。
在年月日的模块中对于闰年和中国传统节假日的提醒也是分别处理的。
七、各模块实现(一)分频模块分频器电路将20MHZ的高频方波信号经20M次分频后得到1Hz的方波信号供秒计数器进行计数。
分频器实际上也就是计数器。
而本实验的计时模块、闹钟模块需要1hz、100hz 的时钟信号,故需要加以分频实现所需信号。
分频电路的模块化示意图如下:(分频器的顶层连接图)(分频器顶层文件的元件图)分频器的子模块10分频的网表文件(网表文件)(10分频元件图)分频模块的仿真波形图(二)计时模块由时计数器组成了最基本的数字钟计时电路,二十四进制计数器和满位之后的进位信号组合构成。
其模块化电路示意图如下:其中preset为使能端高电平有效,co为溢出信号,当时计数到24点的时候会在co 处触发一个上升沿时钟供后面的万年历使用,保证使其工作。
计时模块的仿真波形图:H_in为校时输入端(三)万年历模块万年历的模块由年、月、日的整型计数形式组合而成,其中年是由2012计数到2030,月是一年12个月的计数,日的计数分为闰年和平年大月和小月的计数部分,当为闰年时2月份的天数为29,当为大月时日的计数为31,当为小月时日的计数为30,。
由于需要显示年、月、日、星期、闰年,故本模块需要有判断是否闰年电路,闰年以及非闰年对应的月天数的译码电路,12进制BCD计数器(用来月循环计数),100进制BCD计数(用来年循环计数),故先画出万年历的模块图如下,然后逐模块设计实现。
其模块的电路示意图如下:(网表文件)Preset为使能端,clk接在小时模块的co端口,data、month、year分别为日、月、年的输出,co为中国传统节假日的提醒信号端,连接在外面的chuantong端口,tixing就是为闰年的提醒信号端口,起始的信号都为0当满足条件是则变为1可接在扬声器上。
万年历模块的仿真波形图:D_in、m_in、y_in分别为日月年的校时输入端口,jiaoshi为校时控制端口其子模块日的仿真波形图为:其子模块月的仿真波形图为:其子模块年的仿真波形图为:(四)闹钟模块闹钟模块是由实时的小时模块和万年历模块时钟输入和手动设定的时、日、月、年模块组合成的满足当实时的时间与手动设定的时间相等时,闹钟就会输出一个使能信号使得扬声器发出声音。
其模块化的电路示意图如下:(闹钟网表文件)Preset为使能端口,高电平有效,hour、data、month、year为实时输入的时钟信号,shi、ri、yue、nian为外界输入的对于闹钟响铃时间的设定端口,music为响铃的使能端口。
(五)过渡模块过渡模块是为了方便当万年历输出端口要为两个电路框图所使用的时候方便连接顶层文件中的中间信号,从而做到万年历中的时钟信号既可以连接到闹钟模块中,也可以连接到外部模块中显示出来。
其模块化电路的示意图如下:其中preset为使能信号,hour、data、month、year为时钟输入的信号,连接中间信号。
Shi、ri、yue、nian为输出的时钟信号用于外部显示的作用。
也就是说当输入端输入什么信号的时候,输出端就会输出相同的信号。
(六)顶层模块(dzz模块)顶层模块是由前面的五个模块共同例化形成的,其模块化的电路示意图如下:A为时钟信号clk,vcc为接高电平,接在所有的preset端口,当电源连接时,数字之中开始工作,当断电的时候电子时钟不工作,vcc_m接在闹钟的控制端口中,及闹钟的开关,当开关未开时即vcc_m=’0’时闹钟不工作,当为’1’时闹钟正常工作,当闹钟响时调到低电平闹钟也停止工作。
Naozhong_out为闹钟工作输出口,runnian为闰年提醒端口,chuantong为中国传统节假日的提醒端口,hour_out、data_out、month_out、year_out为时钟的显示在外部的端口。
电子钟的仿真波形文件如下:八、设计结果由上面的仿真波形图可知,本次实验基本上完成了实验设计任务的要求数字电子钟的基本功能:年、月、日、时以24小时制显示,月日为阳历显示,起始时间为:2012年11月26日14:00;支持闹铃功能;闰年提醒;中国传统节假日提醒。
本次实验的数字电子钟的初值为2012年11月26日14时,闹钟的设定时间是2013年1月1日1时,犹如上图的波形所表现出来的一样。
九、论文结论在本次的设计实验过程中出现很多的问题如编程时,经常导致语法错误,如:“;”没有写上,变量类型没有预先标明,前后变量名字由于缺少一个或多一个字母而导致出错。
所以在写程序的时候应该对照错误,认真检查程序,看哪个地方的标点,变量没有写上或标明。
再者在进行编译或波形仿真时,经常得到的不是预想中的结果。
而且往往得不出错误在哪里,编译的过程并没有错误但是结果却是错的,于是将就将需要编译或进行仿真的实体文件置顶,经检错无误后,进行波形仿真,在仿真之前合理设置仿真结束时间和信号周期,就可以了。
在控制时间的显示的时候,由于变量太多多发现不能完全的控制住变量,导致仿真波形的是时候出现了高阻的状态,所以在顶层文件下应该减少变量,仔细推敲,合理命名。
虽然只是一个小设计,我却也从中学到了不少设计流程和一些相关问题。
设计是一个十分严谨的过程,容不得随意和马虎。
要想快速而高效地完成一项设计,必须先有一个清晰明了的设计思路,设想好一个整体框架,然后在此基础上,逐渐将各个部分功能进行完善。
在设计的过程中,也曾遇到不少困难,但正所谓坚持就是胜利,要想取得成功,必须要有努力付出,这样所取得的结果才更有意义。
附件(代码清单)10分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin10 isport (clk:in std_logic;--- - 输入时钟信号clk_out:buffer std_logic);--- -输出时钟信号end fenpin10;architecture rtl of fenpin10 issignal cnt:std_logic_vector(3 downto 0);--- -定义计数器模值beginprocess (clk)beginif (clk'event and clk='1') thenif (cnt="0100") thenclk_out<=not clk_out;cnt<="0000";elsecnt<=cnt+'1';end if;end if;end process ;end rtl;分频器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport (clk:in std_logic;--- -??1Khz????clk_1hz,clk_100hz:buffer std_logic);--- - ???1hz?100hz??end fenpin;architecture rtl of fenpin issignal clk_10hz:std_logic;component fenpin10 is--??10???????????? port (clk_in:in std_logic;clk_out:buffer std_logic);end component;beginu0: fenpin10port map(clk_in=>clk,--- - ????clk_out=>clk_100hz);--- - ???? u1: fenpin10port map (clk_in=>clk_100hz, --- - ????clk_out=>clk_10hz);-- - - ???? u2: fenpin10port map (clk_in=>clk_10hz, --- - ????clk_out=>clk_1hz);-- - - ???? end rtl;分频器模块testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench IS signal clk_1hz: std_logic;signal clk_100hz: std_logic;SIGNAL clk : std_logic := '1' ; COMPONENT fenpinport (clk:in std_logic;clk_1hz,clk_100hz:buffer std_logic);END COMPONENT ;BEGINprocessbeginwait for 50ns;clk <= not clk;end process;test:fenpinPORT MAP (clk => clk,clk_1hz=>clk_1hz,clk_100hz=>clk_100hz) ;END a;时模块library ieee;use ieee.std_logic_1164.all; entity shi isport(clk :in std_logic;preset : in std_logic; jiaoshi: in std_logic;h_in:in integer range 0 to 23; hour : out integer range 0 to 23; co : out std_logic);end shi;architecture a of shi issignal s :integer range 0 to 23:=14; beginprocess(clk,preset)beginif preset ='0' then s<=14;elsif (clk'event and clk='1') then if s<23 then s<=s+1;else s<=0;end if;if s=23 then co<='1';else co<='0';if jiaoshi='1' then s<=h_in;elsif (clk'event and clk='1') then if s<23 then s<=s+1;else s<=0;end if;if s=23 then co<='1';else co<='0';end if;end if ;end if;end if;end process;hour <=s;end a;时模块Testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench ISSIGNAL hour : integer :=14 ;signal jiaoshi : std_logic:='0';signal h_in: integer:=14;signal co : std_logic:='0';SIGNAL preset : std_logic := '0' ;SIGNAL clk : std_logic := '1' ;COMPONENT shiport(clk :in std_logic;preset : in std_logic;jiaoshi: in std_logic;h_in:in integer range 0 to 23;hour : out integer range 0 to 23;co : out std_logic);END COMPONENT ;BEGINprocessbeginwait for 50ns;clk <= not clk;end process;processbeginwait for 2000ns;jiaoshi<=not jiaoshi;end process;preset <= '1' after 20ns;test:shiPORT MAP (jiaoshi =>jiaoshi,h_in=>h_in,clk => clk,preset => preset,co => co,hour => hour) ;END a;万年历模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity wannianli isport( preset:in std_logic;clk:in std_logic;jiaoshi:in std_logic;d_in:in integer range 1 to 31;m_in:in integer range 1 to 12;y_in:in integer range 2012 to 2030;data: out integer range 1 to 31;month:out integer range 1 to 12;year:out integer range 2012 to 2030;tixing:out std_logic;co:out std_logic);end wannianli;architecture a of wannianli issignal yue:integer range 1 to 12:=11;signal nian:integer range 2012 to 2030:=2012;signal ri:integer range 1 to 31:=26;signal qm:integer range 28 to 31;beginprocess(yue,nian)begincase yue iswhen 1=>qm<=31;when 2 =>if(((nian mod 4)=0 and (nian mod 100)/=0) or (nian mod 400)=0) then qm<=29;else qm<=28;end if;when 3 =>qm <=31;when 4 =>qm<=30;when 5 =>qm<=31;when 6 =>qm<=30;when 7 =>qm<=31;when 8 =>qm<=31;when 9 =>qm<=30;when 10 =>qm<=31;when 11 =>qm<=30;when 12 =>qm<=31;when others =>null;end case ;end process;process(clk,preset)beginif preset='0' thenyue <=11 ;nian<=2012;ri<=26;elseif (((nian mod 4)=0 and (nian mod 100)/=0) or (nian mod 400)=0) then tixing<='1';else tixing<='0';end if;if ((yue=5 and ri=1) or (yue=10 and ri=1 )or (yue=1 and ri=1) or (yue=8 and ri=15) or (yue=1 and ri=15)) then co<='1';else co<='0';end if;if clk'event and clk='1' thenif(ri=qm) then ri<=1;if(yue=12)then yue<=1;nian<=nian+1;else yue<=yue+1;end if;elsif(ri<qm) then ri<=ri+1;if jiaoshi='1' thenri<=d_in;yue<=m_in;nian<=y_in;elsif clk'event and clk='1' thenif(ri=qm) then ri<=1;if(yue=12)then yue<=1;nian<=nian+1;else yue<=yue+1;end if;elsif(ri<qm) then ri<=ri+1;end if;end if;end if;end if;end if;end process;month<=yue;year<=nian;data<=ri;end a;万年历testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench ISSIGNAL preset : std_logic := '0' ;SIGNAL clk : std_logic := '1' ;signal co: std_logic;SIGNAL tixing:std_logic;signal jiaoshi:std_logic:='1';SIGNAL d_in: integer range 1 to 31:=2;SIGNAL m_in: integer range 1 to 12:=2;SIGNAL y_in: integer range 2012 to 2030:=2013; signal yue:integer range 1 to 12:=11;signal nian:integer range 2012 to 2030:=2012;signal ri:integer range 1 to 31:=26;COMPONENT wannianliport( preset:in std_logic;clk:in std_logic;jiaoshi:in std_logic:='1';d_in:in integer range 1 to 31;m_in:in integer range 1 to 12;y_in:in integer range 2012 to 2030;data: out integer range 1 to 31;month:out integer range 1 to 12;year:out integer range 2012 to 2030;tixing:out std_logic;co:out std_logic);END COMPONENT ;BEGINprocessbeginwait for 50ns;clk <= not clk;end process;processbeginjiaoshi<=not jiaoshi ;wait for 3000ns;end process;preset <= '1' after 20ns;d_in <=2 after 10ns;m_in <=2 after 10ns;y_in <=2013 after 10ns;test:wannianliPORT MAP (jiaoshi=>jiaoshi,d_in =>d_in,m_in =>m_in,y_in =>y_in,clk=> clk,tixing=>tixing,co=>co,preset=> preset,month=>yue,year=>nian,data=>ri) ;END a;日模块library ieee;use ieee.std_logic_1164.all; entity ri isport(clk :in std_logic;preset : in std_logic;data : out integer range 1 to 31; co : out std_logic);end ri;architecture a of ri issignal s :integer range 1 to 31; beginprocess(clk,preset)beginif preset ='0' then s<=1;elsif (clk'event and clk='1') then if s<31 then s<=s+1;else s<=1;end if;if s=31 then co<='1';else co<='0';end if;end if ;end process;data <=s;end a;日模块testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench IS SIGNAL data : integer :=26 ;signal co : std_logic:='0';SIGNAL preset : std_logic := '0' ; SIGNAL clk : std_logic := '1' ; COMPONENT riport(clk :in std_logic;preset : in std_logic;data : out integer range 1 to 31;co : out std_logic);END COMPONENT ;BEGINprocessbeginwait for 50ns;clk <= not clk;end process;preset <= '1' after 20ns;test:riPORT MAP (clk => clk,preset => preset,co => co,data => data) ;END a;月模块library ieee;use ieee.std_logic_1164.all;entity yue isport(clk :in std_logic;preset : in std_logic;month : out integer range 1 to 12;co : out std_logic);end yue;architecture a of yue issignal s :integer range 1 to 12;beginprocess(clk,preset)beginif preset ='0' then s<=1;elsif (clk'event and clk='1') thenif s<12 then s<=s+1;else s<=1;end if;if s=12 then co<='1';else co<='0';end if;end if ;end process;month <=s;end a;月模块testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench IS SIGNAL month : integer :=11 ;signal co : std_logic:='0';SIGNAL preset : std_logic := '0' ; SIGNAL clk : std_logic := '1' ; COMPONENT yueport(clk :in std_logic;preset : in std_logic;month : out integer range 1 to 12;co : out std_logic);END COMPONENT ;BEGINprocessbeginwait for 50ns;clk <= not clk;end process;preset <= '1' after 20ns;test:yuePORT MAP (clk => clk,preset => preset,co => co,month => month) ;END a;年模块library ieee;use ieee.std_logic_1164.all;entity nian isport(clk :in std_logic;preset : in std_logic;year : out integer range 2012 to 2030; co : out std_logic);end nian;architecture a of nian issignal s :integer range 2012 to 2030; beginprocess(clk,preset)beginif preset ='0' then s<=2012;elsif (clk'event and clk='1') thenif s<2030 then s<=s+1;else s<=2012;end if;if s=2030 then co<='1';else co<='0';end if;end if ;end process;year <=s;end a;年模块testbench文件library ieee;use ieee.std_logic_1164.all;entity nian isport(clk :in std_logic;preset : in std_logic;year : out integer range 2012 to 2030;co : out std_logic);end nian;architecture a of nian issignal s :integer range 2012 to 2030;beginprocess(clk,preset)beginif preset ='0' then s<=2012;elsif (clk'event and clk='1') thenif s<2030 then s<=s+1;else s<=2012;end if;if s=2030 then co<='1';else co<='0';end if;end if ;end process;year <=s;end a;闹钟模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity naozhong isport (clk,preset:in std_logic;----时钟、使能信号hour: in integer range 0 to 23;data: in integer range 1 to 31;month:in integer range 1 to 12;year:in integer range 2012 to 2030;---输入的设定时间ri:in integer range 1 to 31:=26;shi: in integer range 0 to 23:=14;yue:in integer range 1 to 12:=11;nian: in integer range 2012 to 2030:=2012;----输入的实时时间music:out std_logic);----音乐使能信号end naozhong;architecture rtl of naozhong issignal temp:integer range 0 to 23:=0;beginprocess (clk,preset)beginif (clk'event and clk='1') then----判断设定时间和实时时间是否相等if ((year=nian)and(data=ri)and(month=yue)and(hour=shi)and(preset='1')) then music<='1';if (hour=5) then temp<=0 ;elsetemp<=hour+1;----当相等时自动计时一分钟end if;elsif (preset='0') then music<='0';----按停止键闹钟停止end if;if (temp=shi) then music<='0';----不按停止键一分钟自动停止end if;end if;end process ;end rtl;过渡模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity zhuanhuan isport (preset:in std_logic;hour: in integer range 0 to 23;data: in integer range 1 to 31;month:in integer range 1 to 12;year:in integer range 2012 to 2030;shi: out integer range 0 to 23:=14;ri:out integer range 1 to 31:=26;yue:out integer range 1 to 12:=11;nian: out integer range 2012 to 2030:=2012);end zhuanhuan;architecture a of zhuanhuan issignal y0:integer range 0 to 23:=14;signal y1:integer range 1 to 31:=26;signal y2:integer range 1 to 12:=11;signal y3:integer range 2012 to 2030:=2012;beginprocess (preset,hour,data,month,year)begin--case hour isif (preset='0')then y0<=14 ; y1<=26 ; y2<=11 ; y3<=2012;else y0<=hour;y1<=data;y2<=month;y3<=year;end if;end process;shi<=y0;ri<=y1;yue<=y2;nian<=y3;end a;顶层模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity dzz isport( a:in std_logic;vcc:in std_logic;vcc_m:in std_logic;js:in std_logic;s: in integer range 0 to 23;r: in integer range 1 to 31;y:in integer range 1 to 12;n:in integer range 2012 to 2030;j:in integer range 0 to 23;k:in integer range 1 to 31;l:in integer range 1 to 12;m:in integer range 2012 to 2030;hour_out:out integer range 0 to 23;data_out: out integer range 1 to 31;month_out:out integer range 1 to 12;year_out:out integer range 2012 to 2030; naozhong_out:out std_logic;runnian:out std_logic;chuantong:out std_logic);end dzz;architecture rtl of dzz is--component fenpin is--port (clk:in std_logic;----- clk_1hz,clk_100hz:buffer std_logic); --end component;component shi isport(clk :in std_logic;preset : in std_logic;jiaoshi: in std_logic;h_in:in integer range 0 to 23;hour : out integer range 0 to 23;co : out std_logic);end component;component wannianli isport( preset:in std_logic;clk:in std_logic;jiaoshi:in std_logic;d_in:in integer range 1 to 31;m_in:in integer range 1 to 12;y_in:in integer range 2012 to 2030;data: out integer range 1 to 31;month:out integer range 1 to 12;year:out integer range 2012 to 2030;tixing:out std_logic;co:out std_logic);end component;component naozhong isport ( clk,preset:in std_logic;----???????hour: in integer range 0 to 23;data: in integer range 1 to 31;month:in integer range 1 to 12;year:in integer range 2012 to 2030;---???????ri:in integer range 1 to 31:=26;shi: in integer range 0 to 23:=14;yue:in integer range 1 to 12:=11;nian: in integer range 2012 to 2030:=2012; ----???????music:out std_logic);----??????end component;component zhuanhuan isport (preset:in std_logic;hour: in integer range 0 to 23;data: in integer range 1 to 31;month:in integer range 1 to 12;year:in integer range 2012 to 2030;shi: out integer range 0 to 23:=14;ri:out integer range 1 to 31:=26;yue:out integer range 1 to 12:=11;nian: out integer range 2012 to 2030:=2012);end component;signal b:std_logic;signal c:std_logic;signal d:integer range 0 to 23:=14;signal e:std_logic;signal f:integer range 1 to 31:=26;signal g:integer range 1 to 12:=11;signal h:integer range 2012 to 2030:=2012;begin--u1:fenpin port map(clk=>a,clk_1hz=>b,clk_100hz=>c);u2:shi port map(preset=>vcc,clk=>a,jiaoshi=>js,h_in=>j,hour=>d,co=>e);u3:wannianli port map(preset=>vcc,clk=>a,jiaoshi=>js,d_in=>k,m_in=>l,y_in=>m,data=>f,month=>g,year=>h,tixin g=>runnian,co=>chuantong);u4:naozhong port map(preset=>vcc_m,clk=>a,hour=>d,data=>f,month=>g,year=>h,shi=>s,ri=>r,yue=>y,nian=>n,m usic=>naozhong_out);u5:zhuanhuan port map(preset=>vcc,hour=>d,data=>f,month=>g,year=>h,shi=>hour_out,ri=>data_out,yue=>month_ out,nian=>year_out);end rtl;顶层模块testbench文件LIBRARY ieee ;USE ieee.std_logic_1164.all ;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;ENTITY testbench ISEND testbench;ARCHITECTURE a OF testbench ISsignal a: std_logic:='1';signal vcc: std_logic:='0';signal vcc_m: std_logic:='0';signal js: std_logic:='0';signal j:integer range 0 to 23:=13;signal k: integer range 1 to 31:=2;signal l: integer range 1 to 12:=2;signal m: integer range 2012 to 2030:=2013;signal s: integer range 0 to 23:=1;signal r: integer range 1 to 31:=1;signal y:integer range 1 to 12:=1;signal n: integer range 2012 to 2030:=2013;signal hour_out: integer range 0 to 23:=14;signal data_out: integer range 1 to 31:=26;signal month_out: integer range 1 to 12:=11;signal year_out: integer range 2012 to 2030:=2012;signal naozhong_out: std_logic;signal runnian: std_logic;signal chuantong: std_logic;COMPONENT dzzport( a:in std_logic;vcc:in std_logic;vcc_m:in std_logic;js:in std_logic;s: in integer range 0 to 23;r: in integer range 1 to 31;y:in integer range 1 to 12;n:in integer range 2012 to 2030;j:in integer range 0 to 23;k:in integer range 1 to 31;l:in integer range 1 to 12;m:in integer range 2012 to 2030;hour_out:out integer range 0 to 23;data_out: out integer range 1 to 31;month_out:out integer range 1 to 12;year_out:out integer range 2012 to 2030;naozhong_out:out std_logic;runnian:out std_logic;chuantong:out std_logic);END COMPONENT ;BEGINprocessbeginwait for 40ns;a <= not a;end process;processbeginwait for 300ns;vcc_m <= not vcc_m;end process;processbeginwait for 5000ns;js<=not js;end process;j<= 13 after 20ns;k<= 2 after 20ns;l<= 2 after 20ns;m<= 2013 after 20ns;vcc <= '1' after 10ns;s <= 1 after 10ns;r <= 1 after 10ns;y <= 1 after 10ns;n <= 2013 after 10ns;test:dzzPORT MAP (js => js,j => j,k => k,l => l,m => m,a => a,vcc => vcc,vcc_m => vcc_m,s => s,r => r,y => y,n => n,hour_out => hour_out,data_out => data_out,month_out => month_out,year_out => year_out,naozhong_out => naozhong_out, runnian => runnian,chuantong => chuantong); END a;。