收藏 分销(赏)

万年历的设计与实现.doc

上传人:丰**** 文档编号:4057180 上传时间:2024-07-26 格式:DOC 页数:41 大小:92.54KB
下载 相关 举报
万年历的设计与实现.doc_第1页
第1页 / 共41页
万年历的设计与实现.doc_第2页
第2页 / 共41页
万年历的设计与实现.doc_第3页
第3页 / 共41页
万年历的设计与实现.doc_第4页
第4页 / 共41页
万年历的设计与实现.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、万年历的设计与实现摘要:本设计为一个多功能的万年历,具有年、月、日、时、分、秒计数显示功能,以24小时循环计数,具有校对功能。本设计采用EDA技术,以硬件描述语言verilog HDL和VHDL为系统逻辑描述手段设计文件,在Quartus II工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于KH-310开发工具的万年历。系统主芯片采用EP1C12Q240C8,由主程序和BCD模块组成.经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统通过控制能够完成年、月、日和时、分、秒的分别显示,由按键输入进行数字钟的校时、切换、扫描功能.关键字:VHDL Verilog

2、HDL EDA 万年历 目录一、绪论。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.11.1选题背景。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。1 1.2课题相关技术的发展.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.11.3课题研究的必要性。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。21。4课题研究的内容。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。3二、EDA技术.。.。.。.。.。.。.。.。.。.。.。.。.

3、。.。.。.。42。1 EDA概述。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。42。2什么是EDA.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。42。3 EDA的特点。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。5三、FPGA简介。.。.。.。.。.。.。.。.。.。.。.。.。73.1 FPGA概述.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。73.2 FPGA开发编程原理。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。73。

4、3FPGA基本结构。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。83。4 FPGA系统设计流程.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。10四、万年历设计方案.。.。.。.。.。.。.。.。.。.。.。.。.。.。.134。1万年历的原理。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。134。2 实验程序。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。134。3 实验连接.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.344.4 实验仿真与实现

5、。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。35五、实验结论与研究展望。.。.。.。.。.。.。.。.。375。1实验结论。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。375。2研究展望.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。37致谢。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。38参考文献。.。.。.。.。.。.。.。.。.。.。.。.。.。.39绪论1.1选题背景20世纪末,数字电子技术飞速发展,有力的推动了社会生产力的发展和社会信息

6、化的提高.在其推动下,数字技术的应用已经渗透到人类生活的各个方面。从计算机到手机,从数字电话到数字电视,从家用电器到军用设备,从工业自动化到航天技术,都尽可能的采用了数字电子技术。而现代电子设计技术的核心是EDA技术. 本设计采用的VHDL和Verilog HDL是两种应用最为广泛硬件描述语言。前者具有很强大的功能,覆盖面广,描述能力强,支持门级电路的描述,也支持以寄存器、存储器、总线及其运算单元等构成的寄存器传输级电路的描述,还支持以行为算法和结构的混合描述为对象的系统级电路的描述.后者可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合、仿真验证和时序分析。而采用Verilog H

7、DL进行电路设计的最大优点就是设计与工艺无关性。本设计将从EDA中FPGA嵌入式应用开发技术与数字钟技术发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPGA的芯片系统与设计万年历的设计与实现的必要性。1.2课题相关技术的发展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低.同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。美国Alter

8、a公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计.EDA技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。最终形成集成电子系统或专用集成芯片的一门新技术。1。3课题研究的必要性如今的时代是科技是第一生产力的时期.因此,新产品、新技术层出不穷,电子技术的发展更

9、是日新月异.在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人.数字化的钟表给人们带来了极大的方便.近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能,样式新颖已经成为数字钟的发展潮流。1。4 课题研究的内容本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示年、月、日、时、分、秒,可以对年、月、日、时、分及秒进行单独校对,使其校正到标准时间。因此,研究数字钟及扩大其应用,有着非常现实的意义。

10、二、EDA技术2。1 EDA概述EDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分。 “EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的1。”2.2 什么是EDA20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功.在电子技术设计

11、领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA技术就是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成设计文件,自动地完成逻辑编译、化简、分割、综合、优化、仿真,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路A

12、SIC(Application Specific Integrated Circuit)芯片中,实现既定的电子电路设计功能1。EDA技术使得电子电路设计者的工作仅限于利用硬件描述语言和EDA软件平台来完成对系统硬件功能的实现,极大地提高了设计效率,缩短了设计周期,节省了设计成本。 今天,EDA技术已经成为电子设计的重要工具,无论是设计芯片还是设计系统,如果没有EDA工具的支持,都将难以完成的.EDA工具已经成为现代电路设计师的重要武器,正在发挥着越来越重要的作用. 2。3 EDA的特点(1) 高层综合和优化。为了能更好地支持自顶向下的设计方法,现代的EDA工具能够在系统进行综合和优化,这样就缩

13、短了设计的周期,提高了设计效率.(2)采用硬件描述语言进行设计.采用硬件描述语言进行电路与系统的描述是当前EDA技术的另一个特征.与传统的原理图设计方法相比,HDL语言更适合描述规模大的数字系统,它能够使设计者在比较抽象的层次上对所设计系统的结构和逻辑功能进行描述。采用HDL语言设计的突出优点是:语言的公开性和利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用,交流,保存和修改等。目前最常用的硬件描述语言有VHDL和Verilog HDL,它们都已经成为IEEE标准。(3)开放性和标准化。现代EDA工具普遍采用标准化和开放性框架结构,任何一个EDA系统只要建

14、立了一个符合标准的开放式框架结构,就可以接纳其他厂商的EDA工具仪器进行设计工作.这样就可以实现各种EDA工具的优化组合,并集成在一个易于管理的统一环境下,实现资源共享。三、FPGA简介3。1 FPGA概述“FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点.2”3。2FPGA开发编程原理 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样

15、一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构.FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块.“FPGA的逻辑是通

16、过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程2。”3.3 FPGA基本结构FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOBI/O Block)和互连资源(IRInterconnect Res

17、ource)2.可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。(1) CLB是FPGA的主要组成部分。它主要由逻辑函数发生器、触发器、数据选择器等电路组成.CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G 、F和H.G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数

18、发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G和F,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能实现3输入变量的各种组合函数.这3个函数发生器结合起来,可实现多达9变量的逻辑函数.CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。CLB中的逻辑函数发生器F和G均为查找

19、表结构,其工作原理类似于ROM。F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制.(2) 输入/输出模块IOB.IOB提供了器件引脚和内部逻辑阵列之间的连接.它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成.每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器.缓冲器的输出分成两路:一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发

20、器,再送到数据选择器。通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器.当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器.IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通Vcc、地线或者不接通,用以改善输出波形和负载能力。(3) 可编程互连资源IR。可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。IR主要由许多金属线段构成,

21、这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。3.4FPGA系统设计流程一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOP DOWN(自顶向下)的设计方法.目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA系统设计的工作流程如图22所示.图3.1FPGA系统设计流程设计准备设计输入原理图硬件描述语言波形图设计处

22、理优化、综合适配、分割布局、布线设计完成器件编程功能仿真时序仿真器件测试 流程说明:1。工程师按照“自顶向下”的设计方法进行系统划分。2。输入verilog HDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。3.将以上的设计输入编译成标准的verilog HDL文件.4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。5。利用综合器对verilog HDL源代码进行综合优化处理

23、,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成.6。利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一步骤。7。利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。8。在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。根据适配后的仿真模型,可以进行

24、适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改verilog HDL源代码或选择不同速度和品质的器件,直至满足设计要求。最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。四、万年历总体设计方案4。1 万年历原理 设计原理如图4。1所示:基准时钟置数按键控制按键显示动态显示译码计数器 图4。1 设计原理图计数器在正常情况下是对1HZ的频率计数,在调整时间状况下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决定调整时、分、秒;置数按键按下时

25、,表示相应的调整块要加一,如要对小时调整时,显示时间的LED管将闪烁且当置数按键按下时,相应的小时显示要加一。动态显示模块是对计数器的计数进行译码,送到LED显示。4。2 实验程序(1) Clock模块Library ieee;use ieee。std_logic_1164.all;use ieee。std_logic_unsigned。all;entity Clock is port( mode, set, clr, clk ,k:in std_logic; seg7, segctr :out std_logic_vector(7 downto 0) );end entity;ARCHITE

26、CTURE arch OF Clock ISsignal state: std_logic_vector(1 downto 0);signal Hour, Min, Sec,Year,Mon,Day,d: std_logic_vector(5 downto 0);signal BCDH, BCDM, BCDS,BCDN,BCDY,BCDR: std_logic_vector(7 downto 0);signal segDat: std_logic_vector(3 downto 0);signal blink: std_logic_vector(2 downto 0);signal set_r

27、eg, blink_clk: std_logic; component BCD port(DataIn : in std_logic_vector(5 downto 0); BCDOut : out std_logic_vector(7 downto 0) ); end component;BEGIN process(mode) begin if (clr=1) then state=00”; else if (modeevent and mode=1) then state=state+1; end if; end if; end process; process(state, blink_

28、clk) begin case state is when ”00” = blink0); when ”10 = blink0); when 11 = blink=(0=blink_clk, others=0); end case; end process; process(Mon, Year,d)begin case Mon is when 000001” = d d d=011101; when ”011000 = d=011101”; when ”011100” = d=”011101; when 100000” = d=011101”; when 100100 = d=011101”;

29、 when 101000” = d=011101”; when 101100” = d=011101”; when ”110000 = d d d=”011101”; when ”111100” = d=011101”; when others = d d=011111; when ”000100 = d=”011110; when 000101” = d=”011111”; when 000110” = d=”011110”; when ”000111” = d d d=011111; when ”001011 = d=”011110”; when 001100” = d=”011111”;

30、 when others = d=”011110”; end case;end process;process(clk)variable blink_cnt: std_logic_vector(13 downto 0);begin if (clr=1) then blink_clk0); blink_clk=not blink_clk; else blink_cnt:=blink_cnt+1; end if; end if; end if; end process;process(clk, state)variable clk_cnt: std_logic_vector(16 downto 0

31、);begin if (clr=1) then Hour=000000”; Min=”000000”; Sec=000000”; Year=”000000; Mon if (clk_cnt=”11000011010011111”) then clk_cnt:=(others=0); if (Sec=59) then Sec=(others=0); if (Min=59) then Min0); if (Hour=23) then Hour=(others=0); if (Day=d) then Day=”000001”; if (Mon=12) thenMon=”000001”;if (Yea

32、r=63) thenYear=”000001”; else Year=Year+1; end if; else Mon=Mon+1; end if; else Day=Day+1; end if; else Hour=Hour+1; end if; else Min=Min+1; end if; else Sec=Sec+1; end if; else clk_cnt:=clk_cnt+1; end if;when 01 = if(k=1)then if (set=1) then if set_reg=0 then set_reg=1; if (Year=63) then Year=”0000

33、01”; else Year=Year+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Hour=23) then Hour=(others=0); else Hour=Hour+1; end if; end if; else set_reg=0; end if; end if;when ”10” = if(k=1)then if (set=1) then if set_reg=0 then set_reg=1; if (Mon=12) then M

34、on=”000001”; else Mon=Mon+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Min=59) then Min if(k=1)then if (set=1) then if set_reg=0 then set_reg=1; if (Day=d) then Day=”000001”; else Day=Day+1; end if; end if; else set_reg=0; end if; else if (set=1) then if set_reg=0 then set_reg=1; if (Sec=59) then Sec=(others=0); else Sec=Sec+1; end if; end if; else set_reg=0; end if; end if; end case; end if; end if; end process; HBCD : BCD port map(Hour, BCDH); MBCD : BCD port map(Min, BCDM); SBCD : BCD

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服