sv2v/test/core/interface_check_same.sv

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