EDA课程设计.docx
- 文档编号:15263237
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:22
- 大小:245.82KB
EDA课程设计.docx
《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(22页珍藏版)》请在冰点文库上搜索。
EDA课程设计
课程设计
EDA技术与VHDL语言
课程设计报告
题目:
秒表设计
班级:
姓名:
学号:
指导教师:
成绩:
电子与信息工程学院
信息与通信工程系
1.引言1
1.1课程设计目的1
1.2课程设计内容2
2.EDA与VHDL简介2
2.1EDA技术2
2.2硬件描述语言VHDL3
2.2.1VHDL语言简述3
2.2.2VHDL语言的特点3
3.设计过程4
3.1设计思路4
3.2各模块原理及程序5
3.2.1控制模块6
3.2.2分频模块8
3.2.3计时模块9
3.2.4显示模块13
4.系统仿真19
4.1时基分频模块的仿真19
4.2控制模块的仿真19
4.3计时电路模块的仿真20
4.4显示电路模块的仿真21
4.5秒表整个系统的仿真22
5.心得体会23
参考文献23
1.引言
在科技高度发展的今天,集成电路和计算机应用得到了高速发展。
尤其是计算机应用的发展。
它在人们日常生活已逐渐崭露头角。
大多数电子产品多是由计算机电路组成,
如:
手机、mp3等。
而且将来的不久他们的身影将会更频繁的出现在我们身边。
各种家用电器多会实现微电脑技术。
电脑各部分在工作时多是一时间为基准的。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。
秒表在很多领域充当一个重要的角色。
在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。
他们对时间精确度达到了几纳秒级别。
1.1课程设计目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时。
通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。
通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。
1.2课程设计内容
利用VHDL语言设计基于计算机电路中时钟脉冲原理的数字秒表。
其功能是实现精度为0.01秒,最长到59分的秒表计时。
具体要求为系统由分频器(将10KHz时钟变为100Hz)、100进制计数器(实现0.01秒的计时)和60进制计数器(实现秒和分的计时)、显示码译码器(将时间的BCD码转换成LED显示码)。
要求给出总体组成框图,设计思路,完成以上模块的VHDL实现及功能仿真,顶层文件及整体仿真。
2.EDA与VHDL简介
2.1EDA技术
EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
目前EDA主要辅助进行三个方面的设计工作:
IC设计、电子电路设计和PCB设计。
没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
2.2硬件描述语言VHDL
2.2.1VHDL语言简述
VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为AI/IEEE的标准(IEEESTD1076-1987)。
1993年更进一步修订,变得更加完备,成为AI/IEEE的AI/IEEESTD1076-1993标准。
目前,大多数的CAD厂商出品的EDA软件都兼容了这种标准。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
2.2.2VHDL语言的特点
VHDL的程序结构特点是将一项工程设计,关于用VHDL和原理图输入进行CPLD/FPGA设计的粗略比较:
在设计中,如果采用原理图输入的设计方式是比较直观的。
你要设计的是什么,你就直接从库中调出来用就行了。
这样比较符合人们的习惯。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
3.设计过程
3.1设计思路
此系统设计采用自上而下的设计方法,从整体到局部的思考方式,将秒表分解成三个主要的部分:
计时控制电路、计时电路、显示电路。
还可以将三个再次分解成子系统,即计时控制电路由控制状态机构成,计时电路可以分为时基分频电路和计数器,计数器还可以分为一百进制计数器和六十进制计数器。
显示电路可以分为七段译码器和扫描电路。
具体描述如图3-1所示。
图3-1系统组成框图
3.2各模块原理及程序
图3-2系统的整体组装设计原理图
本系统设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。
各模块实现秒表不同的功能。
3.2.1控制模块
计时模块的作用是针对计时过程进行控制。
计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。
源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCTRLIS
PORT(CLR,CLK,SP:
INSTD_LOGIC;
EN:
OUTSTD_LOGIC);
ENDCTRL;
ARCHITECTUREONEOFCTRLIS
CONSTANTS0:
STD_LOGIC_VECTOR(1DOWNTO0):
="00";
CONSTANTS1:
STD_LOGIC_VECTOR(1DOWNTO0):
="01";
CONSTANTS2:
STD_LOGIC_VECTOR(1DOWNTO0):
="11";
CONSTANTS3:
STD_LOGIC_VECTOR(1DOWNTO0):
="10";
TYPESTATESIS(S0,S1,S2,S3);
SIGNALCURRENT_STATE,NEXT_STATE:
STATES;
BEGIN
COM:
PROCESS(SP,CURRENT_STATE)
BEGIN
CASECURRENT_STATEIS
WHENS0=>EN<='0';
IFSP='1'THEN
NEXT_STATE<=S1;
ELSE
NEXT_STATE<=S0;
ENDIF;
WHENS1=>EN<='1';
IFSP='1'THEN
NEXT_STATE<=S1;
ELSE
NEXT_STATE<=S2;
ENDIF;
WHENS2=>EN<='1';
IFSP='1'THEN
NEXT_STATE<=S3;
ELSE
NEXT_STATE<=S2;
ENDIF;
WHENS3=>EN<='0';
IFSP='1'THEN
NEXT_STATE<=S3;
ELSE
NEXT_STATE<=S0;
ENDIF;
ENDCASE;
ENDPROCESS;
SYNCH:
PROCESS(clk)
BEGIN
IFCLR='1'THEN
CURRENT_STATE<=S0;
ELSIFCLK'EVENTANDCLK='1'THEN
CURRENT_STATE<=NEXT_STATE;
ENDIF;
ENDPROCESS;
ENDONE;
3.2.2分频模块
分频模块的作用把输入时钟信号变为分频输出信号。
源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfenpinisport(clk:
instd_logic;
ft:
outstd_logic);
endfenpin;
architectureaoffenpinis
signalfm:
std_logic;
begin
process(clk)
variablenum:
integerrange0to100;
begin
ifclk'eventandclk='1'then
ifnum<50thennum:
=num+1;
elsenum:
=1;
fm<=notfm;
endif;
endif;
ft<=fm;
endprocess;
enda;
3.2.3计时模块
计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。
他是由四个十进制计数器和俩个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。
源程序:
(1)十进制计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt10IS
PORT(CLK:
INSTD_LOGIC;
CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcnt10;
ARCHITECTUREARTOFcnt10IS
SIGNALSCOUNT10:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGINCOUNT10<=SCOUNT10;
PROCESS(CLK,CLR,EN)
BEGINIF(CLR='1')THEN
SCOUNT10<="0000";CN<='0';
ELSIFclk'eventandclk='1'THEN
IF(EN='1')THEN
IFSCOUNT10="1001"THEN
CN<='1';
SCOUNT10<="0000";
ELSE
CN<='0';
SCOUNT10<=SCOUNT10+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
(2)六进制计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt6IS
PORT(CLK,CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT6:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcnt6;
ARCHITECTUREoneOFcnt6IS
SIGNALSCOUNT6:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
COUNT6<=SCOUNT6;
PROCESS(CLK,CLR,EN)
BEGIN
IF(CLR='1')THEN
SCOUNT6<="0000";CN<='0';
ELSIFclk'eventandclk='1'THEN
IF(EN='1')THEN
IFSCOUNT6="0101"THEN
CN<='1';
SCOUNT6<="0000";
ELSE
CN<='0';
SCOUNT6<=SCOUNT6+'1';
ENDIF;
ENDIF;
ENDIF;
(3)计数器顶层文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,CLR,EN:
INSTD_LOGIC;
S_10MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_100MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_1S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MIN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MIN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
ENDCOUNT;
ARCHITECTUREONEOFCOUNTIS
COMPONENTCNT10
PORT(CLK,CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENTCNT10;
COMPONENTCNT6
PORT(CLK,CLR,EN:
INSTD_LOGIC;
CN:
OUTSTD_LOGIC;
COUNT6:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENTCNT6;
SIGNALA,B,C,D,E,F:
STD_LOGIC;
BEGIN
U1:
CNT10PORTMAP(CLK,CLR,EN,A,S_1MS);
U2:
CNT10PORTMAP(CLK,CLR,EN,A,S_10MS);
U3:
CNT10PORTMAP(A,CLR,EN,B,S_100MS);
U4:
CNT10PORTMAP(B,CLR,EN,C,S_1S);
U5:
CNT6PORTMAP(C,CLR,EN,D,S_10S);
U6:
CNT10PORTMAP(D,CLR,EN,E,S_1MIN);
U7:
CNT6PORTMAP(E,CLR,EN,F,S_10MIN);
ENDONE;
3.2.4显示模块
计时显示电路的作用是将计时值在LED数码管上显示出来。
计时电路产生的值经过BCD七段译码后,驱动LED数码管。
计时显示电路的实现方案采用扫描显示。
源程序:
(1)数据选择器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMULXIS
PORT(CLK,CLR,EN:
INSTD_LOGIC;
S_10MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_100MS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
OUTBCD:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
SEG:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDMULX;
ARCHITECTUREONEOFMULXIS
SIGNALCOUNT:
STD_LOGIc_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLR='1'THEN
COUNT<="1111";
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
COUNT<="0000";
ELSE
COUNT<=COUNT+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
CASECOUNTIS
WHEN"0000"=>OUTBCD<=S_10MS;SEG<="11111110";
WHEN"0001"=>OUTBCD<=S_100MS;SEG<="11111101";
WHEN"0010"=>OUTBCD<=S_1S;SEG<="11111011";
WHEN"0011"=>OUTBCD<=S_10S;SEG<="11110111";
WHEN"0100"=>OUTBCD<=S_1MIN;SEG<="11101111";
WHEN"0101"=>OUTBCD<=S_10MIN;SEG<="11011111";
WHEN"0110"=>OUTBCD<=S_10MS;SEG<="10111111";
WHEN"0111"=>OUTBCD<=S_100MS;SEG<="01111111";
WHEN"1000"=>OUTBCD<=S_1S;SEG<="11111110";
WHEN"1001"=>OUTBCD<=S_10S;SEG<="11111101";
WHENOTHERS=>OUTBCD<="0000";SEG<="00000000";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDONE;
(2)BCD七段译码器驱动器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYBCD7IS
PORT(BCD:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDBCD7;
ARCHITECTUREONEOFBCD7IS
BEGIN
LED<="1111110"WHENBCD="0000"ELSE
"0110000"WHENBCD="0001"ELSE
"1101101"WHENBCD="0010"ELSE
"1111001"WHENBCD="0011"ELSE
"0110011"WHENBCD="0100"ELSE
"1011011"WHENBCD="0101"ELSE
"1011111"WHENBCD="0110"ELSE
"1110000"WHENBCD="0111"ELSE
"1111111"WHENBCD="1000"ELSE
"1111011"WHENBCD="1001"ELSE
"0000000";
ENDONE;
(3)整体顶层设计的源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMBIS
PORT(INC,INCLR,INCLK:
INSTD_LOGIC;
OUT1:
OUTSTD_LOGIC;
OUT2:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDMB;
ARCHITECTUREARTOFMBIS
COMPONENTFENPIN
PORT(CLK:
INSTD_LOGIC;
FT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCNT100
PORT(CLK,CLEAR,CS:
INSTD_LOGIC;
CO:
OUTSTD_LOGIC;
S_100MS,S_10MS:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTCNT60S
PORT(CLK,CLEAR:
INSTD_LOGIC;
CO:
OUTSTD_LOGIC;
S_1S,S_10S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTCNT60M
PORT(CLK,CLEAR:
INSTD_LOGIC;
S_1MIN,S_10MIN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTCNTM8
PORT(CLK:
INSTD_LOGIC;
COUNT:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDCOMPONENT;
COMPONENTCONTROL
PORT(CHOOSE:
INSTD_LOGIC_VECTOR(2DOWNTO0);
S_10MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1MIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_10S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_1S:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S_100MS:
IN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计