added buffering of dualrail decoder output lines to pull downs

This commit is contained in:
alexmadison 2022-03-31 15:22:50 +02:00
parent 6dfc941993
commit f1ae79cd5a
1 changed files with 8 additions and 13 deletions

View File

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