数字交通灯

在这里插入图片描述
交通灯的基本工作状态:
① (主干道)绿灯:车辆前行;
② (次干道)红灯:禁止通行;
③ (主干道)黄灯:过渡状态;
④ (主干道)红灯:禁止车辆通行;
⑤ (次干道)绿灯:车辆前行。
注:红黄绿等均为前行方向的信号指示灯。
设计任务:
1、说明设计具体思路。
2、画出系统模块框图。
3、画出系统顶层原理图。
4、按设计技术要求编写程序。
5、画出系统功能仿真波形图。

设计代码

module jiaotong(input clk,reset,
                input  [4:0] C_AG,C_AY,C_BG,//设置各种灯的时间
                output wire[7:0] CA,CB,//用bcd码做两位十进制
                output reg AG=0,AY=0,AR=0,BG=0,BR=0 //指示灯
                );
        reg[4:0] state1;
        reg[4:0] state2;
        reg [5:0] CP_A,CP_B;
        localparam s0='d0,s1='d1,s2='d2,s3='d3,s4='d4,s5='d5;
        always@(posedge clk )        //主干道
        begin if(reset) begin state1<=s0;end
        else
            casex(state1)
                s0:begin 
                    state1<=s1;CP_A<= C_AG;AG<=1;
                end
                s1: begin   //做绿灯的倒计时
                    if(CP_A !=0) begin CP_A<=CP_A-1;state1<=s1;end
                    else begin state1<=s2;CP_A<=C_AY;AG<=0;AY<=1;end
                end
                s2: begin   //做黄灯的倒计时
                    if(CP_A!=0) begin CP_A<=CP_A-1;state1<=s2;end
                    else begin state1<=s3; CP_A<=(C_BG);AY<=0;AR<=1;end
                end
//                s3: begin   //做左拐的倒计时 
//                    if(CP_A!=0) begin CP_A<=CP_A-1;state1<=s3;end
//                    else begin state1<=s4;CP_A<=C_AY;AL<=0;AY<=1;end
//                end
//                s4: begin   //做黄灯的倒计时 
//                    if(CP_A!=0) begin  CP_A<=CP_A-1;state1<=s4;end
//                    else begin state1<=s5;CP_A<=(C_BG+C_BY+C_BL+C_BY+3);AY<=0;AR<=1;end
//                end
                s3:begin    //做红灯的倒计时 
                    if(CP_A!=0) begin  CP_A<=CP_A-1;state1<=s3;end
                    else begin state1<=s1;CP_A<=C_AG;AR<=0;AG<=1;end
                end
                default state1<=s0;
            endcase
        end
        
        always@(posedge clk )        //小路
        begin if(reset) begin state2 <=s0;end
        else 
            casex(state2)
            s0:begin
            CP_B<=(C_AG+C_AY+1);BR<=1;state2<=s1;
            end
                s1: begin   //做红灯的倒计时
                    if(CP_B!=0) begin CP_B<=CP_B-1;state2<=s1;end
                    else begin state2<=s2;CP_B<=C_BG;BR<=0;BG<=1;end
                end
                s2: begin   //做绿灯的倒计时 
                    if(CP_B!=0) begin CP_B<=CP_B-1;state2<=s2;end
                    else begin state2<=s1; CP_B<=(C_AG+C_AY+1);BG<=0;BR<=1;end
                end
//                s3: begin   //做黄灯的倒计时 
//                    if(CP_B!=0) begin  CP_B<=CP_B-1;state2<=s3;end
//                    else begin state2<=s4;CP_B<=C_BL;BY<=0;BL<=1;end
//                end
//                s4: begin   //做左拐的倒计时
//                    if(CP_B!=0) begin  CP_B<=CP_B-1;state2<=s4;end
//                    else begin state2<=s5;CP_B<=C_BY;BL<=0;BY<=1; end
//                end
//                s5:begin    //做黄灯的倒计时
//                    if(CP_B!=0) begin CP_B<=CP_B-1;state2<=s5;end
//                    else begin state2<=s1;CP_B<=(C_AG+2*C_AY+C_AL+3);BY<=0;end
//                end
                default state2<=s0;
            endcase
        end
    assign CA[3:0]=(CP_A%10);assign CB[3:0]=(CP_B%10);
    assign CA[7:4]=(CP_A/ 10);assign CB[7:4]=(CP_B/10);   
endmodule

仿真代码

module text5();
reg clk,reset;
reg [4:0] C_AG=0,C_AY=0,C_BG=0;
wire [7:0] CA,CB;
wire AG,AY,AR,BG,BR;
parameter DELAY =20;
jiaotong il(
.reset(reset),      //端口的对应
.clk(clk),.C_AG(C_AG), .C_AY(C_AY),
.C_BG(C_BG), .CA(CA),
.CB(CB),.AG(AG), .AY(AY), .AR(AR),
.BG(BG), .BR(BR)
);
initial begin
clk=1;reset=1;      //初始化
#(DELAY) reset=0;   //复位
C_AG=5'd15;C_AY=5'd7;    //设置各个倒计时时间
 C_BG=5'd12;
#(DELAY*500);
end
always begin 
#(DELAY/2) clk=~clk;    //时钟周期为20
end
endmodule

仿真图样
在这里插入图片描述
框图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠风丶北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值