Fixed issue with return address in cpu_sim.py. Fixed bugs in compiler generation...
[trinary.git] / circuits / alu-fast.asc
blobfc0b5ffc6ce696e12e36ecd086b29257806ff037
1 Version 4\r
2 SHEET 1 992 680\r
3 WIRE -416 144 -464 144\r
4 WIRE -416 192 -464 192\r
5 WIRE 656 192 464 192\r
6 WIRE 464 224 464 192\r
7 WIRE -416 240 -464 240\r
8 WIRE -416 304 -464 304\r
9 WIRE -416 352 -464 352\r
10 WIRE 464 368 464 304\r
11 WIRE -416 400 -464 400\r
12 FLAG -464 144 A0\r
13 IOPIN -464 144 In\r
14 FLAG -464 192 A1\r
15 IOPIN -464 192 In\r
16 FLAG -464 240 A2\r
17 IOPIN -464 240 In\r
18 FLAG -464 304 B0\r
19 IOPIN -464 304 In\r
20 FLAG -464 352 B1\r
21 IOPIN -464 352 In\r
22 FLAG -464 400 B2\r
23 IOPIN -464 400 In\r
24 FLAG 656 192 S\r
25 IOPIN 656 192 Out\r
26 FLAG 464 368 0\r
27 SYMBOL bv 464 208 R0\r
28 SYMATTR InstName B1\r
29 SYMATTR Value V=compare()\r
30 TEXT -176 -232 Left 0 !.param V_N_max=-2   ; TODO: put in a library file\n.param V_P_min=2\n.func is_i(A){if(A<={V_N_max},5,0)}\n.func is_1(A){if(A>={V_P_min},5,0)}\n.func is_0(A){if(is_i(A) | is_1(A),0,5)}\n.func isnt_0(A){if(is_i(A) | is_1(A),5,0)}\n.func choose(A,for_n,for_z,for_p) {if(is_i(A),for_n,if(is_1(A),for_p,for_z))}\n.func tdiscrete(A){choose(A,-1,0,1)}  ; make -1, 0, or 1\r
31 TEXT -232 312 Left 0 !.func compare(){if(numA()<numB(),-5,if(numA()>numB(),5,0))}\r
32 TEXT -240 80 Left 0 !; Sign of balanced trinary number (most-significant non-zero trit)\n.func tsign(c,b,a){if(isnt_0(c),c,if(isnt_0(b),b,if(isnt_0(a),a,0)))}\r
33 TEXT -360 208 Left 0 !.func num(c,b,a){a*(3**0) + b*(3**1) + c*(3**2)}\n.func numA(){num(tdiscrete(V(A2)),tdiscrete(V(A1)),tdiscrete(V(A0)))}\n.func numB(){num(tdiscrete(V(B2)),tdiscrete(V(B1)),tdiscrete(V(B0)))}\r