some simulation fixes in eval_logic_expr()
This commit is contained in:
parent
451abb9d5f
commit
72b356df3c
|
|
@ -1158,7 +1158,7 @@ int eval_logic_expr(int inst, int output)
|
|||
case '~': /* negation operator */
|
||||
if(sp > 0) {
|
||||
sp--;
|
||||
if(!(stack[sp] & 2)) stack[sp] = !stack[sp];
|
||||
if(stack[sp] < 2) stack[sp] = !stack[sp];
|
||||
else stack[sp] = 2;
|
||||
++sp;
|
||||
}
|
||||
|
|
@ -1166,24 +1166,24 @@ int eval_logic_expr(int inst, int output)
|
|||
case 'z': /* Tristate driver [signal,enable,'z']-> signal if z==1, Z (3) otherwise */
|
||||
if(sp > 1) {
|
||||
s = stack[sp - 1];
|
||||
stack[sp - 2] = (s & 2) ? 2 : (s == 1 ) ? stack[sp - 2] : 3;
|
||||
stack[sp - 2] = (s > 1) ? 2 : (s == 1 ) ? stack[sp - 2] : 3;
|
||||
sp--;
|
||||
}
|
||||
break;
|
||||
case 'M': /* mux operator */
|
||||
s = stack[sp - 1];
|
||||
if(sp > 2) {
|
||||
if(!(s & 2) ) {
|
||||
s = stack[sp - 1];
|
||||
if(s < 2) {
|
||||
stack[sp - 3] = (s == 0) ? stack[sp - 3] : stack[sp - 2];
|
||||
}
|
||||
else stack[sp - 3] = 3;
|
||||
else stack[sp - 3] = 2;
|
||||
sp -=2;
|
||||
}
|
||||
break;
|
||||
case 'm': /* mux operator , lower priority*/
|
||||
s = stack[sp - 1];
|
||||
if(sp > 2) {
|
||||
if(!(s & 2) ) { /* reduce pessimism, avoid infinite loops */
|
||||
s = stack[sp - 1];
|
||||
if(s < 2) { /* reduce pessimism, avoid infinite loops */
|
||||
stack[sp - 3] = (s == 0) ? stack[sp - 3] : stack[sp - 2];
|
||||
}
|
||||
else stack[sp - 3] = 4;
|
||||
|
|
@ -1197,7 +1197,7 @@ int eval_logic_expr(int inst, int output)
|
|||
if(stack[i] == 1) {
|
||||
res = 1;
|
||||
break;
|
||||
} else if(stack[i] & 2) {
|
||||
} else if(stack[i] > 1) {
|
||||
res = 2;
|
||||
}
|
||||
}
|
||||
|
|
@ -1212,7 +1212,7 @@ int eval_logic_expr(int inst, int output)
|
|||
if(stack[i] == 0) {
|
||||
res = 0;
|
||||
break;
|
||||
} else if(stack[i] & 2) {
|
||||
} else if(stack[i] > 1) {
|
||||
res = 2;
|
||||
}
|
||||
}
|
||||
|
|
@ -1224,7 +1224,7 @@ int eval_logic_expr(int inst, int output)
|
|||
if(sp > 1) {
|
||||
res = 0;
|
||||
for(i = sp - 2; i < sp; i++) {
|
||||
if(!(stack[i] & 2)) {
|
||||
if(stack[i] < 2) {
|
||||
res = res ^ stack[i];
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
v {xschem version=2.9.9 file_version=1.2 }
|
||||
v {xschem version=3.0.0 file_version=1.2 }
|
||||
G {}
|
||||
K {type=switch
|
||||
function0="1 2 3 m"
|
||||
|
|
@ -17,7 +17,7 @@ L 4 -10 0 10 0 {}
|
|||
B 5 -32.5 -2.5 -27.5 2.5 {name=t0 dir=inout}
|
||||
B 5 27.5 7.5 32.5 12.5 {name=t1 dir=inout }
|
||||
B 5 27.5 -12.5 32.5 -7.5 {name=t2 dir=inout }
|
||||
B 5 -7.5 -47.5 7.5 -32.5 {name=g dir=inout goto=0,1,2}
|
||||
B 5 -2.5 -42.5 2.5 -37.5 {name=g dir=inout goto=0,1,2}
|
||||
A 4 -8.75 0 1.25 360 360 {fill=true}
|
||||
A 4 10 -10 1.25 0 360 {fill=true}
|
||||
A 4 10 10 1.25 0 360 {fill=true}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
v {xschem version=2.9.9 file_version=1.2 }
|
||||
v {xschem version=3.0.0 file_version=1.2 }
|
||||
G {}
|
||||
K {type=switch
|
||||
function0="3 2 4 m"
|
||||
|
|
@ -23,7 +23,7 @@ B 5 -32.5 -12.5 -27.5 -7.5 {name=t0 dir=inout}
|
|||
B 5 -32.5 7.5 -27.5 12.5 {name=t1 dir=inout}
|
||||
B 5 27.5 7.5 32.5 12.5 {name=t2 dir=inout }
|
||||
B 5 27.5 -12.5 32.5 -7.5 {name=t3 dir=inout }
|
||||
B 5 -7.5 -47.5 7.5 -32.5 {name=g dir=inout goto=0,1,2,3}
|
||||
B 5 -2.5 -42.5 2.5 -37.5 {name=g dir=inout goto=0,1,2,3}
|
||||
A 4 -10 -10 1.25 0 360 {fill=true}
|
||||
A 4 10 -10 1.25 0 360 {fill=true}
|
||||
A 4 10 10 1.25 0 360 {fill=true}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
v {xschem version=2.9.9 file_version=1.2 }
|
||||
v {xschem version=3.0.0 file_version=1.2 }
|
||||
G {}
|
||||
K {type=switch
|
||||
function0="Z 1 2 M"
|
||||
|
|
@ -14,7 +14,7 @@ L 4 -10 0 10 -10 {}
|
|||
L 4 0 -40 0 -5 {}
|
||||
B 5 -32.5 -2.5 -27.5 2.5 {name=t0 dir=inout}
|
||||
B 5 27.5 -2.5 32.5 2.5 {name=t1 dir=inout }
|
||||
B 5 -7.5 -47.5 7.5 -32.5 {name=g dir=inout goto=0,1}
|
||||
B 5 -2.5 -43.75 2.5 -38.75 {name=g dir=inout goto=0,1}
|
||||
A 4 10 0 1.25 0 360 {fill=true}
|
||||
A 4 -10 0 1.25 0 360 {fill=true}
|
||||
T {1} 20 -7.5 0 0 0.1 0.1 {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue