Fix BLKSEQ warnings on variables declared inside always.
This commit is contained in:
parent
3916758529
commit
d17f812827
1
Changes
1
Changes
|
|
@ -18,6 +18,7 @@ indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
**** Fix array of instantiations with sub-range output, bug414. [Jeremy Bennett]
|
**** Fix array of instantiations with sub-range output, bug414. [Jeremy Bennett]
|
||||||
|
|
||||||
|
**** Fix BLKSEQ warnings on variables declared inside always. [Ruben Diez]
|
||||||
|
|
||||||
* Verilator 3.830 2011/11/27
|
* Verilator 3.830 2011/11/27
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ private:
|
||||||
V3SymTable* m_cellVarsp; // Symbol table of variables under cell's module
|
V3SymTable* m_cellVarsp; // Symbol table of variables under cell's module
|
||||||
int m_beginNum; // Begin block number, 0=none seen
|
int m_beginNum; // Begin block number, 0=none seen
|
||||||
int m_modBeginNum; // Begin block number in module, 0=none seen
|
int m_modBeginNum; // Begin block number in module, 0=none seen
|
||||||
|
bool m_inAlways; // Inside an always
|
||||||
bool m_inGenerate; // Inside a generate
|
bool m_inGenerate; // Inside a generate
|
||||||
AstNodeModule* m_valueModp; // If set, move AstVar->valuep() initial values to this module
|
AstNodeModule* m_valueModp; // If set, move AstVar->valuep() initial values to this module
|
||||||
vector<V3SymTable*> m_delSymps; // Symbol tables to delete
|
vector<V3SymTable*> m_delSymps; // Symbol tables to delete
|
||||||
|
|
@ -340,6 +341,8 @@ private:
|
||||||
if (nodep->isIO() && !m_ftaskp && !nodep->user2()) {
|
if (nodep->isIO() && !m_ftaskp && !nodep->user2()) {
|
||||||
nodep->v3error("Input/output/inout does not appear in port list: "<<nodep->prettyName());
|
nodep->v3error("Input/output/inout does not appear in port list: "<<nodep->prettyName());
|
||||||
}
|
}
|
||||||
|
// temporaries under an always aren't expected to be blocking
|
||||||
|
if (m_inAlways) nodep->fileline()->modifyWarnOff(V3ErrorCode::BLKSEQ, true);
|
||||||
if (nodep->valuep()) {
|
if (nodep->valuep()) {
|
||||||
// A variable with a = value can be three things:
|
// A variable with a = value can be three things:
|
||||||
FileLine* fl = nodep->valuep()->fileline();
|
FileLine* fl = nodep->valuep()->fileline();
|
||||||
|
|
@ -745,7 +748,9 @@ private:
|
||||||
visitIterateNoValueMod(nodep);
|
visitIterateNoValueMod(nodep);
|
||||||
}
|
}
|
||||||
virtual void visit(AstAlways* nodep, AstNUser*) {
|
virtual void visit(AstAlways* nodep, AstNUser*) {
|
||||||
|
m_inAlways = true;
|
||||||
visitIterateNoValueMod(nodep);
|
visitIterateNoValueMod(nodep);
|
||||||
|
m_inAlways = false;
|
||||||
}
|
}
|
||||||
virtual void visit(AstPslCover* nodep, AstNUser*) {
|
virtual void visit(AstPslCover* nodep, AstNUser*) {
|
||||||
visitIterateNoValueMod(nodep);
|
visitIterateNoValueMod(nodep);
|
||||||
|
|
@ -768,6 +773,7 @@ public:
|
||||||
m_paramNum = 0;
|
m_paramNum = 0;
|
||||||
m_beginNum = 0;
|
m_beginNum = 0;
|
||||||
m_modBeginNum = 0;
|
m_modBeginNum = 0;
|
||||||
|
m_inAlways = false;
|
||||||
m_inGenerate = false;
|
m_inGenerate = false;
|
||||||
m_valueModp = NULL;
|
m_valueModp = NULL;
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
// please note it here, otherwise:**
|
// please note it here, otherwise:**
|
||||||
//
|
//
|
||||||
// This file ONLY is placed into the Public Domain, for any use,
|
// This file ONLY is placed into the Public Domain, for any use,
|
||||||
// without warranty, 2011 by Wilson Snyder.
|
// without warranty, 2012 by Wilson Snyder.
|
||||||
|
|
||||||
module t (/*AUTOARG*/
|
module t (/*AUTOARG*/
|
||||||
// Inputs
|
// Inputs
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,12 @@ module reg_1r1w
|
||||||
|
|
||||||
integer x;
|
integer x;
|
||||||
|
|
||||||
|
// Message 679
|
||||||
|
always @(posedge clk) begin
|
||||||
|
int tmp = x + 1;
|
||||||
|
if (tmp !== x + 1) $stop;
|
||||||
|
end
|
||||||
|
|
||||||
always @(posedge clk or negedge rst_l) begin
|
always @(posedge clk or negedge rst_l) begin
|
||||||
if (!rst_l) begin
|
if (!rst_l) begin
|
||||||
for (x=0; x<DEPTH; x=x+1) begin // <== VERILATOR FLAGS THIS LINE
|
for (x=0; x<DEPTH; x=x+1) begin // <== VERILATOR FLAGS THIS LINE
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue