错误(10278):TrafficLight上的Verilog HDL端口声明错误。v(5):输入端口;";不能用类型“声明”&书信电报;变量数据类型,例如reg>&引用;

错误(10278):TrafficLight上的Verilog HDL端口声明错误。v(5):输入端口;";不能用类型“声明”&书信电报;变量数据类型,例如reg>&引用;,verilog,Verilog,verilog错误当我尝试实现一个具有六种状态的交通灯系统时,我想在ALTERA DE2板的led显示屏上显示红、绿、黄灯 代码如下 module TrafficLight(clk, t, out); input clk, t; output out; localparam s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011, s4=3'b100, s5=3'b101; reg[2:0] state, next_state, t;

verilog错误当我尝试实现一个具有六种状态的交通灯系统时,我想在ALTERA DE2板的led显示屏上显示红、绿、黄灯

代码如下

module TrafficLight(clk, t, out);
    input clk, t;
    output out;
    localparam s0=3'b000, s1=3'b001, s2=3'b010, s3=3'b011, s4=3'b100, s5=3'b101;
    reg[2:0] state, next_state, t;

    always@(posedge clk)
    begin
        state = next_state;
        t = t - 1;
    end

    always@(t or state)
         begin
         case(state)
              3'b000:
                    if(t < 5)
                         next_state = s0;
                    else
                    begin
                         next_state = s1;
                         assign out [5:0] = 6'b100001;
                    end
              3'b001:
                    if(t < 1)
                         next_state = s1;
                    else
                    begin
                         next_state = s2;
                         assign out [5:0] = 6'b010001;
                    end
              3'b010:
                    if(t < 1)
                         next_state = s2;
                    else
                    begin
                         next_state = s3;
                         assign out [5:0] = 6'b001001;
                    end
              3'b011:
                    if(t < 5)
                         next_state = s3;
                    else
                    begin
                         next_state = s4;
                         assign out [5:0] = 6'b001100;
                    end
              3'b100:
                    if(t < 1)
                         next_state = s4;
                    else
                    begin
                         next_state = s5;
                         assign out [5:0] = 6'b001010;
                    end
              3'b101:
                    if(t < 1)
                         next_state = s0;
                    else
                    begin
                         next_state = s5;
                         assign out [5:0] = 6'b001001;
                    end
                endcase
            end
    endmodule
模块交通灯(clk、t、out);
输入时钟,t;
输出;
局部参数s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101;
reg[2:0]状态,下一个_状态,t;
始终@(posedge clk)
开始
状态=下一个状态;
t=t-1;
终止
始终@(t或状态)
开始
案件(州)
3'b000:
if(t<5)
下一个_状态=s0;
其他的
开始
下一个_状态=s1;
分配出[5:0]=6'b100001;
终止
3'b001:
if(t<1)
下一个_状态=s1;
其他的
开始
下一个_状态=s2;
分配出[5:0]=6'b010001;
终止
3'b010:
if(t<1)
下一个_状态=s2;
其他的
开始
下一个状态=s3;
分配出[5:0]=6'b001001;
终止
3'b011:
if(t<5)
下一个状态=s3;
其他的
开始
下一个_状态=s4;
分配出[5:0]=6'b001100;
终止
3'b100:
if(t<1)
下一个_状态=s4;
其他的
开始
下一状态=s5;
分配出[5:0]=6'b001010;
终止
3'b101:
if(t<1)
下一个_状态=s0;
其他的
开始
下一状态=s5;
分配出[5:0]=6'b001001;
终止
尾声
终止
端模

这段代码有什么问题,有人能修复吗?

在Verilog中,输入不能是
reg
,错误消息是这样说的。不要通过更改此行将
t
声明为
reg

reg[2:0] state, next_state, t;
为此:

reg[2:0] state, next_state;

我已经在问题中指出了代码中的各种问题。无论如何,如果
t
是一个输入,那么您可以找到一个更新的版本,然后您就不能分配它了<编码>输出输出
输出寄存器[5:0]输出t=t-1同样,不需要在程序块中使用
赋值
-
赋值[5:0]=6'b001001@RahulBehl事实上,不应该在过程块中使用assign语句。这是合法的,但(a)意味着一些奇怪的东西,(b)是不赞成的。是的,你是对的。虽然如果我们在程序块中执行连续赋值,VCS 2014.10会报告编译时错误。因此,它们现在可能不合法。