diff --git a/dataflow_neuro/coders.act b/dataflow_neuro/coders.act index 697e2e6..f09fca6 100644 --- a/dataflow_neuro/coders.act +++ b/dataflow_neuro/coders.act @@ -48,11 +48,11 @@ open std::data; namespace tmpl { namespace dataflow_neuro { - /** - * Dualrail decoder. - * Nc is the number of dualrail input channels. - * Then builds N output AND gates, connecting to the right input wires. - */ +/** + * Dualrail decoder. + * Nc is the number of dualrail input channels. + * Then builds N output AND gates, connecting to the right input wires. + */ export template defproc decoder_dualrail (Mx1of2 in; bool? out[N]; power supply) { // signal buffers @@ -86,6 +86,23 @@ defproc decoder_dualrail (Mx1of2 in; bool? out[N]; power supply) { ) } +/** + * Dualrail decoder with buffered outputs. + * Be careful of out[] indexing. + */ +export template +defproc decoder_dualrailX(Mx1of2 in; bool? out[N*OUT_STRENGTH]; power supply) { + decoder_dualrail decoder(.in = in, .supply = supply); + sigbuf sb[N]; + (i:N: + sb[i].in = decoder.out[i]; + sb[i].supply = supply; + (j:OUT_STRENGTH: + sb[i].out[j] = out[j + i*OUT_STRENGTH]; + ) + ) +} + /** * 2D decoder which uses a configurable delay from the VCtrees to buffer ack.