-
Notifications
You must be signed in to change notification settings - Fork 2
/
vlog_tb_utils.v
51 lines (45 loc) · 1.65 KB
/
vlog_tb_utils.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* Utility module for verilog testbenches
*
* Copyright (C) 2016 Olof Kindgren <[email protected]>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
module vlog_tb_utils;
parameter MAX_STRING_LEN = 128;
localparam CHAR_WIDTH = 8;
//Force simulation stop after timeout cycles
reg [63:0] timeout;
initial
if($value$plusargs("timeout=%d", timeout)) begin
#timeout $display("Timeout: Forcing end of simulation");
$finish;
end
//FIXME: Add more options for VCD logging
reg [MAX_STRING_LEN*CHAR_WIDTH-1:0] testcase;
initial begin
if($test$plusargs("vcd")) begin
if($value$plusargs("testcase=%s", testcase))
$dumpfile({testcase,".vcd"});
else
$dumpfile("testlog.vcd");
$dumpvars;
end
end
//Heartbeat timer for simulations
reg [63:0] heartbeat;
initial begin
if($value$plusargs("heartbeat=%d", heartbeat))
forever #heartbeat $display("Heartbeat : Time=%0t", $time);
end
endmodule // vlog_tb_utils