`ifndef FSDB_DUMP_TOP
`define FSDB_DUMP_TOP dump_top
`endif
`timescale 1ns/1ps
module dump_wave;
integer fsdbdumpstart, fsdbdumpend, fsdb_size;
integer vpd_dump_level, vpddumpstart, vpddumpend;
reg fsdb_en, vcd_en, vpd_en;
integer fsdb_dump_level;
reg[8*100-1:0] fsdb_no_dump, fsdbfile, dump_top, vpdfile;
integer plusargs_status;
/// vcd config
integer vcddumpstart, vcddumpend;
reg[8*100-1:0] vcdfile;
initial begin
// print time format as timeunit in ns
$timeformat(-9, 0, " ns", 20);
/// fsdb
`ifndef DUMP_WAVE_DISABLE
fsdb_en = 1'b0;
fsdbdumpstart = 0;
fsdbdumpend = 0;
fsdb_size = 0;
fsdbfile = "wave.fsdb";
dump_top = "";
fsdb_dump_level = 0;
fsdb_no_dump = "";
/// vpd
vpd_en = 1'b0;
vpddumpstart = 0;
vpddumpend = 0;
vpdfile = "wave.vpd";
vpd_dump_level = 0;
/// vcd
vcd_en = 1'b0;
vcdfile = "wave.vcd";
vcddumpstart = 0;
vcddumpend = 0;
////// wave for fsdb format
if ($test$plusargs("fsdb")) begin
fsdb_en = 1'b1;
plusargs_status = $value$plusargs("fsdb=%d",fsdbdumpstart);
if($test$plusargs("fsdboff")) plusargs_status = $value$plusargs("fsdboff=%d",fsdbdumpend);
if($test$plusargs("fsdbfile")) plusargs_status = $value$plusargs("fsdbfile=%s",fsdbfile);
if($test$plusargs("fsdblevel")) plusargs_status = $value$plusargs("fsdblevel=%d",fsdb_dump_level);
if($test$plusargs("fsdbsize")) plusargs_status = $value$plusargs("fsdblimit=%d",fsdb_size);
if($test$plusargs("fsdbnodump")) plusargs_status = $value$plusargs("fsdbsupress=%s",fsdb_no_dump);
if($test$plusargs("fsdbtop")) plusargs_status = $value$plusargs("fsdbtop=%s",dump_top);
end
////// wave for vcd format
else if ($test$plusargs("vcd")) begin
vcd_en = 1'b1;
plusargs_status = $value$plusargs("vcd=%d",vcddumpstart);
if($test$plusargs("vcdoff")) plusargs_status = $value$plusargs("vcdoff=%d",vcddumpend);
if($test$plusargs("vcdfile")) plusargs_status = $value$plusargs("vcdfile=%s",vcdfile);
end
////// wave for vpd format
else if ($test$plusargs("vpd")) begin
vpd_en = 1'b1;
plusargs_status = $value$plusargs("vpd=%d",vpddumpstart);
if($test$plusargs("vpdoff")) plusargs_status = $value$plusargs("vpdoff=%d",vpddumpend);
if($test$plusargs("vpdfile")) plusargs_status = $value$plusargs("vpdfile=%s", vpdfile);
end
////// dump wave
////// dump wave for fsdb format
if (fsdb_en) begin
#(fsdbdumpstart);
/// $fsdbDumplimit
if (fsdb_size > 0) begin
if (fsdb_size < 10 || fsdb_size > 1843) begin
$display("Error: The file size you can set for $fsdbDumplimit should be more than 10MB and less than 1.8GB");
end
else begin
$fsdbDumplimit(fsdb_size);
end
end
$fsdbDumpfile(fsdbfile);
/// fsdbSuppress
if (fsdb_no_dump != "") begin
$fsdbSuppress(fsdb_no_dump);
end
$fsdbDumpon();
/// fsdbDumpvars
if (dump_top != "") begin
$fsdbDumpvars("level=", fsdb_dump_level, `FSDB_DUMP_TOP);
end
else if (fsdb_dump_level > 0) begin
$fsdbDumpvars("level=", fsdb_dump_level);
end
else begin
$fsdbDumpvars();
//$fsdbDumpvars("+all"); // add "+all" to dump dynamic array and memory.
end
if(fsdbdumpend > 0) begin
#(fsdbdumpend);
$fsdbDumpoff();
end
end
////// dump wave for vcd format
else if(vcd_en) begin
#(vcddumpstart);
$dumpfile(vcdfile);
$dumpon;
$dumpvars;
if(vcddumpend > 0) begin
#(vcddumpend);
$dumpoff;
end
end
////// dump wave for vpd format
else if (vpd_en) begin
#(vpddumpstart);
//$vcdplusfile(vpdfile);
$vcdpluson;
if(vpddumpend > 0) begin
#(vpddumpend);
$vcdplusoff;
end
end
`endif
end
endmodule
*enable wave dump by adding "-fsdb" at compile time and setting DEBUSSY_HOME correctly.