pushing in the meanwhile
This commit is contained in:
parent
0a5a271409
commit
6dd5df58a1
@ -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}}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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,6 +48,8 @@ defproc ortree (bool? in[N]; bool! out; power supply)
|
||||
end = N-1;
|
||||
|
||||
pint lenTree2Count, lenTree3Count;
|
||||
lenTree2Count = 0;
|
||||
lenTree3Count = 0;
|
||||
/* Pre"calculate" the number of C cells required, look below if confused */
|
||||
*[ i != end ->
|
||||
j = 0;
|
||||
@ -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];
|
||||
|
2
test/unit_tests/ortree_15/run/prsim.out
Normal file
2
test/unit_tests/ortree_15/run/prsim.out
Normal 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
|
@ -1,2 +1,137 @@
|
||||
= "GND" "GND"
|
||||
= "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]"
|
||||
|
@ -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;
|
@ -1,3 +1,5 @@
|
||||
system "echo 'reset complete'"
|
||||
|
||||
set-bool-array "t.in" 15 0
|
||||
cycle
|
||||
mode run
|
||||
|
Loading…
x
Reference in New Issue
Block a user