Version bump, commentary
git-svn-id: file://localhost/svn/verilator/trunk/verilator@970 77ca24e4-aefa-0310-84f0-b9a241c72d87
This commit is contained in:
parent
99bc1f92c9
commit
6412aff82d
2
Changes
2
Changes
|
|
@ -3,7 +3,7 @@ Revision history for Verilator
|
||||||
The contributors that suggested a given feature are shown in []. [by ...]
|
The contributors that suggested a given feature are shown in []. [by ...]
|
||||||
indicates the contributor was also the author of the fix; Thanks!
|
indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
* Verilator 3.65****
|
* Verilator 3.655 11/27/2007
|
||||||
|
|
||||||
*** Support "#delay <statement>;" with associated STMTDLY warning.
|
*** Support "#delay <statement>;" with associated STMTDLY warning.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1980,7 +1980,7 @@ and may use more then 4GB, but about 1GB is the maximum typically needed.
|
||||||
|
|
||||||
=item How do I generate waveforms (traces) in C++?
|
=item How do I generate waveforms (traces) in C++?
|
||||||
|
|
||||||
See the next question for SystemC mode.
|
See the next question for tracing in SystemC mode.
|
||||||
|
|
||||||
Add the --trace switch to Verilator, and make sure the SystemPerl package
|
Add the --trace switch to Verilator, and make sure the SystemPerl package
|
||||||
is installed. SystemC itself does not need to be installed for C++ only
|
is installed. SystemC itself does not need to be installed for C++ only
|
||||||
|
|
@ -1989,8 +1989,10 @@ the SystemPerl kit and point the SYSTEMPERL environment variable to the
|
||||||
untarred directory.
|
untarred directory.
|
||||||
|
|
||||||
In your top level C code, call Verilated::traceEverOn(true). Then create a
|
In your top level C code, call Verilated::traceEverOn(true). Then create a
|
||||||
SpTraceVcdC object. For an example, see the call to SpTraceVcdC in the
|
SpTraceVcdC object, and in your main loop call "trace_object->dump(time)"
|
||||||
test_c/sc_main.cpp file of the distribution.
|
every time step, and finally call "trace_object->close()". For an example,
|
||||||
|
see the call to SpTraceVcdC in the test_c/sim_main.cpp file of the
|
||||||
|
distribution.
|
||||||
|
|
||||||
You also need to compile SpTraceVcdC.cpp and add it to your link. This is
|
You also need to compile SpTraceVcdC.cpp and add it to your link. This is
|
||||||
done for you if using the Verilator --exe flag.
|
done for you if using the Verilator --exe flag.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
//**** Version and host name
|
//**** Version and host name
|
||||||
|
|
||||||
#define DTVERSION "Verilator 3.654 8/1/2007"
|
#define DTVERSION "Verilator 3.655 11/27/2007"
|
||||||
|
|
||||||
//**********************************************************************
|
//**********************************************************************
|
||||||
//**** Functions
|
//**** Functions
|
||||||
|
|
|
||||||
|
|
@ -560,6 +560,18 @@ sub _make_main {
|
||||||
print $fh " topp->eval();\n";
|
print $fh " topp->eval();\n";
|
||||||
$set = "topp->";
|
$set = "topp->";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $traceit = ($self->{trace} && !$self->{sp} && !$self->{sc});
|
||||||
|
if ($traceit) {
|
||||||
|
$fh->print("\n");
|
||||||
|
$fh->print("#if VM_TRACE\n");
|
||||||
|
$fh->print(" Verilated::traceEverOn(true);\n");
|
||||||
|
$fh->print(" SpTraceVcdCFile* tfp = new SpTraceVcdCFile;\n");
|
||||||
|
$fh->print(" topp->trace (tfp, 99);\n");
|
||||||
|
$fh->print(" tfp->open (\"obj_dir/".$self->{name}."_simx.vcd\");\n");
|
||||||
|
$fh->print("#endif\n");
|
||||||
|
}
|
||||||
|
|
||||||
print $fh " ${set}fastclk = true;\n" if $self->{inputs}{fastclk};
|
print $fh " ${set}fastclk = true;\n" if $self->{inputs}{fastclk};
|
||||||
print $fh " ${set}clk = true;\n" if $self->{inputs}{clk};
|
print $fh " ${set}clk = true;\n" if $self->{inputs}{clk};
|
||||||
print $fh " while (sc_time_stamp() < sim_time && !Verilated::gotFinish()) {\n";
|
print $fh " while (sc_time_stamp() < sim_time && !Verilated::gotFinish()) {\n";
|
||||||
|
|
@ -578,6 +590,11 @@ sub _make_main {
|
||||||
} else {
|
} else {
|
||||||
print $fh " main_time+=1;\n";
|
print $fh " main_time+=1;\n";
|
||||||
print $fh " ${set}eval();\n" if $action;
|
print $fh " ${set}eval();\n" if $action;
|
||||||
|
if ($traceit) {
|
||||||
|
$fh->print("#if VM_TRACE\n");
|
||||||
|
$fh->print(" tfp->dump (main_time);\n");
|
||||||
|
$fh->print("#endif //VM_TRACE\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print $fh " }\n";
|
print $fh " }\n";
|
||||||
|
|
@ -586,6 +603,14 @@ sub _make_main {
|
||||||
print $fh " }\n";
|
print $fh " }\n";
|
||||||
print $fh " topp->final();\n";
|
print $fh " topp->final();\n";
|
||||||
print $fh " SpCoverage::write(\"",$self->{coverage_filename},"\");\n" if $self->{coverage};
|
print $fh " SpCoverage::write(\"",$self->{coverage_filename},"\");\n" if $self->{coverage};
|
||||||
|
|
||||||
|
if ($traceit) {
|
||||||
|
$fh->print("#if VM_TRACE\n");
|
||||||
|
$fh->print(" tfp->close();\n");
|
||||||
|
$fh->print("#endif //VM_TRACE\n");
|
||||||
|
}
|
||||||
|
$fh->print("\n");
|
||||||
|
|
||||||
print $fh " delete topp; topp=NULL;\n";
|
print $fh " delete topp; topp=NULL;\n";
|
||||||
print $fh " exit(0L);\n";
|
print $fh " exit(0L);\n";
|
||||||
print $fh "}\n";
|
print $fh "}\n";
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ module t (/*AUTOARG*/
|
||||||
integer cyc; initial cyc=1;
|
integer cyc; initial cyc=1;
|
||||||
|
|
||||||
integer j;
|
integer j;
|
||||||
integer hit_count;
|
|
||||||
reg [63:0] cam_lookup_hit_vector;
|
reg [63:0] cam_lookup_hit_vector;
|
||||||
|
|
||||||
|
integer hit_count;
|
||||||
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
||||||
hit_count = 0;
|
hit_count = 0;
|
||||||
for (j=0; j < 64; j=j+1) begin
|
for (j=0; j < 64; j=j+1) begin
|
||||||
|
|
@ -23,6 +23,22 @@ module t (/*AUTOARG*/
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
integer hit_count2;
|
||||||
|
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
||||||
|
hit_count2 = 0;
|
||||||
|
for (j=63; j >= 0; j=j-1) begin
|
||||||
|
hit_count2 = hit_count2 + {31'h0, cam_lookup_hit_vector[j]};
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
integer hit_count3;
|
||||||
|
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
||||||
|
hit_count3 = 0;
|
||||||
|
for (j=63; j > 0; j=j-1) begin
|
||||||
|
if (cam_lookup_hit_vector[j]) hit_count3 = hit_count3 + 32'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
reg [127:0] wide_for_index;
|
reg [127:0] wide_for_index;
|
||||||
reg [31:0] wide_for_count;
|
reg [31:0] wide_for_count;
|
||||||
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
always @(/*AUTOSENSE*/cam_lookup_hit_vector) begin
|
||||||
|
|
@ -64,10 +80,14 @@ module t (/*AUTOARG*/
|
||||||
end
|
end
|
||||||
if (cyc==2) begin
|
if (cyc==2) begin
|
||||||
if (hit_count != 32'd2) $stop;
|
if (hit_count != 32'd2) $stop;
|
||||||
|
if (hit_count2 != 32'd2) $stop;
|
||||||
|
if (hit_count3 != 32'd2) $stop;
|
||||||
cam_lookup_hit_vector <= 64'h01010010_00010001;
|
cam_lookup_hit_vector <= 64'h01010010_00010001;
|
||||||
end
|
end
|
||||||
if (cyc==3) begin
|
if (cyc==3) begin
|
||||||
if (hit_count != 32'd5) $stop;
|
if (hit_count != 32'd5) $stop;
|
||||||
|
if (hit_count2 != 32'd5) $stop;
|
||||||
|
if (hit_count3 != 32'd4) $stop;
|
||||||
if (wide_for_count != 32'h80) $stop;
|
if (wide_for_count != 32'h80) $stop;
|
||||||
end
|
end
|
||||||
if (cyc==9) begin
|
if (cyc==9) begin
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ execute (
|
||||||
if ($Last_Self->{v3}) {
|
if ($Last_Self->{v3}) {
|
||||||
file_grep ("obj_dir/Vt_trace_ena__Trace__Slow.cpp", qr/c_trace_on\"/x);
|
file_grep ("obj_dir/Vt_trace_ena__Trace__Slow.cpp", qr/c_trace_on\"/x);
|
||||||
file_grep_not ("obj_dir/Vt_trace_ena__Trace__Slow.cpp", qr/_trace_off\"/x);
|
file_grep_not ("obj_dir/Vt_trace_ena__Trace__Slow.cpp", qr/_trace_off\"/x);
|
||||||
|
file_grep ("obj_dir/t_trace_ena_simx.vcd", qr/\$enddefinitions/x);
|
||||||
}
|
}
|
||||||
|
|
||||||
ok(1);
|
ok(1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue