1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 23:41:32 +00:00
8bitworkshop/test/cli/verilog/t_type_param.v

113 lines
3.0 KiB
Verilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2019 by Todd Strader.
// SPDX-License-Identifier: CC0-1.0
module foo
#(parameter type bar = logic)
(output int bar_size);
localparam baz = $bits(bar);
assign bar_size = baz;
endmodule
module foo_wrapper
#(parameter bar_bits = 9)
(output int bar_size);
foo #(.bar (logic[bar_bits-1:0])) foo_inst (.bar_size (bar_size));
endmodule
module t();
logic [7:0] qux1;
int bar_size1;
foo #(.bar (logic [ $bits(qux1) - 1 : 0]))
foo_inst1 (.bar_size (bar_size1));
logic [7:0] qux2;
int bar_size2;
foo #(.bar (logic [ $bits(qux2) - 1 : 0]))
foo_inst2 (.bar_size (bar_size2));
logic [7:0] qux3;
int bar_size3;
foo #(.bar (logic [ $bits(qux3) - 1 : 0]))
foo_inst3 (.bar_size (bar_size3));
localparam bar_bits = 13;
int bar_size_wrapper;
foo_wrapper #(.bar_bits (bar_bits))
foo_wrapper_inst (.bar_size (bar_size_wrapper));
initial begin
if ($bits(qux1) != foo_inst1.baz) begin
$display("%m: bits of qux1 != bits of foo_inst1.baz (%0d, %0d)",
$bits(qux1), foo_inst1.baz);
$stop();
end
if ($bits(qux2) != foo_inst2.baz) begin
$display("%m: bits of qux2 != bits of foo_inst2.baz (%0d, %0d)",
$bits(qux2), foo_inst2.baz);
$stop();
end
if ($bits(qux3) != foo_inst3.baz) begin
$display("%m: bits of qux3 != bits of foo_inst3.baz (%0d, %0d)",
$bits(qux3), foo_inst3.baz);
$stop();
end
if (bar_bits != foo_wrapper_inst.foo_inst.baz) begin
$display("%m: bar_bits != bits of foo_wrapper_inst.foo_inst.baz (%0d, %0d)",
bar_bits, foo_wrapper_inst.foo_inst.baz);
$stop();
end
if (bar_size1 != $bits(qux1)) begin
$display("%m: bar_size1 != bits of qux1 (%0d, %0d)",
bar_size1, $bits(qux1));
$stop();
end
if (bar_size2 != $bits(qux2)) begin
$display("%m: bar_size2 != bits of qux2 (%0d, %0d)",
bar_size2, $bits(qux2));
$stop();
end
if (bar_size3 != $bits(qux3)) begin
$display("%m: bar_size3 != bits of qux3 (%0d, %0d)",
bar_size3, $bits(qux3));
$stop();
end
if (bar_size_wrapper != bar_bits) begin
$display("%m: bar_size_wrapper != bar_bits (%0d, %0d)",
bar_size_wrapper, bar_bits);
$stop();
end
end
genvar m;
generate
for (m = 1; m <= 8; m+=1) begin : gen_m
initial begin
if (m != foo_inst.baz) begin
$display("%m: m != bits of foo_inst.baz (%0d, %0d)",
m, foo_inst.baz);
$stop();
end
end
foo #(.bar (logic[m-1:0])) foo_inst (.bar_size ());
end
endgenerate
initial begin
$write("*-* All Finished *-*\n");
$finish;
end
endmodule