diff --git a/dataflow_neuro/coders.act b/dataflow_neuro/coders.act index 14a6264..4c6a451 100644 --- a/dataflow_neuro/coders.act +++ b/dataflow_neuro/coders.act @@ -176,17 +176,12 @@ defproc decoder_2d_hs (avMx1of2 in; a1of1 out[Nx*Ny]; bool? reset_B; po decoder_dualrail d_dr_y(.supply = supply); (i:0..NyC-1:d_dr_y.in.d[i] = addr_buf.out.d.d[i+NxC];) - // Buffer dualrail decoder outputs - // sigbuf d_dr_xX[Nx]; // x2 because X req lines go to twice the num of gates - // sigbuf d_dr_yX[Ny]; - // (i:Nx: - // d_dr_xX[i].in = d_dr_x.out[i]; - // d_dr_xX[i].supply = supply; - // ) - // (i:Ny: - // d_dr_yX[i].in = d_dr_y.out[i]; - // d_dr_yX[i].supply = supply; - // ) + // sig buf for reqx lines, since they go to synapse pull down gates. + sigbuf d_dr_xX[Nx]; + (i:Nx: + d_dr_xX[i].in = d_dr_x.out[i]; + d_dr_xX[i].supply = supply; + ) // Validity vtree vtree_x (.supply = supply); @@ -213,7 +208,7 @@ defproc decoder_2d_hs (avMx1of2 in; a1of1 out[Nx*Ny]; bool? reset_B; po (j:Ny: index = i + Nx*j; ack_pulldowns[index].a = out[index].a; - ack_pulldowns[index].b = d_dr_x.out[i]; + ack_pulldowns[index].b = d_dr_xX[i].out[j]; ack_pulldowns[index].y = _out_acksB[i]; ack_pulldowns[index].vss = supply.vss; ack_pulldowns[index].vdd = supply.vdd; @@ -224,7 +219,7 @@ defproc decoder_2d_hs (avMx1of2 in; a1of1 out[Nx*Ny]; bool? reset_B; po PULLUP_X4 pu[Nx]; // TODO probably replace this with variable strength PU AND2_X1 pu_ANDs[Nx]; (i:Nx: - pu_ANDs[i].a = d_dr_x.out[i]; + pu_ANDs[i].a = d_dr_xX[i].out[Ny]; pu_ANDs[i].b = reset_B; // TODO buffer pu_ANDs[i].vdd = supply.vdd; pu_ANDs[i].vss = supply.vss;