mirror of
https://github.com/verilator/verilator.git
synced 2026-08-22 05:57:29 +02:00
Internals: Fix setBit not clearing X mask.
Signed-off-by: Wilson Snyder <[email protected]>
This commit is contained in:
committed by
Wilson Snyder
parent
9a16001e51
commit
6bda57da5d
+13
-4
@@ -56,10 +56,19 @@ public:
|
|||||||
V3Number& setDouble(double value);
|
V3Number& setDouble(double value);
|
||||||
void setBit (int bit, char value) { // Note must be pre-zeroed!
|
void setBit (int bit, char value) { // Note must be pre-zeroed!
|
||||||
if (bit>=m_width) return;
|
if (bit>=m_width) return;
|
||||||
if (value=='0'||value==0) m_value [bit/32] &= ~(1UL<<(bit&31));
|
uint32_t mask = (1UL<<(bit&31));
|
||||||
else {
|
if (value=='0' || value==0) {
|
||||||
if (value=='1'||value=='x'||value==1||value==3) m_value [bit/32] |= (1UL<<(bit&31));
|
m_value [bit/32] &= ~mask;
|
||||||
if (value=='z'||value=='x'||value==2||value==3) m_valueX[bit/32] |= (1UL<<(bit&31));
|
m_valueX[bit/32] &= ~mask;
|
||||||
|
} else if (value=='1'|| value==1) {
|
||||||
|
m_value [bit/32] |= mask;
|
||||||
|
m_valueX[bit/32] &= ~mask;
|
||||||
|
} else if (value=='z'|| value==3) {
|
||||||
|
m_value [bit/32] &= ~mask;
|
||||||
|
m_valueX[bit/32] |= mask;
|
||||||
|
} else { // X
|
||||||
|
m_value [bit/32] |= mask;
|
||||||
|
m_valueX[bit/32] |= mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user