mirror of
https://github.com/verilator/verilator.git
synced 2025-01-05 22:27:35 +00:00
82 lines
1.9 KiB
Systemverilog
82 lines
1.9 KiB
Systemverilog
// DESCRIPTION: Verilator: Verilog Test module
|
|
//
|
|
// This file ONLY is placed into the Public Domain, for any use,
|
|
// without warranty, 2023 by Varun Koyyalagunta.
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
package config_pkg;
|
|
|
|
localparam int unsigned N = 10;
|
|
|
|
typedef struct packed {
|
|
logic [N-1:0][31:0] lo;
|
|
logic [N-1:0][31:0] hi;
|
|
logic [100-1:0][31:0] x;
|
|
int unsigned n;
|
|
} config_struct;
|
|
|
|
function automatic logic subcheck(logic[31:0] lo, logic[31:0] hi, logic[31:0] val);
|
|
return lo <= val && val < hi;
|
|
endfunction
|
|
|
|
function automatic logic check(config_struct cfg, logic[31:0] val);
|
|
logic[N-1:0] good = '0;
|
|
logic[N-1:0] bad = '0;
|
|
for (int i = 0; i < cfg.n; i++) begin
|
|
good[i] = subcheck(cfg.lo[i], cfg.hi[i], val);
|
|
end
|
|
for (int i = cfg.n; i < N; i++) begin
|
|
bad[i] = !(cfg.lo[i] == '0 && cfg.hi[i] == '0);
|
|
end
|
|
return good != '0 && bad == '0;
|
|
endfunction
|
|
|
|
endpackage : config_pkg
|
|
|
|
module t(/*AUTOARG*/
|
|
// Inputs
|
|
clk
|
|
);
|
|
|
|
input clk;
|
|
import config_pkg::*;
|
|
|
|
parameter config_struct MY_CONFIG = '{
|
|
lo: {((N-3)*32)'('0), 32'h00, 32'h10, 32'h20},
|
|
hi: {((N-3)*32)'('0), 32'h10, 32'h20, 32'h30},
|
|
x : 3200'h0deadbeef,
|
|
n : 3
|
|
};
|
|
|
|
struct_submodule #(.MY_CONFIG(MY_CONFIG)) a_submodule_I (.clk);
|
|
endmodule : t
|
|
|
|
module struct_submodule
|
|
import config_pkg::*;
|
|
#(
|
|
parameter config_struct MY_CONFIG = '0
|
|
) (
|
|
input clk
|
|
);
|
|
|
|
logic [31:0] val;
|
|
logic c;
|
|
int count = 0;
|
|
|
|
assign val = 3;
|
|
assign c = check(MY_CONFIG, count);
|
|
|
|
always @(posedge clk) begin
|
|
count <= count + 1;
|
|
if (c != '1) begin
|
|
$error("c not 1");
|
|
$stop;
|
|
end
|
|
if (count >= 10) begin
|
|
$write("*-* All Finished *-*\n");
|
|
$finish;
|
|
end
|
|
end
|
|
|
|
endmodule : struct_submodule
|