beta idea to have slow falling edge delays on ack from arbiter. bad idea, gonna revert lol
This commit is contained in:
parent
17d9d3da41
commit
7ca41040a3
@ -917,17 +917,59 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; bool! out_req_x[Nx], out_req_y[
|
|||||||
dualrail_encoder<NxC, Nx> Xenc(.supply = supply);
|
dualrail_encoder<NxC, Nx> Xenc(.supply = supply);
|
||||||
dualrail_encoder<NyC, Ny> Yenc(.supply = supply);
|
dualrail_encoder<NyC, Ny> Yenc(.supply = supply);
|
||||||
|
|
||||||
|
// Create slow-falling in acks
|
||||||
|
// (so that neurons have time to complete the internal handshakes)
|
||||||
|
OR2_X1 dly_ors_x[Nx];
|
||||||
|
OR2_X1 dly_ors_y[Ny];
|
||||||
|
BUF_X12 sb_inx_a[Nx];
|
||||||
|
BUF_X12 sb_iny_a[Ny];
|
||||||
|
delay_chain<N_dly> dly_x[Nx];
|
||||||
|
delay_chain<N_dly> dly_y[Ny];
|
||||||
|
(i:Nx:
|
||||||
|
dly_x[i].in = Xarb.in[i].a;
|
||||||
|
dly_ors_x[i].a = Xarb.in[i].a;
|
||||||
|
dly_ors_x[i].b = dly_x[i].out;
|
||||||
|
sb_inx_a[i].a = dly_ors_x[i].y;
|
||||||
|
sb_inx_a[i].y = inx[i].a;
|
||||||
|
|
||||||
|
// Power
|
||||||
|
dly_ors_x[i].vdd = supply.vdd;
|
||||||
|
dly_ors_x[i].vss = supply.vss;
|
||||||
|
dly_x[i].supply = supply;
|
||||||
|
sb_inx_a[i].vdd = supply.vdd;
|
||||||
|
sb_inx_a[i].vss = supply.vss;
|
||||||
|
)
|
||||||
|
|
||||||
|
(i:Ny:
|
||||||
|
dly_y[i].in = Yarb.in[i].a;
|
||||||
|
dly_ors_y[i].a = Yarb.in[i].a;
|
||||||
|
dly_ors_y[i].b = dly_y[i].out;
|
||||||
|
sb_iny_a[i].a = dly_ors_y[i].y;
|
||||||
|
sb_iny_a[i].y = iny[i].a;
|
||||||
|
|
||||||
|
// Power
|
||||||
|
dly_ors_y[i].vdd = supply.vdd;
|
||||||
|
dly_ors_y[i].vss = supply.vss;
|
||||||
|
dly_y[i].supply = supply;
|
||||||
|
sb_iny_a[i].vdd = supply.vdd;
|
||||||
|
sb_iny_a[i].vss = supply.vss;
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
// Wire up inputs to encoders and arb
|
// Wire up inputs to encoders and arb
|
||||||
(i:Nx:
|
(i:Nx:
|
||||||
Xarb.in[i].r = inx[i].r;
|
Xarb.in[i].r = inx[i].r;
|
||||||
Xarb.in[i].a = inx[i].a;
|
// Xarb.in[i].a = inx[i].a;
|
||||||
|
// Not sure here if the Xenc should be connected to the
|
||||||
|
// inx.a before or after the delay.
|
||||||
|
// But I think before is fine...
|
||||||
Xenc.in[i] = inx[i].a;
|
Xenc.in[i] = inx[i].a;
|
||||||
)
|
)
|
||||||
|
|
||||||
// Wire up inputs to encoders and arb
|
// Wire up inputs to encoders and arb
|
||||||
(i:Ny:
|
(i:Ny:
|
||||||
Yarb.in[i].r = iny[i].r;
|
Yarb.in[i].r = iny[i].r;
|
||||||
Yarb.in[i].a = iny[i].a;
|
// Yarb.in[i].a = iny[i].a;
|
||||||
Yenc.in[i] = iny[i].a;
|
Yenc.in[i] = iny[i].a;
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -951,16 +993,17 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; bool! out_req_x[Nx], out_req_y[
|
|||||||
// Create delay fifos to emulate the fact that the line pull downs
|
// Create delay fifos to emulate the fact that the line pull downs
|
||||||
// are at the end of the line, and thus slow.
|
// are at the end of the line, and thus slow.
|
||||||
// Note that if N_dly = 0, delay fifo is just a pipe.
|
// Note that if N_dly = 0, delay fifo is just a pipe.
|
||||||
delay_chain<N_dly> dly_x[Nx];
|
// delay_chain<N_dly> dly_x[Nx];
|
||||||
delay_chain<N_dly> dly_y[Ny];
|
// delay_chain<N_dly> dly_y[Ny];
|
||||||
|
|
||||||
// Create x line req pull downs
|
// Create x line req pull downs
|
||||||
nrn_line_end_pull_down pd_x[Nx];
|
nrn_line_end_pull_down pd_x[Nx];
|
||||||
sigbuf<Nx> rsb_pd_x(.in = reset_B, .supply = supply);
|
sigbuf<Nx> rsb_pd_x(.in = reset_B, .supply = supply);
|
||||||
(i:0..Nx-1:
|
(i:0..Nx-1:
|
||||||
dly_x[i].supply = supply;
|
// dly_x[i].supply = supply;
|
||||||
dly_x[i].in = to_pd_x[i].a;
|
// dly_x[i].in = to_pd_x[i].a;
|
||||||
pd_x[i].in = dly_x[i].out;
|
// pd_x[i].in = dly_x[i].out;
|
||||||
|
pd_x[i].in = to_pd_x[i].a;
|
||||||
|
|
||||||
pd_x[i].out = to_pd_x[i].r;
|
pd_x[i].out = to_pd_x[i].r;
|
||||||
pd_x[i].reset_B = rsb_pd_x.out[i];
|
pd_x[i].reset_B = rsb_pd_x.out[i];
|
||||||
@ -971,9 +1014,10 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; bool! out_req_x[Nx], out_req_y[
|
|||||||
nrn_line_end_pull_down pd_y[Ny];
|
nrn_line_end_pull_down pd_y[Ny];
|
||||||
sigbuf<Ny> rsb_pd_y(.in = reset_B, .supply = supply);
|
sigbuf<Ny> rsb_pd_y(.in = reset_B, .supply = supply);
|
||||||
(j:0..Ny-1:
|
(j:0..Ny-1:
|
||||||
dly_y[j].supply = supply;
|
// dly_y[j].supply = supply;
|
||||||
dly_y[j].in = to_pd_y[j].a;
|
// dly_y[j].in = to_pd_y[j].a;
|
||||||
pd_y[j].in = dly_y[j].out;
|
// pd_y[j].in = dly_y[j].out;
|
||||||
|
pd_y[j].in = to_pd_y[j].a;
|
||||||
|
|
||||||
pd_y[j].out = to_pd_y[j].r;
|
pd_y[j].out = to_pd_y[j].r;
|
||||||
pd_y[j].reset_B = rsb_pd_y.out[j];
|
pd_y[j].reset_B = rsb_pd_y.out[j];
|
||||||
|
Loading…
Reference in New Issue
Block a user