iverilog/ivtest/ivltests/pr1353345b.v

62 lines
1.1 KiB
Verilog

module main;
parameter use_wid = 4;
reg [use_wid-1:0] d;
wire [use_wid-1:0] q;
reg clk;
defparam dut.wid = use_wid;
B dut (.Q(q), .D(d), .C(clk));
initial begin
clk = 0;
d = 4'b0000;
#1 clk = 1;
#1 clk = 0;
if (q !== 4'b0000) begin
$display("FAILED -- d=%b, q=%b", d, q);
$finish;
end
d = 4'b1111;
#1 clk = 1;
#1 clk = 0;
if (q !== 4'b1111) begin
$display("FAILED -- d=%b, q=%b", d, q);
$finish;
end
$display("PASSED");
end
endmodule // main
/*
* although the wid paramter is default to 3 in this module, the point
* of this test is to have the instantiating module (main) give a
* different value and have that value properly handlued in all the
* situations of this module.
*/
module B
#(parameter wid = 3)
(output [wid-1:0] Q,
input [wid-1:0] D,
input C);
// the override from main will cause this to be a width of 4.
prim U [wid-1:0] (Q, D, C);
//prim U [wid-1:0] (.Q(Q), .D(D), .C(C));
endmodule // B
module prim(output reg Q, input D, C);
always @(posedge C)
Q <= D;
endmodule // prim