iverilog/ivtest/ivltests/vcd-dup.v

76 lines
1.2 KiB
Verilog

module test;
reg a, b1, b2;
submod m1 (a, b1, c1);
submod m2 (a, b2, c2);
task set;
input [2:0] bits;
reg t1;
begin
t1 <= a;
#1 {a,b1,b2} <= bits;
end
endtask
initial
begin
$dumpfile("work/vcd-dup.vcd");
$dumpvars(2, test); // test, test.m1, test.m2
$dumpvars(3, m2.c1, m1.mm1.c1); // duplicate signals
#0; // does not trip $enddefinitions
a = 0; // does not trip $enddefinitions
$dumpvars(0, m1); // (test.m1), test.m1.mm1, test.m1.mm2
#1; // $enddefinitions called
$dumpvars(0, m2); // ignored
end
initial
begin
#1 set(3'd 0);
#1;
#1 set(3'd 1);
#1;
#1 set(3'd 2);
#1 $dumpoff;
#1 set(3'd 3);
#1;
#1 set(3'd 4);
#1 $dumpon;
#1 set(3'd 5);
#1;
#1 set(3'd 6);
#1;
#1 set(3'd 7);
#1;
#1 set(3'd 0);
#1 $dumpall;
#1 $finish;
end
endmodule
module submod (a, b, c);
input a, b;
output c;
subsub mm1 (a&b, c1);
subsub mm2 (a|b, c2);
assign c = c1 ^ c2;
endmodule
module subsub (a, c);
input a;
output c;
wire c1 = ~a;
assign c = c1;
endmodule