是否可以在循环中使用if,else if条件?(verilog)

时间:2018-09-19 10:48:31

标签: verilog

我正在尝试在if中使用else iffor loop语句。

但是我一直遇到语法错误,提示“意外”。

if中使用else iffor loop的正确语法是什么?

module onezerocheck(in,out);
input [31:0] in;
output out;
integer i;   //1101
reg j;
always@(in) begin
    for(i=0; i<32; i=i+1) begin
        if(in[i]==0) begin
            j=1;
            out=1'b0;
        end

        else if(in[i]==1) begin
            j=0;
            out=1'b0;   
        end          

        else if((if[i]==1&&j==1)) begin //unexpected if
            out=1'b1;
            j=0;
        end

        else if((if[i]==1&&j==0)) begin //unexpected else
            out=1'b0;
            j=0;
        end     
    end //unexpected end
end
endmodule

2 个答案:

答案 0 :(得分:0)

有两种错误。

if是Verilog中的保留关键字,不能用作变量名。您可能想在两个地方都将if[i]替换为in[i]

此外,由于out是在reg块中分配的,因此您需要将always声明为module onezerocheck(in,out); input [31:0] in; output out; reg out; integer i; //1101 reg j; always@(in) begin for(i=0; i<32; i=i+1) begin if(in[i]==0) begin j=1; out=1'b0; end else if(in[i]==1) begin j=0; out=1'b0; end else if((in[i]==1&&j==1)) begin //unexpected if out=1'b1; j=0; end else if((in[i]==1&&j==0)) begin //unexpected else out=1'b0; j=0; end end //unexpected end end endmodule

{{1}}

答案 1 :(得分:-1)

尝试一下:

module onezerocheck(in,out);
input [31:0] in;
output out;
integer i;   //1101
reg j;
always@(in) 
begin
    for(i=0; i<32; i=i+1) 
    begin
        if(in[i]==0) 
        begin
            j=1;
            out=1'b0;
        end

        else if(in[i]==1) 
        begin
            j=0;
            out=1'b0;   
        end          

        else if((in[i]==1)&&(j==1)) 
        begin 
            out=1'b1;
            j=0;
        end

        else if((in[i]==1)&&(j==0)) 
        begin
            out=1'b0;
            j=0;
        end
        else
        begin
        //else statement here
        end     
    end 
end
endmodule