texel working with replaced encoder
This commit is contained in:
parent
d3614580dd
commit
81032c1296
@ -106,7 +106,7 @@ defproc chip_texel (bd<N_IN> in, out;
|
||||
NC_NRN = NC_NRN_X + NC_NRN_Y;
|
||||
nrn_hs_2d_array<N_NRN_X,N_NRN_Y,N_LINE_PD_DLY> nrn_grid(.in = neurons,
|
||||
.supply = supply, .reset_B = reset_B);
|
||||
encoder2d<NC_NRN_X, NC_NRN_Y, N_NRN_X, N_NRN_Y, 16> encoder(
|
||||
encoder2d_simple<NC_NRN_X, NC_NRN_Y, N_NRN_X, N_NRN_Y, 16> encoder(
|
||||
.inx = nrn_grid.outx,
|
||||
.iny = nrn_grid.outy,
|
||||
.reset_B = reset_B, .supply = supply
|
||||
|
@ -591,7 +591,8 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; a1of1 out[Nx*Ny]; bool? dly_cfg
|
||||
export template<pint N>
|
||||
defproc buffer_s_func (Mx1of2<N> in; avMx1of2<N> out; bool? in_v, en, reset_B; power supply) {
|
||||
//function
|
||||
bool _out_a_BX_t[N],_out_a_BX_f[N],_out_a_B,_en_X_t[N],_en_X_f[N], _in_vX, _in_vXX_t[N],_in_vXX_f[N];
|
||||
bool _out_a_BX_t[N],_out_a_BX_f[N],_out_a_B,_en_X_t[N],_en_X_f[N], _in_vX;
|
||||
// bool _in_vXX_t[N],_in_vXX_f[N];
|
||||
|
||||
|
||||
A_2C2N_RB_X4 f_buf_func[N];
|
||||
@ -613,8 +614,10 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; a1of1 out[Nx*Ny]; bool? dly_cfg
|
||||
|
||||
// in val signal buffers
|
||||
BUF_X4 in_v_prebuf(.a = in_v, .y = _in_vX, .vss = supply.vss, .vdd = supply.vdd);
|
||||
sigbuf<N> in_v_buf_t(.in=_in_vX, .out=_in_vXX_t, .supply=supply);
|
||||
sigbuf<N> in_v_buf_f(.in=_in_vX, .out=_in_vXX_f, .supply=supply);
|
||||
// sigbuf<N> in_v_buf_t(.in=_in_vX, .out=_in_vXX_t, .supply=supply);
|
||||
// sigbuf<N> in_v_buf_f(.in=_in_vX, .out=_in_vXX_f, .supply=supply);
|
||||
sigbuf<N*2> in_v_buf(.in=_in_vX,.supply=supply);
|
||||
|
||||
|
||||
(i:N:
|
||||
f_buf_func[i].y=out.d.d[i].f;
|
||||
@ -625,8 +628,8 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; a1of1 out[Nx*Ny]; bool? dly_cfg
|
||||
t_buf_func[i].c2=_out_a_BX_t[i];
|
||||
f_buf_func[i].n1=in.d[i].f;
|
||||
t_buf_func[i].n1=in.d[i].t;
|
||||
f_buf_func[i].n2=_in_vXX_f[i];
|
||||
t_buf_func[i].n2=_in_vXX_t[i];
|
||||
f_buf_func[i].n2=in_v_buf.out[i];
|
||||
t_buf_func[i].n2=in_v_buf.out[i+N];
|
||||
f_buf_func[i].vdd=supply.vdd;
|
||||
t_buf_func[i].vdd=supply.vdd;
|
||||
f_buf_func[i].vss=supply.vss;
|
||||
@ -771,6 +774,66 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; a1of1 out[Nx*Ny]; bool? dly_cfg
|
||||
}
|
||||
|
||||
|
||||
export template<pint NxC, NyC, Nx, Ny, ACK_STRENGTH>
|
||||
defproc encoder2d_simple(a1of1 inx[Nx]; a1of1 iny[Ny]; avMx1of2<(NxC + NyC)> out;
|
||||
power supply; bool reset_B) {
|
||||
|
||||
bool _a_x, _a_y;
|
||||
bool _r_x, _r_y;
|
||||
bool _r_x_B, _r_y_B;
|
||||
|
||||
buffer<NxC + NyC> buf(.out = out, .supply = supply, .reset_B = reset_B);
|
||||
|
||||
// Arbiters
|
||||
arbtree<Nx> Xarb(.supply = supply);
|
||||
arbtree<Ny> Yarb(.supply = supply);
|
||||
Xarb.out.a = _a_x;
|
||||
Xarb.out.r = _r_x;
|
||||
Yarb.out.a = _a_y;
|
||||
Yarb.out.r = _r_y;
|
||||
|
||||
// Encoders
|
||||
dualrail_encoder<NxC, Nx> Xenc(.supply = supply);
|
||||
dualrail_encoder<NyC, Ny> Yenc(.supply = supply);
|
||||
|
||||
// Wire up inputs to encoders and arb
|
||||
(i:Nx:
|
||||
Xarb.in[i].r = inx[i].r;
|
||||
Xarb.in[i].a = inx[i].a;
|
||||
Xenc.in[i] = inx[i].a;
|
||||
)
|
||||
|
||||
// Wire up inputs to encoders and arb
|
||||
(i:Ny:
|
||||
Yarb.in[i].r = iny[i].r;
|
||||
Yarb.in[i].a = iny[i].a;
|
||||
Yenc.in[i] = iny[i].a;
|
||||
)
|
||||
|
||||
// INV_X2 inv_rx(.a = _r_x, .y _r_x_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
// INV_X2 inv_ry(.a = _r_y, .y = _r_y_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
INV_X2 inv_buf(.a = buf.in.a, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
A_2C_RB_X1 a_x_Cel(.c1 = inv_buf.y, .c2 = _r_x, .y = _a_x,
|
||||
.sr_B = reset_B, .pr_B = reset_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
A_2C_RB_X1 a_y_Cel(.c1 = inv_buf.y, .c2 = _r_y, .y = _a_y,
|
||||
.sr_B = reset_B, .pr_B = reset_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
// A_2C_RB_X1 a_x_Cel(.c1 = buf.in.a, .c2 = _r_x_B, .y = _a_x,
|
||||
// .sr_B = reset_B, .pr_B = reset_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
// A_2C_RB_X1 a_y_Cel(.c1 = buf.in.a, .c2 = _r_y_B, .y = _a_y,
|
||||
// .sr_B = reset_B, .pr_B = reset_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
// Wire up encoder to buffer
|
||||
(i:NxC:
|
||||
Xenc.out.d[i] = buf.in.d.d[i];
|
||||
)
|
||||
(i:NyC:
|
||||
Yenc.out.d[i] = buf.in.d.d[i+NxC];
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Neuron handshaking.
|
||||
|
@ -52,31 +52,31 @@ export template<pint N>
|
||||
defproc buffer_register(avMx1of2<N> in; Mx1of2<N> out; bool? out_v, flush,
|
||||
reset_B; power supply) {
|
||||
|
||||
// BIG TODO
|
||||
// I HAVE NOT BOTHERED WITH ANY SIGNAL BUFFERING IN HERE YET
|
||||
|
||||
//control
|
||||
bool _en, _reset_BX,_reset_BXX[N];
|
||||
bool _in_aB;
|
||||
|
||||
bool _reset;
|
||||
INV_X1 reset_inv(.a = reset_B, .y = _reset);
|
||||
bool _resetX[N];
|
||||
|
||||
// Reset sigs
|
||||
INV_X1 reset_inv(.a = reset_B, .y = _reset, .vdd = supply.vdd, .vss = supply.vss);
|
||||
sigbuf<N> reset_sb(.in = _reset, .out = _resetX, .supply = supply);
|
||||
BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd, .vss=supply.vss);
|
||||
sigbuf<N> resetB_bufarray(.in=_reset_BX, .out=_reset_BXX);
|
||||
|
||||
A_2C1N_R_X1 inack_ctl(.c1=_in_aB,.c2=in.v,.n1=out_v,.y=_in_aB,
|
||||
.pr_B=_reset_BX,.sr_B=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
|
||||
|
||||
INV_X1 inack_inv(.a = _in_aB, .y = in.a, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
// A_1C1P_X1 en_ctl(.c1=in.a,.p1=out.v,.y=_en,
|
||||
// .vdd=supply.vdd,.vss=supply.vss);
|
||||
|
||||
bool _flushB;
|
||||
// Flush sigs
|
||||
bool _flushB, _flushBX[N*2];
|
||||
INV_X1 flush_inv(.a = flush, .y = _flushB);
|
||||
// AND2_X1 flush_en(.a = _flushB, .b = _in_aB, .y = _en);
|
||||
sigbuf<N*2> flushB_sb(.in = _flushB, .out = _flushBX, .supply = supply);
|
||||
_en = _in_aB;
|
||||
|
||||
BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
|
||||
sigbuf<N> reset_bufarray(.in=_reset_BX, .out=_reset_BXX);
|
||||
|
||||
//validity
|
||||
bool _in_v;
|
||||
@ -84,35 +84,30 @@ vtree<N> vc(.in=in.d,.out=_in_v,.supply=supply);
|
||||
BUF_X4 in_v_buf(.a=_in_v, .y=in.v,.vdd=supply.vdd,.vss=supply.vss);
|
||||
|
||||
//function
|
||||
bool _out_a_BX_t[N],_out_a_BX_f[N],_out_a_B,_en_X_t[N],_en_X_f[N];
|
||||
bool _out_a_BX_t[N],_out_a_BX_f[N],_out_a_B;
|
||||
// bool _en_X_t[N],_en_X_f[N];
|
||||
A_1C2N_SB_X4 f_buf_func[N];
|
||||
A_1C2N_RB_X4 t_buf_func[N];
|
||||
sigbuf<N> en_buf_t(.in=_en, .out=_en_X_t, .supply=supply);
|
||||
sigbuf<N> en_buf_f(.in=_en, .out=_en_X_f, .supply=supply);
|
||||
// INV_X1 out_a_inv(.a=out.a,.y=_out_a_B, .vss = supply.vss, .vdd = supply.vdd);
|
||||
// sigbuf<N> out_a_B_buf_f(.in=_out_a_B,.out=_out_a_BX_t);
|
||||
// sigbuf<N> out_a_B_buf_t(.in=_out_a_B,.out=_out_a_BX_f);
|
||||
// check if you can also do single var to array connect a=b[N]
|
||||
// and remove them from the loop
|
||||
// sigbuf<N> en_buf_t(.in=_en, .out=_en_X_t, .supply=supply);
|
||||
// sigbuf<N> en_buf_t(.in=_en, .out=_en_X_t, .supply=supply);
|
||||
sigbuf<N*2> en_buf(.in=_en, .supply=supply);
|
||||
(i:N:
|
||||
f_buf_func[i].y=out.d[i].f;
|
||||
t_buf_func[i].y=out.d[i].t;
|
||||
|
||||
f_buf_func[i].c1=_flushB;
|
||||
t_buf_func[i].c1=_flushB;
|
||||
f_buf_func[i].c1=_flushBX[i];
|
||||
t_buf_func[i].c1=_flushBX[i+N];
|
||||
|
||||
f_buf_func[i].n2=_en_X_f[i];
|
||||
t_buf_func[i].n2=_en_X_t[i];
|
||||
// f_buf_func[i].c2=_out_a_BX_f[i];
|
||||
// t_buf_func[i].c2=_out_a_BX_t[i];
|
||||
f_buf_func[i].n2=en_buf.out[i];
|
||||
t_buf_func[i].n2=en_buf.out[i+N];
|
||||
f_buf_func[i].n1=in.d.d[i].f;
|
||||
t_buf_func[i].n1=in.d.d[i].t;
|
||||
f_buf_func[i].vdd=supply.vdd;
|
||||
t_buf_func[i].vdd=supply.vdd;
|
||||
f_buf_func[i].vss=supply.vss;
|
||||
t_buf_func[i].vss=supply.vss;
|
||||
f_buf_func[i].pr = _reset;
|
||||
f_buf_func[i].sr = _reset;
|
||||
f_buf_func[i].pr = _resetX[i];
|
||||
f_buf_func[i].sr = _resetX[i];
|
||||
t_buf_func[i].pr_B = _reset_BXX[i];
|
||||
t_buf_func[i].sr_B = _reset_BXX[i];
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user