added buffered dr decoder

This commit is contained in:
alexmadison 2022-04-04 15:37:31 +02:00
parent 5e4a8ee15c
commit 55ed8bb839

View File

@ -48,11 +48,11 @@ open std::data;
namespace tmpl { namespace tmpl {
namespace dataflow_neuro { namespace dataflow_neuro {
/** /**
* Dualrail decoder. * Dualrail decoder.
* Nc is the number of dualrail input channels. * Nc is the number of dualrail input channels.
* Then builds N output AND gates, connecting to the right input wires. * Then builds N output AND gates, connecting to the right input wires.
*/ */
export template<pint Nc, N> export template<pint Nc, N>
defproc decoder_dualrail (Mx1of2<Nc> in; bool? out[N]; power supply) { defproc decoder_dualrail (Mx1of2<Nc> in; bool? out[N]; power supply) {
// signal buffers // signal buffers
@ -86,6 +86,23 @@ defproc decoder_dualrail (Mx1of2<Nc> in; bool? out[N]; power supply) {
) )
} }
/**
* Dualrail decoder with buffered outputs.
* Be careful of out[] indexing.
*/
export template<pint Nc, N, OUT_STRENGTH>
defproc decoder_dualrailX(Mx1of2<Nc> in; bool? out[N*OUT_STRENGTH]; power supply) {
decoder_dualrail<Nc, N> decoder(.in = in, .supply = supply);
sigbuf<OUT_STRENGTH> 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. * 2D decoder which uses a configurable delay from the VCtrees to buffer ack.