基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx

上传人:b****1 文档编号:619446 上传时间:2023-04-29 格式:DOCX 页数:27 大小:208.82KB
下载 相关 举报
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第1页
第1页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第2页
第2页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第3页
第3页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第4页
第4页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第5页
第5页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第6页
第6页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第7页
第7页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第8页
第8页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第9页
第9页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第10页
第10页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第11页
第11页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第12页
第12页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第13页
第13页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第14页
第14页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第15页
第15页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第16页
第16页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第17页
第17页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第18页
第18页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第19页
第19页 / 共27页
基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx

《基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx(27页珍藏版)》请在冰点文库上搜索。

基于quartusll 交通灯控制系统企业管理Word格式文档下载.docx

由于不能使用7448自动译码集成电路,故在LED七段显示数码管显示时间时,要把计时结果转换为七段码输出到相应的LED七段显示数码管上,因此还需要一个转换电路。

交通灯状态控制也需要一个电路,当有使能信号及无紧急情况下,交通灯状态不发生变化,有紧急情况时,两个方向上均为红灯亮,紧急情况消除后,回到原来状态,无使能信号时,交通灯状态不变.

通过上面的分析,不难得知可以把交通灯控制系统划分为6个模块:

键输入模块,时钟分频模块,计时模块,选通模块,显示模块,控制模块。

各个模块之间的连接关系如下:

reset                  showtime

on_off

reset0 on_off0

        clk1

    timel,times

  clk2   clk0 choose4

三、总体结构框图

 No

    yes

            Yes

  No

 No    

     Yes

 No

        Yes         Yes

No

  Yes

        Yes

    No

No

    Yes

   No

      Yes

四、分块电路设计.

(1)键输入模块(keyin)

紧急情况on_off;

用来消除抖动的时钟信号clk1,由时钟分频模块提供。

去抖后的提示信号on_off0.

(2)时钟分频模块(clk_div)

外部时钟信号clk;

输出信号:

消除抖动的时钟信号clk1;

计时内部时钟信号clk2;

产生选通信号的时钟信号clk0.

(3)计时模块(time):

定时计时时钟clk2,由时钟分频模块提供;

去抖动后的提示信号on_off0;

复位信号reset;

状态提示信号state(1downto 0);

东西方向的十位信号eq1(3 downto 0);

东西方向的个位信号eq0(3downto 0);

南北方向的十位信号sq1(3 downto 0);

南北方向的个位信号sq0(3downto0);

使能信号timel,times。

(4)选通模块(choose):

选通时钟信号clk0,由时钟分频模块提供。

选通信号choose4(3downto 0)。

(5)显示模块(display):

计时的十位或个位信号;

控制LED七段显示数码管的七位数组型信号。

(6)控制模块(keep):

复位信号reset;

去抖后的紧急情况提示信号on_off0;

定时计时时钟信号clk2;

使能信号timel,times;

东西方向交通灯状态控制信号state1(3 downto0);

南北方向交通灯状态控制信号state2(3downto 0);

交通灯状态提示信号state(1downto0)。

五、总体电路图(图形法)。

六、仿真波形

状态变化仿真图:

以下显示选通信号的仿真波形

七、源程序

主模块:

---—-----—traffic module----——---

libraryieee;

use ieee。

std_logic_1164。

all;

useieee.std_logic_arith.all;

useieee。

std_logic_unsigned。

all;

entitytracficis

port(reset :

instd_logic;

---—--—------—-----——--复位信号

   clk :

in std_logic;

-——-——--—---——-—---——-—外部时钟信号

  showtime1,showtime2,showtime3,showtime4:

outstd_logic_vector(6 downto0);

—————--—-————---——----—--- 控制LED七段显示数码管的七位数组型信号

 choose4:

outstd_logic_vector(3downto0);

——--——--选通信号

  on_off  :

instd_logic;

—-———------—---——----——-紧急情况控制信号

state1,state2:

 out std_logic_vector(3downto0));

---交通灯状态控制信号

 end tracfic;

architecturesystemoftracficis——-—-—--—————----元件例化调用

component keyin-—---——---—-—-—---——--—---———--—-去抖动模块

   port(a,b:

instd_logic;

  c:

outstd_logic);

 endcomponent;

component time-—-———-—---—-—-—--——-—---—-—---——--计时模块

 port(a,b,k:

in std_logic;

 c:

instd_logic_vector(1downto0);

  d,e,f,g:

out std_logic_vector(3downto 0);

  j,h:

outstd_logic);

 endcomponent;

 component choose—----—-———-—--—---—-——--———-————选通模块

 port(a:

instd_logic;

b:

out std_logic_vector(3downto0));

 end component;

 componentdisplay-—--—---——-—-—---—----——-------显示模块

 port(a:

instd_logic_vector(3downto0);

     b:

outstd_logic_vector(6downto0));

  end component;

componentclk_div----—----—-—--—---———----—----——时钟分频模块

 port(a:

instd_logic;

      b,c,d:

outstd_logic);

 endcomponent;

component keep—--—-—---—-——-—----————------------状态控制模块

port(a,b,c,g,j:

instd_logic;

  d,e:

out std_logic_vector(3downto 0);

 f:

outstd_logic_vector(1downto0));

endcomponent;

signalon_off0:

std_logic;

   紧急情况经去抖后的输出信号;

signalstate:

std_logic_vector(1downto0);

 控制计数器的状态提示信号;

 signalclk0,clk1,clk2:

std_logic;

    时钟分频后的输出信号;

signaleq0,sq0:

std_logic_vector(3downto 0);

南北和东西计数器的个位输出;

signaleq1,sq1:

std_logic_vector(3downto 0);

 南北和东西计数器的十位输出;

signaltimel,times:

std_logic;

    计数器对控制器的反馈信号;

begin             用信号把各个模块连起来;

 u1:

keyin   portmap(clk1,on_off,on_off0);

u3:

time  portmap(clk2,on_off0,reset,state,eq0,eq1,sq0,sq1,timel,times);

u4:

choose portmap(clk0,choose4);

u5:

display portmap(eq0,showtime1);

 u6:

displayportmap(eq1,showtime2);

u7:

displayport map(sq0,showtime3);

 u8:

displayport map(sq1,showtime4);

u9:

keep  portmap(on_off0,timel,times,clk2,reset,state1,state2,state);

u10:

clk_divportmap(clk,clk0,clk1,clk2);

endsystem;

去抖模块:

----——--keyinmodule—-——-

libraryieee;

useieee。

std_logic_1164.all;

entitykeyinis

 port(A,B:

instd_logic;

  C :

outstd_logic);

end keyin;

architecture keyin_arcof keyinis

  componentkand2

 port(A,B :

instd_logic;

    C:

outstd_logic);

endcomponent;

 componentkdf

port(A,B :

instd_logic;

 C,D:

outstd_logic);

endcomponent;

   componentknand2

  port(A,B:

instd_logic;

 C:

outstd_logic);

endcomponent;

signal TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:

std_logic;

begin

 u0:

knand2 portmap(A,TMP1,TMP2);

u1:

knand2portmap(TMP2,TMP3,TMP1);

 U2:

kdfportmap(TMP2,B,TMP4,TMP3);

U3:

 kdf    portmap(TMP4,B,TMP6,TMP5);

 u4:

kand2portmap(TMP4,TMP5,C);

endkeyin_arc;

libraryieee;

—-—twoinputsandgatedescription

useieee.std_logic_1164.all;

entity kand2 is

port(A,B:

instd_logic;

   C :

outstd_logic);

endkand2;

architecturekand2_arcofkand2is

begin

 C<

=Aand B;

endkand2_arc;

———end oftwoinputsandgatedescription

libraryieee;

--—twoinputs and_notgatedescription

useieee.std_logic_1164。

entity knand2 is

port(A,B:

in std_logic;

  C :

outstd_logic);

endknand2;

architectureknand2_arc ofknand2 is

begin

 C〈=not(Aand B);

end knand2_arc;

—--endoftwoinputs and_not gate description

libraryieee;

-—-D triggerdescription

useieee。

std_logic_1164.all;

entity  kdfis

   port(A,B:

in std_logic;

C,D:

outstd_logic);

endkdf;

architecturekdf_arcofkdf is

process(B)

begin

 if(B'

eventandB='

1’)thenC〈=A;

D<

=notA;

  endif;

 end process;

end kdf_arc;

选通模块:

该模块是为节省资源而设的,实验中有四个LED七段数码管显示计数,点亮一个LED需电流5-50mA,同时点亮4个LED,CPLD可能无法负荷这样的电流驱动,而且功率太大,散热也是问题。

同时这么做也容易造成电路被烧毁,因此需要逐个循环点亮.又为使显示结果持续不致闪烁抖动,只需每个扫描频率超过人眼视觉暂留频率24Hz以上,就能达到.选择200Hz作为时钟,分到4个数码管,每个数码管50Hz(大于24Hz),故不会有闪烁。

libraryieee;

-------choosemodule----———-——

useieee.std_logic_1164。

all;

useieee。

std_logic_unsigned。

entitychooseis

 port(a:

instd_logic;

  b:

outstd_logic_vector(3downto0));

endchoose;

architecture choose_arcofchooseis

signalm :

integer range0to3;

begin

 process(a)

 begin

  if(a'

event and a='

1')then

 if(m=3)thenm〈=0;

 elsem<

=m+1;

  end if;

 endif;

casemiswhen0=〉b〈=”0111";

 when 1=>b〈=”1011"

 when2=〉b〈=”1101"

   when3=>

b<="1110";

endcase;

endprocess;

endchoose_arc;

分频模块:

实验中需要三个不同频率的时钟:

消抖电路需要10Hz的时钟,选通电路需要200Hz的时钟,计时需要1Hz的时钟。

外部提供的时钟的频率为1MHz,故需要经过分频得到,但由于外部时钟的频率和我们所需要的时钟的频率相差太远,一次分频到底又占用太多的资源,所以我采用的是先对外部时钟进行一定的分频,再依次向下分,得到我们需要的时钟,这样可以节省很多资源。

libraryieee;

---——clk_div module--—-——-

use ieee.std_logic_1164.all;

entity clk_divis

 port(a:

instd_logic;

--------—--—-----——--—-————---外部时钟信号

   b:

out std_logic;

—------—--—-----—--—--—---——-频率为200Hz的时钟信号

c:

outstd_logic;

—--—-—--—-----—-—---—----—---频率为10Hz的时钟信号

 d:

outstd_logic);

————-—---————-—--—--—-——----频率为1Hz的时钟信号

endclk_div;

architectureclk_div_arcofclk_divis

signalclk_10k:

std_logic;

signal clk_200:

std_logic;

signal clk_10:

std_logic;

signalclk_1:

std_logic;

signal m:

integerrange 0to100;

signal n:

integerrange0to50;

signall:

integerrange0to20;

signalg:

integerrange0to10;

begin

p1:

 process(a)-—--—-—----先对外部时钟进行100分频,得到频率为10KHz的时钟信号

begin

if(a'

event anda=’1')then

 ifm=99thenm<=0;

 elsem〈=m+1;

  endif;

 if(m<=49) thenclk_10k<

='

0’;

 elseclk_10k<='

1';

  end if;

  endif;

endprocess;

p2:

process(clk_10k)-—--—--对10KHz的时钟信号再进行50分频,得到200Hz的时钟信号

begin

if(clk_10k'

eventandclk_10k=’1')then

   ifn=49thenn<=0;

elsen<

=n+1;

 endif;

   if n<=24thenclk_200<=’0’;

   else clk_200<

='

1';

    endif;

 endif;

endprocess;

b<=clk_200;

p3:

process(clk_200)--—-对200Hz的时钟信号进行20分频,得到10Hz的时钟信号

 begin

if(clk_200'eventandclk_200='

1'

)then

  if l=19thenl〈=0;

 else l<=l+1;

  endif;

  ifl<

=9thenclk_10〈='

0’;

 else clk_10<

=’1'

endif;

 endif;

end process;

c<

=clk_10;

p4:

process(clk_10)-—-—对10Hz的时钟信号进行10分频,得到需要的1 Hz的时钟信号

 begin

  if(clk_10'

eventandclk_10='

1')then

  if g=9theng<

=0;

  else g<

=g+1;

   endif;

  ifg〈=4 thenclk_1〈='

0'

 elseclk_1<=’1’;

   endif;

   endif;

  endprocess;

d<

=clk_1;

endclk_div_arc;

显示模块:

——--—-display module-—------

library ieee;

useieee.std_logic_1164。

all;

useieee。

std_logic_signed.all;

useieee。

std_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2