3373|6

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

VHDL问题 [复制链接]

不好意思我是新人没什么分加,哪位好心人帮我解答一下

设计一个主干道和支干道十字路口的交通灯控制电路,要求如下:
1.一般情况下,保持主干道畅通,主干道绿灯亮、支干道红灯亮,并且主干道绿灯亮的时间不少于60s
2.当主干道绿灯亮超过60s,且支干道有车时,主干道红灯亮、支干道绿灯亮,但支干道绿灯亮的时间不得超过30s


我的思路是这样的:初始状态为主干道绿灯亮,支干道红灯亮,n=0;每次脉冲来临变量n增加1;当n>=60时再判断支干道是否有车即flag=1;若满足条件就改变灯的状态并把n清零,重新开始计时;当支干道绿灯亮超过30个脉冲时再改变灯的状态并把n清零
*********************************
代码中flag信号表示支干道是否有车,有车时为‘1’,没车为‘0’
变量n表示经过了几个时钟脉冲
信号main,branch分别表示主干道和支干道的灯状态,为‘1’时绿灯亮且红灯灭,为‘0’时红灯亮且绿灯灭
*********************************

*****************************
遇到的问题如下
1.按照题意我觉得应该定义一个默认状态main<=’1’;branch<=’0’的,但我放在结构体里会和并行运行的进程里重复赋值了,放在进程的开始也不行,请问应该怎样定义才能既无语法上的错误又符合题目要求?
2.还有对n值进行判断后对n赋值这样是可以的吗?虽然编译没提示有错,但好象我看过VHDL不能这样的?还是信号不能而变量可以?
*****************************

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY control IS

        PORT
        (
                flag                : IN        STD_LOGIC;--whether some cars in branch
                clk        : IN        STD_LOGIC;
                main,branch: OUT         STD_LOGIC--when '1'-green working;'0'-red working
        );
       
END control;

ARCHITECTURE behavior OF control IS

               
BEGIN
    main<='1';

    branch<='0';
            

PROCESS (clk, flag)
       
           VARIABLE n,temp:INTEGER;
                  
    BEGIN


        IF (clk'EVENT AND clk = '1') THEN
            n:=n+1;
               
            IF (n>60 AND flag='1')THEN
                       
                        main <= '0';
                branch<='1';
                temp:=1;
                n:=0;
               
            END IF;

            IF (n>30 AND temp=1)THEN
                            
                main<='1';
                branch<='0';
                temp:=0;
                n:=0;
            
            END IF;

        END IF;
               
END PROCESS;
                       
END behavior;

最新回复

应该增加个状态,黄灯,设计个状态机。  详情 回复 发表于 2009-7-1 16:42
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
小答一下!
>1.按照题意我觉得应该定义一个默认状态main <=’1’;branch <=’0’的,但我放在结构体里会和并行运行的进程里重复赋值了,放在进程的开始也不行,请问应该怎样定义才能既无语法上的错误又符合题目要求?

在声明信号的时候赋初始值
即:
>PORT
>(
>flag : IN STD_LOGIC;--whether some cars in branch
>clk : IN STD_LOGIC;
>main,branch: OUT STD_LOGIC--when '1'-green working;'0'-red working
>);

PORT
(
flag : IN STD_LOGIC;--whether some cars in branch
clk : IN STD_LOGIC;
main   : OUT STD_LOGIC := '1';
branch : OUT STD_LOGIC := '0'

);


>2.还有对n值进行判断后对n赋值这样是可以的吗?虽然编译没提示有错,但好象我看过VHDL不能这样的?还是信号不能而变量可以?

可以, 信号变量都可以!

以上
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
UP
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
我顶
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
本人也是初学者,个人认为你的思路很正确,但信号main,branch没必要初始化,你可以在脉冲进来后直接赋值
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

7
 
应该增加个状态,黄灯,设计个状态机。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表