EDA课程设计.docx
- 文档编号:5465817
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:20
- 大小:261.41KB
EDA课程设计.docx
《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
EDA课程设计
课程设计
EDA技术与
VHDL语言
课程设计报告
班级:
电信09—1班
姓名:
侯万鹏
学号:
0906110107
指导教师:
张沛泓
成绩:
电子与信息工程学院
1.引言
1.1EDA技术概述
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成
1.2数字系统
数字系统是由对信息进行采集,转换、传输、存储、加工处理和利用的一组相互联系,相互作用的部件所组成的一个有机的整体.虽然信息来源不同,有经济信息、政治信息、图文信息,信息形态不一,有离散的、有连续的等等.但都可经过变换,转换成数字系统所能接收的数字信息,进行存储和处理.同时又可把数字系统加工、处理后的信息经过相应逆变换,成为对被控对象进行控制的可靠依据.数字系统具有可靠性强,精确度高,稳定性好可模块化,便于集成等优点.
2.交通灯控制系统介绍
在经济科技高速发展的今天,交通灯在马路上随处可见应用广泛。
交通灯控制器用于自动控制十字路口的交通灯和计时期,指挥各通道车辆和行人安全有序的通行。
在马路的十字路口,红灯亮用于表示该马路禁止通行,绿灯亮表示该马路可以正常通行,黄灯亮表示停车。
倒计时用于显示通行和禁止通行的时间。
一般情况下,当汽车行驶至十字交通路口时,有3种选择:
向前,向左转弯,向右转弯。
根据我国的交通规则规定,汽车是靠右行驶,向右拐弯只要走弧形的支干道即可,不需受十字交通灯的束缚。
十字路口交通灯负责控制各走向红绿灯的状态及转换,并且各状态之间有一定的时间过渡。
同时,东西南北每条干道上都为人行横道设置了红绿灯,提醒过路行人在安全时刻穿越道路,以保证行人的安全。
2.1交通灯控制系统的功能
交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
在现代化的大城市中,十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的系统对红、黄、绿灯的转换进行管理,本系统就是基于此目的而开发的。
2.2交通灯控制系统设计
城市路口交通信号控制系统大体上分为三种类型:
定周期的信号机、多时段且具有无电缆协调功能的微电脑型信号机以及联网式自适应多相位智能型信号机。
具体采用哪种类型,应根据其应用场合及特点加以确定。
其中,第一种类型以其成本低,设计简单,安装及维护方便等特点得到了广泛应用。
2.3交通灯控制系统的基本组成模块
交通灯控制器原理框图如图2.2所示,包括置数模块、计数模块、主控制器模块和译码器模块。
置数模块将交通灯的点亮时间预置到置数电路中,计数模块以秒为单位倒计时,当计数值减为零时,主控电路改变输出状态,电路进入下一个状态的倒计时。
其中,核心部分是主控制模块。
图2.1交通灯控制器原理框图
2.4交通灯控制器状态
状态
南北道
东西道
时间
1
绿灯亮
红灯亮
20
2
黄灯亮
红灯亮
5
3
红灯亮
绿灯亮
20
4
红灯亮
黄灯亮
5
3.交通灯控制系统的设计
3.1交通灯控制器功能描述及设计方法
通过两组交通灯来模拟控制东西、南北两条通道上的车辆通行,所有功
能在实验操作平台上进行模拟通过,根据原理其主要功能如下:
图3.1系统结构图
3.2设计要求
1、功能:
实现交通灯控制逻辑,控制红绿灯的亮和灭,并显示红绿灯的倒计时,东西车道和南北车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒;要求黄灯先亮5秒,才能变换运行车道
2、输入信号:
时钟信号clk为1kHz
3、输出信号:
红、绿、黄灯控制信号(高电平时亮),两位倒计时LED数码管(共阴极)显示码(静态显示方式)
4、要求:
系统由分频器(将1kHz时钟变为1Hz)、计数器(实现25秒和5秒的倒计时)、状态机(控制红绿灯的变换)、显示码译码器(将时间的BCD码转换成LED显示码)。
5、要求给出系统总体组成框图,设计思路,完成以上模块的VHDL实现及功能仿真,状态机的状态图、顶层文件及整体仿真。
3.3设计方案
图3-2系统框图
3.3.1分频器的设计
分频器实现是将高频时钟信号转换成低频的时钟信号,用于触发控制器和计数
器。
该分频器实现是五十分频,将五十赫兹的时钟信号分频成一赫兹的时钟信号。
生成的Symbol文件如图:
仿真波形如图:
图3-3图3-4
程序设计:
libraryieee;
useieee.std_logic_1164.all;
entityfenpinqiis
port
(clkin:
instd_logic;
clkout:
outstd_logic);
end;
architecturedevideroffenpinqiis
constantn:
integer:
=999;
signalcounter:
integerrange0to999;
signalClk:
std_logic;
begin
process(clkin)
begin
ifclkin'eventandclkin='1'then
ifcoumter=999then;
counter<=0;
clk<=notclk;
else
counter<=counter+1;
endif;
endprocess;
clkout<=clk;
end;
3.3.2控制器的设计
控制器的作用是根据计数器的计数值及t1的输入数据控制发光二极管的亮、灭,以及输出正计时数值给七段数码管的分位译码电路。
本控制器是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;生成的实体模块如图:
图3-5
仿真波形如图:
图3-6
程序设计:
libraryieee;
useieee.std_logic_1164.all;
entitycontrolis
port(clk:
instd_logic;
c1,c2,c3:
outstd_logic;
w1,w2,w3:
instd_logic;
r1,r2:
outstd_logic;
y1,y2:
outstd_logic;
g1,g2:
outstd_logic;
reset:
instd_logic);
endcontrol;
architectureaofcontrolis
typestate_spaceis(s3,s2,s1,s0);
signalstate:
state_space;
begin
process(clk)
begin
ifreset='1'then
state<=s0;
elseif(clk'eventandclk='1')then
casestateis
whens0=>
ifw1='1'then
state<=s1;
endif;
whens1=>
ifw2='1'then
state<=s2;
endif;
whens2=>
ifw3='1'then
state<=s3;
endif;
whens3=>
ifw2='1'then
state<=s0;
endif;
endcase;
endif;
endif;
endprocess;
c1<='1'whenstate=s0else'0';
c2<='1'whenstate=s1orstate=s3else'0';
c3<='1'whenstate=s2else'0';
r1<='1'whenstate=s1orstate=s0else'0';
y1<='1'whenstate=s3else'0';
g1<='1'whenstate=s2else'0';
r2<='1'whenstate=s2orstate=s3else'0';
y2<='1'whenstate=s1else'0';
g2<='1'whenstate=s0else'0';
enda;
3.3.3计数器的设计
计数器1的计数范围为由t1引脚输入。
计到t1后,下一个时钟沿恢复到0,开始下一轮计数。
仿真波形如图当t1取7时,计数器计数到7后清零。
实体模块和计数器2和计数器3的实体模块如图。
图3-7图3-8图3-9
仿真波形:
图3-10
程序设计:
绿灯计数器:
libraryieee;
useieee.std_logic_1164.all;
entitycounter1is
port(clk:
instd_logic;
enable:
instd_logic;
t1:
inintegerrange0to30;
c1:
outstd_logic);
endcounter1;
architectureaofcounter1is
begin
process(clk)
variablecnt:
integerrange0to30;
begin
if(clk'eventandclk='1')then
ifenable='1'andcnt cnt: =cnt+1; else cnt: =0; endif; ifcnt=t1then c1<='1'; else c1<='0'; endif; endif; endprocess; enda; 图3-11 红灯计数器: libraryieee; useieee.std_logic_1164.all; entitycounter2is port(clk: instd_logic; enable: instd_logic; t1: inintegerrange0to30; c2: outstd_logic); endcounter2; architectureaofcounter2is constanty: Integer: =3; signalt2: integerrange0to30; begin process(clk) variablecnt: integerrange0to30; begin t2<=t1+y; if(clk'eventandclk='1')then ifenable='1'andcnt cnt: =cnt+1; else cnt: =0; endif; ifcnt=t2then c2<='1'; else c2<='0'; endif; endif; endprocess; enda; 图3-12 黄灯计数器: libraryieee; useieee.std_logic_1164.all; entitycounter3is port(clk: instd_logic; enable: instd_logic; c3: outstd_logic; m3: outintegerrange0to5); endcounter3; architectureaofcounter3is begin process(clk) variablecnt: integerrange0to5; begin if(clk'eventandclk='1')then ifenable='1'andcnt<5then cnt: =cnt+1; else cnt: =0; endif; ifcnt=5then c3<='1'; else c3<='0'; endif; endif; m3<=cnt; endprocess; enda; 图3-13 3.3.4分位译码电路的设计--1 由于控制器输出的正计时数值可能是1位或者2位十进制数,因此在七段数码管的译码电路前要加上分位电路(即将其分成2个1位的十进制数,如40分成4和0,5分为0和5)。 与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。 控制器中,引入了寄存器。 本电路中分位电路使用组合逻辑电路实现。 生成的实体模块如图2-11及仿真波形如图2-12。 图3-14图3-15 程序设计: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYFenwei1IS PORT (Numin: INintegerRANGE0TO45; NumA,NumB: OUTIntegerRANGE0to9 ); END; ARCHITECTUREbehaviorOFFenwei1IS BEGIN process(Numin) BEGIN IFNumin>=40THEN NumA<=4; NumB<=Numin-40; ELSIFNumin>=30THEN NumA<=3; NumB<=Numin-30; ELSIFNumin>=20THEN NumA<=2; NumB<=Numin-20; ELSIFNumin>=10THEN NumA<=1; NumB<=Numin-10; ELSE NumA<=0; NumB<=Numin; ENDIF; ENDPROCESS; END; 3.3.5分位译码电路的设计—2 分位译码电路2和分位译码电路1的功能是一样的,为了区别两个不同的引脚 NumC[3..0]和NumD[3..0]因此再设计一个电路,只是引脚名的名称不同。 图3-16图3-17 程序设计: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYFenwei2IS PORT (Numin: INintegerRANGE0TO45; NumC,NumD: OUTIntegerRANGE0to9 ); END; ARCHITECTUREbehaviorOFFenwei2IS BEGIN process(Numin) BEGIN IFNumin>=40THEN NumC<=4; NumD<=Numin-40; ELSIFNumin>=30THEN NumC<=3; NumD<=Numin-30; ELSIFNumin>=20THEN NumC<=2; NumD<=Numin-20; ELSIFNumin>=10THEN NumC<=1; NumD<=Numin-10; ELSE NumC<=0; NumD<=Numin; ENDIF; ENDPROCESS; END; 3.3.6数码管驱动的设计——绿灯和红灯驱动 本模块设计为时序逻辑电路,采用下降沿触发。 实体模块如图2-14和仿真波形。 图3-18 程序设计: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYqudongIS PORT (clk: inSTD_LOGIC; enable: instd_logic; data: INintegerRANGE0TO5; segout: outSTD_LOGIC_VECTOR(6downto0)); END; ARCHITECTUREbehaviorOFqudongIS BEGIN process(Clk,data) BEGIN IFfalling_edge(Clk)andenable='1'then casedatais when0=>segout<="0111111"; when1=>segout<="0000110"; when2=>segout<="1011011"; when3=>segout<="1001111"; when4=>segout<="1100110"; when5=>segout<="1101101"; when6=>segout<="1111101"; when7=>segout<="0000111"; when8=>segout<="1111111"; when9=>segout<="1101111"; whenothers=>null; ENDCASE; ENDIF; ENDPROCESS; END; 3.3.7数码管驱动的设计——黄灯驱动 由于黄灯固定时间是5秒,因此变化范围是0至5秒,七段数码管 只要能显示0-5的数就行了,所以单独用一个数码管驱动。 图3-19图3-20 程序设计: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYHDqudongISPORT (clk: inSTD_LOGIC; enable: instd_logic; data: INintegerRANGE0TO5; segout: outSTD_LOGIC_VECTOR(6downto0)); END; ARCHITECTUREbehaviorOFHDqudongIS BEGIN process(Clk,data) BEGIN IFfalling_edge(Clk)andenable='1'then casedatais when0=>segout<="0111111"; when1=>segout<="0000110"; when2=>segout<="1011011"; when3=>segout<="1001111"; when4=>segout<="1100110"; when5=>segout<="1101101"; whenothers=>null; ENDCASE; ENDIF; ENDPROCESS; END; 4.顶层连接及其仿真 4.1顶层文件的设计 libraryieee; useieee.std_logic_1164.all; entitydingcengis port(clkd,resetd,cond,con1d: instd_logic; count1: outstd_logic_vector(6downto0); count2: outstd_logic_vector(6downto0); count3: outstd_logic_vector(6downto0); count4: outstd_logic_vector(6downto0); reda,greena,yellowa,greena1: outstd_logic; redb,greenb,yellowb,greenb1: outstd_logic); endentitydingceng; clkd—脉冲输入 resetd—复位信号 con—手动控制信号 con1d—状态控制信号 count1,count2,count3,count4—七段数码管显示 reda,greena,yellowa,greena1,redb,greenb,yellowb,greenb1—发光二极管输出 4.2整体仿真波形 图4-1 语言描述: 在3-1图中可以看出甲、乙车道绿灯亮的时间加上黄灯亮的时间等于甲车道红灯灭的时间。 同时我们可以看出该系统满足我们所需的要求。 5.心得体会 通过此次课程设计,使我对EDA程序设计有了进一步的学习,进一步的认识;在程序的设计,程序的调试方面都学到了很多东西,现在能够熟练的使用QuartsII,能够用VHDL语言编写简单的、实用的小程序,这次EDA课程设计重点学习了交通灯控制电路程序的编写、仿真、还有硬件下载、操作等过程。 在这期间查阅了大量的关于EDA的资料,特别是在网上和图书馆我找到了大量的关于VHDL编程的资料。 此外,在整个过程中我认为调试程序是很重要的,要有耐心和探索研究的能力。 我在第一次编译时有三十几个错误,其中有输入错误、语法错误,如: 工程名和实体名不一致,少了分号或者少了ENDIF或者忘加了一个分号等错误。 发现错误之后就要一遍一遍的仔细查错,直到没有错误,然后可以进行波行仿真了。 通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。 参考文献: 潘松,黄继业.《EDA技术实用教程》.科学出版社.2006.9 李辉.《PLD与数字系统设计》.西安电子科技大学出版社.2005 蒋璇.臧蠢华.《数字系统设计与PLD应用》(第二版).电子工业出版社.2005 曾繁泰等.《VHDL 程序设计》(第二版).清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)