《EDA技术及应用》课程设计基于VHDL数字时钟的设计与实现_第1页
《EDA技术及应用》课程设计基于VHDL数字时钟的设计与实现_第2页
《EDA技术及应用》课程设计基于VHDL数字时钟的设计与实现_第3页
《EDA技术及应用》课程设计基于VHDL数字时钟的设计与实现_第4页
《EDA技术及应用》课程设计基于VHDL数字时钟的设计与实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、装 订 线2008-2009学年第 一 学期 物电 学院期末考试卷 eda技术及应用 学号: 200672020240 姓名: 班级: 2006级电子(2)班 成绩:评语:(考试题目及要求)1. 设计一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分种(2位)、秒(2位)。具有整点报时、时间调整功能。也可设计成十二小时计时方案(am,pm)。具有美观、清晰、人性化的显示界面设计,走时精度不劣于3秒/月。2. 设计条件:vhdl语言,maxplusii开发工具,epm7128可编程逻辑芯片,蜂鸣器,20mhz时钟源,8位七段数码管,128x32像素单色液晶显示屏。3. 设计报告

2、至少应包含这些内容:系统方案设计、显示界面设计、程序设计思路,电路设计框图、电路图,选用器件的功能、性能、使用方法介绍以及接口时序分析,有详细注释的源程序清单以及程序分析,结果说明与描述(最好附照片),芯片资源占用率及程序优化度分析,芯片管脚分配与连线说明,基于时序图的功能仿真分析,在线测试方法、测试数据与测试结果,走时误差分析与功能、性能偏离分析,设计总结,参考文献。基于vhdl数字时钟的设计与实现作者姓名: 学 号:专 业:电子信息工程指导老师: 完成日期:2008年12月29日基于vhdl数字时钟的设计与实现摘要:随着eda技术的发展和应用领域的扩大与深入,eda技术在电子信息、通信、自

3、动控制及计算机应用领域的重要性日益突出。eda技术就是依赖功能强大的计算机,在eda工具软件平台上,对以硬件描述语言vhdl为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能。本文介绍了基于vhdl硬件描述语言设计的多功能数字时钟的思路和技巧。关键词:数字时钟、vhdl、max+plus引言:vhdl硬件描述语言在电子设计自动化(eda)中扮演着重要的角色,它出现极大的改变了传统的设计方法、设计过程乃至设计观念。由于采用了“自顶向下”(top-down)的全新设计方法,使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的

4、思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期。这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。vhdl主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的外,vhdl的语言形式和描述风

5、格与句法十分类似与一般的计算机高级语言。vhdl程序结构特点是将一个电路模块或一个系统分成端口和内部功能算法实现两部分。对于一个电路模块或者数字系统而言,定义了外部端口后,一旦内部功能算法完成后,其他系统可以直接依据外部端口调用该电路模块或数字系统,而不必知道其内部结构和算法。一、系统设计方案1、设计任务与要求 设计一个数字时钟,具有按秒走时功能,能够分别显示小时(2位24小时)、分种(2位)、秒(2位)。具有整点报时、时间调整功能。也可设计成十二小时计时方案(am,pm)。具有美观、清晰、人性化的显示界面设计,走时精度不劣于3秒/月。2、设计条件及选用器件说明软件:vhdl语言,maxplu

6、sii开发工具硬件:epm7128可编程逻辑芯片,蜂鸣器,20mhz时钟源, 128x32像素单色液晶显示屏。2.1 maxplusii开发工具max+plusii界面友好,使用便捷,被誉为业界最易学易用的eda软件。它支持原理图、vhdl和verilog语言文本文件,以及波形与edif等格式的文件作为设计输入,并支持这些文件的混合设计。max+plusii具有门级仿真器,可以进行功能仿真和时序仿真,能够产生精确的仿真结果。2.2 epm7128可编程逻辑芯片 本系统选用epm7128slc84-15芯片,此芯片是max7000s系列器件,采用08m cmos eprom技术制造。是高密度、高

7、性能的cmos epld (可擦除可编程的逻辑器件)器件。它分为8个逻辑阵列块(lab),每一lab又分为16个宏单元。其宏单元由逻辑阵列、乘积项选择矩阵和可编程触发器三个功能块组成。它共有2500个可用门,128个宏单元组成。它的4个专用输入,既可以作为通用输入,也可以作为每个宏单元和io引脚的高速、全局控制信号, 如时钟(clock)、清除(clear)和输出(output enable)等。逻辑阵列实现组合逻辑,给每个宏单元提供5个乘积项。“乘积项选择矩阵”分配这些乘积项作为到“或” 门和“异或” 门的主要逻辑输入,以实现组合逻辑函数,或者把这些乘积项作为宏单元中触发器的辅助输入。2.3

8、 128x32像素单色液晶显示屏 1.中文液晶显示模块(ocmj128x32)的引脚说明引脚名称方向说明其它1vled+i背光电源正极(led+5v)2vled-i背光电源负极(led-5v)3vssi地4vddi(+5v)5reqi请求信号,高电平有效。6busyo应答信号=1:已经收到数据并正在处理中 =0:模块空闲,可以接受数据7-14db0db7i数据0数据72.用户命令格式(1)实验用液晶显示器模块(ocmj)命令帧分为操作码及操作数两部分。(2)字符命令:1、显示国标汉字,2、显示8x8ascii字符,3、显示8x16ascii字符 图形显示命令:4、显示位点阵,5、显示字节点阵

9、屏幕控制命令:6、清屏,7、上移,8、下移、9、左移、10、右移(3)命令帧 1)显示显示8x8ascii字符 命令格式:f1 xx yy as 该命令为4字节命令(最大执行时间为0.8ms,ts2=0.8ms),其中 xx:为以汉字为单位的屏幕行坐标值,取值范围00到0f。 yy:为以汉字为单位的屏幕列坐标值,取值范围00到1f。 as:坐标位置上要显示的ascii字符码。 2)显示显示8x16ascii字符 命令格式:f9 xx yy as 该命令为4字节命令(最大执行时间为1.0ms,ts2=1.0ms),其中 xx:为以汉字为单位的屏幕行坐标值,取值范围00到0f。 yy:为以汉字为单

10、位的屏幕列坐标值,取值范围00到1f。 as:坐标位置上要显示的ascii字符码。3)接口时序说明编号名称单位最小值最大值说明1trus0.4-数据线上数据稳定时间2tbus220最大模块响应时间3trtus11-最小req保持时间4ts1us2045最大数据接收时间5ts2us-0.1-30最大命令指令处理时间3、设计思路 本系统采用自顶向下的模块化设计方法,将数字时钟化分为多个模块:分频器模块,时、分、秒计数五个模块、数据选择模块、译码显示和整点报时模块。系统原理框图如下: (1)为本系统提供的时钟信号源频率为20mhz,而秒计数器的计数时钟信号为1hz的标准信号,数据选择器和显示驱动的时

11、钟信号为1mhz左右的时钟信号。因此,需将时钟信号源做多次分频,最终得到不同频率的时钟信号。 (2)时、分、秒计时模块采用六进制、十进制和二十四进制计数器共同构成,本系统采用异步进位计数法,1hz的计数时钟信号就是秒个位信号,高位的计数时钟为低位的进位信号。当秒个位计时器为9时,当系一个时钟到来时秒个位计数器清零同时产生一个进位信号,此信号作为秒十位的时钟信号,以后类同。(3)数据选择模块将需显示的数据以扫描的方式送到显示器,要显示的字符共有10个,因此需设计一个十进制计数器,来选择显示数据。(4)译码显示驱动模块,需要将秒、分和小时的每一位输出信号输入至译码电路来得到相应的显示信息,通过十进

12、制计数器来控制位译码器。分频器 六进制计数器十进制计数器十进制计数器六进制计数器二十四进制计数器数据选择器显示驱动20mhz1hz置数控制器ld液晶屏reqdatabusyc1c2c3c4蜂鸣器co数字时钟原理框图 4、设计方案 本系统可采用24小时计时方式,即当计时到23小时59分59秒时清零;同时也可采用12小时计时方式,即当计时到11小时59分59秒时清零,同时上午与下午之间切换。为了具有美观、清晰、人性化的显示界面,因此本系统选择第二种方案。显示界面如下图:23365624小时计时方案界面a/pm 12365612小时计时方案界面二、各模块详细设计 本问设计时,首先用vhdl语言编写各

13、个功能模块,分别在max+plus开发环境下编译、仿真,然后再用顶层文件将各功能模块连接起来。1、分频器模块 时钟控制电路的输入信号为20mhz的时钟信号,为得到1hz的信号,需将20mhz的信号经过模为20000和模为1000的分频器最终得到秒的输入信号,如果只经过20000分频则得到数据选择器与译码显示驱动电路的输入信号。其vhdl程序实现如下:-1000分频器process(clk) begin -clk为20mhz的时钟信号if rising_edge(clk) then if cnt0=x1f3 then -cnt0为500进制计数信号 cnt0=x000;clk_num1=not

14、clk_num1; -每记满500clk_num1取反一次 else cnt0=cnt0+1; clk_num1=clk_num1;end if;end if;end process;process(clk) -20000分频器 beginif rising_edge(clk_num1) then -分频方式同上 if cnt00=x270f then cnt00=x0000;clk_num2=not clk_num2; else cnt00=cnt00+1;clk_num2=clk_num2;end if; end if;end process;2、计数置数模块 计数器又分为五个模块,六进制

15、计数器和十进制计数器个两个再加一个二十四进制计数器。采用异步时钟,十进制计数器每记满一次产生一个进位信号,作为六进制计数器的时钟信号,后面以此类推。置数一控制端ld,当ld=1时为秒十位置数;当ld=2时为分个位置数;当ld=3时为分十位置数;当ld=4时为时个位置数;当ld=5时为时十位置数。所置数由一时钟脉冲为1hz的十进制计数器滚动置数。(1)其vhdl程序实现如下:-秒个位process(clk_num2) beginif clk_num2event and clk_num2=1 then - dout12为秒个位计数信号 if ld=000 then -当ld=0时正确计数 if d

16、out12=1001 then dout12=0000;c1=1; -当个位计数到9时清零, else dout12=dout12+1;c1=0; -同时产生一个进位c1 end if; end if;end if;dout1(3 downto 0)=dout12; - dout1(3 downto 0)为输出end process; -端低四位-秒十位process(c1,ld) beginif ld=001 then -当ld=1时给秒十位置数 dout11=dout2; - dout2为十进制计数器elsif c1event and c1=1 then -c1为秒十位时钟信号 if do

17、ut11=0101 then - dout12为秒个位计数信号 dout11=0000;c2=1; -当个位计数到5时清零, else dout11=dout11+1;c2=0; -同时产生一个进位c2 end if;end if;dout1(7 downto 4)=dout11; end process; -分个位process(c2,ld) beginif ld=010 then -当ld=2时给分个位置数 dout22=dout2; elsif c2event and c2=1 then -c2为分个位时钟信号 if dout22=1001 then - dout22为分个位计数信号 d

18、out22=0000;c3=1; -当个位计数到9时清零 else dout22=dout22+1;c3=0; -同时产生一个进位c3 end if;end if;dout1(11 downto 8)=dout22;end process;-分十位process(c3,ld) beginif ld=011 then -当ld=3时给分个位置数 dout21=dout2; elsif c3event and c3=1 then -c3为分十位时钟信号 if dout21=0101 then - dout22为分十位计数信号 dout21=0000;c4=1; -当个位计数到5时清零, else

19、dout21=dout21+1;c4=0; -同时产生一个进位c4 end if; end if;dout1(15 downto 12)=dout21;end process;-小时计数器process(c4) beginif ld=100 then -当ld=4时给时个位置数 dout32=dout2;elsif ld=101 then -当ld=5时给时十位置数 dout31=dout2;elsif c4event and c4=1 then -c4为时的时钟信号 if dout31=0001 then -dout31为时十位计数信号 if dout32=0001 then -dout32

20、为时个位计数信号 dout31=0000;dout32=0000; else dout32=dout32+1; end if; elsif dout31=0000 then if dout32=1001 then dout32=0000;dout31=dout31+1; else dout32=dout32+1; end if; end if;end if;dout1(19 downto 16)=dout32;dout1(23 downto 20)=dout31;end process;-置数计数器process(clk_num2)beginif clk_num2event and clk_n

21、um2=1 then if ld=001 or ld=010 or ld=011 or ld=100 or ld=101 then if dout2=1001 then dout2=0000; -当ld不为0时dout2启动开始计数 else dout2=dout2+1; -为是十进制计数器 end if; end if;end if;end process;(2)在max+plusii下的仿真时序如下:下图为六进制计数器仿真时序图,图中clk为时钟信号,en为使能端,高电平有效;clr为清零端,高电平有效;co为进位输出端口,dout为数据输出端。当dout=5时清零,同时产生进位下图为十进

22、制计数器仿真时序图,端口名及功能同上。当dout=9时清零,同时产生进位下图为二十四进制计数器仿真时序图,端口名及功能同上。当ld=3时,分的十位以秒的计数时钟开始计数下图为各计数模块组合后的仿真时序,ld为置数控制端口,当ld=2时给秒的十位置数,当ld=3时为分个位置数,如下图所示:当ld=2时,秒的十位以秒的计数时钟开始计数3、数据选择模块数据选择模块采用计数器来选择要发送的数据,在此模块中工作时钟信号为clk_num1,即经过20000分频后的时时钟信号。因为要发送的数据有十位因此cnt1为十进制计数器,要显示每个字符需发送4个数据,所以将cnt2设计为四进制计数器。其vhdl程序实现

23、如下:-数据选择器process(clk_num1) beginif clk_num1event and clk_num1=1 then -req1信号由检测busy信号产生if req1=1 then -以req1为信号,当req1为 cnt2=cnt2+1; -高电平时读取数据 if cnt1=1001 then cnt1=0000; else cnt1cntcntcntcntcntcntcntcntcntcntnull; end case;end if;end if;end process;-am/pm的切换c5=1 when dout31=0000 and dout32=0000 el

24、se 0;-当小时两位为00时process(c5) -产生一进位信号c5begin if c5event and c5=1 then -当c5上升沿到来时outamp取反 outampampampnull;end case;end if;end process;-数据选择process(cnt1) begin case cnt1 is when 0000=data1=xf9;data2=x02;data3data1=xf9;data2=x03;data3data1=xf9;data2=x05;data3data1=xf9;data2=x06;data3data1=xf9;data2=x07;

25、data3data1=xf9;data2=x08;data3data1=xf9;data2=x09;data3data1=xf9;data2=x0a;data3data1=xf9;data2=x0b;data3data1=xf9;data2=x0c;data3null; end case;end process;4、显示驱动模块驱动液晶显示器能够显示动态数据,需以快速扫描的方式去读取所需显示的数据。在发送数据时,检测busy信号,当busy信号为低电平时,即液晶块空闲,可以发送数据;当busy信号为高电平时,即液晶块忙,应该停止发送数据。当busy信号为低电平时,同时产生一个信号req1,在读

26、取数据时以req1为信号,高电平读取数据。如果没有检测到busy信号,则不发送数据。其vhdl程序实现如下:-送显示模块process(clk_num1,busy) isbeginif rising_edge(clk_num1) then if busy=0 then req1doutdoutdoutdoutnull; end case; elsif busy=1 then req1=0; -当busy信号为高电平时,req1清零 end if; -不发送数据end if;reqdata4data4data4data4data4data4data4data4data4data4data4dat

27、a4data4null; end case;end process;仿真时序如下图:每个字符需发送四个数据clk为时钟信号,busy为液晶块响应信号,req为发送数据信号,高电平发送数据。dout为所发送的数据。co为进位信号,ld为置数端5、整点报时模块 当计数满一小时时报警一次,即检测分十位的进位信号,当c4=1时开始报警,并报警一分钟。其vhdl程序实现如下:-整点报时process(clk_num1)begin if clk_num1event and clk_num1=1 thenif c4=1 and c2=1 and c1=1 then -当时分秒的进位均为1时将co置1 co=

28、1; -其余情况均为0else co=0; -co为报警输出端口end if;end if;end process;三、测试结果说明及性能分析1、测试结果说明经过测试本系统基本实现设计要求,能够按秒走时,在液晶块上正确显示上/下午、时、分、秒。具有整点报时、时间调整功能,并实现了十二小时计时方案(am,pm)。但是走时精度不劣于3秒/月的功能没有实现,本系统有较大的误差,每15分钟快一秒,即每小时快4秒,一个天快1分36秒。经分析问题主要:(1)在于分频模块,是分频不够准确。如果要得到较为准确的时钟信号,应对时钟信号进行多次分频,即通过多个分频计时模块。下午 8:20:19(2)由于信号源的不

29、稳定而引起的误差,信号源不能准确产生12mhz的时钟信号。下午 8:19:23(3)可能由于芯片的老化不稳定造成的时钟误差。测试照片如下:上午 11:09:162、芯片资源占用率及程序优化度分析 芯片的资源占用率如下图所示,占用逻辑单元123约占总量的96%,占用率较大。使用芯片管脚18个,占总数的28%。本系统由于占用了较多的逻辑单元,因此本系统在运行时可能不稳定,在测试时,发现芯片发热较严重,不能长期使用。因此本系统需要做程序优化,在程序设计中发现使用if语句比使用case语句占用资源要少,在程序中将信号定义成整型比定义成逻辑矢量占用资源要多。使用图元的方法也可节省资源,且使用图元的方法在

30、思路上更加清晰。total dedicated input pins used: 1/4 ( 25%)total i/o pins used: 18/64 ( 28%)total logic cells used: 123/128 ( 96%)total shareable expanders used: 74/128 ( 57%)total turbo logic cells used: 123/128 ( 96%)total shareable expanders not available (n/a): 25/128 ( 19%)average fan-in: 9.11total fan

31、-in: 11213、端口即管脚分配说明 clk:系统时钟信号;(芯片83管脚 输入端)ld:时钟设置控制端;(芯片108管脚 输入端)co:整点表示输出端;(芯片6管脚 输出端)busy:液晶块空闲信号端口;(芯片11管脚 输入端)req:数据发送信号端口;(芯片5管脚 输出端)dout:数据输出端口.(芯片第74、73、70、69、68、67、65、64管脚 输出端)四、总结 1、通过对在本系统的在线测试证明系统中还在很多问题,走时精度不够、程序不够优化、占用资源较多等问题。本系统要想能够在各种场合都能使用的数字时钟,还需做进一步的改进。首先,要选择最优的设计方案,降低资源占用率;其次硬件

32、方面选择性能较好的时钟信号源,程序方面要对分频模块作进一步的优化,尽可能降低走时误差。 2、但通过对数字时钟的设计,掌握了利用vhdl语言设计数字电路的基本方法和流程。这是一个以软件设计为主,硬件配合为副的设计过程,以一片器件代替了多片中小规模的芯片组成的数字电路,其优越性已经越来越明显。因此,设计数字电路时,应优先考虑此种设计方法。 3、目前,硬件描述语言vhdl已经成为电子设计自动化领域进行自上向下设计的应用方向,它是专用数字集成电路设计描述的有力工具,同时也是逻辑综合和优化的重要基础,作为一种重要的高层设计技术,vhdl已成为当代电子设计者们必须掌握的重要工具。参考文献:【1】谭会生 、

33、张昌凡主编.eda技术及应用(第二版).西安:西安电子科技大学出版社,2004.【2】 侯伯亨,顾新.vhdl硬件描述语言与数字电路逻辑设计m.西安:西安电子科技大学出版社, 2001.【3】 潘松,黄继业.eda技术实用教程m.北京:科学出版社, 2002.【4】 李国洪,沈明山.可编程器件eda技术与实践m.北京:机械工业出版社, 2004.【5】 樊国梁.vhdl语言设计数字电路j.国外电子测量技术,2005(2).【6】 刘丽华.专用集成电路设计方法m.北京:北京邮电大学出版社,2000附件:程序清单library ieee;use ieee.std_logic_1164.all;us

34、e ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity times isport(clk:in std_logic; -输入时钟 ld:in std_logic_vector(2 downto 0); -置数控制端 co:out std_logic; -报警输出 busy:in std_logic; -空闲信号 req:out std_logic; -发送数据控制信号 dout:out std_logic_vector(7 downto 0); -发送数据端end entity;architecture art of

35、times issignal outamp,c1,c2,c3,c4,c5,req1:std_logic;-进位信号/req1为发送数据控制信号signal cnt,dout2,dout3:std_logic_vector(3 downto 0);signal cnt1:std_logic_vector(3 downto 0);signal cnt2:std_logic_vector(1 downto 0);signal dout1:std_logic_vector(23 downto 0);signal cnt0:std_logic_vector(11 downto 0); -分频计数器sig

36、nal cnt00:std_logic_vector(15 downto 0);signal amp,data,data1,data2,data3,data4:std_logic_vector(7 downto 0);-发送数据signal clk_num1,clk_num2:std_logic; -分频信号signal dout11,dout12,dout21,dout22,dout31,dout32:std_logic_vector(3 downto 0);beginc5=1 when dout31=0000 and dout32=0001 else 0;process(clk_num2)

37、 -秒个位 beginif clk_num2event and clk_num2=1 then if ld=000 then if dout12=1001 then dout12=0000;c1=1; else dout12=dout12+1;c1=0; end if; end if; end if;dout1(3 downto 0)=dout12;end process;process(c1,ld) -秒十位 beginif ld=001 then dout11=dout2;elsif c1event and c1=1 then if dout11=0101 then dout11=0000;c2=1; else dout11=dout11+1;c2=0; end if; end if;dout1(7 downto 4)=dout11; end process;process(c2,ld) -分个位 beginif ld=010 then dout22=dout2;

温馨提示

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

评论

0/150

提交评论