最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

十字路口交通灯控制器的VHDL设计

来源:动视网 责编:小OO 时间:2025-10-02 00:58:54
文档

十字路口交通灯控制器的VHDL设计

基于FPGA的半整数分频器设计一.系统设计任务及功能概述1.系统设计任务基于FPGA的半整数分频器设计任务要求:设有一个5MHz(或7、9、11、13、15、17、19、21、23、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。2.小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间
推荐度:
导读基于FPGA的半整数分频器设计一.系统设计任务及功能概述1.系统设计任务基于FPGA的半整数分频器设计任务要求:设有一个5MHz(或7、9、11、13、15、17、19、21、23、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。2.小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间
基于FPGA的半整数分频器设计

一.系统设计任务及功能概述

1.系统设计任务基于FPGA的半整数分频器设计

任务要求:设有一个5MHz(或7、9、11、13、15、17、19、21、23 、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。

2.小数分频的基本原理

小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:

F=(9×10+1×11)/(9+1)=10.1

3.系统功能概述

本系统是一个基于FPGA的半整数分频器,具有以下功能:有一个5MHz的时钟源,通过半整数分频器后电路中可以产生的是一个2MHz的时钟信号

二.系统设计方案和程序设计

1.系统设计方案

由于分频比为2.5,因此采用小数分频。

分频系数为N-0.5的分频器,其电路可由一个异或门、一个模N计数器和二分频器组成。下图给出了通用半整数分频器电路组成。

由于分频比为2.5则本实验中先要设计一个模11的计数器,然后建立模11计数器的元件,再利用原理图设计完成分频器的设计

2.VHDL程序设计

模11计数器VHDL程序如下:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity jshq11 is                          --定义实体jshq

 port(clr,ena,clk:in std_logic;

      qa,qb,qc,qd:out std_logic); 

end entity jshq11;

architecture art of jshq11 is          --定义了结构体

 signal cqi: std_logic_vector(0 to 3);

 begin

 process(clk,clr,ena)is             --进程开始,clk,clr,ena为敏感信号

 begin

if clr='1' then cqi<="0000";

 else

if clk'event and clk='1'then

  if ena='1'then

   if cqi=10then cqi<="0000";

   else

cqi<=cqi+1;

end if;

  end if;

 end if;

end if;

end process;

qa<=cqi(0);                        -- 信号赋值

qb<=cqi(1);

qc<=cqi(2);

qd<=cqi(3);

end architecture art; 

三、仿真结果及原理图

1.模11计数器仿真波形图

图1计数器仿真波形图

2.模11计数器元件图

图2计数器元件图

3.半整数分频器原理图

 

图3 分频器原理图

4.半整数分频器仿真波形图

图4分频器仿真波形图

5.半整数分频器元件图

图5分频器元件图

6 输入输出管脚说明

表1 半整数分频器管脚

接口名称类型

(输入/输出)

结构图上的信号名引脚号说明
INCLKININCLK2系统时钟 21MHz

OUTCLKOUTOUTCLK3系统输出
QOUTQ4系统输出
三.课程设计总结

本次试验采用了程序与原理图相结合的设计方法,主要编写计数器的程序实现分频。经过一段时间的实验操作使我熟练的掌握了对软件maxplus2的使用,加深了对VHDL语言的了解,提高了编程能力。

掌握了一定的改错能力,业余还了解了一些关于EDA在实际中扮演的重要角色。这次实习获益匪浅,增加了对这门课的兴趣。

四.参考文献

[1] 谭会生,瞿遂春.EDA综合应用与实例分析. 西安:西安电子科技大学出版社,2004,11.

[2]潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.

[3] 谭会生,张昌凡编著.EDA技术及应用. 西安:西安电子科技大学出版社.2011,1.

[4] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

[5] 刘艳萍,高振斌,李志军.EDA实用技术及应用[M].北京:国防工业出版社,2006

  十字路口交通灯控制器的VHDL设计

一.系统设计任务及功能概述

1.系统设计任务

设计一个由一条主干道和一条支干道的汇合点形成的十字交叉路口的交通灯控制器.

2.系统功能概述

(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。

(2)主干道处于常允许通行状态,而支干道有车来才允许通行。 

(3)当主、支道均有车时,两者交替允许通行,主干道每次放行45s,支干道每次放行25s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5s的黄灯作为过渡,并进行减计时显示。

二.系统设计方案和程序设计

1.系统设计方案 

交通灯的控制电路主要由四大模块组成,通过传感器来判别主干道与支干道车辆运行情况,然后由交通灯实现车辆的自动控制。交通控制模块发出主支道控制信号,选择定时模块工作,控制显示模块。定时模块由45s,25s,5s三部分组成,实现红黄绿三个灯的显示时间。显示控制模块为译码做准备,相互配合实现时间显示。

图1  设计思路框图

 2.VHDL程序设计

(1)交通控制模块

a.交通控制模块的程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY JTD IS

PORT(CLK,SM,SB:IN STD_LOGIC; --SM,SB为主道和支道传感器信号

MR,MY,MG,BR,BY,BG:OUT STD_LOGIC);

END ENTITY JTD;

ARCHITECTURE ART OF JTD IS

TYPE STATE_TYPE IS(A,B,C,D);

SIGNAL STATE:STATE_TYPE;

BEGIN

CNT:PROCESS(CLK)IS -进程开始,CLK为敏感信号

VARIABLE S:INTEGER RANGE 0 TO 45;  定义变量范围0到45

VARIABLE CLR,EN:BIT;  

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF CLR='0'THEN

S:=0;

ELSIF EN='0'THEN

S:=S;

ELSE

S:=S+1;

END IF;

CASE STATE IS --CASE四种选择状态

WHEN A=>MR<='0';MY<='0';MG<='1';

  IF(SB AND SM)='1'THEN

  IF S=45 THEN --状态转换

STATE<=B;CLR:='0';EN:='0';

  ELSE

STATE<=A;CLR:='1';EN:='1';

  END IF;

  ELSIF SM='0'THEN

STATE<=B;CLR:='0';EN:='0';

STATE<=A;CLR:='1';EN:='1';

  END IF;

WHEN B=>MR<='0';MY<='1';MG<='0';

BR<='1';BY<='0';BG<='0';

STATE<=C;CLR:='0';EN:='0';

WHEN C=>MR<='1';MY<='0';MG<='0';

  IF S=25 THEN

  ELSIF SB='0'THEN

  ELSE

WHEN D=>MR<='1';MY<='0';MG<='0';

  IF S=5 THEN

END IF;

END CASE;

END IF;

END PROCESS CNT;

END ARCHITECTURE ART;

b.交通控制模块的波形仿真图

图2交通控制模块的波形仿真图

c. 交通控制模块的元件图

  

图3  交通控制模块生成元件图

d. 输入、输出接口说明

表1 交通控制模块的输入\输出接口说明

接口名称类型(输入\输出)

      引脚

      说明

CLKIN1时钟信号
SMIN3 主道车信号

SBIN5 支道车信号

       MROUT2     主道红灯

       MGOUT4主道绿灯
       MYOUT6主道黄灯
       BGOUT8支道绿灯
       BYOUT10支道黄灯
       BROUT12支道红灯
(2) 45s,25s,5s定时模块

a.45s定时模块的程序设计

——CNT45S

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT45S IS

PORT(SB,CLK,EN45:IN STD_LOGIC;

DOUT45M,DOUT45B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY CNT45S;

ARCHITECTURE ART OF CNT45S IS

SIGNAL CNT6B:STD_LOGIC_VECTOR(5 DOWNTO 0);   --信号类型矢量类

BEGIN

PROCESS(SB,CLK,EN45)IS                          --进程开始

BEGIN

IF SB='0'THEN CNT6B<=CNT6B-CNT6B-1;

ELSIF(CLK'EVENT AND CLK='1')THEN

IF EN45='1'THEN CNT6B<=CNT6B+1;                --加法计数器

ELSIF EN45='0'THEN CNT6B<=CNT6B-CNT6B-1;

       END IF;

      END IF;

END PROCESS;

PROCESS(CNT6B)IS

BEGIN

CASE CNT6B IS                                         --倒计时

WHEN"000000"=>DOUT45M<="01000101";DOUT45B<="01010000";

WHEN"000001"=>DOUT45M<="01000100";DOUT45B<="01001001";

WHEN"000010"=>DOUT45M<="01000011";DOUT45B<="01001000";

WHEN"000011"=>DOUT45M<="01000010";DOUT45B<="01000111";

WHEN"000100"=>DOUT45M<="01000001";DOUT45B<="01000110";

WHEN"000101"=>DOUT45M<="01000000";DOUT45B<="01010101";

WHEN"000110"=>DOUT45M<="00111001";DOUT45B<="01000100";

WHEN"000111"=>DOUT45M<="00111000";DOUT45B<="01000011";

WHEN"001000"=>DOUT45M<="00110111";DOUT45B<="01000010";

WHEN"001001"=>DOUT45M<="00110110";DOUT45B<="01000001";

WHEN"001010"=>DOUT45M<="00110101";DOUT45B<="01000000";

WHEN"001011"=>DOUT45M<="00110100";DOUT45B<="01101001";

WHEN"001100"=>DOUT45M<="00110011";DOUT45B<="00111000";

WHEN"001101"=>DOUT45M<="00110010";DOUT45B<="00110111";

WHEN"001110"=>DOUT45M<="00110001";DOUT45B<="00110110";

WHEN"001111"=>DOUT45M<="00110000";DOUT45B<="00110101";

WHEN"010000"=>DOUT45M<="00101001";DOUT45B<="00110100";

WHEN"010001"=>DOUT45M<="00101000";DOUT45B<="00110011";

WHEN"010010"=>DOUT45M<="00100111";DOUT45B<="00110010";

WHEN"010011"=>DOUT45M<="00100110";DOUT45B<="00110001";

WHEN"010100"=>DOUT45M<="00100101";DOUT45B<="00110000";

WHEN"010101"=>DOUT45M<="00100100";DOUT45B<="00101001";

WHEN"010110"=>DOUT45M<="00100011";DOUT45B<="00101000";

WHEN"010111"=>DOUT45M<="00100010";DOUT45B<="00100111";

WHEN"011000"=>DOUT45M<="00100001";DOUT45B<="00100110";

WHEN"011001"=>DOUT45M<="00100000";DOUT45B<="00100101";

WHEN"011010"=>DOUT45M<="00011001";DOUT45B<="00100100";

WHEN"011011"=>DOUT45M<="00011000";DOUT45B<="00100011";

WHEN"011100"=>DOUT45M<="00010111";DOUT45B<="00100010";

WHEN"011101"=>DOUT45M<="00010110";DOUT45B<="00100001";

WHEN"011110"=>DOUT45M<="00010101";DOUT45B<="00100000";

WHEN"011111"=>DOUT45M<="00010100";DOUT45B<="00011001";

WHEN"100000"=>DOUT45M<="00010011";DOUT45B<="00011000";

WHEN"100001"=>DOUT45M<="00010010";DOUT45B<="00010111";

WHEN"100010"=>DOUT45M<="00010001";DOUT45B<="00010110";

WHEN"100011"=>DOUT45M<="00010000";DOUT45B<="00010101";

WHEN"100100"=>DOUT45M<="00001001";DOUT45B<="00010100";

WHEN"100101"=>DOUT45M<="00001000";DOUT45B<="00010011";

WHEN"100110"=>DOUT45M<="00000111";DOUT45B<="00010010";

WHEN"100111"=>DOUT45M<="00000110";DOUT45B<="00010001";

WHEN"101000"=>DOUT45M<="00000101";DOUT45B<="00010000";

WHEN"101001"=>DOUT45M<="00000100";DOUT45B<="00001001";

WHEN"101010"=>DOUT45M<="00000011";DOUT45B<="00001000";

WHEN"101011"=>DOUT45M<="00000010";DOUT45B<="00000111";

WHEN"101100"=>DOUT45M<="00000001";DOUT45B<="00000110";

WHEN OTHERS=>DOUT45M<="00000000";DOUT45B<="00000000";

END CASE;

END PROCESS;

END ARCHITECTURE ART;

b. 45s定时模块的波形仿真图

图4  45s定时模块的波形仿真图

c.45s定时模块的元件图

图5  45s定时模块的元件图

d. 输入、输出接口说明

表2 计分模块的输入\输出接口说明

接口名称类型(输入\输出)

      引脚

      说明

SB输入1支道车信号
CLK输入2分时钟信号
EN45输入5使能信号

DOU45S[7..0]

输出21输出
DOU45B[7..0]

输出22输出
a.25s定时模块的程序设计

——CNT25S

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity cnt25s is

port(sb,sm,clk,en25:in std_logic;

    dout25m,dout25b:out std_logic_vector(7 downto 0));

end entity cnt25s;

architecture art of cnt25s is

signal cnt5b:std_logic_vector(4 downto 0);

begin

process(sb,sm,clk,en25)is       

begin

if sb='0' or sm='0' then              --25进制加法计数器

cnt5b<=cnt5b-cnt5b-1;

elsif(clk'event and clk='1')then

if en25='1'then

cnt5b<=cnt5b+1;

elsif en25='0'then

cnt5b<=cnt5b-cnt5b-1;

end if;

end if;

end process;

process(cnt5b) is              --倒计时

begin

case cnt5b is

when "00000" =>dout25b<="00100101";dout25m<="00110000"; 

when "00001" =>dout25b<="00100100";dout25m<="00110000";

when "00010" =>dout25b<="00100011";dout25m<="00110000";

when "00011" =>dout25b<="00100010";dout25m<="00110000";

when "00100" =>dout25b<="00100001";dout25m<="00110000";

when "00101" =>dout25b<="00100000";dout25m<="00110000";

when "00110" =>dout25b<="00011001";dout25m<="00110000";

when "00111" =>dout25b<="00011000";dout25m<="00110000";

when "01000" =>dout25b<="00010111";dout25m<="00110000";

when "01001" =>dout25b<="00010110";dout25m<="00110000";

when "01010" =>dout25b<="00010101";dout25m<="00110000";

when "01011" =>dout25b<="00010100";dout25m<="00110000";

when "01100" =>dout25b<="00010011";dout25m<="00110000";

when "01101" =>dout25b<="00010010";dout25m<="00110000";

when "01110" =>dout25b<="00010001";dout25m<="00110000";

when "01111" =>dout25b<="00010000";dout25m<="00110000";

when "10000" =>dout25b<="00001001";dout25m<="00110000";

when "10001" =>dout25b<="00001000";dout25m<="00110000";

when "10010" =>dout25b<="00000111";dout25m<="00110000";

when "10011" =>dout25b<="00000110";dout25m<="00110000";

when "10100" =>dout25b<="00000101";dout25m<="00110000";

when "10101" =>dout25b<="00000100";dout25m<="00110000";

when "10110" =>dout25b<="00000011";dout25m<="00110000";

when "10111" =>dout25b<="00000010";dout25m<="00110000";

when "11000" =>dout25b<="00000001";dout25m<="00110000";

when others  =>dout25b<="00000000";dout25m<="00000000";

end case;

end process;

end architecture art;

.b. 25s定时模块的波形仿真图

图6  25s定时模块的波形仿真图

c.25s定时模块的元件图

 

图7   25s定时模块的元件图

a. 5s定时模块的程序设计

——CNT05S

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT05S IS                            --定义实体

  PORT(CLK,EN05M,EN05B:IN STD_LOGIC;

       DOUT5:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY CNT05S;

ARCHITECTURE ART OF CNT05S IS

 SIGNAL CNT3B:STD_LOGIC_VECTOR(2 DOWNTO 0);

 BEGIN

PROCESS(CLK,EN05M,EN05B)IS

 BEGIN

IF(CLK'EVENT AND CLK='1')THEN

 IF EN05M='1'OR EN05B='1'THEN

CNT3B<=CNT3B+1;

  ELSE

CNT3B<="000";

  END IF;

END IF;

END PROCESS;

 PROCESS(CNT3B)IS

  BEGIN

CASE CNT3B IS

WHEN"000"=>DOUT5<="00000101";

WHEN"001"=>DOUT5<="00000100";

WHEN"010"=>DOUT5<="00000011";

WHEN"011"=>DOUT5<="00000010";

WHEN"100"=>DOUT5<="00000001";

WHEN OTHERS=>DOUT5<="00000000";

END CASE;

 END PROCESS;

END ARCHITECTURE ART;

b. 5s定时模块的波形仿真图

图8  5s定时模块的波形仿真

c.、5s定时模块的元件图

图9  5s定时模块的元件图

(3)显示控制模块

 a.显示控制模块的程序

——XSKZ

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY XIANSHI IS

PORT(EN45,EN25,EN05M,EN05B:IN STD_LOGIC;

AIN45M,AIN45B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

AIN25M,AIN25B,AIN05:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

DOUTM,DOUTB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ENTITY XIANSHI;

ARCHITECTURE ART OF XIANSHI IS 

BEGIN

PROCESS(EN45,EN25,EN05M,EN05B)IS                   --选择模块

BEGIN

IF EN45='1'THEN

 DOUTM<=AIN45M(7 DOWNTO 0);DOUTB<=AIN45B(7 DOWNTO 0);

ELSIF EN05M='1'THEN

DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0);

ELSIF EN25='1'THEN

DOUTM<=AIN25M(7 DOWNTO 0);DOUTB<=AIN25B(7 DOWNTO 0);

ELSIF EN05B='1'THEN

DOUTM<=AIN05(7 DOWNTO 0);DOUTB<=AIN05(7 DOWNTO 0);

END IF;

END PROCESS;

END ARCHITECTURE ART;

b.25s定时模块的元件图

图10 显示控制生成元件图

三、十字路口交通灯控制器

设计交通控制器主要就是设计控制电路、定时时器电路和译码器电路三部分。在设计完这三部分的程序之后进行波形仿真,创建原件,其它的按照电路功能的要求直接调用器件,然后进行连接,实现其总体的功能。

1. 十字路口交通灯控制器原理图

图11 十字路口交通灯控制器原理图

2. 十字路口交通灯控制器的波形仿真图

图12 十字路口交通灯控制器的波形仿真图

3、十字路口交通灯控制器的元件图

图13 十字路口交通灯控制器的元件图

                

4、输入输出管脚说明

表3 交通灯控制器管脚

接口名称类型(输入/输出)引脚号说明
CLKIN1时钟脉冲
SMIN3主道传感器
SBIN5支道传感器
MROUT7主道红灯
MYOUT9主道黄灯
MGOUT8主道绿灯
BYOUT11支道黄灯
BROUT12支道红灯
BGOUT15支道绿灯
ZDIOUT20主道显示管个位
ZGAOOUT17主道显示管十位
BDIOUT24支道显示管个位
BGAOOUT28支道显示管十位
四.课程设计总结

 通过综合实验的思考和设计,对一个项目的整体设计有了进一步认识。第一次看到这样的大题目,困难重重,掌握他的工作原理以及控制结构花了大部分时间,其次就是编写程序。当看到要求后,应该对项目进行分功能和模块的设计,自顶向下,完成顶层的设计后,再编写功能模块。模块化设计便于修改和查错。通过程序的编写,加深了对VHDL语言的了解,提高了编程能力。这次设计我感觉程序调试最重要,我在编完各模块程序之后,编译查错最初有二十几个错误,有输入错误、语法错误。一遍一遍的编译查错,直到没有错误。必须注意工程名和实体名一致,以及保存过程中出现同名,调不出元件图。在没有错误之后可以进行波型仿真。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。锻炼了发现问题解决问题的能力,提高了个人素质。

五.参考文献

[1] 谭会生,瞿遂春.EDA综合应用与实例分析. 西安:西安电子科技大学出版社,2004,11.

[2]潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.

[3] 谭会生,张昌凡编著.EDA技术及应用. 西安:西安电子科技大学出版社.2011,1.

[4] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

[5] 刘艳萍,高振斌,李志军.EDA实用技术及应用[M].北京:国防工业出版社,2006

文档

十字路口交通灯控制器的VHDL设计

基于FPGA的半整数分频器设计一.系统设计任务及功能概述1.系统设计任务基于FPGA的半整数分频器设计任务要求:设有一个5MHz(或7、9、11、13、15、17、19、21、23、25MHz)的时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5(或3.5、4.5、5.5、6.5、7.5、8.5、9.5、10.5、11.5、12.5),因此采用小数分频。2.小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top