From 15d3fd1b9b612ebe9165b815d804733786727c69 Mon Sep 17 00:00:00 2001 From: Michele Date: Thu, 3 Mar 2022 19:23:13 +0100 Subject: [PATCH] Added sigbuf_1output for signals that cannot have array outputs --- dataflow_neuro/coders.act | 8 ++++---- dataflow_neuro/treegates.act | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/dataflow_neuro/coders.act b/dataflow_neuro/coders.act index 6a6266f..3a830ac 100644 --- a/dataflow_neuro/coders.act +++ b/dataflow_neuro/coders.act @@ -246,9 +246,9 @@ namespace tmpl { arbtree Xarb(.in = _x_temp,.out = _out_arb_X,.supply = supply); arbtree Yarb(.in = _y_temp,.out = _out_arb_Y,.supply = supply); - // Sigbufs for strong ackowledge signals (note that the sigbuf needs to be changed) - sigbuf x_ack_arb[N]; - sigbuf y_ack_arb[M]; + // Sigbufs for strong ackowledge signals + sigbuf_1output x_ack_arb[N]; + sigbuf_1output y_ack_arb[M]; (i:N: x_ack_arb[i].in = _x_temp[i].a; x_ack_arb[i].out[0] = x[i].a; @@ -349,7 +349,7 @@ namespace tmpl { ) bool _addr_v vtree addr_validity(.in = addr,.out = _addr_v); - sigbuf<4> addr_validity_x(.in = _addr_v,.out = addr.v); + sigbuf_1output<4> addr_validity_x(.in = _addr_v,.out = addr.v); addr_validity.supply = supply; addr_validity_x.supply = supply; diff --git a/dataflow_neuro/treegates.act b/dataflow_neuro/treegates.act index bf89863..ce2e57b 100644 --- a/dataflow_neuro/treegates.act +++ b/dataflow_neuro/treegates.act @@ -439,6 +439,32 @@ defproc sigbuf (bool? in; bool! out[N]; power supply) (i:1..N-1:out[i]=out[0];) } +//Sigbuf in which there is only 1 output. Made for outputs that cannot have multiple wires. +export template +defproc sigbuf_1output (bool? in; bool! out; power supply) +{ + + { N >= 0 : "sigbuf: parameter error" }; + { N <= 43 : "sigbuf: parameter error, N too big" }; + + /* -- just use in sized driver here -- */ + [ N <= 4 -> + BUF_X1 buf1 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 5 & N <= 7 -> + BUF_X2 buf2 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 8 & N <= 10 -> + BUF_X3 buf3 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 11 & N <= 14 -> + BUF_X4 buf4 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 15 & N <= 18 -> + BUF_X6 buf6 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 19 & N <= 29 -> + BUF_X8 buf8 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + [] N >= 30 & N <= 42 -> + BUF_X12 buf12 (.a = in, .y = out, .vdd = supply.vdd, .vss = supply.vss); + ] +} + }}