Verilog HDLのgenerate文のスコープについて
Verilog HDLではgenerate文を使うことで変数やfunction文のスコープを定義することができる.
本当にfunction文にスコープが有効なのか気になったので,試してみる.
次のテスト用コードGENには3つのfunction testが定義されている.
- GEN内で共通のfunction test
- SCOPE_A内で定義されたfunction test
- SCOPE_B内で定義されたfunction test
`default_nettype none module GEN(OUT_A, OUT_B); output [3:0] OUT_A; output [3:0] OUT_B; assign OUT_A = SCOPE_A.w0; assign OUT_B = SCOPE_B.w0; function [3:0] test; input [3:0] in; test = in + 1; endfunction genvar i; generate begin : SCOPE_A function [3:0] test; input [3:0] in; test = in; endfunction wire [3:0] w0; assign w0 = test(4'b0001); end endgenerate generate begin : SCOPE_B function [3:0] test; input [3:0] in; test = ~in; endfunction wire [3:0] w0; assign w0 = test(4'b0001); end endgenerate endmodule module test_gen; parameter DUMPFILE = "uut.vcd"; wire [3:0] OUT_A; wire [3:0] OUT_B; GEN uut (OUT_A, OUT_B); initial begin $dumpfile(DUMPFILE); $dumpvars(0, uut); end initial begin #1000; $finish; end endmodule
スコープが有効ならば,
- OUT_Aは4'b0001
- OUT_Bは4'b1110
になるはず.