verilator/test_regress/t/t_hier_block0_bad.v

61 lines
1.4 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2020 by Yutetsu TAKATSUKASA
// SPDX-License-Identifier: Unlicense
`define HIER_BLOCK /*verilator hier_block*/
module t (/*AUTOARG*/
// Inputs
clk
);
input clk;
wire [7:0] out0;
wire [7:0] out1;
int count = 0;
// unpacked array cannot be passed to hierarchical block
localparam logic UNPACKED[0:1] = '{1'b1, 1'b0};
sub0 #(UNPACKED) i_sub0(.clk(clk), .in(8'(count)), .out(out0));
// Passing type parameter is not supported
sub1 #(.T(logic[7:0])) i_sub1(.in(out0), .out(out1));
always_ff @(posedge clk) begin
// dotted access under hierarchical block is not allowed
$display("%d %d %d", count, i_sub0.ff, out1);
if (count == 16) begin
if (out1 == 15) begin
$write("*-* All Finished *-*\n");
$finish;
end else begin
$write("Missmatch\n");
$stop;
end
end
count <= count + 1;
end
endmodule
module sub0 #(
parameter logic UNPACKED[0:1] = '{1'b0, 1'b1}
) (
input wire clk,
input wire [7:0] in,
output wire [7:0] out); `HIER_BLOCK
logic [7:0] ff;
always_ff @(posedge clk) ff <= in;
assign out = ff;
endmodule
module sub1 #(
parameter type T = logic
) (
input wire T in, output wire T out); `HIER_BLOCK
assign out = in;
endmodule