pushing in the meanwhile

This commit is contained in:
Greatorex 2022-02-21 18:27:41 +01:00
parent 0a5a271409
commit 6dd5df58a1
7 changed files with 157 additions and 17 deletions

View File

@ -269,7 +269,7 @@ namespace tmpl {
[keeper=0] ~a & ~s | ~b & ~_s -> _y+
a & _s | b & s -> _y-
_y => -y
_y => y-
}
sizing { _s{-1}; y{-1}; _y{-1}}
}
@ -296,7 +296,7 @@ namespace tmpl {
~_yab & ~s1 | ~_ycd & ~_s1 -> y+
}
sizing {_s0{-1}; _s1{-1}; y{-1}; _yab{-1} _ycd{-1}}
sizing {_s0{-1}; _s1{-1}; y{-1}; _yab{-1}; _ycd{-1}}
}

View File

@ -36,7 +36,6 @@ namespace tmpl {
export deftype power (bool?! vdd, vss) { }
export template<pint N>
defproc ortree (bool? in[N]; bool! out; power supply)
{
@ -49,7 +48,9 @@ defproc ortree (bool? in[N]; bool! out; power supply)
end = N-1;
pint lenTree2Count, lenTree3Count;
/* Pre"calculate" the number of C cells required, look below if confused */
lenTree2Count = 0;
lenTree3Count = 0;
/* Pre"calculate" the number of C cells required, look below if confused */
*[ i != end ->
j = 0;
*[ i < end ->
@ -72,7 +73,7 @@ defproc ortree (bool? in[N]; bool! out; power supply)
]
/* array that holds ALL the nodes in the completion tree */
bool tmp[end];
bool tmp[end+1];
(k:N:tmp[k] = in[k];)
/* array to hold the actual C-elments, either A2C or A3C */
@ -104,27 +105,26 @@ defproc ortree (bool? in[N]; bool! out; power supply)
*[ i < end ->
/*-- there are still signals that need to be combined --*/
j = j + 1;
bool tmp[end+j..end+j];
[ i+1 >= end ->
/*-- last piece: use either a 2 input C-element --*/
C2Els[tree2Index].c1 = tmp[i];
C2Els[tree2Index].c2 = tmp[i+1];
C2Els[tree2Index].a = tmp[i];
C2Els[tree2Index].b = tmp[i+1];
C2Els[tree2Index].y = tmp[end+j];
tree2Index = tree2Index +1;
i = end;
[] i+2 >= end ->
/*-- last piece: use either a 3 input C-element --*/
C3Els[tree3Index].c1 = tmp[i];
C3Els[tree3Index].c2 = tmp[i+1];
C3Els[tree3Index].c3 = tmp[i+2];
C3Els[tree3Index].a = tmp[i];
C3Els[tree3Index].b = tmp[i+1];
C3Els[tree3Index].c = tmp[i+2];
C3Els[tree3Index].y = tmp[end+j];
tree3Index = tree3Index +1;
i = end;
[] else ->
/*-- more to come; so use a two input C-element --*/
C2Els[tree2Index].c1 = tmp[i];
C2Els[tree2Index].c2 = tmp[i+1];
C2Els[tree2Index].a = tmp[i];
C2Els[tree2Index].b = tmp[i+1];
C2Els[tree2Index].y = tmp[end+j];
tree2Index = tree2Index +1;
i = i + 2;
@ -175,7 +175,7 @@ defproc ctree (bool? in[N]; bool! out; power supply)
]
/* array that holds ALL the nodes in the completion tree */
bool tmp[end];
bool tmp[end+1];
(k:N:tmp[k] = in[k];)
/* array to hold the actual C-elments, either A2C or A3C */
@ -207,7 +207,6 @@ defproc ctree (bool? in[N]; bool! out; power supply)
*[ i < end ->
/*-- there are still signals that need to be combined --*/
j = j + 1;
bool tmp[end+j..end+j];
[ i+1 >= end ->
/*-- last piece: use either a 2 input C-element --*/
C2Els[tree2Index].c1 = tmp[i];

View File

@ -1,2 +1,2 @@
= "GND" "GND"
= "Vdd" "Vdd"
= "Vdd" "Vdd"

View File

@ -0,0 +1,2 @@
t.ortree_test.tmp[18] t.in[6] t.in[5] t.in[12] t.ortree_test.tmp[16] t.ortree_test.tmp[22] t.in[9] t.in[13] t.ortree_test.tmp[25] t.in[4] t.in[8] t.in[7] t.in[14] t.ortree_test.tmp[19] t.in[0] t.in[3] t.ortree_test.C2Els[1]._y t.ortree_test.C3Els[1]._y t.in[10] t.in[1] t.in[11] t.in[2] t.ortree_test.C2Els[4]._y t.ortree_test.tmp[20] t.ortree_test.tmp[17] t.ortree_test.tmp[21] t.ortree_test.tmp[23] t.ortree_test.C3Els[0]._y t.ortree_test.C2Els[2]._y t.ortree_test.tmp[24] t.ortree_test.tmp[15] t.ortree_test.C3Els[2]._y t.ortree_test.C2Els[6]._y t.ortree_test.C2Els[3]._y t.ortree_test.C2Els[5]._y t.ortree_test.C2Els[7]._y t.ortree_test.C2Els[0]._y
reset complete

View File

@ -1,2 +1,137 @@
= "GND" "GND"
= "Vdd" "Vdd"
= "Vdd" "Vdd"
"t.ortree_test.C2Els[0].a"|"t.ortree_test.C2Els[0].b"->"t.ortree_test.C2Els[0]._y"-
~("t.ortree_test.C2Els[0].a"|"t.ortree_test.C2Els[0].b")->"t.ortree_test.C2Els[0]._y"+
"t.ortree_test.C2Els[0]._y"->"t.ortree_test.C2Els[0].y"-
~("t.ortree_test.C2Els[0]._y")->"t.ortree_test.C2Els[0].y"+
"t.ortree_test.C2Els[1].a"|"t.ortree_test.C2Els[1].b"->"t.ortree_test.C2Els[1]._y"-
~("t.ortree_test.C2Els[1].a"|"t.ortree_test.C2Els[1].b")->"t.ortree_test.C2Els[1]._y"+
"t.ortree_test.C2Els[1]._y"->"t.ortree_test.C2Els[1].y"-
~("t.ortree_test.C2Els[1]._y")->"t.ortree_test.C2Els[1].y"+
"t.ortree_test.C2Els[2].a"|"t.ortree_test.C2Els[2].b"->"t.ortree_test.C2Els[2]._y"-
~("t.ortree_test.C2Els[2].a"|"t.ortree_test.C2Els[2].b")->"t.ortree_test.C2Els[2]._y"+
"t.ortree_test.C2Els[2]._y"->"t.ortree_test.C2Els[2].y"-
~("t.ortree_test.C2Els[2]._y")->"t.ortree_test.C2Els[2].y"+
"t.ortree_test.C2Els[3].a"|"t.ortree_test.C2Els[3].b"->"t.ortree_test.C2Els[3]._y"-
~("t.ortree_test.C2Els[3].a"|"t.ortree_test.C2Els[3].b")->"t.ortree_test.C2Els[3]._y"+
"t.ortree_test.C2Els[3]._y"->"t.ortree_test.C2Els[3].y"-
~("t.ortree_test.C2Els[3]._y")->"t.ortree_test.C2Els[3].y"+
"t.ortree_test.C2Els[4].a"|"t.ortree_test.C2Els[4].b"->"t.ortree_test.C2Els[4]._y"-
~("t.ortree_test.C2Els[4].a"|"t.ortree_test.C2Els[4].b")->"t.ortree_test.C2Els[4]._y"+
"t.ortree_test.C2Els[4]._y"->"t.ortree_test.C2Els[4].y"-
~("t.ortree_test.C2Els[4]._y")->"t.ortree_test.C2Els[4].y"+
"t.ortree_test.C2Els[5].a"|"t.ortree_test.C2Els[5].b"->"t.ortree_test.C2Els[5]._y"-
~("t.ortree_test.C2Els[5].a"|"t.ortree_test.C2Els[5].b")->"t.ortree_test.C2Els[5]._y"+
"t.ortree_test.C2Els[5]._y"->"t.ortree_test.C2Els[5].y"-
~("t.ortree_test.C2Els[5]._y")->"t.ortree_test.C2Els[5].y"+
"t.ortree_test.C2Els[6].a"|"t.ortree_test.C2Els[6].b"->"t.ortree_test.C2Els[6]._y"-
~("t.ortree_test.C2Els[6].a"|"t.ortree_test.C2Els[6].b")->"t.ortree_test.C2Els[6]._y"+
"t.ortree_test.C2Els[6]._y"->"t.ortree_test.C2Els[6].y"-
~("t.ortree_test.C2Els[6]._y")->"t.ortree_test.C2Els[6].y"+
"t.ortree_test.C2Els[7].a"|"t.ortree_test.C2Els[7].b"->"t.ortree_test.C2Els[7]._y"-
~("t.ortree_test.C2Els[7].a"|"t.ortree_test.C2Els[7].b")->"t.ortree_test.C2Els[7]._y"+
"t.ortree_test.C2Els[7]._y"->"t.ortree_test.C2Els[7].y"-
~("t.ortree_test.C2Els[7]._y")->"t.ortree_test.C2Els[7].y"+
"t.ortree_test.C3Els[0].a"|"t.ortree_test.C3Els[0].b"|"t.ortree_test.C3Els[0].c"->"t.ortree_test.C3Els[0]._y"-
~("t.ortree_test.C3Els[0].a"|"t.ortree_test.C3Els[0].b"|"t.ortree_test.C3Els[0].c")->"t.ortree_test.C3Els[0]._y"+
"t.ortree_test.C3Els[0]._y"->"t.ortree_test.C3Els[0].y"-
~("t.ortree_test.C3Els[0]._y")->"t.ortree_test.C3Els[0].y"+
"t.ortree_test.C3Els[1].a"|"t.ortree_test.C3Els[1].b"|"t.ortree_test.C3Els[1].c"->"t.ortree_test.C3Els[1]._y"-
~("t.ortree_test.C3Els[1].a"|"t.ortree_test.C3Els[1].b"|"t.ortree_test.C3Els[1].c")->"t.ortree_test.C3Els[1]._y"+
"t.ortree_test.C3Els[1]._y"->"t.ortree_test.C3Els[1].y"-
~("t.ortree_test.C3Els[1]._y")->"t.ortree_test.C3Els[1].y"+
"t.ortree_test.C3Els[2].a"|"t.ortree_test.C3Els[2].b"|"t.ortree_test.C3Els[2].c"->"t.ortree_test.C3Els[2]._y"-
~("t.ortree_test.C3Els[2].a"|"t.ortree_test.C3Els[2].b"|"t.ortree_test.C3Els[2].c")->"t.ortree_test.C3Els[2]._y"+
"t.ortree_test.C3Els[2]._y"->"t.ortree_test.C3Els[2].y"-
~("t.ortree_test.C3Els[2]._y")->"t.ortree_test.C3Els[2].y"+
= "t.ortree_test.tmp[15]" "t.ortree_test.C2Els[6].a"
= "t.ortree_test.tmp[15]" "t.ortree_test.C2Els[0].y"
= "t.ortree_test.tmp[16]" "t.ortree_test.C2Els[6].b"
= "t.ortree_test.tmp[16]" "t.ortree_test.C2Els[1].y"
= "t.ortree_test.tmp[17]" "t.ortree_test.C2Els[7].a"
= "t.ortree_test.tmp[17]" "t.ortree_test.C2Els[2].y"
= "t.ortree_test.tmp[18]" "t.ortree_test.C2Els[7].b"
= "t.ortree_test.tmp[18]" "t.ortree_test.C2Els[3].y"
= "t.ortree_test.tmp[19]" "t.ortree_test.C3Els[1].a"
= "t.ortree_test.tmp[19]" "t.ortree_test.C2Els[4].y"
= "t.ortree_test.tmp[20]" "t.ortree_test.C3Els[1].b"
= "t.ortree_test.tmp[20]" "t.ortree_test.C2Els[5].y"
= "t.ortree_test.tmp[21]" "t.ortree_test.C3Els[1].c"
= "t.ortree_test.tmp[21]" "t.ortree_test.C3Els[0].y"
= "t.ortree_test.tmp[22]" "t.ortree_test.C3Els[2].a"
= "t.ortree_test.tmp[22]" "t.ortree_test.C2Els[6].y"
= "t.ortree_test.tmp[23]" "t.ortree_test.C3Els[2].b"
= "t.ortree_test.tmp[23]" "t.ortree_test.C2Els[7].y"
= "t.ortree_test.tmp[24]" "t.ortree_test.C3Els[2].c"
= "t.ortree_test.tmp[24]" "t.ortree_test.C3Els[1].y"
= "t.ortree_test.tmp[25]" "t.ortree_test.C3Els[2].y"
= "t.ortree_test.supply.vdd" "t.ortree_test.C3Els[2].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C3Els[1].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C3Els[0].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[7].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[6].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[5].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[4].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[3].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[2].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[1].vdd"
= "t.ortree_test.supply.vdd" "t.ortree_test.C2Els[0].vdd"
= "t.ortree_test.supply.vss" "t.ortree_test.C3Els[2].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C3Els[1].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C3Els[0].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[7].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[6].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[5].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[4].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[3].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[2].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[1].vss"
= "t.ortree_test.supply.vss" "t.ortree_test.C2Els[0].vss"
= "t.ortree_test.in[0]" "t.ortree_test.C2Els[0].a"
= "t.ortree_test.in[0]" "t.ortree_test.tmp[0]"
= "t.ortree_test.in[1]" "t.ortree_test.C2Els[0].b"
= "t.ortree_test.in[1]" "t.ortree_test.tmp[1]"
= "t.ortree_test.in[2]" "t.ortree_test.C2Els[1].a"
= "t.ortree_test.in[2]" "t.ortree_test.tmp[2]"
= "t.ortree_test.in[3]" "t.ortree_test.C2Els[1].b"
= "t.ortree_test.in[3]" "t.ortree_test.tmp[3]"
= "t.ortree_test.in[4]" "t.ortree_test.C2Els[2].a"
= "t.ortree_test.in[4]" "t.ortree_test.tmp[4]"
= "t.ortree_test.in[5]" "t.ortree_test.C2Els[2].b"
= "t.ortree_test.in[5]" "t.ortree_test.tmp[5]"
= "t.ortree_test.in[6]" "t.ortree_test.C2Els[3].a"
= "t.ortree_test.in[6]" "t.ortree_test.tmp[6]"
= "t.ortree_test.in[7]" "t.ortree_test.C2Els[3].b"
= "t.ortree_test.in[7]" "t.ortree_test.tmp[7]"
= "t.ortree_test.in[8]" "t.ortree_test.C2Els[4].a"
= "t.ortree_test.in[8]" "t.ortree_test.tmp[8]"
= "t.ortree_test.in[9]" "t.ortree_test.C2Els[4].b"
= "t.ortree_test.in[9]" "t.ortree_test.tmp[9]"
= "t.ortree_test.in[10]" "t.ortree_test.C2Els[5].a"
= "t.ortree_test.in[10]" "t.ortree_test.tmp[10]"
= "t.ortree_test.in[11]" "t.ortree_test.C2Els[5].b"
= "t.ortree_test.in[11]" "t.ortree_test.tmp[11]"
= "t.ortree_test.in[12]" "t.ortree_test.C3Els[0].a"
= "t.ortree_test.in[12]" "t.ortree_test.tmp[12]"
= "t.ortree_test.in[13]" "t.ortree_test.C3Els[0].b"
= "t.ortree_test.in[13]" "t.ortree_test.tmp[13]"
= "t.ortree_test.in[14]" "t.ortree_test.C3Els[0].c"
= "t.ortree_test.in[14]" "t.ortree_test.tmp[14]"
= "Vdd" "t.ortree_test.supply.vdd"
= "GND" "t.ortree_test.supply.vss"
= "t.out" "t.ortree_test.out"
= "t.in[0]" "t.ortree_test.in[0]"
= "t.in[1]" "t.ortree_test.in[1]"
= "t.in[2]" "t.ortree_test.in[2]"
= "t.in[3]" "t.ortree_test.in[3]"
= "t.in[4]" "t.ortree_test.in[4]"
= "t.in[5]" "t.ortree_test.in[5]"
= "t.in[6]" "t.ortree_test.in[6]"
= "t.in[7]" "t.ortree_test.in[7]"
= "t.in[8]" "t.ortree_test.in[8]"
= "t.in[9]" "t.ortree_test.in[9]"
= "t.in[10]" "t.ortree_test.in[10]"
= "t.in[11]" "t.ortree_test.in[11]"
= "t.in[12]" "t.ortree_test.in[12]"
= "t.in[13]" "t.ortree_test.in[13]"
= "t.in[14]" "t.ortree_test.in[14]"

View File

@ -27,6 +27,7 @@
*/
import "../../dataflow_neuro/treegates.act";
import globals;
open tmpl::dataflow_neuro;
@ -37,3 +38,4 @@ defproc ortree_15 (bool? in[15]; bool! out){
}
ortree_15 t;

View File

@ -1,3 +1,5 @@
system "echo 'reset complete'"
set-bool-array "t.in" 15 0
cycle
mode run