Version bump

git-svn-id: file://localhost/svn/verilator/trunk/verilator@928 77ca24e4-aefa-0310-84f0-b9a241c72d87
This commit is contained in:
Wilson Snyder 2007-05-22 12:15:01 +00:00
parent 72832a2810
commit bb9ae89049
7 changed files with 88 additions and 30 deletions

View File

@ -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.651 5/22/2007
*** Added verilator_profcfunc utility. [Gene Weber] *** Added verilator_profcfunc utility. [Gene Weber]

View File

@ -1434,6 +1434,14 @@ This section describes specific limitations for each language keyword.
=over 4 =over 4
=item `__FILE__, `__LINE__, `begin_keywords, `begin_keywords, `begin_keywords,
`begin_keywords, `begin_keywords, `define, `else, `elsif, `end_keywords,
`endif, `error, `ifdef, `ifndef, `include, `line, `systemc_ctor,
`systemc_dtor, `systemc_header, `systemc_imp_header,
`systemc_implementation, `systemc_interface, `timescale, `undef, `verilog
Fully supported.
=item always, always_comb, always_ff, always_latch, and, assign, begin, =item always, always_comb, always_ff, always_latch, and, assign, begin,
buf, case, casex, casez, default, defparam, do-while, else, end, endcase, buf, case, casex, casez, default, defparam, do-while, else, end, endcase,
endfunction, endgenerate, endmodule, endspecify, endtask, final, for, endfunction, endgenerate, endmodule, endspecify, endtask, final, for,
@ -1453,8 +1461,9 @@ All specify blocks and timing checks are ignored.
Verilator does not perform warning checking on uwires, it treats the uwire Verilator does not perform warning checking on uwires, it treats the uwire
keyword as if it were the normal wire keyword. keyword as if it were the normal wire keyword.
=item $bits, $countones, $finish, $isunknown, $onehot, $onehot0, $readmemb, =item $bits, $countones, $error, $fatal, $finish, $info, $isunknown,
$readmemh, $signed, $stop, $time, $unsigned $onehot, $onehot0, $readmemb, $readmemh, $signed, $stop, $time, $unsigned,
$warning.
Generally supported. Generally supported.
@ -2069,7 +2078,7 @@ Communications, Sun Microsystems, Nauticus Networks, and SiCortex.
The people who have contributed code or other major functionality are Paul The people who have contributed code or other major functionality are Paul
Wasson, Duane Galbi, and Wilson Snyder. Major testers include Jeff Dutton, Wasson, Duane Galbi, and Wilson Snyder. Major testers include Jeff Dutton,
Ralf Karge and Wim Michiels. Ralf Karge, David Hewson, Wim Michiels, and Gene Weber.
Some of the people who have provided ideas and feedback for Verilator Some of the people who have provided ideas and feedback for Verilator
include Hans Van Antwerpen, Jens Arm, David Black, Gregg Bouchard, Chris include Hans Van Antwerpen, Jens Arm, David Black, Gregg Bouchard, Chris

View File

@ -78,29 +78,78 @@ sub profcfunc {
my %funcs; my %funcs;
while (defined (my $line=$fh->getline())) { while (defined (my $line=$fh->getline())) {
if ($line =~ /^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+([0-9.]+)\s+.*__PROF__([a-zA-Z_0-9]+)__([0-9]+)\(/) { if ($line =~ /^\s*([0-9.]+)\s+[0-9.]+\s+([0-9.]+)\s+([0-9.]+)\s+.*\s+(\S+)\s*$/) {
my $fileline = sprintf("%s:%d", $4, $5); my $pct=$1; my $sec=$2; my $calls=$3; my $func=$4;
$funcs{$fileline}{pct} += $1; $funcs{$func}{pct} += $pct;
$funcs{$fileline}{sec} += $2; $funcs{$func}{sec} += $sec;
$funcs{$fileline}{calls} += $3; $funcs{$func}{calls} += $calls;
} }
} }
$fh->close; $fh->close;
# Find modules
my %verilated_mods;
foreach my $func (keys %funcs) {
if ($func =~ /(.*)::_eval\(.*__Syms.*\)$/) {
$verilated_mods{$1} = qr/^$1/;
}
}
# Resort by Verilog name
my %vfuncs;
my %groups;
foreach my $func (keys %funcs) {
my $vfunc = $func;
my $design;
foreach my $vde (keys %verilated_mods) {
if ($func =~ /$verilated_mods{$vde}/) {
$design=$vde;
last;
}
}
if ($vfunc =~ /__PROF__([a-zA-Z_0-9]+)__([0-9]+)\(/) {
$vfunc = sprintf("VBlock %s:%d", $1, $2);
$groups{"Verilog Blocks under $design"} += $funcs{$func}{pct};
} else {
if ($design) {
$vfunc = sprintf("VCommon %s", $func);
$groups{"Common code under $design"} += $funcs{$func}{pct};
} else {
$vfunc = sprintf("C++ %s", $func);
$groups{'C++'} += $funcs{$func}{pct};
}
}
$vfuncs{$vfunc} = $funcs{$func};
}
print("Overall summary:\n");
print(" % time\n");
foreach (sort (keys %groups)) {
printf(" %6.2f In all %s\n", $groups{$_}, $_);
}
print("\n");
print("Verilog code profile:\n");
print(" These are split into three categories:\n");
print(" C++: Time in non-Verilated C++ code\n");
print(" VBlock: Time attributable to a block in a Verilog file and line\n");
print(" VCommon: Time in a Verilated module, due to all parts of the design\n");
print("\n");
print("Verilog code profile\n");
print(" % cumulative self \n"); print(" % cumulative self \n");
print(" time seconds seconds calls filename and line number\n"); print(" time seconds seconds calls type filename and line number\n");
my $cume = 0; my $cume = 0;
foreach my $fileline (sort {$funcs{$b}{sec} <=> $funcs{$a}{sec} foreach my $func (sort {$vfuncs{$b}{sec} <=> $vfuncs{$a}{sec}
|| $a cmp $b} || $a cmp $b}
(keys %funcs)) { (keys %vfuncs)) {
$cume += $funcs{$fileline}{sec}; $cume += $vfuncs{$func}{sec};
printf +("%6.2f %9.2f %8.2f %8d %s\n", $funcs{$fileline}{pct}, printf +("%6.2f %9.2f %8.2f %8d %s\n",
$cume, $funcs{$fileline}{sec}, $vfuncs{$func}{pct},
$funcs{$fileline}{calls}, $cume, $vfuncs{$func}{sec},
$fileline); $vfuncs{$func}{calls},
$func);
} }
} }

View File

@ -999,7 +999,7 @@ private:
AstNodeFTask* m_taskp; // [AfterLink] Pointer to task referenced AstNodeFTask* m_taskp; // [AfterLink] Pointer to task referenced
string m_name; // Name of variable string m_name; // Name of variable
string m_dotted; // Dotted part of scope to task or "" string m_dotted; // Dotted part of scope to task or ""
string m_inlinedDots; // Dotted hiearchy flattened out string m_inlinedDots; // Dotted hierarchy flattened out
public: public:
AstNodeFTaskRef(FileLine* fl, AstNode* namep, AstNode* pinsp) AstNodeFTaskRef(FileLine* fl, AstNode* namep, AstNode* pinsp)
:AstNode(fl) :AstNode(fl)

View File

@ -421,7 +421,7 @@ struct AstScope : public AstNode {
private: private:
string m_name; // Name string m_name; // Name
AstScope* m_aboveScopep; // Scope above this one in the hierarchy (NULL if top) AstScope* m_aboveScopep; // Scope above this one in the hierarchy (NULL if top)
AstCell* m_aboveCellp; // Cell above this in the hiearchy (NULL if top) AstCell* m_aboveCellp; // Cell above this in the hierarchy (NULL if top)
AstModule* m_modp; // Module scope corresponds to AstModule* m_modp; // Module scope corresponds to
public: public:
AstScope(FileLine* fl, AstModule* modp, const string& name, AstScope(FileLine* fl, AstModule* modp, const string& name,
@ -540,7 +540,7 @@ struct AstVarXRef : public AstNodeVarRef {
// Includes pin on a cell, as part of a ASSIGN statement to connect I/Os until AstScope // Includes pin on a cell, as part of a ASSIGN statement to connect I/Os until AstScope
private: private:
string m_dotted; // Scope name to connected to string m_dotted; // Scope name to connected to
string m_inlinedDots; // Dotted hiearchy flattened out string m_inlinedDots; // Dotted hierarchy flattened out
public: public:
AstVarXRef(FileLine* fl, const string& name, const string& dotted, bool lvalue) AstVarXRef(FileLine* fl, const string& name, const string& dotted, bool lvalue)
:AstNodeVarRef(fl, name, NULL, lvalue) :AstNodeVarRef(fl, name, NULL, lvalue)

View File

@ -21,7 +21,7 @@
// LinkDot TRANSFORMATIONS: // LinkDot TRANSFORMATIONS:
// Top-down traversal // Top-down traversal
// Cells: // Cells:
// Make graph of cell hiearchy // Make graph of cell hierarchy
// Var/Funcs's: // Var/Funcs's:
// Collect all names into symtable under appropriate cell // Collect all names into symtable under appropriate cell
// Top-down traversal // Top-down traversal
@ -180,7 +180,7 @@ private:
// TYPES // TYPES
typedef std::multimap<string,LinkDotCellVertex*> NameScopeMap; typedef std::multimap<string,LinkDotCellVertex*> NameScopeMap;
// MEMBERS // MEMBERS
LinkDotGraph m_graph; // Graph of hiearchy LinkDotGraph m_graph; // Graph of hierarchy
NameScopeMap m_nameScopeMap; // Hash of scope referenced by non-pretty textual name NameScopeMap m_nameScopeMap; // Hash of scope referenced by non-pretty textual name
bool m_forPrearray; // Compress cell__[array] refs bool m_forPrearray; // Compress cell__[array] refs
bool m_forScopeCreation; // Remove VarXRefs for V3Scope bool m_forScopeCreation; // Remove VarXRefs for V3Scope
@ -277,7 +277,7 @@ private:
public: public:
LinkDotBaseVertex* findDotted(LinkDotBaseVertex* cellVxp, const string& dotname, LinkDotBaseVertex* findDotted(LinkDotBaseVertex* cellVxp, const string& dotname,
string& baddot, LinkDotBaseVertex*& okVxp) { string& baddot, LinkDotBaseVertex*& okVxp) {
// Given a dotted hiearchy name, return where in scope it is // Given a dotted hierarchy name, return where in scope it is
// Note when dotname=="" we just fall through and return cellVxp // Note when dotname=="" we just fall through and return cellVxp
UINFO(8," dottedFind "<<dotname<<endl); UINFO(8," dottedFind "<<dotname<<endl);
bool firstId = true; bool firstId = true;
@ -520,8 +520,8 @@ private:
virtual void visit(AstScope* nodep, AstNUser*) { virtual void visit(AstScope* nodep, AstNUser*) {
UINFO(8," SCOPE "<<nodep<<endl); UINFO(8," SCOPE "<<nodep<<endl);
if (!m_statep->forScopeCreation()) v3fatalSrc("Scopes should only exist right after V3Scope"); if (!m_statep->forScopeCreation()) v3fatalSrc("Scopes should only exist right after V3Scope");
// Using the CELL names, we created all hiearchy. We now need to match this Scope // Using the CELL names, we created all hierarchy. We now need to match this Scope
// up with the hiearchy created by the CELL names. // up with the hierarchy created by the CELL names.
m_cellVxp = m_statep->findScope(nodep); m_cellVxp = m_statep->findScope(nodep);
nodep->iterateChildren(*this); nodep->iterateChildren(*this);
m_cellVxp = NULL; m_cellVxp = NULL;
@ -610,7 +610,7 @@ private:
UINFO(8," "<<nodep<<endl); UINFO(8," "<<nodep<<endl);
if (!m_cellVxp) { if (!m_cellVxp) {
UINFO(9,"Dead module for "<<nodep<<endl); UINFO(9,"Dead module for "<<nodep<<endl);
nodep->varp(NULL); // Module that is not in hiearchy. We'll be dead code eliminating it later. nodep->varp(NULL); // Module that is not in hierarchy. We'll be dead code eliminating it later.
} else { } else {
string baddot; string baddot;
LinkDotBaseVertex* okVxp; LinkDotBaseVertex* okVxp;
@ -657,7 +657,7 @@ private:
UINFO(8," "<<nodep<<endl); UINFO(8," "<<nodep<<endl);
if (!m_cellVxp) { if (!m_cellVxp) {
UINFO(9,"Dead module for "<<nodep<<endl); UINFO(9,"Dead module for "<<nodep<<endl);
nodep->taskp(NULL); // Module that is not in hiearchy. We'll be dead code eliminating it later. nodep->taskp(NULL); // Module that is not in hierarchy. We'll be dead code eliminating it later.
} else { } else {
string baddot; string baddot;
LinkDotBaseVertex* okVxp; LinkDotBaseVertex* okVxp;

View File

@ -24,7 +24,7 @@
//********************************************************************** //**********************************************************************
//**** Version and host name //**** Version and host name
#define DTVERSION "Verilator 3.650 4/20/2007" #define DTVERSION "Verilator 3.651 4/20/2007"
//********************************************************************** //**********************************************************************
//**** Functions //**** Functions