一位全加器的设计和交通灯控制器EDA

一、实验内容

   1)熟悉quartusll开发环境

2)一位全加器的设计和交通灯控制器。

FPGA为核心,设计一个交通灯控制器,每个路口都有红、黄、绿三盏灯。该交通信号灯控制器由一条车道A和一条车道B汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯

基本要求:

  1. 东西、南北两个方向的信号灯必须交替工作且两个方向通行时间不同;
  2. 显示采用LED光柱或数码管倒计时的方式;
  3. 每个路口用两个数码管倒计时显示

     设定一个周期内,红灯发光30s,绿灯发光27s,黄灯发光3s。

     以东西方向信号灯状态为例,红灯发光的时间等于黄灯和绿灯发光的时间和。所以一个完整的状态转换周期是红灯发光的时间的两倍,也就是60s。在东西方向红色信号灯发光的30s内,南北方向由绿灯切换到了黄灯;在南北方向红色信号灯发光的30s内,东西方向也由绿灯切换到了黄灯。因此我们将东西和南北方向信号灯同时保持在固定状态的时间段,划为一个状态。

二、实验目的

本次实验需要储备了解Quartus II仿真实现的过程,了解如何用其进行模拟仿真。设计出交替转换的交通信号灯。

  • 软件流程(硬件连接)

①新建工程

②创建半加器原理图

③将设计项目设置成可调用的元件

④尝试运行代码

⑤新建文件输出代码的波形

  • 代码 

1.一位全加器

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY full_adder IS
  PORT(a:IN STD_LOGIC;
       b:IN STD_LOGIC;
		 cin:IN STD_LOGIC;
		 s:OUT STD_LOGIC;
		 co:OUT STD_LOGIC);
END full_adder;
ARCHITECTURE rtl OF full_adder IS
 SIGNAL tmp1,tmp2:STD_LOGIC;
BEGIN
 tmp1<=a OR b;
 tmp2<=tmp1 AND cin;
 s<=tmp1 XOR cin;
 co<=tmp2 OR (a AND b);
END rtl;
  • 2.交通信号灯

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;
       ENTITY abc IS
          PORT(CLK,RST: IN STD_LOGIC;
    			LED: OUT STD_LOGIC_VECTOR(5 DOWNTO  0);	
    			WideSEGH: OUT STD_LOGIC_VECTOR(3 DOWNTO  0);  
    			WideSEGL: OUT STD_LOGIC_VECTOR(3 DOWNTO  0);  
    			NSEGH: OUT STD_LOGIC_VECTOR(3 DOWNTO  0);  
    			NSEGL: OUT STD_LOGIC_VECTOR(3 DOWNTO  0));  
    END ENTITY abc ;
    ARCHITECTURE bhv OF abc  IS
        TYPE state IS(S0,S1,S2,S3);  
        SIGNAL current_s,next_s:state;
        SIGNAL COUNT60:STD_LOGIC_VECTOR(7 DOWNTO  0);
          BEGIN
    COUNT: PROCESS(RST,CLK)                
               BEGIN
    				IF RST= '1' THEN    
    					COUNT60<="00000000";
    				ELSIF CLK'EVENT AND CLK='1' THEN
    					IF COUNT60<"00111100" THEN    
    						COUNT60<=COUNT60+1;
    					ELSE 
    						COUNT60<="00000000"; 
    					END IF;
    				END IF;
    		END PROCESS;
     REG: PROCESS (RST,CLK)                  
    	BEGIN
    		IF RST= '1' THEN   
    			current_s <= s0;      
    		ELSIF clk='1' AND clk'EVENT THEN   
    			current_s <= next_s; 
    		END IF;
    	END PROCESS;     
    COM:PROCESS(current_s, COUNT60)         
    VARIABLE WESEG,NSSEG:STD_LOGIC_VECTOR(7 DOWNTO  0);
    	BEGIN
    		CASE current_s IS                     
    			WHEN s0 => LED<= "100010";
    				WESEG:=29-COUNT60; 
    				NSSEG:=26-COUNT60; 
    				IF COUNT60 ="00011010" THEN      
    					next_s<=s1;                    
    				ELSE 
    					next_s<=s0;    
    				END IF;
    			WHEN s1 => LED <= "100001"; 
    				WESEG:=29-COUNT60;
    				NSSEG:=29-COUNT60; 
    				IF COUNT60 = "00011101" THEN  
    					next_s<=s2;    
    				ELSE
    					next_s<=s1;   
    				END IF;
    			WHEN s2 => LED <= "010100";  
    				WESEG:=56-COUNT60;
    				NSSEG:=59-COUNT60; 
    				IF COUNT60="00111000" THEN  
    					next_s <= s3;
    				ELSE  
    					next_s <= s2; 
    				END IF;
    			WHEN s3 => LED <= "001100";  
    				WESEG:=59-COUNT60;
    				NSSEG:=59-COUNT60; 
    				IF COUNT60 ="00111011" THEN 
    					next_s<= s0; 
    				ELSE  
    					next_s <= s3;   
    				END IF;
    			WHEN OTHERS=> LED <="100100";
        END case;  
    	IF WESEG>29 THEN 
    		WESEG:=WESEG+18;
    	ELSIF WESEG>19 THEN
    		WESEG:=WESEG+12;
    	ELSIF WESEG>9 THEN
    		WESEG:=WESEG+6;
    	ELSE NULL;
    	END IF;
    	IF NSSEG>29 THEN 
    		NSSEG:=NSSEG+18;
    	ELSIF NSSEG>19 THEN 
    		NSSEG:=NSSEG+12;
    	ELSIF NSSEG>9 THEN 
    		NSSEG:=NSSEG+6;
    	ELSE NULL;
    	END IF;
    	WideSEGH<=WESEG(7 DOWNTO 4);
    	WideSEGL<=WESEG(3 DOWNTO 0);
    	NSEGH<=NSSEG(7 DOWNTO 4);
    	NSEGL<=NSSEG(3 DOWNTO 0);
     END PROCESS;  
    END ARCHITECTURE bhv;

  • 实验结果及分析

一位全加器

 

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

2.交通信号灯

 

每个路口都有红、黄、绿三盏灯。该交通信号灯控制器由一条车道A和一条车道B汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。

基本要求:

  1. 东西、南北两个方向的信号灯必须交替工作且两个方向通行时间不同;
  2. 显示采用LED光柱或数码管倒计时的方式;

(3)每个路口用两个数码管倒计时显示

     设定一个周期内,红灯发光30s,绿灯发光27s,黄灯发光3s。

     以东西方向信号灯状态为例,红灯发光的时间等于黄灯和绿灯发光的时间和。所以一个完整的状态转换周期是红灯发光的时间的两倍,也就是60s。在东西方向红色信号灯发光的30s内,南北方向由绿灯切换到了黄灯;在南北方向红色信号灯发光的30s内,东西方向也由绿灯切换到了黄灯。因此我们将东西和南北方向信号灯同时保持在固定状态的时间段,划为一个状态

六、实验条件

1、个人计算机一台

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值