From 0a91459073e67343cc7ea2588a119900fc4f418c Mon Sep 17 00:00:00 2001 From: alexmadison Date: Tue, 21 Nov 2023 11:26:04 +0100 Subject: [PATCH] removed old decoder, only simple now, fixed 8x8 test, deleted other 2 --- dataflow_neuro/coders.act | 131 +------- test/unit_tests/encoder2D_2x2/test.act | 49 --- test/unit_tests/encoder2D_2x2/test.prsim | 377 ----------------------- test/unit_tests/encoder2D_8x7/test.act | 49 --- test/unit_tests/encoder2D_8x7/test.prsim | 246 --------------- test/unit_tests/encoder2D_8x8/test.act | 9 +- test/unit_tests/encoder2D_8x8/test.prsim | 266 ++++++++-------- 7 files changed, 137 insertions(+), 990 deletions(-) delete mode 100644 test/unit_tests/encoder2D_2x2/test.act delete mode 100644 test/unit_tests/encoder2D_2x2/test.prsim delete mode 100644 test/unit_tests/encoder2D_8x7/test.act delete mode 100644 test/unit_tests/encoder2D_8x7/test.prsim diff --git a/dataflow_neuro/coders.act b/dataflow_neuro/coders.act index 0ced224..b80d32e 100644 --- a/dataflow_neuro/coders.act +++ b/dataflow_neuro/coders.act @@ -754,136 +754,6 @@ defproc decoder_2d_hybrid (avMx1of2 in; bool! out_req_x[Nx], out_req_y[ } - export template - 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 Xarb(.in = _x_temp,.out = _arb_out_x,.supply = supply); - arbtree Yarb(.in = _y_temp,.out = _arb_out_y,.supply = supply); - - // Sigbufs for strong ackowledge signals from arb_in's - sigbuf_1output x_ack_arb[Nx]; - sigbuf_1output 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 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 x_enc_out; - (i:Nx:x_acks[i] = inx[i].a;) - dualrail_encoder x_encoder(.in = x_acks, .out = x_enc_out, .supply = supply); - - bool y_acks[Ny]; - Mx1of2 y_enc_out; - (i:Ny:y_acks[i] = iny[i].a;) - dualrail_encoder y_encoder(.in = y_acks, .out = y_enc_out, .supply = supply); - - // Valid trees - vtree vtree_x(.in = x_enc_out, .out = _in_x_v, .supply = supply); - vtree vtree_y(.in = y_enc_out, .out = _in_y_v, .supply = supply); - - // Buffer func thing - Mx1of2 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 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 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. diff --git a/test/unit_tests/encoder2D_2x2/test.act b/test/unit_tests/encoder2D_2x2/test.act deleted file mode 100644 index d236a9d..0000000 --- a/test/unit_tests/encoder2D_2x2/test.act +++ /dev/null @@ -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; \ No newline at end of file diff --git a/test/unit_tests/encoder2D_2x2/test.prsim b/test/unit_tests/encoder2D_2x2/test.prsim deleted file mode 100644 index 865cb1c..0000000 --- a/test/unit_tests/encoder2D_2x2/test.prsim +++ /dev/null @@ -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'" \ No newline at end of file diff --git a/test/unit_tests/encoder2D_8x7/test.act b/test/unit_tests/encoder2D_8x7/test.act deleted file mode 100644 index 3eee1cc..0000000 --- a/test/unit_tests/encoder2D_8x7/test.act +++ /dev/null @@ -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; \ No newline at end of file diff --git a/test/unit_tests/encoder2D_8x7/test.prsim b/test/unit_tests/encoder2D_8x7/test.prsim deleted file mode 100644 index b77866b..0000000 --- a/test/unit_tests/encoder2D_8x7/test.prsim +++ /dev/null @@ -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'" \ No newline at end of file diff --git a/test/unit_tests/encoder2D_8x8/test.act b/test/unit_tests/encoder2D_8x8/test.act index cbbfbc1..5d19f55 100644 --- a/test/unit_tests/encoder2D_8x8/test.act +++ b/test/unit_tests/encoder2D_8x8/test.act @@ -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; \ No newline at end of file diff --git a/test/unit_tests/encoder2D_8x8/test.prsim b/test/unit_tests/encoder2D_8x8/test.prsim index 9cf0f0a..4e93c8b 100644 --- a/test/unit_tests/encoder2D_8x8/test.prsim +++ b/test/unit_tests/encoder2D_8x8/test.prsim @@ -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'" \ No newline at end of file +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'"