Verlilog 交通灯 编译代码麻烦大家帮我看下什么错误

weixin_47640532 2022-04-26 21:30:31

//交通灯控制器

module traffic(clk,en,lampa,lampb,acount,bcount);

output [3:0] acount;
output [3:0] bcount;

input clk;
input en;

output [3:0] lampa;
output [3:0] lampb;

reg [10:0]numa;
reg [10:0]numb;
reg [7:0] ared;
reg [7:0] ayellow;
reg [7:0] agreen;
reg [7:0] aleft;
reg [7:0] bred;
reg [7:0] byellow;
reg [7:0] bgreen;
reg [7:0] bleft;
reg [3:0] lampa;
reg [3:0] lampb;

wire [2:0] counta;
wire [2:0] countb;
//将numa 和 numb的信号传递给数码管输出(即数码管显示交通灯计时情况)
assign acount=numa;
assign bcount=numb;
//信号en为低位时  对各个交通灯的计数值进行初始化
always  @(en)begin
    if(!en)begin
        ared<=8'd55;
        ayellow<=8'd5;
        agreen<=8'd40;
        aleft<=8'd15;
        bred<=8'd65;
        byellow<=8'd5;
        bleft<=8'd15;
        bgreen<=8'd30;
    end
end
//在en有效的情况下 判断tempa的值 为1 则表示不在变化状态 为零则表示在变化状态 在变化状态 判断counta 的四个状态 决定哪盏交通灯亮
   always  @(posedge clk)begin
      if(en)begin
        if(!tempa)begin
            tempa<=1;
            case(counta)
                0:begin
                    numa=agreen;
                    lampa<=4'b0010;
                    counta<=1;
                end
                1: begin                //状态1
                    numa=ayellow;    //黄灯亮
                    lampa<=4'b0100;            //输出0100
                    counta<=2;        //进入下一个状态
                    end
                    2: begin                //状态2
                    numa=aleft;        //左转绿灯亮
                    lampa<=4'b0001;            //输出0001
                    counta<=3;        //进入下一个状态
                    end
                3: begin                //状态3
                    numa=ayellow;    //黄灯亮
                    lampa<=4'b0100;        //输出0100
                    counta<=4;        //进入下一个状态
                    end
                4: begin            //状态4
                    numa=ared;        //红灯亮
                    lampa<=4'b1000;    //输出1000
                    counta<=0;        //进入下一个状态(状态0)
                    end
                default:            //默认状态
                    lampa<=4'b1000;    //红灯亮,输出1000
            endcase
         end
         else begin                     //每一个状态的倒计时
            if(numa>1)                //判断倒计时未归零时分别对高地位进行递减
                if(numa[3:0]==0) begin
                    numa[3:0]=4'b1001;
                    numa[7:4]<=numa[7:4]-1;
                end
                else
                    numa[3:0]=numa[3:0]-1;
            if (numa==2)
                tempa<=0;        //倒计时结束,返回灯状态变化判断,将进入下一个状态
        end
    end
     else begin
        lampa<=4'b1000;        //使能无效时,红灯亮
        counta<=0;            //返回方向A的状态0(绿灯状态)
        tempa<=0;                //进入状态变化判断
     end
  end
 endmodule
 
        //控制B方向四种灯的模块,模块的语言描述与方向A的描述基本一致,这里不再重复注释,
        always  @(posedge clk)begin
            if (en) begin
                if(!tempb) begin
                    tempb<=1;
                    case (countb)
                        0: begin
                            numb<=bred;
                            lampb<=8;
                            countb<=1;
                        end
                        1: begin
                            numb<=bgreen;
                            lampb<=2;
                            countb<=2;
                        end
                        2: begin
                            numb<=byellow;
                            lampb<=4;
                            countb<=3;
                        end
                        3: begin
                            numb<=bleft;
                            lampb<=1;
                            countb<=4;
                        end
                        4: begin
                            numb<=byellow;
                            lampb<=4;
                            countb<=0;
                        end
                        default:
                            lampb<=8;
                    endcase
                end
                else begin //倒计时
                    if(numb>1)
                        if(!numb[3:0]) begin
                            numb[3:0]<=9;
                            numb[7:4]<=numb[7:4]-1;
                        end
                    else
                        numb[3:0]<=numb[3:0]-1;
                    if(numb==2)
                        tempb<=0;
                end
            end
            else begin
                lampb<=4'b1000;
                tempb<=0;
                countb<=0;
            end
        end
endmodule

标红了·

 expecting a description什么意思

...全文
123 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6,167

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧