Fix enum value extension of '1.
This commit is contained in:
parent
8ab28d1d12
commit
b50542531d
2
Changes
2
Changes
|
|
@ -11,6 +11,8 @@ indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
**** Fix evaluation of chained parameter functions, bug684. [Ted Campbell]
|
**** Fix evaluation of chained parameter functions, bug684. [Ted Campbell]
|
||||||
|
|
||||||
|
**** Fix enum value extension of '1.
|
||||||
|
|
||||||
**** Fix multiple VPI variable callbacks, bug679. [Rich Porter]
|
**** Fix multiple VPI variable callbacks, bug679. [Rich Porter]
|
||||||
|
|
||||||
**** Fix vpi_get of vpiSize, bug680. [Rich Porter]
|
**** Fix vpi_get of vpiSize, bug680. [Rich Porter]
|
||||||
|
|
|
||||||
|
|
@ -2251,12 +2251,16 @@ private:
|
||||||
void widthCheck (AstNode* nodep, const char* side,
|
void widthCheck (AstNode* nodep, const char* side,
|
||||||
AstNode* underp, AstNodeDType* expDTypep,
|
AstNode* underp, AstNodeDType* expDTypep,
|
||||||
bool ignoreWarn=false) {
|
bool ignoreWarn=false) {
|
||||||
//UINFO(9,"wchk "<<side<<endl<<" "<<nodep<<endl<<" "<<underp<<endl<<" e"<<expWidth<<" m"<<expWidthMin<<" i"<<ignoreWarn<<endl);
|
//UINFO(9,"wchk "<<side<<endl<<" "<<nodep<<endl<<" "<<underp<<endl<<" e="<<expDTypep<<" i"<<ignoreWarn<<endl);
|
||||||
int expWidth = expDTypep->width();
|
int expWidth = expDTypep->width();
|
||||||
int expWidthMin = expDTypep->widthMin();
|
int expWidthMin = expDTypep->widthMin();
|
||||||
if (expWidthMin==0) expWidthMin = expWidth;
|
if (expWidthMin==0) expWidthMin = expWidth;
|
||||||
bool bad = widthBad(underp,expWidth,expWidthMin);
|
bool bad = widthBad(underp,expWidth,expWidthMin);
|
||||||
if (bad && fixAutoExtend(underp/*ref*/,expWidth)) bad=false; // Changes underp
|
if ((bad || underp->width() !=expWidth)
|
||||||
|
&& fixAutoExtend(underp/*ref*/,expWidth)) {
|
||||||
|
underp=NULL; // Changes underp
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (underp->castConst() && underp->castConst()->num().isFromString()
|
if (underp->castConst() && underp->castConst()->num().isFromString()
|
||||||
&& expWidth > underp->width()
|
&& expWidth > underp->width()
|
||||||
&& (((expWidth - underp->width()) % 8) == 0)) { // At least it's character sized
|
&& (((expWidth - underp->width()) % 8) == 0)) { // At least it's character sized
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,9 @@ module t (/*AUTOARG*/);
|
||||||
|
|
||||||
var logic [ONES:0] sized_based_on_enum;
|
var logic [ONES:0] sized_based_on_enum;
|
||||||
|
|
||||||
|
var enum logic [3:0] { QINVALID='1, QSEND={2'b0,2'h0}, QOP={2'b0,2'h1}, QCL={2'b0,2'h2},
|
||||||
|
QPR={2'b0,2'h3 }, QACK, QRSP } inv;
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
if (e0 !== 0) $stop;
|
if (e0 !== 0) $stop;
|
||||||
if (e1 !== 1) $stop;
|
if (e1 !== 1) $stop;
|
||||||
|
|
@ -61,6 +64,14 @@ module t (/*AUTOARG*/);
|
||||||
if (FIVE[BIT1] != 1'b0) $stop;
|
if (FIVE[BIT1] != 1'b0) $stop;
|
||||||
if (FIVE[BIT2] != 1'b1) $stop;
|
if (FIVE[BIT2] != 1'b1) $stop;
|
||||||
|
|
||||||
|
if (QINVALID != 15) $stop;
|
||||||
|
if (QSEND != 0) $stop;
|
||||||
|
if (QOP != 1) $stop;
|
||||||
|
if (QCL != 2) $stop;
|
||||||
|
if (QPR != 3) $stop;
|
||||||
|
if (QACK != 4) $stop;
|
||||||
|
if (QRSP != 5) $stop;
|
||||||
|
|
||||||
$write("*-* All Finished *-*\n");
|
$write("*-* All Finished *-*\n");
|
||||||
$finish;
|
$finish;
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue