texel working with replaced encoder
This commit is contained in:
@@ -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.
|
||||
|
Reference in New Issue
Block a user