eda大作业

发布 2020-02-25 08:52:28 阅读 5763

eda--交通灯设计。

电子工程学院。

一﹑设计任务。

设计一个十字路口的交通灯控制系统,用实验平台上的led发光二极管显示车辆通过的方向(东西和南北各一组),用数码管显示该方向的剩余时间。要求:工作顺序为东西方向红灯亮45秒,前40秒南北方向绿灯亮,后5秒黄灯亮。

然后南北方向红灯亮45秒,前40秒东西方向绿灯亮,后5秒黄灯亮。依次重复。有紧急事件时允许将某方向一直开绿灯或者开红灯,另外允许特定情况两方向均为红灯,车辆禁行,比如十字路口恶**通事故时,东西,南北两个方向均有两位数码管适时显示该方向亮灯时间。

二、题目分析与整体构思。

1)该交通灯控制器应具备的功能。

设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯45sec,黄灯5sec,绿灯40sec,同时用数码管指示当前状态(红、黄、绿)剩余时间。另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧急状态解除后,重新计数并指示时间。

2) 实现方案。

一从题目中计数值与交通灯的亮灭的关系如图(1)所示。

三﹑硬件电路设计。

1)分频器。

分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器实现的是4分频。

library ieee;

use entity fpq is

port(cin:in std_logic;

clk:buffer std_logic);

end;architecture devider of fpq is

constant n:integer:=2;

signal counter:integer range 0 to n;

begin

process(cin,clk)

begin

if falling_edge(cin)then

if counter=n then

counter<=0;

clk<=not clk;

elsecounter<=counter+1;

end if;

end if;

end process;

end;2)控制器设计。

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。此外,当检测到特殊情况(hold=‘1’)发生时,无条件点亮红灯的二极管。本控制器可以有两种设计方法,一种是利用时钟烟的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。

这两种方法各有所长,必须根据所用器件的特性进行选择:比如有些fpga有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些cpld的组合逻辑资源则比较多,用第二种方法可能更好。

library ieee;

use entity ctr is

port (

hold:in std_logic;

cn:in integer range 0 to 89;

numa,numb:out integer range 0 to 45;

aout:out std_logic_vector(2 downto 0);

bout:out std_logic_vector(2 downto 0));

end;architecture bhe of ctr is

beginprocess(hold,cn)

beginif hold='0' then

aout<="011";

bout<="011";

end if;

if cn<=4 and hold='1' then

numa<=cn;

aout<="101";

elsif cn<=44 and hold='1' then

numa<=cn-5;

aout<="110";

elsif hold='1' then

numa<=cn-45;

aout<="011";

end if;

if cn<=44 and hold='1'then

numb<=cn;

bout<="011";

elsif cn<=49 and hold='1'then

numb<=cn-45;

bout<="101";

elsif hold='1' then

numb<=cn-50;

bout<="110";

end if;

end process;

end;3)计数器设计。

这里需要的计数器的计数范围为0-90。计到90后,下一个时钟沿回复到0,开始下一轮计数。此外,当检测到特殊情况(hold=‘1’)发生是,计数器暂停计数,而系统复位信号reset则使计数器异步清零。

4)分位译码电路设计。

因为控制器输出的到计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如25分为2和5,7分为0和7)。

与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。为了让读者开拓眼界,分位电路就用组合逻辑电路实现。

library ieee;

use entity fw is

portni:in integer range 0 to 45;

numa,numb:out integer range 0 to 9

end;architecture beh**ior of fw is

beginprocess(ni)

beginif ni>=40 then

numa<=4;

numb<=ni-40;

elsif ni>=30 then

numa<=3;

numb<=ni-30;

elsif ni>=20 then

numa<=2;

numb<=ni-20;

elsif ni>=10 then

numa<=1;

numb<=ni-10;

else numa<=0;

numb<=ni;

end if;

end process;

end;5)数码管驱动设计。

串行连接,即每个数码管对应的引脚都接在一起(如每个数码管的a引脚都接到一起,然后再接到cpld/fpga上的一个引脚上),通过控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,led不亮;共阳极的公共端为低电平时,led不亮)。

串行法的优点在于消耗的系统资源少,占用的i/o口少,n个数码管只需要(7+n)个引脚(如果需要小数点,则是(8+n)个引脚)。其缺点是控制起来不如并行法容易。

library ieee;

use use

entity disp is

port(ain:in std_logic_vector(3 downto 0);

aout:out std_logic_vector(6 downto 0));

end;architecture art7 of disp is

beginprocess(ain)is

begincase ain is

when "0000"=>aout<="1000000";

when "0001"=>aout<="1111001";

when "0010"=>aout<="0100100";

when "0011"=>aout<="0110000";

when "0100"=>aout<="0011001";

when "0101"=>aout<="0010010";

when "0110"=>aout<="0000010";

when "0111"=>aout<="1111000";

when "1000"=>aout<="0000000";

when "1001"=>aout<="0010000";

when others =>aout<="0001110";

end case;

end process;end;

library ieee;

use use

entity kz is

port(clk:in std_logic;

i1:in std_logic_vector(6 downto 0);

i2:in std_logic_vector(6 downto 0);

i3:in std_logic_vector(6 downto 0);

i4:in std_logic_vector(6 downto 0);

o1:out std_logic_vector(6 downto 0);

o2:out std_logic_vector(6 downto 0);

o3:out std_logic_vector(6 downto 0);

o4:out std_logic_vector(6 downto 0));

end;architecture art9 of kz is

beginprocess(clk,i1,i2,i3,i4) is

beginif clk='1' then

o1<=i1;

o2<=i2;

o3<=i3;

o4<=i4;

end if;

if clk='0' then

o1<="1111111";

o2<="1111111";

o3<="1111111";

o4<="1111111";

end if;

end process;

end;7)下图为交通灯控制器的顶层文件连接图。

电路图第一部分:

电路图第二部分:

2.**结果。

3.心得体会。

老师布置的这次eda设计实验使我感触良多。第一次接触硬件,心里有点小激动小紧张,一是自己基础较薄弱,二是动手能力较弱,以至于我如何调试波形不出,就算**是参考同学的我也调不出!这使我略微烦躁,但是在我遇到问题时,总是有同学向我伸出援手,助我渡过难关,帮我理解**和波形,这让我再次感受到同学的耐心和合作的力量。

最后通过这次试验,不紧让我学习了vhdl语言,quartus ii的用法,还提升了我查阅资料,学习新技能新知识与他人合作的能力,感谢老师!

EDA大作业

eda技术课程大作业。设计题目 4线 16线译码器设计。学生姓名。学号。专业班级 09电子信息1班 2012年5月26日。4线 8线译码器设计。1.设计背景与设计方案。1.1设计背景。译码器是组合逻辑电路的一个重要器件,它是一种将一种编码转换为另一种编码的逻辑电路,在编码时,每一种二进制 都赋予了特...

EDA大作业

eda技术课程大作业。设计题目 双二选一多路选择器。学生姓名 王行智。学号 201002050002 专业班级 电气自动化技术一班。2012 年 5 月 26日。1.设计背景 在很多时候,要完成一项工作,需要进行两次判断和选择,对于机器和人都是如此,这就需要两个选择器,双2选1多路选择器就应运而生了...

EDA大作业

一 设计方案。1 设计一个汽车尾灯控制器,利用eda软件 max plusii 进行编译及 设计输入可采用vhdl硬件描述语言输入法和原理图输入法,通过 查看设计的可行性,因条件有限,只能进行简单的 实验。2 设计要求。1 汽车尾部左右两侧各有多盏指示灯。2 汽车正常行驶时指示灯都不亮。3 汽车右转...