verilator/test_regress/t/t_func_complex.v

76 lines
1.5 KiB
Systemverilog
Raw Normal View History

2020-11-28 19:46:14 +01:00
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2020 Wilson Snyder
2020-11-28 19:46:14 +01:00
// SPDX-License-Identifier: CC0-1.0
2026-03-03 13:21:24 +01:00
module t;
2026-03-08 23:26:40 +01:00
typedef integer q_t[$];
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
function void queue_set(ref q_t q);
2020-11-28 19:46:14 +01:00
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
2020-11-28 19:46:14 +01:00
`endif
2026-03-08 23:26:40 +01:00
q.push_back(42);
if (q.size() != 1) $stop;
endfunction
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
// verilator lint_off NORETURN
function int get_noreturn();
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
`endif
2026-03-08 23:26:40 +01:00
endfunction
// verilator lint_on NORETURN
2026-03-08 23:26:40 +01:00
function int get_uninit();
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
`endif
2026-03-08 23:26:40 +01:00
int uninit;
return get_uninit;
endfunction
2026-03-08 23:26:40 +01:00
function void queue_check_nref(q_t q);
2020-11-28 19:46:14 +01:00
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
2020-11-28 19:46:14 +01:00
`endif
2026-03-08 23:26:40 +01:00
q[0] = 11;
if (q[0] != 11) $stop;
endfunction
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
function void queue_check_ref(const ref q_t q);
2020-11-28 19:46:14 +01:00
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
2020-11-28 19:46:14 +01:00
`endif
2026-03-08 23:26:40 +01:00
if (q[0] != 42) $stop;
endfunction
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
function q_t queue_ret();
2020-11-28 19:46:14 +01:00
`ifdef TEST_NOINLINE
2026-03-08 23:26:40 +01:00
// verilator no_inline_task
2020-11-28 19:46:14 +01:00
`endif
2026-03-08 23:26:40 +01:00
queue_ret = '{101};
endfunction
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
initial begin
q_t iq;
queue_set(iq);
if (iq.size() != 1) $stop;
queue_check_ref(iq);
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
iq[0] = 44;
queue_check_nref(iq);
if (iq[0] != 44) $stop;
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
iq = queue_ret();
if (iq[0] != 101) $stop;
2020-11-28 19:46:14 +01:00
2026-03-08 23:26:40 +01:00
if (get_noreturn() != 0) $stop;
if (get_uninit() != 0) $stop;
2026-03-08 23:26:40 +01:00
$write("*-* All Finished *-*\n");
$finish;
end
2020-11-28 19:46:14 +01:00
endmodule