基于CPLD的数字钟_第1页
基于CPLD的数字钟_第2页
基于CPLD的数字钟_第3页
基于CPLD的数字钟_第4页
基于CPLD的数字钟_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、河南师范大学本科毕业设计ii基于cpld的数字钟摘 要本设计为一个基于cpld的多功能数字钟,具有时、分、秒计数显示功能,以24小时循环计数;具有时间校对、闹钟以及整点报时功能。本设计采用eda技术,以硬件描述语言vhdl为系统逻辑描述手段。在quartus全集成开发环境下,采用自顶向下的设计方法,由各个基本模块共同构建一个基于cpld的数字钟。系统主芯片采用altera公司max 系列的epm570t100c5n,由时钟模块、控制模块、计时模块、定时模块、显示以及报时模块组成。设计方案经编译和仿真后,可在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的显示,并可由外部按键输入进行数字钟的

2、校时、清零、设闹钟功能。关键词:数字钟;硬件描述语言;vhdl;cpld;动态扫描a digital clock based on cpldabstractthe design for a multi-functional digital clock, with a hours, minutes and seconds count display to a 24-hour cycle count; have proof functions and the whole point timekeeping function and set a alarm.the use of eda design

3、 technology, hardware-description language vhdl description logic means for the system design documents, in quartus tools environment, a top-down design, by the various modules together build a cpld-based digital clock.the main system chips used epm570t100c5n, make up of the clock module, control mo

4、dule, time module, data decoding module, display and broadcast module. after compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the hours, minutes and seconds respectively, using keys to modify, cleared, set a alarm.key wor

5、ds: digital clock; hardware description language; vhdl;cpld; dynamic scanning目 录摘 要iabstractii前 言11 方案选择及论证31.1方案的比较31.2 芯片的选择31.3 设计方案的概述42 数字钟总体设计方案52.1 数字钟的构成52.2 数字钟的工作原理62.3 数字钟的硬件电路设计73 单元电路设计83.1 分频模块电路设计与实现83.2 独立按键消抖模块103.3 计数模块设计与实现123.4 闹钟模块设计与实现153.5 整点报时模块设计与实现163.6 动态扫描显示模块设计与实现174 编译与

6、调试204.1 编译软件介绍204.2 编译与仿真204.3 实现与布局布线224.4 调试与下载配置225 实验结论与研究展望245.1 实验结论245.2 研究展望24结束语26参考文献27致 谢2828 前 言现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic,eda)技术。本设计采用vhdl硬件描述语言进行设计,vhdl主要用于描述数字

7、系统的结构、行为、功能和接口;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。asic是一种为专门目的而设计的集成电路,是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。cpld是asic的近亲,一般通过原理图、vhdl对数字系统建模,运用eda软件仿真、综合,生成基于一些标准库的网络表,配置到芯片即可使用。它与asic的区别是用户不需要介入芯片的布局布线和工艺问题,而且可以随时改变其逻辑功能,使用灵活。在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。因此,键输入是与软件结构密

8、切相关的过程。根据键盘的结构不同,采用不同的编码方法。但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。 钟表的数字化给人们的生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。eda

9、技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。美国altera公司的可编程逻辑器件采用全新的结构和先进的技术,加上quartus开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。eda技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软什,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片。本设计是利用vhdl硬件描述语言结合可编程逻辑器件进

10、行的,并通过数码管动态显示计时结果。数字钟可以由各种技术实现,如单片机等利用可编程逻辑器件具有其他方式没有的特点,它具有易学、方便、新颖、有趣、直观、设计与实验项目成功率高,理论与实践结合紧密,体积小、容量大、i/o口丰富、易编程和加密等特点,并且它还具有开放的界面、丰富的设计库、模块化的工具以及lpm定制等优良性能,应用非常方便。因此,本设计采用可编程逻辑器件实现。现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏

11、的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人。数字化的钟表给人们带来了极大的方便。近几年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。本设计主要研究基于cpld的数字钟,要求时间以24小时为一个周期,显示时、分、秒。具有校时、设闹钟及整点报时的功能,可以对时、分、秒进行单独校对,使其校正到标准时间,并能调整闹钟的时间,校对时间的时分秒的按键和设闹钟的时分秒的按键相同,通过另一按键来切换至校对

12、时间或是设闹钟,为保证计时的稳定及准确须由晶体振荡器提供时间基准信号。1 方案选择及论证1.1 方案的比较本时钟的设计具体有三种方法。一是通过单纯的数字电路来实现;二是使用单片机来控制实现;三是使用可编程逻辑器件(cpld/fpga)来实现。由于纯数字电路实现不仅造价很高、设计麻烦,且后期的调试与验证会有很多连线与布局的问题,此方法已经很不实用了,所以放弃此方法;而第二种和第三种方法均是采用一个主控芯片来控制时钟电路,再外接不同的模块来实现完整的功能,需进一步说明两种方法的不同。1单片机单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器cpu随机存储器ram、

13、只读存储器rom、多种i/o口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、a/d转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。2可编程逻辑器件可编程逻辑器件pld(programmable logic device) :pld是做为一种通用集成电路生产的,他的逻辑功能按照用户对器件编程来搞定。一般的pld的集成度很高,足以满足设计一般的数字系统的需要。这样就可以由设计人员自行编程而把一个数字系统“集成”在一片pld上,而不必去请芯片制造厂商设计和制作专用的集成电路芯片了。相比较而言,单片机一般用于操作控制,pld一般用于组合逻辑,功能

14、各不相同,但pld功能比普通的单片机更强、速度更快、价格也越来越便宜。并且pld更加高端一些,灵活性更强,近来发展很快,之后的电子技术发展pld的应用将会非常广泛。选择pld进行设计会对以后的专业发展有很大的帮助,所以选择第三种方法即采用可编程逻辑器件进行设计。1.2 芯片的选择目前使用比较广泛的可编程逻辑器件主要有cpld(complex programmable logic device)复杂可编程逻辑器件和现场可编程门阵列fpga(field programmable gate array)。cpld相比fpga功能相当并相对容易、成本较低。因此本设计使用的芯片是altera公司max

15、系列的epm570t100c5n,altera的max ii 系列cpld是有史以来功耗最低、成本最低的cpld。在所有cpld系列中,其单位i/o引脚的功耗和成本都是最低的。此芯片能满足本设计的要求,改进升级也比较方便。1.3 设计方案的概述本方案以cpld芯片为核心,将外接时钟信号送至cpld作为时钟基准信号和动态扫描信号。在芯片内部分别设计出数字钟的各个模块,如分频模块、计时模块、闹钟模块、整点报时模块和动态扫描模块等。将各位信号送出至数码管显示。本方案的电路比较简单,只用外接一个稳压电源为主控芯片和数码管供电,再接一个晶振和一个数码管即可。本设计的电路简单,但功能齐全,可以设置闹钟、时

16、间校对和整点报时,cpld的设计改动非常方便,只用改变程序设计出相应的内部模块就可以实现一些基本门电路的功能。根据需要可以增添日历、温度显示等功能,所以本设计具有很强的升级前景。2 数字钟总体设计方案2.1 数字钟的构成数字钟实际上是一个对标准频率( 1hz)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1hz时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图2.1所示为数字钟的一般构成框图。主要包括时问基准电路、计数器电路、控制电路、译码和显示电路。其中的控制逻辑电路是比较灵活多样的,不断完善它可以增强数字钟

17、的功能。控制开关调试和设闹秒计数六十进制分计数六十进制时计数二十四进制动态扫描显示晶振分频整点报时六位数码管图2.1 数字钟的设计框图控制开关有五个,分别为复位开关(用于系统复位清零)、设闹与时钟切换开关(用于设置闹钟和时钟的切换)、调秒开关(用于调整闹钟或时钟的秒位)、调分开关(用于调整闹钟或时钟的分钟位)、调时开关(用于调整闹钟或时钟的小时位)。晶振为24mhz石英晶体振荡器,产生稳定的频率为24mhz的时钟信号,接至芯片内的分频模块,分成1khz信号和1hz信号,1khz信号接至动态扫描模块作为扫描信号,1hz信号接至秒计数模块作为时钟基准信号。动态扫描模块输出时、分、秒的显示信号和位选

18、信号接至六位数码管,作为动态扫描显示信号。扫描的频率由分频电路从外接晶振分频得到,且六位数码管的电源有外接稳压电源提供。本设计的总体框架如图2.2所示。 图2.2 数字钟的总体框架2.2 数字钟的工作原理晶体振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器分别输出标准秒脉冲(1hz)和扫描信号(1khz)。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻l”的规律计数。计满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示。计时出现误差时,可以用校时电路校小时、校分或校秒。在控制信号中除了一般的校时信号外,还有时钟清零信号、

19、设闹与计时显示的切换信号。控制信号由独立按键输入并加有按键去抖电路。时基电路可以由石英晶体振荡电路构成,如果晶振频率为24mhz,经过24000000分频就可以得到秒脉冲信号。显示由六位七段数码管构成,通过动态扫描译码显示,可节省i/o资源。2.3 数字钟的硬件电路设计数字钟需外接24mhz的晶振为电路提供时钟基准,并外接按键控制电路功能,外接六位数码管显示,以及稳压电源模块为电路提供电源。硬件电路的框图如图2.3所示。稳压电路cpldepm570t100c5n五位按键晶振六位数码管图2.3 数字钟的硬件电路框架本电路的外接晶振采用24mhz的石英晶体振荡器,经分频后输出时钟基准和扫描时钟基准

20、;稳压模块采用ams1117/3.3三端稳压器,通过usb接口输入5v电压,经稳压器输出3.3v为cpld芯片和数码管显示提供电压;五位按键分别控制系统复位、计时与设闹的显示切换、秒调节、分钟调节和小时调节;六位数码管用于显示时钟。3 单元电路设计3.1 分频模块电路设计与实现晶体振荡器是构成数字式时钟的核心,振荡器的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟的走时准确及稳定。石英晶体的选频特性非常好,只有某频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且,振荡信号的频率与振荡电路中的r、c元件的数值无关。因此,这种振荡电路输出的是准确度极高的信号。然后再利用分频电

21、路,将其输出信号转变为秒信号和扫描信号,其组成框图如图3.1所示。晶振分频电路图3.1 秒信号产生电路框图本系统使用的晶体振荡器电路给数字钟提供了一个频率稳定准确的24mhz的方波信号,其输出至分频电路。分频电路的逻辑框图如图3.2所示。图3.2 分频电路模块分频电路的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport(clkin:in std_logic; clkout1:out std_logic; clkout1k:out std_logic)

22、;end;architecture behave of fenpin issignal clk1khz:std_logic;signal clk1hz:std_logic;begin process(clkin) variable count:integer range 0 to 1199; begin if clkinevent and clkin=1 then if count=1199 then clk1khz=not clk1khz; count:=0; else count:=count+1; end if; end if;end process; process(clk1khz)

23、variable count:integer range 0 to 499; begin if clkinevent and clkin=1 then if count=499 then clk1hz=not clk1hz; count:=0; else count:=count+1; end if; end if; end process; clkout1=clk1hz; clkout1k=clk1khz;end behave;此分频电路输出两种不同频率的信号,一个是频率为1khz的信号,接至去抖模块和动态扫描模块作为扫描信号;另一个是频率为1hz的信号,输出至秒计数模块作为时钟计时的秒基准

24、信号。当然秒信号必须非常精确,否则时钟会出现较大的误差,所以必须对秒信号进行测试,直至符合要求。3.2 独立按键消抖模块按键的闭合和释放的瞬间,输入的信号会有毛刺。如果不进行消抖处理,系统会将这些毛刺误以为是用户的另一次输入,导致系统的误操作。本模块的消抖电路采用的是计数法,实现方法是先判断是否有按键按下,如果有按键按下则延时一段时间,待抖动过去之后再读键值,如果仍为高电平,则确定有按键按下,然后产生一个有按键按下的信号。该模块有一个时钟输入端口,输入的时钟信号是分频模块出来的1khz的扫描信号;一个按键输入端口,用于存储当前键值;一个输出端口,用于输出有按键按下的信号。该模块的逻辑框图如图3

25、.3所示。图3.3 去抖逻辑模块该电路的vhdl程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudou isport(clk1k:in std_logic; numin:in std_logic; numout:out std_logic );end;architecture behave of qudou issignal tempnum:std_logic;signal counter:integer range 0 to 31;signal start:std_l

26、ogic;begin process(clk1k) begin if rising_edge(clk1k) then if start=0 then tempnum=0; numout=0; start=1; else if numin/=tempnum then tempnum=numin; counter=0; else if counter=31 then numout=numin; counter=0; else counter=counter+1; end if; end if; end if; end if; end process;end;这段程序的作用是实现按键消抖,原理是当有

27、按键按下的时候,tempnum记录当前的键值,counte开始计数,当counter不为31时,内部计数器计数,从0计数至31,当键值保持31个扫描周期不变时,由numout读出此键值。如果在计数不满31时键值发生跳变,则说明此键值只是抖动,不读此键值。一旦计数完成,抖动已经过去,就不会再发生重键现象了,这样就去除了抖动。按键消抖是电路的一个必要模块,在软件仿真时其作用可能不太明显,但在下载后运行调试时却是必不可少的,由于因为人们进行按键的时间不是固定的,因此消抖的时间也要视实际情况而进行改动,这样才能更加符合人们的使用习惯。3.3 计数模块设计与实现1秒、分计数模块秒、分计数均为六十进制,所

28、以只用设计一个六十进制计数器模块即可,其逻辑框图如图3.4所示。图3.4 秒(分)计数模块框图输入端口rst是异步清零信号;clk是输入脉冲信号。dout7.0是秒(分)时钟的输出,高四位是十位数,低四位是个位数;co是进位输出端口,当秒(分)计数到“01011001”时输出高电平,其他时候输出低电平。秒(分)计数模块的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter_60_bcd isport(rst,clk:in std_logic; dout:buffe

29、r std_logic_vector(7 downto 0); co:out std_logic);end;architecture behave of counter_60_bcd isbegin process(clk,rst) begin if rst=1then dout=00000000; co=0; else if clkevent and clk=1then if dout(7 downto 0)=01011001then dout=00000000; co=1; elsif dout(3 downto 0)=1001then dout=dout+0111; co=0; else

30、 dout=dout+1; co=0; end if; end if; end if; end process;end behave; 2小时计数模块小时计数模块为二十四进制计数器,其逻辑框图如图3.5所示。图3.5 时计数模块框图输入端口rst是异步清零信号;clk是分脉冲输入端口;dout7.0是小时的输出,高四位是十位数,低四位是个位数;co是进位输出端口,当时计数到“00100011”时输出高电平,其他时候输出低电平。时计数模块的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;e

31、ntity counter_24_bcd isport(rst,clk:in std_logic; dout:buffer std_logic_vector(7 downto 0); co:out std_logic);end;architecture behave of counter_24_bcd isbegin process(clk,rst) begin if rst=1then dout=00000000; co=0; else if clkevent and clk=1then if dout(7 downto 0)=00100011then dout=00000000; co=1

32、; elsif dout(3 downto 0)=1001then dout=dout+0111; co=0; else dout=dout+1; co=0; end if; end if; end if; end process;end behave; 闹钟和计时的时、分、秒都是使用以上计数模块进行显示和存储的,此方法可以节省芯片的内部资源占用量,只用进行简单的模块之间的连线就可生成完整的闹钟模块或是时钟模块。并且以上的编程方法非常节省资源,即当个位计数至“00001001”时,下一脉冲直接加7,变成“00010000”,便完成了二进制向十位的进位,比十进制转换成十六进制要简单的多。因为进行

33、显示时用的是二进制代码,使用十进制计数虽然方便,但在进行译码显示是还要先将十进制转换成二进制再进行译码,很不方便,所以本设计均使用二进制计数。3.4 闹钟模块设计与实现本闹钟模块是将存储的时间与当前时间比较,当两个时间相同时,输出高电平,驱动扬声器。该模块逻辑框图如图3.6所示。图3.6 闹钟模块框图闹钟模块输入为时钟的输出h_out7.0、m_out7.0、s_out7.0,以及存储的闹钟时间h7.0、m7.0、s7.0;将两个时间比较,相同时dout输出高电平使蜂鸣器响铃。闹钟模块程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.

34、std_logic_unsigned.all;entity alarm isport(h_out,m_out,s_out,h,m,s:in std_logic_vector(7 downto 0); dout:out std_logic);end;architecture behave of alarm issignal x1:std_logic_vector(23 downto 0);signal x2:std_logic_vector(23 downto 0);begin x1=h_out&m_out&s_out; x2=h&m&s; process(x1,x2) begin if x1=

35、x2 or x1=x2-1 or x1=x2-10 then dout=1; else dout=0; end if; end process;end behave;3.5 整点报时模块设计与实现整点报时的原理是当分和秒均为0时,输出脉冲使闹铃报时。本模块设计了一个比较器,当分和秒都为0时,闹钟报时;否则闹钟不报时。该模块逻辑框图如图3.7所示。图3.7 整点报时模块框图整点报时模块输入为分钟的数据m7.0和秒的数据s7.0,当m7.0和s7.0都为“00000000”时,dout输出高电平时使闹钟报时。该模块程序如下:library ieee;use ieee.std_logic_1164.

36、all;use ieee.std_logic_unsigned.all;entity timer isport(m,s:in std_logic_vector(7 downto 0); dout:out std_logic);end;architecture behave of timer issignal x:std_logic_vector(15 downto 0);begin x=m&s; process(x) begin if x=0000000000000000 or x=0000000000000001 then dout=1; else dout=0; end if; end p

37、rocess;end behave; 此整点报时模块非常简单,只是一个八位比较器,当分和秒都为0时,以上所示,驱动蜂鸣器响2秒,也可以将蜂鸣器改成音乐片,当整点时便响起音乐。还可根据需要延长或缩短响铃的时间长短。3.6 动态扫描显示模块设计与实现动态扫描电路将计数器输出的8421bcd码转换为数码管所需要的逻辑状态,并且输出数码管的片选信号和位选信号。所谓动态扫描显示方式是指在显示某一位led显示块的数据的时候,让其它位不显示,然后再显示下一位的数据,同时关闭其他显示块。这样做可以使每一个显示块显示与自己相对应的数据。只要保证每一位显示的时间间隔不要太长,利用人眼的视觉暂留的现象,就可以造成各

38、位数据同时显示的假象。一般每位的显示时间大约是1-l0ms。动态扫描逻辑框图如图3.8所示。图3.8 动态扫描显示模块框图该模块的输入端口clk1k是频率为1khz的扫描时钟,故每位显示的时间为1ms,需要扫描6个数码管,故显示间隔为6ms。输入时钟信号由分频模块提供;输入端口h_out7.0、m_out7.0、s_out7.0分别为时、分、秒的显示数据;输出端口display0.6为动态输出扫描的数据;输出端口en0.5为数码管的片选信号。该模块程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.

39、all;entity display isport(clk1k:in std_logic; s_out,m_out,h_out:in std_logic_vector(7 downto 0); en:out std_logic_vector(0 to 5); display:out std_logic_vector(0 to 6) );end;architecture edcoder of display issignal counter:integer range 0 to 5;signal num:std_logic_vector(3 downto 0);begin process(clk

40、1k) begin if rising_edge(clk1k)then if counter=5 then counter=0; else counteren=011111; numen=101111; numen=110111; numen=111011; numen=111101; numen=111110; numen=000000;numdisplaydisplaydisplaydisplaydisplaydisplaydisplaydisplaydisplaydisplaydisplay=0000000; end case; end if; end process;end;动态扫描方

41、式不仅节约了大量的i/o口,而且也节约了软件资源。因为如果使用每个数码管单独显示的话,六个数管将需要68个i/o口;并且每个数码管都需要相应的译码电路模块,很多软件资源就被浪费掉了。所以动态扫描模块是非常实用的,在后期升级时,如果需要显示年、月、日及温度等信息,则可将此模块换成lcd液晶模块,同样非常节省i/o口,并能显示较多的信息。4 编译与调试4.1 编译软件介绍本设计使用的芯片是altera公司的max 系列cpld,因此设计的编译和调试要使用altera公司的开发工具quartus 。quartus 是altera公司的综合性pld开发软件,支持原理图、vhdl、veriloghdl以

42、及ahdl(altera hardware description language)等多种设计输入形式,内嵌有自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整pld设计流程。是一个完全集成化、易学易用的可编程逻辑设计环境,可以在多个平台上运行。quartus 具有以下主要模块:1设计输入 quartus 软件中的工程由所有设计文件和与设计有关的设置组成。用户可以建立包括altera 宏功能模块、参数化模块库(lpm)函数和知识产权函数(ip)再内的设计。2综合 用户可以利用编辑器中的analysis&synthesis模块综合vhdl文件或verilog文件,也可以使用其他综合工具

43、进行综合,然后生成edf网表文件或vqm文件。3仿真 利用仿真器进行时序仿真和功能仿真。可以仿真整个设计,也可以仿真设计中的任何部分,还可以使用第三方仿真工具进行仿真。4布局布线利用quartus fitter,执行布局布线。通过analysis&synthesis建立的数据库,将工程的逻辑和时序要求与器件的可用资源相匹配。5时序分析 利用timing analyzer对设计进行时序分析,帮助满足设计的时序要求。在默认情况下,自动生成时序信息以供分析、调试和验证设计的时序性能;还可以进行最优时序分析,提供最佳的时序结果,从而得到外部信号的时钟至引脚的延时。4.2 编译与仿真一般说来,一个比较大

44、的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之问的接口,然后各个模块再细分去具体实现,这就是top todown(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。cpld/fpga系统设计的工作流程如图4.1所示。系统划分vhdl代码或图形方式输入编译器代码级功能仿真仿真综合库综合器适配前时序仿真cpld/fpga实现适配报告asic实现适配后时序仿真器件编程文件适配后仿真模型适配器图

45、4.1 cpld/fpga系统设计流程前面已经进行了vhdl代码输入,在analysis&synthesis综合器中进行编译和综合正确无误。之后进行功能仿真和时序仿真。进行时序仿真和功能仿真时,可以使用quartus 自带的仿真工具,也可以使用第三方的仿真工具进行仿真,本设计使用自带的仿真工具,设置仿真属性,建立波形矢量文件用于存储仿真波形;选择generate functional simulation netlist命令产生功能仿真网表文件;之后再选择start simulation命令进行仿真 ,仿真运行结束后,产生仿真报告及输出波形文件。使用引脚规划器(pin planner)进行引脚

46、分配,本设计的引脚分配图如图4.2所示。图4.2 芯片引脚分配图4.3 实现与布局布线各模块均通过编译综合,生成相应的编译报告,再将各模块连接起来在进行总体的编译和综合,综合结果的本质是一些由与、或、非门,触发器,ram等基本逻辑单元组成的逻辑网表,它与芯片的实际的配置情况还有较大差距,因此须将综合输出的逻辑网表适配到具体的cpld期间上进行验证,这个过程就叫做实现过程。在实现过程中最主要的过程是布局布线(par,place and route);所谓布局(place)是指将逻辑网表中的硬件原语或者底层单元合理地适配到cpld内部的固有硬件结构上;所谓布线(route)是根据布局的拓扑结构,利

47、用cpld内部的各种连线资源,合理正确的连接各个元件的过程。4.4 调试与下载配置经上述一系列的编译、综合、分析、验证后证明此设计可以正确运行,最后的步骤就是在线调试或者将生成的配置文件写入芯片中进行测试。本设计采用jtag编程方式,可以进行在系统的编程与调试,将jtag的四个引脚分别与cpld芯片的相应引脚相连进行下载验证和调试,jtag的四个引脚分别为tms、tck、tdi、tdo,分别为模式选择、时钟、数据输入和数据输出线。jtag与cpld的连接方式如图4.3所示。图4.3 cpld与jtag编程连接观察数字钟运行是否正常再进行相应的调整,在调试中发现按键的反应有一定的延迟,感觉是去抖

48、的扫描时间过长造成的,便将去抖模块的扫描时间减小,再下载调试发现此问题解决。再不断的进行测试以验证设计是否还有瑕疵,慢慢进行改正。本设计采用了资源丰富的可编程逻辑器件,整个设计全部vhdl来编写,使得本系统的软件系统很大而硬件结构十分简单,因此在软硬件都基本调通的情况下,系统的软硬件联调难度不是很大。在通过了quartus 软件的编译后,再经功能仿真和定时分析,在确认程序没问题后,直接下载到芯片进行硬件调试,单独调试好每一个模块,然后再连接成一个完整的系统调试。调试时,使用逻辑分析仪,分析cpld输入输出,可以发现时序与仿真结果是否有出入,便于检查电路中的故障。cpld的时钟频率很高,对周围电

49、路的一定影响。我们采取了一些抗干扰措施。例如引线尽量短,减少交叉,每个芯片的电源与之间都有接有去耦电容,数字地与模拟分开。实践证明,这些措施对消除某些引脚上的“毛刺”及高频噪声起到了很好的效果5 实验结论与研究展望5.1 实验结论将设计程序下载到电路板上运行调试后,最终结果与预期效果基本一致,时、分、秒能够正常计数并能由控制键分别显示,整点报时和闹钟响铃功能正常。在此次的数字钟设计过程中,更进一步地熟悉了有关数字电路的知识和具体应用。学会了利用quartus软件进行原理图的绘制,硬件描述语言vhdl的编写,程序的仿真等工作。并能根据仿真结果分析设计的存在的问题和缺陷,从而进行程序的调试和完善。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如在对具体模块的仿真的过程中,往往没有考虑到整体设计的层面以及与上下模块接口的设计。再加上器件对信号的延时等问题,实际下载到电路板上后会出现一系列的问题,因此仿真图和电路连接图还是有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论