东北大学EDA课 程 设 计 报 告VHDL.docx
- 文档编号:8671703
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:499.74KB
东北大学EDA课 程 设 计 报 告VHDL.docx
《东北大学EDA课 程 设 计 报 告VHDL.docx》由会员分享,可在线阅读,更多相关《东北大学EDA课 程 设 计 报 告VHDL.docx(10页珍藏版)》请在冰豆网上搜索。
东北大学EDA课程设计报告VHDL
课程设计报告
设计题目:
用VHDL语言实现数字钟的设计
班级:
电子信息工程1102班
学号:
2011
姓名:
指导教师:
李世平
设计时间:
2014年1月
摘要
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,可以用在硬件设计流程的建模、综合和模拟等多个阶段。
随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的FPGA结构,成为设计专用集成电路和其他集成电路的主流。
通过应用VHDL对数字时钟的设计,达到对VHDL的理解,同时对CPLD器件加深了解。
能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。
本设计为一个多功能的数字钟,采用EDA技术。
以硬件描述语言VHDL为系统逻辑描述手段设计文件,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统由时钟模块、控制模块、计时模块、数据译码模块以及显示模块组成。
具有年、月、日、时、分、秒计数显示、校时、清零等简单功能,以24小时循环计数。
并在计算机上运用ise软件进行仿真调试通过。
关键词:
数字钟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设计方法……………………………………………………6
4、仿真与分析………………………………………………………………7
5、设计结果…………………………………………………………………8
6、课程设计总结…………………………………………………………11
7、参考文献………………………………………………………………13
1、课程设计目的
掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法。
理论与实践相结合在实践中验证理论知识,有利于基础知识的理解、巩固课堂上所学内容;自己动手完成从设计输入、逻辑综合、功能仿真、设计实现到实现编程、时序仿真,有利于逻辑思维的锻炼和动手能力的培养。
熟悉各类计数器的特点;掌握多个数码管显示的原理与方法;领会VHDL语言的设计思想;对整体的设计有一个系统性的了解。
2、课程设计内容及要求
2.1设计内容
(1)功能模块划分——按照“自顶向下”的设计方法进行功能模块划分;
(2)VHDL代码输入——利用ise软件完成VHDL语言对系统功能的描述;
(3)功能仿真——添加波形文件,设计输入,观察输出,检查自己的设计是否达到和完成要求的逻辑功能;
(4)逻辑综合——将以上的设计输入编译成标准的VHDL文件,进行代码级的功能仿真,将高层次描述转化为硬件电路并选择适当的电路实现方案,生成门级描述的网表文件;
(5)优化——对于上述综合生成的网表文件,用更小更快的综合结果代替一些复杂的单元,并与指定的库映射生成新的网表,以减小电路规模。
(6)时序仿真——利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。
它模拟芯片的实际动作,仿真时间模型严格将门级延时计算在内,可以分析出竞争与冒险,时序仿真验证过的电路与实际电路基本上一致;
(7)适配器选择——利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
2.2设计要求
用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。
用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第8个脉冲到来后预置结束,正常工作,显示的是时分秒。
Up为高电平时,upclk有脉冲到达时,预置位加1.否则减1.
3、VHDL程序设计
3.1方案论证
该课题的实现方案如下:
先对16HZ的信号进行分频使其变为1HZ;将该信号加入计数器中(模60)实现基本时钟功能;最后在动态显示电路中实现上述功能。
设计主要使用了元件例化和进程结合的方方式。
本系统可以由时分秒计数器、年月日计数器、分频计数器、时分秒的调整以及年月日的调整和一个顶层文件构成。
采用自顶向下的设计方法,每个子模块主要采用进程语句实现,在顺序语句case和IF选择时考虑IF语句简单易懂的特点以及条件分支判断较少最后采用以IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF-ELSE语句为主。
以此来增强模块化的可读性。
在管脚定义的时候采用了buffer类型使其既可以作为外部信号又可以作为内部引线提高了代码效率。
如下图为各个主模块下的子模块:
图1数字电子钟顶层实体shuzizhong模块结构图
图2数字电子钟nian_yue_ri(年月日)模块结构图
图3数字电子钟shi_fen_miao(时分秒)模块结构图
3.2设计方法
3.2.1设计思路
首先的任务就是根据要求进行模块化分,进行多思路分析比较,最终找到较优的方案。
本系统可分为5大模块,分别是分频模块、时分秒模块、年月日模块、显示模块和控制模块。
故总体上采用自顶而下的思路,各个子模块功能完整又相互联系。
在控制模块采用类似状态机的思路,在不同的状态执行不同的功能,和状态机不同的只是这里采用计数值的不同代替不同的功能状态。
3.2.2设计方法
在考虑最优原则且满足设计要求的情况下采用了自顶向下的设计思路。
而在具体设计的时候进行了功能划分,采用元件例化和进程相结合的方法。
在VHDL语句选择上依据可读性强和效率高的原则采用了进程语句、元件例化语句、case语句、if语句以及赋值语句。
在结构上为了简化设计,秒和分计数器采用同一单元。
定义管脚时采用了buffer类型,利用其既可以作外部信号又可以作内部引线的特点对结构进行优化。
在算法优化方面尤其是注意2月的天数判断,依据闰年的特点设计优化算法。
在资源优化上修改了分秒计数器最初采用的6进制和10进制的组合,改为分钟和秒均60进制,小时采用24进制。
4、仿真与分析
图4顶层模块图shuzizhong功能仿真
分析:
秒计数模块利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即co=1;clr作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。
小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。
年月日则依次通过上一级的进位进行循环计数。
由图可见,set脉冲来之前,显示的是时分秒——23:
59:
59;第一个set脉冲来之后切换显示年月日——00年01月01号;set第二个脉冲来:
设置年份,up为1表示加反之表示减,在clk1上升沿来时,年份依次对应加或减;set第三个脉冲来:
设置月份,up为1表示加反之表示减,clk1上升沿来时,年份依次对应加或减;以此类推,然后在clk时钟输入下开始正常计时显示。
图5nian_yue_ri(年月日)模块功能仿真图
分析:
初始化的年月日显示为00年01月01号,在set为1时,正常显示年月日时,clk0每增加一个日期加一;set为2时,即set的第2个脉冲来时,设置年份,up先高后低再高,clk1每加一个,年份则先加后减;set为3时,设置月份,up先高后低再高,clk1每加一个,年份则先加后减;以此类推,之后设置日期,最后设置完毕后年月日模块可以正常计时,能完成加减的预置功能。
图6shi_fen_miao(时分秒)模块功能仿真
综合分析以上各图可知,按所选用方案所设计的电子钟可以完成加减的预置、切换显示和正常计时功能。
5、设计结果
设计结果分析
1.分频功能实现
因为我们需要1HZ的频率用来驱动秒计时器,而硬件提供的时钟频率是16HZ,所以我们要进行分频。
程序如下:
process(clk)
begin
ifclk'eventandclk='1'then
iftemp(0)='1'then
clktemp<=notclktemp;
endif;
temp<=temp+1;
endif;
endprocess;
divclk<=clktemp;
2.清零功能实现
硬件上一共有四个开关,设置硬件上的一个开关为清零开关。
当按下该开关时,时钟的显示全部为零。
清零的程序如下:
if(clr='0')then
a0<="0000";b0<="0000";co<='0';
3.计时功能实现
计时功能可分为两部分来实现,依次设计个位、十位的计数单元。
具体程序各个模块有所差异但原理都是循环计数。
4.校时功能实现
对电路进行校时功能,设置两个开关(set/clk1)控制。
按下set开关时,数字时钟进行时分秒,年月日的切换,按下clk1开关时(假设up=1),按对应的循环进行(加)计数(如:
分秒满60清为00,年满99清为00)。
校正时程序如下:
process(state,clr,clk,en)
begin
if(clr='0')then
a0<="0000";b0<="0000";co<='0';
elsif(clk'eventandclk='1')then
ifen='1'then
if(state="000")or(state="001")
or(state="110"andup='1')
or(state="111"andup='1')then
if(b0="0101"anda0="1001")then
a0<="0000";b0<="0000";co<='1';
elsif(a0="1001")then
a0<="0000";b0<=b0+'1';co<='0';
else
a0<=a0+'1';co<='0';
endif;
elsif((state="111"andup='0')
or(state="110"andup='0'))then
if(b0="0000"anda0="0000")then
a0<="1001";b0<="0101";
elsif(a0="0000")then
a0<="1001";b0<=b0-'1';co<='0';
else
a0<=a0-'1';co<='0';
endif;
endif;
endif;
endif;
7.译码功能的实现
所谓的译码就是7段译码,将对应的计数进行译码并用译码管显示。
程序如下:
process(tiaojie,sec0,sec1,min0,min1,hour0,hour1,
date0,date1,month0,month1,year0,year1)
begin
if(tiaojie="000")then--时分秒
q0<=sec0;q1<=sec1;q2<=min0;q3<=min1;q4<=hour0;q5<=hour1;
endif;
if(tiaojie="001")then--年月日
q0<=date0;q1<=date1;q2<=month0;q3<=month1;q4<=year0;q5<=year1;
endif;
if(tiaojie="010")then--调节年份
q0<="1111";q1<="1111";q2<="1111";q3<="1111";q4<=year0;q5<=year1;
endif;
if(tiaojie="011")then--调节月份
q0<="1111";q1<="1111";q2<=month0;q3<=month1;q4<="1111";q5<="1111";
endif;
if(tiaojie="100")then--调节天
q0<=date0;q1<=date1;q2<="1111";q3<="1111";q4<="1111";q5<="1111";
endif;
if(tiaojie="101")then--调节小时
q0<="1111";q1<="1111";q2<="1111";q3<="1111";q4<=hour0;q5<=hour1;
endif;
if(tiaojie="110")then--调节分
q0<="1111";q1<="1111";q2<=min0;q3<=min1;q4<="1111";q5<="1111";
endif;
if(tiaojie="111")then--调节秒
q0<=sec0;q1<=sec1;q2<="1111";q3<="1111";q4<="1111";q5<="1111";
endif;
endprocess;
本次的数字中能够进行年月日、时分秒的切换显示,并且能够根据设置按钮进行相应的矫正。
达到了预期效果,完成了设计要求。
6、课程设计总结
通过EDA课程设计的进行我不仅温习了以前在课堂上学习的专业知识,同时我也得到了老师和同学的帮助,学习和体会到了电子技术的基本技能和思想。
从开始接到课设题目到电路图的设计,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战。
在这段时间里,我学到了很多知识也有很多感受。
当然在做的过程中也遇到过很多的麻烦,这次课程设计使我开始了自主的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩的作品一步步完善起来,每一次改进都是我学习的收获,每一次的成功都会让我兴奋好一段时间。
此次设计过程中,各种系统的适用条件,各种程序的选用标准。
我都是随着设计的不断深入而不断熟悉并学会应用的。
和老师的沟通交流更使我对设计有了新的认识也对自己提出了新的要求。
课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。
设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,认真的对待每一次和老师讨论疑惑的机会,每一次都是锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。
这个课题设计的过程让我对学习、工作的思路有了更为明朗的认识:
它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。
以前的联系都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。
这次设计最开始提出了三个方案,第一种是采用状态机的形式;第二种是多进程;第三种是元件例化和进程相结合的方式。
状态机在设计了一部分之后发现和其它模块进行结合的时候不是很方便,多进程是在一个结构体中包含了所有程序,使可读性降低,出错后难以修改。
所以在最后采用了元件例化和进程相结合的形式同时兼顾状态机思想,用计数值的不同代替不同的控制功能。
使最后的程序简洁明了,得到了最大的优化,节省了资源。
本次需要注意的就是if语句的使用,在进行多次嵌套时容易出错。
另外,在对2月的平闰年进行设计时也提出了两种方案:
第一就是枚举法;第二是利用平闰年的数学规律编写相应的算法。
在考虑到代码的简洁性后,最终采用了利用数学规律编写算法,减少了代码量。
这次课设给了我动脑、动手进行设计的机会,同时也大大加强了同学之间的沟通,以及学生与老师之间的交流,教会我的这些不仅仅在现在有用,对于我今后步入社会也是同样有用的。
建议就是希望学校能改善一下实验设备,完成最后的下载调试工作。
7、参考文献
(1)《可编程逻辑器件与EDA技术》李景华杜玉远主编东北大学出版社
(2)王开军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业出版社,2006,28-65。
(3)谭会生,张昌凡,EDA技术及应用,西安电子科技大学出版社,2002。
(4)郑亚民等主编,《可编程逻辑器件开发软件QuartusⅡ》,国防工业出版社,2006
(5)谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001
(6)雷伏容主编,《VHDL电路设计》,清华大学出版社,2006
(7)李国洪,沈明山.可编程器件EDA技术与实践[M].北京:
机械工业出版社,2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学EDA课 告VHDL 东北大学 EDA VHDL