some simulation fixes in eval_logic_expr()

This commit is contained in:
Stefan Frederik 2021-09-27 02:41:51 +02:00
parent 451abb9d5f
commit 72b356df3c
4 changed files with 16 additions and 16 deletions

View File

@ -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 {

View File

@ -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}

View File

@ -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}

View File

@ -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 {}