removed old decoder, only simple now, fixed 8x8 test, deleted other 2
This commit is contained in:
parent
db39324593
commit
0a91459073
@ -754,136 +754,6 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; bool! out_req_x[Nx], out_req_y[
|
||||
}
|
||||
|
||||
|
||||
export template<pint NxC, NyC, Nx, Ny, ACK_STRENGTH>
|
||||
defproc encoder2d(a1of1 inx[Nx]; a1of1 iny[Ny]; avMx1of2<(NxC + NyC)> out; power supply; bool reset_B) {
|
||||
// Reset buffers
|
||||
pint H = 2*(NxC + NyC); //Reset strength? to be investigated
|
||||
|
||||
bool _reset_BX,_reset_BXX[H];
|
||||
BUF_X4 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
|
||||
sigbuf<2*(NxC + NyC)> reset_bufarray(.in=_reset_BX, .out=_reset_BXX,.supply=supply);
|
||||
|
||||
// Arbiters
|
||||
a1of1 _arb_out_x, _arb_out_y;
|
||||
a1of1 _x_temp[Nx],_y_temp[Ny]; // For wiring the reqs to the arbtrees
|
||||
(i:Nx:
|
||||
_x_temp[i].r = inx[i].r;
|
||||
)
|
||||
(i:Ny:
|
||||
_y_temp[i].r = iny[i].r;
|
||||
)
|
||||
arbtree<Nx> Xarb(.in = _x_temp,.out = _arb_out_x,.supply = supply);
|
||||
arbtree<Ny> Yarb(.in = _y_temp,.out = _arb_out_y,.supply = supply);
|
||||
|
||||
// Sigbufs for strong ackowledge signals from arb_in's
|
||||
sigbuf_1output<ACK_STRENGTH> x_ack_arb[Nx];
|
||||
sigbuf_1output<ACK_STRENGTH> y_ack_arb[Ny];
|
||||
(i:Nx:
|
||||
x_ack_arb[i].in = _x_temp[i].a;
|
||||
x_ack_arb[i].out = inx[i].a;
|
||||
x_ack_arb[i].supply = supply;
|
||||
)
|
||||
(i:Ny:
|
||||
y_ack_arb[i].in = _y_temp[i].a;
|
||||
y_ack_arb[i].out = iny[i].a;
|
||||
y_ack_arb[i].supply = supply;
|
||||
)
|
||||
|
||||
// This block checks that the input is valid and that the arbiter made a choice
|
||||
// Then activates the ack of the arbiter
|
||||
bool _x_v,_in_x_v,_in_y_v,_x_a_B,_x_a;
|
||||
A_2C2P_RB_X1 Y_ack_confirm();
|
||||
Y_ack_confirm.p1 = _x_v;
|
||||
Y_ack_confirm.p2 =_in_x_v;
|
||||
Y_ack_confirm.c1 = _arb_out_y.r;
|
||||
Y_ack_confirm.c2 = _x_a_B;
|
||||
Y_ack_confirm.y = _arb_out_y.a;
|
||||
Y_ack_confirm.vdd = supply.vdd;
|
||||
Y_ack_confirm.vss = supply.vss;
|
||||
Y_ack_confirm.reset_B = _reset_BX;
|
||||
|
||||
// This block checks that the input is valid and that the arbiter made a choice
|
||||
// Then activates the ack of the arbiter
|
||||
A_2C_RB_X1 X_ack_confirm();
|
||||
X_ack_confirm.c1 = _arb_out_x.r;
|
||||
X_ack_confirm.c2 = _x_a_B;
|
||||
X_ack_confirm.vdd = supply.vdd;
|
||||
X_ack_confirm.vss = supply.vss;
|
||||
X_ack_confirm.pr_B = _reset_BX;
|
||||
X_ack_confirm.sr_B = _reset_BX;
|
||||
X_ack_confirm.y = _arb_out_x.a;
|
||||
|
||||
|
||||
// X_req ORtree
|
||||
bool _x_req_array[Nx], _x_v_B;
|
||||
(i:Nx:_x_req_array[i] = inx[i].r;)
|
||||
ortree<Nx> x_req_ortree(.in = _x_req_array, .supply = supply); //todo BUFF
|
||||
INV_X1 not_x_req_ortree(.a = x_req_ortree.out, .y = _x_v_B);
|
||||
INV_X1 not_x_req_ortree2(.a = _x_v_B,.y = _x_v);
|
||||
|
||||
|
||||
//X_REQ validation
|
||||
// bool _x_req_array[Nx],_x_v_B, _en;
|
||||
// (i:Nx:_x_req_array[i] = x[i].r;)
|
||||
// ortree x_req_ortree(.in = _x_req_array,.out = _x_v,.supply = supply);
|
||||
// INV_X1 not_x_req_ortree(.a = _x_v,.y = _x_v_B);
|
||||
|
||||
bool _x_a_B2; // sorry
|
||||
|
||||
bool _en;
|
||||
A_1C3P2P2N_R_X1 x_ack();
|
||||
//branch1
|
||||
x_ack.p4 = _in_x_v;
|
||||
x_ack.p5 = _x_v_B;
|
||||
//branch2
|
||||
x_ack.p1 = _in_x_v;
|
||||
x_ack.p2 = _in_y_v;
|
||||
x_ack.p3 = _x_v;
|
||||
//
|
||||
x_ack.c1 = _en;
|
||||
x_ack.n1 = out.v;
|
||||
x_ack.n2 = _in_x_v;
|
||||
//
|
||||
x_ack.y = _x_a_B2;
|
||||
//
|
||||
x_ack.vdd = supply.vdd;
|
||||
x_ack.vss = supply.vss;
|
||||
x_ack.pr_B = _reset_BX;
|
||||
x_ack.sr_B = _reset_BX;
|
||||
|
||||
INV_X1 not_x_ack(.a = _x_a_B2, .y = _x_a, .vdd = supply.vdd, .vss = supply.vss);
|
||||
INV_X1 not_x_ack2(.a = _x_a, .y = _x_a_B, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
|
||||
A_1C2P_X1 enabling(.p1 = out.a, .p2 = out.v, .c1 = _x_a, .y = _en, .vdd = supply.vdd, .vss = supply.vss);
|
||||
|
||||
avMx1of2<(NxC + NyC)> _in_x;
|
||||
|
||||
// Encoders
|
||||
bool x_acks[Nx];
|
||||
Mx1of2<NxC> x_enc_out;
|
||||
(i:Nx:x_acks[i] = inx[i].a;)
|
||||
dualrail_encoder<NxC, Nx> x_encoder(.in = x_acks, .out = x_enc_out, .supply = supply);
|
||||
|
||||
bool y_acks[Ny];
|
||||
Mx1of2<NyC> y_enc_out;
|
||||
(i:Ny:y_acks[i] = iny[i].a;)
|
||||
dualrail_encoder<NyC, Ny> y_encoder(.in = y_acks, .out = y_enc_out, .supply = supply);
|
||||
|
||||
// Valid trees
|
||||
vtree<NxC> vtree_x(.in = x_enc_out, .out = _in_x_v, .supply = supply);
|
||||
vtree<NyC> vtree_y(.in = y_enc_out, .out = _in_y_v, .supply = supply);
|
||||
|
||||
// Buffer func thing
|
||||
Mx1of2<NxC + NyC> into_buffer;
|
||||
(i:0..NxC-1:into_buffer.d[i] = x_enc_out.d[i];)
|
||||
(i:0..NyC-1:into_buffer.d[i+NxC] = y_enc_out.d[i];)
|
||||
AND2_X1 _in_xy_v(.a = _in_x_v, .b = _in_y_v, .vss = supply.vss, .vdd = supply.vdd);
|
||||
buffer_s_func<NxC + NyC> buf_s_func(.in = into_buffer, .out = out,
|
||||
.en = _en, .in_v = _in_xy_v.y, .supply = supply, .reset_B = reset_B);
|
||||
|
||||
}
|
||||
|
||||
|
||||
export
|
||||
defproc nrn_line_end_pull_down (bool? in; bool? reset_B; power supply; bool! out)
|
||||
@ -1133,6 +1003,7 @@ defproc decoder_2d_hybrid (avMx1of2<NxC+NyC> in; bool! out_req_x[Nx], out_req_y[
|
||||
|
||||
|
||||
// WARNUNG WARNUNG WARNUNG //
|
||||
// @TODO
|
||||
// This neuron hs design has a fat timing assumption.
|
||||
// Say that the neuron has sent out both reqs, and is now receiving the acks.
|
||||
// _x_a_B and _y_a_B are then low, and _req starts to be pulled down to reset the hs.
|
||||
|
@ -1,49 +0,0 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* This file is part of ACT dataflow neuro library.
|
||||
* It's the testing facility for cell_lib_std.act
|
||||
*
|
||||
* Copyright (c) 2022 University of Groningen - Ole Richter
|
||||
* Copyright (c) 2022 University of Groningen - Hugh Greatorex
|
||||
* Copyright (c) 2022 University of Groningen - Michele Mastella
|
||||
* Copyright (c) 2022 University of Groningen - Madison Cotteret
|
||||
*
|
||||
* This source describes Open Hardware and is licensed under the CERN-OHL-W v2 or later
|
||||
*
|
||||
* You may redistribute and modify this documentation and make products
|
||||
* using it under the terms of the CERN-OHL-W v2 (https:/cern.ch/cern-ohl).
|
||||
* This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-W v2
|
||||
* for applicable conditions.
|
||||
*
|
||||
* Source location: https://git.web.rug.nl/bics/actlib_dataflow_neuro
|
||||
*
|
||||
* As per CERN-OHL-W v2 section 4.1, should You produce hardware based on
|
||||
* these sources, You must maintain the Source Location visible in its
|
||||
* documentation.
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
import "../../dataflow_neuro/coders.act";
|
||||
import globals;
|
||||
import std::data;
|
||||
|
||||
open std::data;
|
||||
|
||||
open tmpl::dataflow_neuro;
|
||||
|
||||
defproc encoder2d_2x2 (a1of1 x[2]; a1of1 y[2]; avMx1of2<2> out){
|
||||
encoder2d<1, 1, 2, 2, 1> e(.inx=x, .iny=y, .out=out);
|
||||
bool _reset_B;
|
||||
prs {
|
||||
Reset => _reset_B-
|
||||
}
|
||||
e.supply.vss = GND;
|
||||
e.supply.vdd = Vdd;
|
||||
e.reset_B = _reset_B;
|
||||
|
||||
}
|
||||
|
||||
encoder2d_2x2 e;
|
@ -1,377 +0,0 @@
|
||||
watchall
|
||||
mode run
|
||||
|
||||
system "echo '[] Set Out Ack/Valid Low'"
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Setting Neuron Req Low'"
|
||||
|
||||
set e.y[0].r 0
|
||||
set e.y[1].r 0
|
||||
|
||||
set e.x[0].r 0
|
||||
set e.x[1].r 0
|
||||
cycle
|
||||
|
||||
# # Slightly confused as to whether Reset should be set to 1 given A_2C_RB_X1 needs active high to change y
|
||||
# # status X
|
||||
# # set Reset 1
|
||||
# # cycle
|
||||
|
||||
cycle
|
||||
set Reset 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Single Neuron Spikes (0,0)'"
|
||||
|
||||
set e.y[0].r 1
|
||||
set e.x[0].r 1
|
||||
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
assert e.e._x_v 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 1
|
||||
assert e.y[1].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 1
|
||||
assert e.x[1].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 0
|
||||
assert e.e.y_enc_out.d[0].f 1
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 0
|
||||
assert e.out.d.d[1].f 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[0].r 0
|
||||
set e.x[0].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[0].a 0
|
||||
assert e.x[0].a 0
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (0,0) Encoded'"
|
||||
|
||||
system "echo '[] Single Neuron Spikes (1,1)'"
|
||||
|
||||
set e.y[1].r 1
|
||||
set e.x[1].r 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 1
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 1
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 1
|
||||
assert e.e.y_enc_out.d[0].f 0
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 1
|
||||
assert e.e.x_enc_out.d[0].f 0
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 1
|
||||
assert e.out.d.d[0].f 0
|
||||
assert e.out.d.d[1].t 1
|
||||
assert e.out.d.d[1].f 0
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[1].r 0
|
||||
set e.x[1].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[1].a 0
|
||||
assert e.x[1].a 0
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (1,1) Encoded'"
|
||||
|
||||
system "echo '[] Neuron Spikes (0,0), (1,0)'"
|
||||
|
||||
set e.x[0].r 1
|
||||
set e.y[0].r 1
|
||||
set e.x[1].r 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks (0,0)'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 1
|
||||
assert e.y[1].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 1
|
||||
assert e.x[1].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 0
|
||||
assert e.e.y_enc_out.d[0].f 1
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 0
|
||||
assert e.out.d.d[1].f 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake (0,0)'"
|
||||
|
||||
set e.x[0].r 0
|
||||
cycle
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (0,0) Encoded'"
|
||||
|
||||
system "echo '[] Check Neuron (1,0) Waiting'"
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks (1,0)'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 1
|
||||
assert e.y[1].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 1
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 0
|
||||
assert e.e.y_enc_out.d[0].f 1
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 1
|
||||
assert e.e.x_enc_out.d[0].f 0
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 1
|
||||
assert e.out.d.d[0].f 0
|
||||
assert e.out.d.d[1].t 0
|
||||
assert e.out.d.d[1].f 1
|
||||
|
||||
|
||||
system "echo '[] Finish Neuron Handshake (1,0)'"
|
||||
|
||||
set e.x[1].r 0
|
||||
set e.y[0].r 0
|
||||
cycle
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (1,0) Encoded'"
|
||||
|
||||
system "echo '[] Neuron Spikes (1,0), (0,1)'"
|
||||
|
||||
set e.x[1].r 1
|
||||
set e.y[0].r 1
|
||||
|
||||
set e.x[0].r 1
|
||||
set e.y[1].r 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks (1,0)'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 1
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 1
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 1
|
||||
assert e.e.y_enc_out.d[0].f 0
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 1
|
||||
assert e.e.x_enc_out.d[0].f 0
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 1
|
||||
assert e.out.d.d[0].f 0
|
||||
assert e.out.d.d[1].t 1
|
||||
assert e.out.d.d[1].f 0
|
||||
|
||||
system "echo '[] Finish Neuron Handshake (1,0)'"
|
||||
|
||||
set e.x[1].r 0
|
||||
set e.y[0].r 0
|
||||
cycle
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (1,0) Encoded'"
|
||||
|
||||
system "echo '[] Check Neuron (0,1) Waiting'"
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
|
||||
system "echo '[] Check Arbiter Acks (0,1)'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 1
|
||||
assert e.e.Yarb.out.a 1
|
||||
assert e.x[0].a 1
|
||||
assert e.x[1].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 1
|
||||
assert e.e.y_enc_out.d[0].f 0
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 1
|
||||
assert e.out.d.d[1].f 0
|
||||
|
||||
system "echo '[] Finish Neuron Handshake (1,0)'"
|
||||
|
||||
set e.x[0].r 0
|
||||
set e.y[1].r 0
|
||||
cycle
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
assert e.e._in_x_v 0
|
||||
assert e.e._in_y_v 0
|
||||
assert e.e._x_v 0
|
||||
|
||||
system "echo '[] Neuron (1,0) Encoded'"
|
@ -1,49 +0,0 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* This file is part of ACT dataflow neuro library.
|
||||
* It's the testing facility for cell_lib_std.act
|
||||
*
|
||||
* Copyright (c) 2022 University of Groningen - Ole Richter
|
||||
* Copyright (c) 2022 University of Groningen - Hugh Greatorex
|
||||
* Copyright (c) 2022 University of Groningen - Michele Mastella
|
||||
* Copyright (c) 2022 University of Groningen - Madison Cotteret
|
||||
*
|
||||
* This source describes Open Hardware and is licensed under the CERN-OHL-W v2 or later
|
||||
*
|
||||
* You may redistribute and modify this documentation and make products
|
||||
* using it under the terms of the CERN-OHL-W v2 (https:/cern.ch/cern-ohl).
|
||||
* This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-W v2
|
||||
* for applicable conditions.
|
||||
*
|
||||
* Source location: https://git.web.rug.nl/bics/actlib_dataflow_neuro
|
||||
*
|
||||
* As per CERN-OHL-W v2 section 4.1, should You produce hardware based on
|
||||
* these sources, You must maintain the Source Location visible in its
|
||||
* documentation.
|
||||
*
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
import "../../dataflow_neuro/coders.act";
|
||||
import globals;
|
||||
import std::data;
|
||||
|
||||
open std::data;
|
||||
|
||||
open tmpl::dataflow_neuro;
|
||||
|
||||
defproc encoder2d_2x2 (a1of1 x[8]; a1of1 y[7]; avMx1of2<6> out){
|
||||
encoder2d<3, 3, 8, 7, 1> e(.inx=x, .iny=y, .out=out);
|
||||
bool _reset_B;
|
||||
prs {
|
||||
Reset => _reset_B-
|
||||
}
|
||||
e.supply.vss = GND;
|
||||
e.supply.vdd = Vdd;
|
||||
e.reset_B = _reset_B;
|
||||
|
||||
}
|
||||
|
||||
encoder2d_2x2 e;
|
@ -1,246 +0,0 @@
|
||||
watchall
|
||||
mode run
|
||||
|
||||
system "echo '[] Set Out Ack/Valid Low'"
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Setting Neuron Req Low'"
|
||||
|
||||
set e.y[0].r 0
|
||||
set e.y[1].r 0
|
||||
set e.y[2].r 0
|
||||
set e.y[3].r 0
|
||||
set e.y[4].r 0
|
||||
set e.y[5].r 0
|
||||
set e.y[6].r 0
|
||||
# set e.y[7].r 0
|
||||
|
||||
set e.x[0].r 0
|
||||
set e.x[1].r 0
|
||||
set e.x[2].r 0
|
||||
set e.x[3].r 0
|
||||
set e.x[4].r 0
|
||||
set e.x[5].r 0
|
||||
set e.x[6].r 0
|
||||
set e.x[7].r 0
|
||||
cycle
|
||||
|
||||
# # Slightly confused as to whether Reset should be set to 1 given A_2C_RB_X1 needs active high to change y
|
||||
# # status X
|
||||
# # set Reset 1
|
||||
# # cycle
|
||||
|
||||
cycle
|
||||
|
||||
mode run
|
||||
status X
|
||||
status 0
|
||||
set Reset 0
|
||||
cycle
|
||||
|
||||
|
||||
|
||||
system "echo '[] Single Neuron Spikes (2,5), raise y[5].r'"
|
||||
|
||||
set e.y[5].r 1
|
||||
# set e.x[2].r 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 0
|
||||
assert e.e._x_v 0
|
||||
|
||||
|
||||
|
||||
system "echo '[] Raise x[2].r'"
|
||||
# set e.y[5].r 1
|
||||
set e.x[2].r 1
|
||||
cycle
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
assert e.e._x_v 1
|
||||
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 0
|
||||
assert e.y[2].a 0
|
||||
assert e.y[3].a 0
|
||||
assert e.y[4].a 0
|
||||
assert e.y[5].a 1
|
||||
assert e.y[6].a 0
|
||||
# assert e.y[7].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
|
||||
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 0
|
||||
assert e.x[2].a 1
|
||||
assert e.x[3].a 0
|
||||
assert e.x[4].a 0
|
||||
assert e.x[5].a 0
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
assert e.e.x_enc_out.d[1].t 1
|
||||
assert e.e.x_enc_out.d[1].f 0
|
||||
assert e.e.x_enc_out.d[2].t 0
|
||||
assert e.e.x_enc_out.d[2].f 1
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 1
|
||||
assert e.e.y_enc_out.d[0].f 0
|
||||
assert e.e.y_enc_out.d[1].t 0
|
||||
assert e.e.y_enc_out.d[1].f 1
|
||||
assert e.e.y_enc_out.d[2].t 1
|
||||
assert e.e.y_enc_out.d[2].f 0
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 1
|
||||
assert e.out.d.d[1].f 0
|
||||
assert e.out.d.d[2].t 0
|
||||
assert e.out.d.d[2].f 1
|
||||
assert e.out.d.d[3].t 1
|
||||
assert e.out.d.d[3].f 0
|
||||
assert e.out.d.d[4].t 0
|
||||
assert e.out.d.d[4].f 1
|
||||
assert e.out.d.d[5].t 1
|
||||
assert e.out.d.d[5].f 0
|
||||
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[5].r 0
|
||||
set e.x[2].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.x[2].a 0
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (2,5) Encoded'"
|
||||
|
||||
system "echo '[] Single Neuron Spikes (0,0)'"
|
||||
|
||||
set e.y[0].r 1
|
||||
set e.x[0].r 1
|
||||
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
assert e.e._x_v 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 1
|
||||
assert e.y[1].a 0
|
||||
assert e.y[2].a 0
|
||||
assert e.y[3].a 0
|
||||
assert e.y[4].a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.y[6].a 0
|
||||
# assert e.y[7].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
|
||||
|
||||
assert e.x[0].a 1
|
||||
assert e.x[1].a 0
|
||||
assert e.x[2].a 0
|
||||
assert e.x[3].a 0
|
||||
assert e.x[4].a 0
|
||||
assert e.x[5].a 0
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 0
|
||||
assert e.e.y_enc_out.d[0].f 1
|
||||
assert e.e.y_enc_out.d[1].t 0
|
||||
assert e.e.y_enc_out.d[1].f 1
|
||||
assert e.e.y_enc_out.d[2].t 0
|
||||
assert e.e.y_enc_out.d[2].f 1
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
assert e.e.x_enc_out.d[1].t 0
|
||||
assert e.e.x_enc_out.d[1].f 1
|
||||
assert e.e.x_enc_out.d[2].t 0
|
||||
assert e.e.x_enc_out.d[2].f 1
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 0
|
||||
assert e.out.d.d[1].f 1
|
||||
assert e.out.d.d[2].t 0
|
||||
assert e.out.d.d[2].f 1
|
||||
assert e.out.d.d[3].t 0
|
||||
assert e.out.d.d[3].f 1
|
||||
assert e.out.d.d[4].t 0
|
||||
assert e.out.d.d[4].f 1
|
||||
assert e.out.d.d[5].t 0
|
||||
assert e.out.d.d[5].f 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[0].r 0
|
||||
set e.x[0].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[0].a 0
|
||||
assert e.x[0].a 0
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (0,0) Encoded'"
|
@ -35,7 +35,13 @@ open std::data;
|
||||
open tmpl::dataflow_neuro;
|
||||
|
||||
defproc encoder2d_2x2 (a1of1 x[8]; a1of1 y[8]; avMx1of2<6> out){
|
||||
encoder2d<3, 3, 8, 8, 1> e(.inx=x, .iny=y, .out=out);
|
||||
encoder2d_simple<3, 3, 8, 8, 0> e(.inx=x, .iny=y, .out=out);
|
||||
|
||||
e.to_pd_x = e.inx;
|
||||
e.to_pd_y = e.iny;
|
||||
|
||||
|
||||
|
||||
bool _reset_B;
|
||||
prs {
|
||||
Reset => _reset_B-
|
||||
@ -43,7 +49,6 @@ defproc encoder2d_2x2 (a1of1 x[8]; a1of1 y[8]; avMx1of2<6> out){
|
||||
e.supply.vss = GND;
|
||||
e.supply.vdd = Vdd;
|
||||
e.reset_B = _reset_B;
|
||||
|
||||
}
|
||||
|
||||
encoder2d_2x2 e;
|
@ -1,5 +1,5 @@
|
||||
watchall
|
||||
mode run
|
||||
# mode run
|
||||
|
||||
system "echo '[] Set Out Ack/Valid Low'"
|
||||
|
||||
@ -26,15 +26,10 @@ set e.x[4].r 0
|
||||
set e.x[5].r 0
|
||||
set e.x[6].r 0
|
||||
set e.x[7].r 0
|
||||
cycle
|
||||
set Reset 1
|
||||
|
||||
# # Slightly confused as to whether Reset should be set to 1 given A_2C_RB_X1 needs active high to change y
|
||||
# # status X
|
||||
# # set Reset 1
|
||||
# # cycle
|
||||
|
||||
cycle
|
||||
|
||||
mode run
|
||||
status X
|
||||
status 0
|
||||
@ -49,9 +44,13 @@ set e.y[5].r 1
|
||||
# set e.x[2].r 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 0
|
||||
assert e.e._x_v 0
|
||||
assert e.y[5].a 1
|
||||
system "echo '[] Asserted y[5].a 1'"
|
||||
|
||||
# assert e.e.Yarb.out.r 1
|
||||
# assert e.e.Xarb.out.r 0
|
||||
|
||||
# assert e.e._x_v 0
|
||||
|
||||
|
||||
|
||||
@ -59,14 +58,17 @@ system "echo '[] Raise x[2].r'"
|
||||
# set e.y[5].r 1
|
||||
set e.x[2].r 1
|
||||
cycle
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
assert e.e._x_v 1
|
||||
assert e.x[2].a 1
|
||||
system "echo '[] Asserted x[2].a 1'"
|
||||
|
||||
# assert e.e.Yarb.out.r 1
|
||||
# assert e.e.Xarb.out.r 1
|
||||
# assert e.e._x_v 1
|
||||
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
# assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 0
|
||||
@ -76,7 +78,7 @@ assert e.y[4].a 0
|
||||
assert e.y[5].a 1
|
||||
assert e.y[6].a 0
|
||||
assert e.y[7].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
# assert e.e.Yarb.out.a 1
|
||||
|
||||
|
||||
assert e.x[0].a 0
|
||||
@ -87,43 +89,11 @@ assert e.x[4].a 0
|
||||
assert e.x[5].a 0
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
assert e.e.x_enc_out.d[1].t 1
|
||||
assert e.e.x_enc_out.d[1].f 0
|
||||
assert e.e.x_enc_out.d[2].t 0
|
||||
assert e.e.x_enc_out.d[2].f 1
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 1
|
||||
assert e.e.y_enc_out.d[0].f 0
|
||||
assert e.e.y_enc_out.d[1].t 0
|
||||
assert e.e.y_enc_out.d[1].f 1
|
||||
assert e.e.y_enc_out.d[2].t 1
|
||||
assert e.e.y_enc_out.d[2].f 0
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 1
|
||||
assert e.out.d.d[1].f 0
|
||||
assert e.out.d.d[2].t 0
|
||||
assert e.out.d.d[2].f 1
|
||||
assert e.out.d.d[3].t 1
|
||||
assert e.out.d.d[3].f 0
|
||||
assert e.out.d.d[4].t 0
|
||||
assert e.out.d.d[4].f 1
|
||||
assert e.out.d.d[5].t 1
|
||||
assert e.out.d.d[5].f 0
|
||||
# assert e.e.Xarb.out.a 1
|
||||
|
||||
assert-qdi-channel-valid "e.out" 6 42
|
||||
system "echo '[] Asserted output encoding valid 42'"
|
||||
set e.out.v 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
@ -131,41 +101,7 @@ set e.y[5].r 0
|
||||
set e.x[2].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.x[2].a 0
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (2,5) Encoded'"
|
||||
|
||||
system "echo '[] Single Neuron Spikes (0,0)'"
|
||||
|
||||
set e.y[0].r 1
|
||||
set e.x[0].r 1
|
||||
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 1
|
||||
assert e.e.Xarb.out.r 1
|
||||
|
||||
assert e.e._x_v 1
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 1
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 0
|
||||
assert e.y[2].a 0
|
||||
assert e.y[3].a 0
|
||||
@ -173,10 +109,9 @@ assert e.y[4].a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.y[6].a 0
|
||||
assert e.y[7].a 0
|
||||
assert e.e.Yarb.out.a 1
|
||||
|
||||
|
||||
assert e.x[0].a 1
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 0
|
||||
assert e.x[2].a 0
|
||||
assert e.x[3].a 0
|
||||
@ -184,63 +119,120 @@ assert e.x[4].a 0
|
||||
assert e.x[5].a 0
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
assert e.e.Xarb.out.a 1
|
||||
|
||||
system "echo '[] Check Encoders'"
|
||||
|
||||
assert e.e.y_enc_out.d[0].t 0
|
||||
assert e.e.y_enc_out.d[0].f 1
|
||||
assert e.e.y_enc_out.d[1].t 0
|
||||
assert e.e.y_enc_out.d[1].f 1
|
||||
assert e.e.y_enc_out.d[2].t 0
|
||||
assert e.e.y_enc_out.d[2].f 1
|
||||
|
||||
assert e.e.x_enc_out.d[0].t 0
|
||||
assert e.e.x_enc_out.d[0].f 1
|
||||
assert e.e.x_enc_out.d[1].t 0
|
||||
assert e.e.x_enc_out.d[1].f 1
|
||||
assert e.e.x_enc_out.d[2].t 0
|
||||
assert e.e.x_enc_out.d[2].f 1
|
||||
|
||||
system "echo '[] Check Buffer'"
|
||||
|
||||
assert e.e._in_x_v 1
|
||||
assert e.e._in_y_v 1
|
||||
assert e.e._en 1
|
||||
|
||||
assert e.out.d.d[0].t 0
|
||||
assert e.out.d.d[0].f 1
|
||||
assert e.out.d.d[1].t 0
|
||||
assert e.out.d.d[1].f 1
|
||||
assert e.out.d.d[2].t 0
|
||||
assert e.out.d.d[2].f 1
|
||||
assert e.out.d.d[3].t 0
|
||||
assert e.out.d.d[3].f 1
|
||||
assert e.out.d.d[4].t 0
|
||||
assert e.out.d.d[4].f 1
|
||||
assert e.out.d.d[5].t 0
|
||||
assert e.out.d.d[5].f 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[0].r 0
|
||||
set e.x[0].r 0
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.r 0
|
||||
assert e.e.Xarb.out.r 0
|
||||
system "echo '[] Asserted all in acks 0'"
|
||||
|
||||
set e.out.a 1
|
||||
set e.out.v 1
|
||||
cycle
|
||||
|
||||
assert e.e.Yarb.out.a 0
|
||||
assert e.e.Xarb.out.a 0
|
||||
assert e.y[0].a 0
|
||||
assert e.x[0].a 0
|
||||
assert-qdi-channel-neutral "e.out" 6
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (0,0) Encoded'"
|
||||
system "echo '[] Neuron (2,5) Encoded'"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
system "echo '[] Single Neuron Spikes (5,2), raise y[2].r'"
|
||||
|
||||
set e.y[2].r 1
|
||||
# set e.x[2].r 1
|
||||
cycle
|
||||
|
||||
assert e.y[2].a 1
|
||||
system "echo '[] Asserted y[2].a 1'"
|
||||
|
||||
# assert e.e.Yarb.out.r 1
|
||||
# assert e.e.Xarb.out.r 0
|
||||
|
||||
# assert e.e._x_v 0
|
||||
|
||||
|
||||
|
||||
system "echo '[] Raise x[5].r'"
|
||||
# set e.y[5].r 1
|
||||
set e.x[5].r 1
|
||||
cycle
|
||||
assert e.x[5].a 1
|
||||
system "echo '[] Asserted x[5].a 1'"
|
||||
|
||||
# assert e.e.Yarb.out.r 1
|
||||
# assert e.e.Xarb.out.r 1
|
||||
# assert e.e._x_v 1
|
||||
|
||||
|
||||
system "echo '[] Check Arbiter Acks'"
|
||||
|
||||
# assert e.e._x_a_B 1
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 0
|
||||
assert e.y[2].a 1
|
||||
assert e.y[3].a 0
|
||||
assert e.y[4].a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.y[6].a 0
|
||||
assert e.y[7].a 0
|
||||
# assert e.e.Yarb.out.a 1
|
||||
|
||||
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 0
|
||||
assert e.x[2].a 0
|
||||
assert e.x[3].a 0
|
||||
assert e.x[4].a 0
|
||||
assert e.x[5].a 1
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
# assert e.e.Xarb.out.a 1
|
||||
|
||||
assert-qdi-channel-valid "e.out" 6 21
|
||||
system "echo '[] Asserted output encoding valid 21'"
|
||||
set e.out.v 1
|
||||
|
||||
system "echo '[] Finish Neuron Handshake'"
|
||||
|
||||
set e.y[2].r 0
|
||||
set e.x[5].r 0
|
||||
cycle
|
||||
|
||||
assert e.y[0].a 0
|
||||
assert e.y[1].a 0
|
||||
assert e.y[2].a 0
|
||||
assert e.y[3].a 0
|
||||
assert e.y[4].a 0
|
||||
assert e.y[5].a 0
|
||||
assert e.y[6].a 0
|
||||
assert e.y[7].a 0
|
||||
|
||||
|
||||
assert e.x[0].a 0
|
||||
assert e.x[1].a 0
|
||||
assert e.x[2].a 0
|
||||
assert e.x[3].a 0
|
||||
assert e.x[4].a 0
|
||||
assert e.x[5].a 0
|
||||
assert e.x[6].a 0
|
||||
assert e.x[7].a 0
|
||||
|
||||
|
||||
system "echo '[] Asserted all in acks 0'"
|
||||
|
||||
set e.out.a 1
|
||||
cycle
|
||||
|
||||
assert-qdi-channel-neutral "e.out" 6
|
||||
|
||||
set e.out.a 0
|
||||
set e.out.v 0
|
||||
cycle
|
||||
|
||||
system "echo '[] Neuron (5,2) Encoded'"
|
||||
|
Loading…
Reference in New Issue
Block a user