1、在系统编程技术项目设计报告在系统编程技术项目设计报告课程名称 在系统编程技术 任课教师 周泽华 设计题目 数 字 钟 班级 学号 0 日期 2012-6-15 目录一、摘要 3二、关键词 数字钟 EDA VHDL语言 3三、设计目的 3四、题目分析 4五、设计方案 41、顶层实体描述 42、模块划分 43.内部各功能模块描述: 54.VHDL 设计 65.实验设备 7六、设计步骤 81、用VHDL程序设计 8步骤5:引脚锁定 112、实验箱显示 12七、总结 13附录: 15一、摘要EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从
2、计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。EDA技术在电子系统设计领域越
3、来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为24时59分59秒,另外还具有校时功能和闹钟功能。总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。并且使用QUARTUS II软件进行电路波形仿真,下载到EDA实验箱进行验证。二、关键词 数字钟 EDA VHDL语言三、设计目的课程设计是一种复杂的学习实践过程。设计过程采用系统设计的方法,先分析任务,得到系统设计的要求,然后进行总体设计,划分子系统模块,然后进行详细设
4、计,编写各个功能子系统VHDL代码并进行功能仿真,最后进行整个系统总装并仿真。四、题目分析功能介绍 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)时钟计数显示时有LED灯的花样显示。 3)具有调节小时、分钟、秒及清零的功能。 4)具有整点报时功能。五、设计方案1、顶层实体描述基于可编程逻辑器件CPLD/FPGA 的芯片,使用硬件描述语言(VHDL)设计一个数字电子钟芯片5,并进行计算机仿真和编程下载。要求该数字电子钟芯片能够实现如下功能:(1)计数功能:完成00时00分00秒到23时59分59秒的计时功能。(2)清零功能:到23时59分59秒时电路自动清零,并设有一个手动清零开关,
5、通过它可以对电路实现随时的手动的清零。(3)定时功能:能够随意设定,精确到秒,由开关调节设定需要设定的时刻。(4)动态显示功能:能够动态显示电子中的时刻数。2、模块划分根据该数字电子钟的功能要求,现划分为以下5个模块:(1)秒计数模块(2)分计数模块(3)时计数模块 (4)显示模块 (5)顶层模块在计数模块中,程序中的控制信号表示如下:clk 是脉冲控制输入信号。reset 是清零输入信号,低电平有效。数字钟的基本原理方框图如下:图1.数字钟实现原理框图3.内部各功能模块描述:(1)小时输入信号有clk,其为分钟模块产生的脉冲,reset为重置按钮,daout为数据输出。(2)分Clk1为秒产
6、生的脉冲信号,Reset为重置信号,sethour为设置小时的信号,enhour为小时脉冲信号,当Reset为1时,系统恢复原始状态,每当clk1产生了60个脉冲信号时,形成一个小时脉冲,而sethour每按一下,产生一个小时脉冲,而daout为分钟的显示信号。(3)秒 Clk为时钟信号,当产生60个脉冲信号时,产生一个分钟脉冲信号,reset为重置信号,当reset为1时,系统恢复原始状态,而setmin按下时,同样也产生一个时钟脉冲信号。数字钟设计的电路原理图:图2. 数字钟的电路图4.VHDL 设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE
7、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 spea
8、ker:PROCESS(clk) BEGIN IF(clkevent and clk=1)THEN IF(dain=0000000)THEN speak=10)THEN count1=00;-count1为三进制加法计数器 ELSE count1=count1+1; 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)T
9、HEN lamp=010; ELSIF(count=10)THEN lamp=100; END IF; count=count+1; ELSE countNew,选择Vector Waveform File,单击OK。图6.4 建立波形文件2选择Edit-End Time选项,如图6.6所示,设定仿真时间宽度。图6.5 设置仿真时间3双击Name下的空白处,弹出Insert Nod or Bus对话框,单击Node Finder。图6.6 选择添加结点设置4如图6.7所示选定各个选择项。图6.7 选择结点5单击OK,完成引脚输入。图6.86加上输入信号后波形文件存盘。图6.9 波形运行仿真器。
10、在Processing菜单下选择StartSimulation项,直到Simulator was successful出现,仿真结束。完成波形如图所示。步骤5:引脚锁定选择AssignPinLocationChip,在跳出的窗口中的Node Name栏中用键盘输入半加器的端口名,如a、b等。如果输入的端口名正确,在右侧的Pin Type栏将显示该信号的属性。输入以后如下图,设定完成以后再运行一次程序。图6.11 引脚锁定(5)编程下载1)首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源2)下载方式设定。选择MAX+plusIIProgrammer选项,跳出下图左侧所示
11、的编程器窗口,然后选择OptionsHardware Setup硬件设置选项,其窗口图中左侧所示。在其下拉菜单中选ByteBlaster(MV)编程方式。此编程方式对应计算机的并行口下载通道,“MV”是混合电压的意思,主要指对ALTERA的各类芯核电压(如5V、3.3V、2.5V与1.8V等)的FPGA/CPLD都能由此下载。此项设置只在初次装软件后第一次编程前进行,设置确定后就不必重复此设置了图6.12 下载编译最后点击start按钮,进入下载模式,等待下载完成以后在试验箱上进行调试检测是否正确。2、实验箱显示(1)任意设置时间,让其从这一时间开始显示图6.13 设置时间(2)时间显示为24
12、进制,当时间显示到大23:59:59后将会从00:00:00开始显示图6.14 数字钟为24进制显示图6.15 时间跳变到00 00 00七、总结从开始接到设计题目到电路图的设计,再到报告文章的完成,每走一步对我来说都是新的尝试与挑战。在这段时间里,我学到了很多知识也有很多感受。当然在做的过程中也遇到过很多的麻烦,一些没有接触过的元件,它们的封装需要自己去书籍、网上搜索,在更新的时候会有一些错误,自己很难改正,只得求助老师,最后得以解决。这次毕业设计使我开始了自主的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每
13、一次的成功都会让我兴奋好一段时间。此次设计过程中,各种系统的适用条件,各种程序的选用标准,各种元件的安装方式,我都是随着设计的不断深入而不断熟悉并学会应用的。和同学的沟通交流更使我对设计有了新的认识也对自己提出了新的要求。课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,认真的对待每老师交代的任务,每一个任务都是一个锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。这些本是我工作后才会意识到的问题,通过这次课程设计让我提前了解了这些
14、知识,这是很珍贵的。这个课程设计的过程让我学习、工作的思路有了更为明朗的认识:它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。我曾经也做过简单的设计,但都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,如同井底之蛙跳上井沿过程中要有很好的团结合作意识和责任感,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。非常感谢学院能给我们提供这样的一个可以自己动脑、动手进行设计的机会,同时也大大加强了同学之间的沟通,以及学生与老师之间的交流,这是一个
15、放飞自我的平台,也是我们理想与实际结合的升华,我想学院给我们提供的这些,教会我们的这些不仅仅在现在有用,对于我们今后步入社会也是同样有用的。最后感谢周老师对我们的指导,以及同学们对我的帮助,使得实验能够顺利完成!附录:VHDL设计程序1、秒LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second ISPORT( clk,reset,setmin:STD_LOGIC; enmin:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO
16、0);END ENTITY second;ARCHITECTURE fun OF second ISSIGNAL 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,s
17、etmin) 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(count16#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=
18、+1+6,即作加6校正 END IF; ELSE -若count不小于16#60#(即count等于或大于16#60#) count=0000000; -count复0 END IF; -END IF(count16#60#) ELSIF(count16#60#)then -若个位计数未到1001则转此句再判 count=count+1; -若count16#60#则count加1 enmin_1=0after 100 ns; -没有发生进位 ELSE -否则,若count不小于16#60# count=0000000; -则count复0 END IF; -END IF(count(3 DO
19、WNTO 0)=1001) END IF; -END IF(reset=0)END PROCESS;END fun;2、分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
20、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,则异步清
21、零 count=0000000; ELSIF(clkevent 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#的个位转变为8421B
22、CD的容量 ELSE count=0000000;-count复0(有此句,则对无效状态电路可自启动) END IF; -END IF(count16#60#) ELSIF (count 16#60#) THEN count=count+1; -若count16#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 proces
23、s;END fun;3、时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 ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN daout=count; PROCESS(clk,reset) BEGIN I
24、F(reset=0)THEN count=000000; -若reset=0,则异步清零 ELSIF(clkevent and clk=1)THEN -否则,若clk上升沿到 IF(count(3 DOWNTO 0)=1001)THEN -若个位计时恰好到1001即9 IF(count16#23#)THEN -23进制 count=count+7; -若到23D则 else count=000000; -复0 END IF; ELSIF (count16#23#)THEN -若未到23D,则count进1 count=count+1; ELSE -否则清零 count=000000; END
25、IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0) END PROCESS;END fun; 4、主程序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
26、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(clkevent and clk=1)THEN IF(dain=0000000)THEN speak=10)THEN count1=00;-count1为三进制加法计数器 ELSE count1=count1+1; 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;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1