shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

always文中のNamed Block (名前付きブロック) でのreg宣言のあれこれ

scope1でreg宣言だけをするとSyntax Error

module Test;
    reg [7:0] tmp0, tmp1;
    initial begin
        tmp1 = 0;
        #10;
        tmp1 = 1;
        #10;
        $finish;
    end
    always@* begin: scope0
        reg [7:0] tmp0;
        begin: scope1
            reg [7:0] tmp0;
            //tmp0 = tmp1;
        end
        tmp0 = tmp1 + 1;
    end
endmodule
コンパイルすると
$ iverilog test.v
test.v:20: syntax error
test.v:21: Syntax in assignment statement l-value.
test.v:23: syntax error
I give up.

scope1でreg宣言に加えて代入をするとOK

module Test;
    reg [7:0] tmp0, tmp1;
    initial begin
        tmp1 = 0;
        #10;
        tmp1 = 1;
        #10;
        $finish;
    end
    always@* begin: scope0
        reg [7:0] tmp0;
        begin: scope1
            reg [7:0] tmp0;
            tmp0 = tmp1;
        end
        tmp0 = tmp1 + 1;
    end
endmodule
コンパイルすると
$ iverilog test.v