added buffering of dualrail decoder output lines to pull downs
This commit is contained in:
parent
6dfc941993
commit
f1ae79cd5a
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue