mirror of https://github.com/zachjs/sv2v.git
108 lines
2.3 KiB
Systemverilog
108 lines
2.3 KiB
Systemverilog
`define TEST(loc, mod, expr) \
|
|
initial begin \
|
|
$display(`"loc mod.expr %b`", mod.expr); \
|
|
$display(`"loc loc.mod.expr %b`", loc.mod.expr); \
|
|
begin /* exciting shadowing */ \
|
|
localparam i = 1'bx; \
|
|
localparam j = 1'bz; \
|
|
$display(`"loc loc.mod.expr %b`", loc.mod.expr); \
|
|
end \
|
|
end
|
|
|
|
`define TEST_FUNC(loc, mod, expr) `TEST(loc, mod, expr())
|
|
|
|
`define TEST_TASK(loc, mod, expr) \
|
|
initial begin \
|
|
$display(`"loc mod.expr():`"); \
|
|
mod.expr(); \
|
|
$display(`"loc loc.mod.expr():`"); \
|
|
loc.mod.expr(); \
|
|
end
|
|
|
|
interface Intf;
|
|
parameter [3:0] P = 1;
|
|
localparam [3:0] L = 2;
|
|
wire [3:0] w;
|
|
assign w = 3;
|
|
modport D(input .x(w + 8'b1));
|
|
function automatic [3:0] F;
|
|
return -1;
|
|
endfunction
|
|
task T;
|
|
$display("T called");
|
|
endtask
|
|
|
|
if (1) begin : blk
|
|
parameter [3:0] P = 4;
|
|
localparam [3:0] L = 6;
|
|
reg [3:0] w;
|
|
initial w = 7;
|
|
function automatic [3:0] F;
|
|
return 8;
|
|
endfunction
|
|
task T;
|
|
$display("blk.T called");
|
|
endtask
|
|
end
|
|
endinterface
|
|
|
|
module ModAi(Intf i );
|
|
`TEST(ModAi, i, P)
|
|
`TEST(ModAi, i, L)
|
|
`TEST(ModAi, i, w)
|
|
`TEST_FUNC(ModAi, i, F)
|
|
`TEST_TASK(ModAi, i, T)
|
|
|
|
`TEST(ModAi, i, blk.P)
|
|
`TEST(ModAi, i, blk.L)
|
|
`TEST(ModAi, i, blk.w)
|
|
`TEST_FUNC(ModAi, i, blk.F)
|
|
`TEST_TASK(ModAi, i, blk.T)
|
|
endmodule
|
|
|
|
module ModAj(Intf j);
|
|
`TEST(ModAj, j, P)
|
|
`TEST(ModAj, j, L)
|
|
`TEST(ModAj, j, w)
|
|
`TEST_FUNC(ModAj, j, F)
|
|
`TEST_TASK(ModAj, j, T)
|
|
|
|
`TEST(ModAj, j, blk.P)
|
|
`TEST(ModAj, j, blk.L)
|
|
`TEST(ModAj, j, blk.w)
|
|
`TEST_FUNC(ModAj, j, blk.F)
|
|
`TEST_TASK(ModAj, j, blk.T)
|
|
endmodule
|
|
|
|
module ModBi(Intf.D i);
|
|
`TEST(ModBi, i, P)
|
|
`TEST(ModBi, i, L)
|
|
`TEST(ModBi, i, x)
|
|
endmodule
|
|
|
|
module ModBj(Intf.D j);
|
|
`TEST(ModBj, j, P)
|
|
`TEST(ModBj, j, L)
|
|
`TEST(ModBj, j, x)
|
|
endmodule
|
|
|
|
module top;
|
|
Intf i();
|
|
ModAi ai(i);
|
|
ModAj aj(i);
|
|
ModBi bi(i);
|
|
ModBj bj(i);
|
|
|
|
`TEST(top, i, P)
|
|
`TEST(top, i, L)
|
|
`TEST(top, i, w)
|
|
`TEST_FUNC(top, i, F)
|
|
`TEST_TASK(top, i, T)
|
|
|
|
`TEST(top, i, blk.P)
|
|
`TEST(top, i, blk.L)
|
|
`TEST(top, i, blk.w)
|
|
`TEST_FUNC(top, i, blk.F)
|
|
`TEST_TASK(top, i, blk.T)
|
|
endmodule
|