Compare commits
	
		
			23 Commits
		
	
	
		
			encoder_wi
			...
			0e9f2ae506
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0e9f2ae506 | ||
| 
						 | 
					e53fc88054 | ||
| 
						 | 
					f7cd7006d0 | ||
| 
						 | 
					24a6260862 | ||
| 
						 | 
					f5859040d8 | ||
| 
						 | 
					3e1b63c201 | ||
| 
						 | 
					b49b9d98c3 | ||
| 
						 | 
					6fc3e4b99c | ||
| 
						 | 
					af52c688a3 | ||
| 
						 | 
					d0a2fff096 | ||
| 
						 | 
					7f40b48b49 | ||
| 
						 | 
					9c27248e12 | ||
| 
						 | 
					3bba9fefa4 | ||
| 
						 | 
					31d2f35042 | ||
| 
						 | 
					c61a570f80 | ||
| 
						 | 
					6bece2f459 | ||
| 
						 | 
					659cd2479c | ||
| 
						 | 
					c5e582ff3e | ||
| 
						 | 
					e52ec9ed61 | ||
| 
						 | 
					c580d21efe | ||
| 
						 | 
					1b7e39bc00 | ||
| 
						 | 
					8060051da0 | ||
| 
						 | 
					b456ea40fd | 
@@ -104,10 +104,12 @@ namespace tmpl {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    export defcell DLY4_X1(bool! y; bool? a, vdd, vss)
 | 
					    export defcell DLY4_X1(bool! y; bool? a, vdd, vss)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      bool _y;
 | 
					      bool _y, __y, ___y;
 | 
				
			||||||
      prs {
 | 
					      prs {
 | 
				
			||||||
        a => _y-
 | 
					        a => _y-
 | 
				
			||||||
        _y => y-
 | 
					        _y => __y-
 | 
				
			||||||
 | 
					        __y => ___y-
 | 
				
			||||||
 | 
					        ___y => y-
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -272,7 +274,7 @@ namespace tmpl {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    export defcell MUX2_X1(bool! y; bool? a, b, s, vdd, vss)
 | 
					    export defcell MUX2_X1(bool! y; bool? a, b, s, vdd, vss)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      // y = !( S ? a : b )
 | 
					      // y = !( S ? b : a )
 | 
				
			||||||
      // Adjusted to fit the XFAB Muxes
 | 
					      // Adjusted to fit the XFAB Muxes
 | 
				
			||||||
      bool _s;
 | 
					      bool _s;
 | 
				
			||||||
      bool _y;
 | 
					      bool _y;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										251
									
								
								dataflow_neuro/coders.act
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								dataflow_neuro/coders.act
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,251 @@
 | 
				
			|||||||
 | 
					/*************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This file is part of ACT dataflow neuro library
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Copyright (c) 2022 University of Groningen - Ole Richter
 | 
				
			||||||
 | 
					 *  Copyright (c) 2022 University of Groningen - Michele Mastella
 | 
				
			||||||
 | 
					 *  Copyright (c) 2022 University of Groningen - Hugh Greatorex
 | 
				
			||||||
 | 
					 *  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/cell_lib_async.act";
 | 
				
			||||||
 | 
					import "../../dataflow_neuro/cell_lib_std.act";
 | 
				
			||||||
 | 
					import "../../dataflow_neuro/treegates.act";
 | 
				
			||||||
 | 
					import "../../dataflow_neuro/primitives.act";
 | 
				
			||||||
 | 
					// import tmpl::dataflow_neuro;
 | 
				
			||||||
 | 
					// import tmpl::dataflow_neuro;
 | 
				
			||||||
 | 
					import std::channel;
 | 
				
			||||||
 | 
					open std::channel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace tmpl {
 | 
				
			||||||
 | 
						namespace dataflow_neuro {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * 2D decoder which uses a configurable delay from the VCtrees to buffer ack.
 | 
				
			||||||
 | 
							 *	Nx is the x size of the decoder array
 | 
				
			||||||
 | 
							 * 	NxC is the number of wires in the x channel.
 | 
				
			||||||
 | 
							 * 	Thus NxC should be something like NxC = ceil(log2(Nx))
 | 
				
			||||||
 | 
							 * 	but my guess is that we can't do logs...
 | 
				
			||||||
 | 
							 * 	N_dly_cfg is the number of config bits in the ACK delay line,
 | 
				
			||||||
 | 
							 * 	with all bits high corresponding to 2**N_dly_cfg -1 DLY1_X4 cells.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							export template<pint NxC, NyC, Nx, Ny, N_dly_cfg>
 | 
				
			||||||
 | 
							defproc decoder_2d_dly (avMx1of2<NxC+NyC> in; bool? outx[Nx], outy[Ny], 
 | 
				
			||||||
 | 
								dly_cfg[N_dly_cfg], reset_B; power supply) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Buffer to recieve concat(x,y) address packet
 | 
				
			||||||
 | 
								buffer<NxC+NyC> addr_buf(.in = in, .reset_B = reset_B, .supply = supply);
 | 
				
			||||||
 | 
								// NEED TO BUFFER OUTPUTS FROM BUFFER I RECKON
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Validity trees
 | 
				
			||||||
 | 
								vtree<NxC> vtree_x (.supply = supply);
 | 
				
			||||||
 | 
								vtree<NyC> vtree_y (.supply = supply);
 | 
				
			||||||
 | 
								(i:0..NxC-1:vtree_x.in.d[i].t = addr_buf.out.d.d[i].t;)
 | 
				
			||||||
 | 
								(i:0..NxC-1:vtree_x.in.d[i].f = addr_buf.out.d.d[i].f;)
 | 
				
			||||||
 | 
								(i:0..NyC-1:vtree_y.in.d[i].t = addr_buf.out.d.d[i+NxC].t;)
 | 
				
			||||||
 | 
								(i:0..NyC-1:vtree_y.in.d[i].f = addr_buf.out.d.d[i+NxC].f;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Delay ack line. Ack line is delayed (but not the val)
 | 
				
			||||||
 | 
								A_2C_B_X1 C2el(.c1 = vtree_x.out, .c2 = vtree_y.out, .vdd = supply.vdd, .vss = supply.vss);
 | 
				
			||||||
 | 
								addr_buf.out.v = C2el.y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// delayprog<N_dly_cfg> dly(.in = tielow.y, .s = dly_cfg, .supply = supply);
 | 
				
			||||||
 | 
								delayprog<N_dly_cfg> dly(.in = C2el.y, .s = dly_cfg, .supply = supply);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// ACK MAY HAVE BEEN DISCONNECTED HERE
 | 
				
			||||||
 | 
								// FOR TESTING PURPOSES
 | 
				
			||||||
 | 
								// !!!!!!!!!!!!!!!!
 | 
				
			||||||
 | 
								dly.out = addr_buf.out.a;
 | 
				
			||||||
 | 
								// ACK MAY HAVE BEEN DISCONNECTED HERE
 | 
				
			||||||
 | 
								// FOR TESTING PURPOSES
 | 
				
			||||||
 | 
								// !!!!!!!!!!!!!!!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// AND trees
 | 
				
			||||||
 | 
								pint bitval;
 | 
				
			||||||
 | 
								andtree<NxC> atree_x[Nx];
 | 
				
			||||||
 | 
								(k:0..Nx-1:atree_x[k].supply = supply;)
 | 
				
			||||||
 | 
								(i:0..Nx-1:
 | 
				
			||||||
 | 
									(j:0..NxC-1:
 | 
				
			||||||
 | 
										bitval = (i & ( 1 << j )) >> j; // Get binary digit of integer i, column j
 | 
				
			||||||
 | 
										[bitval = 1 -> 
 | 
				
			||||||
 | 
											atree_x[i].in[j] = addr_buf.out.d.d[j].t;
 | 
				
			||||||
 | 
											[]bitval = 0 ->
 | 
				
			||||||
 | 
											atree_x[i].in[j] = addr_buf.out.d.d[j].f;
 | 
				
			||||||
 | 
											[]bitval >= 2 -> {false : "fuck"};
 | 
				
			||||||
 | 
											]
 | 
				
			||||||
 | 
										atree_x[i].out = outx[i];
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								andtree<NyC> atree_y[Ny];
 | 
				
			||||||
 | 
								(k:0..Ny-1:atree_y[k].supply = supply;)
 | 
				
			||||||
 | 
								(i:0..Ny-1:
 | 
				
			||||||
 | 
									(j:0..NyC-1:
 | 
				
			||||||
 | 
										bitval = (i & ( 1 << j )) >> j; // Get binary digit of integer i, column j
 | 
				
			||||||
 | 
										[bitval = 1 -> 
 | 
				
			||||||
 | 
											atree_y[i].in[j] = addr_buf.out.d.d[j+NxC].t;
 | 
				
			||||||
 | 
											[]bitval = 0 ->
 | 
				
			||||||
 | 
											atree_y[i].in[j] = addr_buf.out.d.d[j+NxC].f;
 | 
				
			||||||
 | 
											]
 | 
				
			||||||
 | 
										atree_y[i].out = outy[i];
 | 
				
			||||||
 | 
										)
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Build an arbiter_handshake tree.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
							export template<pint N>
 | 
				
			||||||
 | 
							defproc arbtree (a1of1 in[N]; a1of1 out; power supply)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								bool tout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								{ N > 0 : "What?" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								pint i, end, j;
 | 
				
			||||||
 | 
								i = 0;
 | 
				
			||||||
 | 
								end = N-1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								pint arbCount;
 | 
				
			||||||
 | 
								arbCount = 0;
 | 
				
			||||||
 | 
						/* Pre"calculate" the number of C cells required, look below if confused */
 | 
				
			||||||
 | 
								*[ i != end ->
 | 
				
			||||||
 | 
									j = 0;
 | 
				
			||||||
 | 
									*[ i <= end ->
 | 
				
			||||||
 | 
										j = j + 1;
 | 
				
			||||||
 | 
										[i = end ->
 | 
				
			||||||
 | 
											i = end+1;
 | 
				
			||||||
 | 
											[] i+1 = end ->
 | 
				
			||||||
 | 
											i = end+1;
 | 
				
			||||||
 | 
											arbCount = arbCount +1;
 | 
				
			||||||
 | 
											[] else ->
 | 
				
			||||||
 | 
											i = i + 2;
 | 
				
			||||||
 | 
											arbCount = arbCount +1;
 | 
				
			||||||
 | 
											]
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
								/*-- update range that has to be combined --*/
 | 
				
			||||||
 | 
								// i = end+1;
 | 
				
			||||||
 | 
									end = end+j;
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* array that holds ALL the nodes in the completion tree */
 | 
				
			||||||
 | 
								a1of1 tmp[end+1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Connecting the first nodes to the input
 | 
				
			||||||
 | 
								(l:N:
 | 
				
			||||||
 | 
									tmp[l] = in[l];
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* array to hold the actual C-elments, either A2C or A3C */
 | 
				
			||||||
 | 
								[arbCount > 0 ->
 | 
				
			||||||
 | 
									arbiter_handshake arbs[arbCount];
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
								(h:arbCount:arbs[h].supply = supply;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Reset the variables we just stole lol */
 | 
				
			||||||
 | 
								i = 0;
 | 
				
			||||||
 | 
								end = N-1;
 | 
				
			||||||
 | 
								j = 0;
 | 
				
			||||||
 | 
								pint arbIndex = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Invariant: i <= end */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								*[ i != end ->
 | 
				
			||||||
 | 
							 /* 
 | 
				
			||||||
 | 
								* Invariant: tmp[i..end] has the current signals that need to be
 | 
				
			||||||
 | 
								* combined together, and "isinv" specifies if they are the inverted
 | 
				
			||||||
 | 
								* sense or not
 | 
				
			||||||
 | 
								*/
 | 
				
			||||||
 | 
									j = 0;
 | 
				
			||||||
 | 
									*[ i <= end ->
 | 
				
			||||||
 | 
									/*-- there are still signals that need to be combined --*/
 | 
				
			||||||
 | 
										j = j + 1;
 | 
				
			||||||
 | 
										[ i = end ->
 | 
				
			||||||
 | 
									/*-- last piece: pipe input through to next layer --*/
 | 
				
			||||||
 | 
											tmp[end+j] = tmp[i];
 | 
				
			||||||
 | 
											i = end+1;
 | 
				
			||||||
 | 
											[] i+1 = end ->
 | 
				
			||||||
 | 
									/*-- last piece: use either a 2 input C-element --*/
 | 
				
			||||||
 | 
											arbs[arbIndex].in1 = tmp[i];
 | 
				
			||||||
 | 
											arbs[arbIndex].in2 = tmp[i+1];
 | 
				
			||||||
 | 
											arbs[arbIndex].out = tmp[end+j];
 | 
				
			||||||
 | 
											arbIndex = arbIndex +1;
 | 
				
			||||||
 | 
											i = end+1;
 | 
				
			||||||
 | 
											[] else ->
 | 
				
			||||||
 | 
									/*-- more to come; so use a two input C-element --*/
 | 
				
			||||||
 | 
											arbs[arbIndex].in1 = tmp[i];
 | 
				
			||||||
 | 
											arbs[arbIndex].in2 = tmp[i+1];
 | 
				
			||||||
 | 
											arbs[arbIndex].out = tmp[end+j];
 | 
				
			||||||
 | 
											arbIndex = arbIndex +1;
 | 
				
			||||||
 | 
											i = i + 2;
 | 
				
			||||||
 | 
											]
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									/*-- update range that has to be combined --*/
 | 
				
			||||||
 | 
									i = end+1;
 | 
				
			||||||
 | 
									end = end+j;
 | 
				
			||||||
 | 
									j = 0;
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								out = tmp[end];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							template<pint N, pint M, pint ACK_STRENGTH>
 | 
				
			||||||
 | 
							defproc encoder2D(a1of1 x[N]; a1of1 y[M] ;avMx1of2<X> addr; bool! out_a; power supply)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// Arbiters 
 | 
				
			||||||
 | 
								a1of1 _out_arb_x,_out_arb_y;
 | 
				
			||||||
 | 
								a1of1 _x_temp[N];
 | 
				
			||||||
 | 
								(i:N:
 | 
				
			||||||
 | 
									_x_temp[i].r = x[i].r;				
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
								(i:M:
 | 
				
			||||||
 | 
									_y_temp[i].r = y[i].r;				
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
								arbtree<N> Xarb(.in = _x_temp,.out = _out_arb_X,.supply = supply);
 | 
				
			||||||
 | 
								arbtree<M> Yarb(.in = _y_temp,.out = _out_arb_Y,.supply = supply);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sigbuf<ACK_STRENGTH> x_ack_arb[N];
 | 
				
			||||||
 | 
								sigbuf<ACK_STRENGTH> y_ack_arb[M];
 | 
				
			||||||
 | 
								(i:N:
 | 
				
			||||||
 | 
									x_ack_arb[i].in = _x_temp[i].a;
 | 
				
			||||||
 | 
									x_ack_arb[i].out[0] = x[i].a;
 | 
				
			||||||
 | 
									x_ack_arb[i].supply = supply;
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
								(i:M:
 | 
				
			||||||
 | 
									y_ack_arb[i].in = _y_temp[i].a;
 | 
				
			||||||
 | 
									y_ack_arb[i].out[0] = y[i].a;
 | 
				
			||||||
 | 
									y_ack_arb[i].supply = supply;
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -507,122 +507,8 @@ namespace tmpl {
 | 
				
			|||||||
            BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
 | 
					            BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // A tree composed by arbiters. The first layer takes N signals 
 | 
					        
 | 
				
			||||||
        export template<pint N>
 | 
					 | 
				
			||||||
        defproc arbiter_tree(a1of1 in[N]; a1of1 out; power supply)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            bool tout;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            { N > 0 : "Invalid N, should be greater than 0" };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            /* We calculate here how many arbiters we need to create for the full tree */
 | 
					 | 
				
			||||||
            pint inputs_in_layer, end, elements_in_layer;
 | 
					 | 
				
			||||||
            pint odd_element_idx = 0;
 | 
					 | 
				
			||||||
            pint odd_element_flag = 0;
 | 
					 | 
				
			||||||
            inputs_in_layer = 0;
 | 
					 | 
				
			||||||
            end = N-1;
 | 
					 | 
				
			||||||
            pint element_counter = 0;
 | 
					 | 
				
			||||||
            // Here we start a for loop to count the elements in the tree
 | 
					 | 
				
			||||||
            // The loop iterates for every successive layer
 | 
					 | 
				
			||||||
            // i is the variable used to iterate the inputs, 
 | 
					 | 
				
			||||||
            // j counts the elements in the layer
 | 
					 | 
				
			||||||
            *[ inputs_in_layer != end ->
 | 
					 | 
				
			||||||
                elements_in_layer = 0; // At every layer the counter of the elements is resetted
 | 
					 | 
				
			||||||
                *[ inputs_in_layer < end ->
 | 
					 | 
				
			||||||
                    [ inputs_in_layer + 1 >= end ->
 | 
					 | 
				
			||||||
                        //In this case, the number of input is even: the layer finishes
 | 
					 | 
				
			||||||
                        inputs_in_layer = end; 
 | 
					 | 
				
			||||||
                        odd_element_flag = 0;
 | 
					 | 
				
			||||||
                    [] inputs_in_layer + 2 >= end ->
 | 
					 | 
				
			||||||
                        //In this case, we arrived at the last input, this means the inputs are odd
 | 
					 | 
				
			||||||
                        //We need to save the odd input index and move it to the next layer, 
 | 
					 | 
				
			||||||
                        //up to when the resulting number is even
 | 
					 | 
				
			||||||
                        odd_element_idx = end;
 | 
					 | 
				
			||||||
                        odd_element_flag = 1;
 | 
					 | 
				
			||||||
                        inputs_in_layer = end; 
 | 
					 | 
				
			||||||
                    [] else ->
 | 
					 | 
				
			||||||
                        //If we are not close to the end, analyzes the next two inputs
 | 
					 | 
				
			||||||
                        inputs_in_layer = inputs_in_layer +2;
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                    elements_in_layer = elements_in_layer + 1; //At every step the elements count is updated
 | 
					 | 
				
			||||||
          
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
                //Move the inputs_in_layer to the next layer
 | 
					 | 
				
			||||||
                //Increase the end to account for the next layer elements
 | 
					 | 
				
			||||||
                //If there was an odd element, count it also in the end
 | 
					 | 
				
			||||||
                inputs_in_layer = end + 1;
 | 
					 | 
				
			||||||
                end = end + elements_in_layer + odd_element_flag;
 | 
					 | 
				
			||||||
                element_counter = element_counter + elements_in_layer;
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            { element_counter = 4 : "Michele you did wrong" };
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            // Creating the elements of the tree
 | 
					 | 
				
			||||||
            arbiter_handshake arb_array[element_counter];
 | 
					 | 
				
			||||||
            (i:element_counter:arb_array[i].supply = supply;)
 | 
					 | 
				
			||||||
            // These are the wires that connect one element of the tree to the others
 | 
					 | 
				
			||||||
            a1of1 channels[element_counter*2];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Connecting the first channels to the inputs
 | 
					 | 
				
			||||||
            (i:N:channels[i] = in[i];)
 | 
					 | 
				
			||||||
            channels[element_counter*2-1] = out;
 | 
					 | 
				
			||||||
            //Now we redo the for loop but here to assign the channels to the elements
 | 
					 | 
				
			||||||
            odd_element_idx = 0;
 | 
					 | 
				
			||||||
            odd_element_flag = 0;
 | 
					 | 
				
			||||||
            inputs_in_layer = 0;
 | 
					 | 
				
			||||||
            end = N-1;
 | 
					 | 
				
			||||||
            { end=4 : "Michele you did wrong" };
 | 
					 | 
				
			||||||
            // Here we start a for loop to count the elements in the tree
 | 
					 | 
				
			||||||
            // The loop iterates for every successive layer
 | 
					 | 
				
			||||||
            // i is the variable used to iterate the inputs, 
 | 
					 | 
				
			||||||
            // j counts the elements in the layer
 | 
					 | 
				
			||||||
            *[ inputs_in_layer != end ->
 | 
					 | 
				
			||||||
                elements_in_layer = 0; // At every layer the counter of the elements is resetted
 | 
					 | 
				
			||||||
                *[ inputs_in_layer < end ->
 | 
					 | 
				
			||||||
                    [ inputs_in_layer + 1 >= end ->
 | 
					 | 
				
			||||||
                        //In this case, the number of input is even: the layer finishes
 | 
					 | 
				
			||||||
                        [ odd_element_flag >= 1 ->
 | 
					 | 
				
			||||||
                                arb_array[elements_in_layer].in1 = channels[inputs_in_layer];
 | 
					 | 
				
			||||||
                                arb_array[elements_in_layer].in2 = channels[odd_element_idx];
 | 
					 | 
				
			||||||
                            [] else ->
 | 
					 | 
				
			||||||
                                arb_array[elements_in_layer].in1 = channels[inputs_in_layer];
 | 
					 | 
				
			||||||
                                arb_array[elements_in_layer].in2 = channels[inputs_in_layer+1];
 | 
					 | 
				
			||||||
                            ]
 | 
					 | 
				
			||||||
                        inputs_in_layer = end; 
 | 
					 | 
				
			||||||
                        odd_element_flag = 0;
 | 
					 | 
				
			||||||
                    [] inputs_in_layer + 2 >= end ->
 | 
					 | 
				
			||||||
                        //In this case, we arrived at the last input, this means the inputs are odd
 | 
					 | 
				
			||||||
                        //We need to save the odd input index and move it to the next layer, 
 | 
					 | 
				
			||||||
                        //up to when the resulting number is even
 | 
					 | 
				
			||||||
                        odd_element_idx = end;
 | 
					 | 
				
			||||||
                        odd_element_flag = 1;
 | 
					 | 
				
			||||||
                        { end<8 : "Michele you did wrong" };
 | 
					 | 
				
			||||||
                        { odd_element_idx=4 : "Michele you did wrong" };
 | 
					 | 
				
			||||||
                        arb_array[elements_in_layer].in1 = channels[inputs_in_layer];
 | 
					 | 
				
			||||||
                        arb_array[elements_in_layer].in2 = channels[inputs_in_layer+1]; 
 | 
					 | 
				
			||||||
                        inputs_in_layer = end; 
 | 
					 | 
				
			||||||
                    [] else ->
 | 
					 | 
				
			||||||
                        //If we are not close to the end, analyzes the next two inputs
 | 
					 | 
				
			||||||
                        arb_array[elements_in_layer].in1 = channels[inputs_in_layer];
 | 
					 | 
				
			||||||
                        arb_array[elements_in_layer].in2 = channels[inputs_in_layer+1]; 
 | 
					 | 
				
			||||||
                        inputs_in_layer = inputs_in_layer +2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    ]
 | 
					 | 
				
			||||||
                    elements_in_layer = elements_in_layer + 1; //At every step the elements count is updated
 | 
					 | 
				
			||||||
          
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
                //Move the inputs_in_layer to the next layer
 | 
					 | 
				
			||||||
                //Increase the end to account for the next layer elements
 | 
					 | 
				
			||||||
                //If there was an odd element, count it also in the end
 | 
					 | 
				
			||||||
                inputs_in_layer = end + 1;
 | 
					 | 
				
			||||||
                end = end + elements_in_layer + odd_element_flag;
 | 
					 | 
				
			||||||
                element_counter = element_counter + elements_in_layer;
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        export template<pint N>
 | 
					        export template<pint N>
 | 
				
			||||||
        defproc merge (avMx1of2<N> in1; avMx1of2<N> in2; avMx1of2<N> out ; bool? reset_B; power supply) {
 | 
					        defproc merge (avMx1of2<N> in1; avMx1of2<N> in2; avMx1of2<N> out ; bool? reset_B; power supply) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -737,11 +623,11 @@ namespace tmpl {
 | 
				
			|||||||
        // N is the number of layers,
 | 
					        // N is the number of layers,
 | 
				
			||||||
        // the longest layer having 2**N DLY elements
 | 
					        // the longest layer having 2**N DLY elements
 | 
				
			||||||
        export template<pint N>
 | 
					        export template<pint N>
 | 
				
			||||||
        defproc delayprog (bool! y; bool? a, s[N]; power supply)
 | 
					        defproc delayprog (bool! out; bool? in, s[N]; power supply)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            { N >= 0 : "What?" };
 | 
					            { N >= 0 : "What?" };
 | 
				
			||||||
            { N < 9 : "Delay prog size is given in 2**N. Given N is too big." };
 | 
					            { N < 10 : "Delay prog size is given in 2**N. Given N is ridiculous." };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            AND2_X1 and2[N];
 | 
					            AND2_X1 and2[N];
 | 
				
			||||||
@@ -750,7 +636,7 @@ namespace tmpl {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            bool _a[N+1]; // Holds the input to each row
 | 
					            bool _a[N+1]; // Holds the input to each row
 | 
				
			||||||
         
 | 
					         
 | 
				
			||||||
            _a[0] = a;
 | 
					            _a[0] = in;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            pint i_delay;
 | 
					            pint i_delay;
 | 
				
			||||||
            i_delay = 0; // Index of the last connected delay element
 | 
					            i_delay = 0; // Index of the last connected delay element
 | 
				
			||||||
@@ -763,7 +649,7 @@ namespace tmpl {
 | 
				
			|||||||
                // Delays
 | 
					                // Delays
 | 
				
			||||||
                dly[i_delay].a = and2[i].y;
 | 
					                dly[i_delay].a = and2[i].y;
 | 
				
			||||||
                i_delay = i_delay + 1;
 | 
					                i_delay = i_delay + 1;
 | 
				
			||||||
                (j:1..i-1:
 | 
					                (j:1..(1<<i)-1:
 | 
				
			||||||
                    dly[i_delay].a = dly[i_delay-1].y;
 | 
					                    dly[i_delay].a = dly[i_delay-1].y;
 | 
				
			||||||
                    i_delay = i_delay +1;
 | 
					                    i_delay = i_delay +1;
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
@@ -775,7 +661,7 @@ namespace tmpl {
 | 
				
			|||||||
                _a[i+1] = mu2[i].y;
 | 
					                _a[i+1] = mu2[i].y;
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            y = mu2[N-1].y;
 | 
					            out = mu2[N-1].y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Connect everything to vdd/gnd
 | 
					            // Connect everything to vdd/gnd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@
 | 
				
			|||||||
 **************************************************************************/
 | 
					 **************************************************************************/
 | 
				
			||||||
import "../../dataflow_neuro/cell_lib_async.act";
 | 
					import "../../dataflow_neuro/cell_lib_async.act";
 | 
				
			||||||
import "../../dataflow_neuro/cell_lib_std.act";
 | 
					import "../../dataflow_neuro/cell_lib_std.act";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import std::channel;
 | 
					import std::channel;
 | 
				
			||||||
open std::channel;
 | 
					open std::channel;
 | 
				
			||||||
namespace tmpl {
 | 
					namespace tmpl {
 | 
				
			||||||
@@ -83,18 +84,18 @@ defproc ortree (bool? in[N]; bool! out; power supply)
 | 
				
			|||||||
  /* array to hold the actual C-elments, either A2C or A3C */
 | 
					  /* array to hold the actual C-elments, either A2C or A3C */
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  [lenTree2Count > 0 ->
 | 
					  [lenTree2Count > 0 ->
 | 
				
			||||||
    OR2_X1 C2Els[lenTree2Count];
 | 
					    OR2_X1 or2s[lenTree2Count];
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  [lenTree3Count > 0 ->
 | 
					  [lenTree3Count > 0 ->
 | 
				
			||||||
    OR3_X1 C3Els[lenTree3Count];
 | 
					    OR3_X1 or3s[lenTree3Count];
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  (h:lenTree2Count:C2Els[h].vdd = supply.vdd;)
 | 
					  (h:lenTree2Count:or2s[h].vdd = supply.vdd;)
 | 
				
			||||||
  (h:lenTree3Count:C3Els[h].vdd = supply.vdd;)
 | 
					  (h:lenTree3Count:or3s[h].vdd = supply.vdd;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (h:lenTree2Count:C2Els[h].vss = supply.vss;)
 | 
					  (h:lenTree2Count:or2s[h].vss = supply.vss;)
 | 
				
			||||||
  (h:lenTree3Count:C3Els[h].vss = supply.vss;)
 | 
					  (h:lenTree3Count:or3s[h].vss = supply.vss;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Reset the variables we just stole lol */
 | 
					  /* Reset the variables we just stole lol */
 | 
				
			||||||
  i = 0;
 | 
					  i = 0;
 | 
				
			||||||
@@ -117,25 +118,25 @@ defproc ortree (bool? in[N]; bool! out; power supply)
 | 
				
			|||||||
        j = j + 1;
 | 
					        j = j + 1;
 | 
				
			||||||
        [ i+1 >= end ->
 | 
					        [ i+1 >= end ->
 | 
				
			||||||
          /*-- last piece: use either a 2 input C-element --*/
 | 
					          /*-- last piece: use either a 2 input C-element --*/
 | 
				
			||||||
          C2Els[tree2Index].a = tmp[i];
 | 
					          or2s[tree2Index].a = tmp[i];
 | 
				
			||||||
          C2Els[tree2Index].b = tmp[i+1];
 | 
					          or2s[tree2Index].b = tmp[i+1];
 | 
				
			||||||
          C2Els[tree2Index].y = tmp[end+j];
 | 
					          or2s[tree2Index].y = tmp[end+j];
 | 
				
			||||||
          tree2Index = tree2Index +1;
 | 
					          tree2Index = tree2Index +1;
 | 
				
			||||||
          i = end;
 | 
					          i = end;
 | 
				
			||||||
        [] i+2 >= end ->
 | 
					        [] i+2 >= end ->
 | 
				
			||||||
          /*-- last piece: use either a 3 input C-element --*/
 | 
					          /*-- last piece: use either a 3 input C-element --*/
 | 
				
			||||||
          C3Els[tree3Index].a = tmp[i];
 | 
					          or3s[tree3Index].a = tmp[i];
 | 
				
			||||||
          C3Els[tree3Index].b = tmp[i+1];
 | 
					          or3s[tree3Index].b = tmp[i+1];
 | 
				
			||||||
          C3Els[tree3Index].c = tmp[i+2];
 | 
					          or3s[tree3Index].c = tmp[i+2];
 | 
				
			||||||
          C3Els[tree3Index].y = tmp[end+j];
 | 
					          or3s[tree3Index].y = tmp[end+j];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          tree3Index = tree3Index +1;
 | 
					          tree3Index = tree3Index +1;
 | 
				
			||||||
          i = end;
 | 
					          i = end;
 | 
				
			||||||
        [] else ->
 | 
					        [] else ->
 | 
				
			||||||
          /*-- more to come; so use a two input C-element --*/
 | 
					          /*-- more to come; so use a two input C-element --*/
 | 
				
			||||||
          C2Els[tree2Index].a = tmp[i];
 | 
					          or2s[tree2Index].a = tmp[i];
 | 
				
			||||||
          C2Els[tree2Index].b = tmp[i+1];
 | 
					          or2s[tree2Index].b = tmp[i+1];
 | 
				
			||||||
          C2Els[tree2Index].y = tmp[end+j];
 | 
					          or2s[tree2Index].y = tmp[end+j];
 | 
				
			||||||
          tree2Index = tree2Index +1;
 | 
					          tree2Index = tree2Index +1;
 | 
				
			||||||
          i = i + 2;
 | 
					          i = i + 2;
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
@@ -192,18 +193,18 @@ defproc andtree (bool? in[N]; bool! out; power supply)
 | 
				
			|||||||
  /* array to hold the actual C-elments, either A2C or A3C */
 | 
					  /* array to hold the actual C-elments, either A2C or A3C */
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    [lenTree2Count > 0 ->
 | 
					    [lenTree2Count > 0 ->
 | 
				
			||||||
    AND2_X1 C2Els[lenTree2Count];
 | 
					    AND2_X1 and2s[lenTree2Count];
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  [lenTree3Count > 0 ->
 | 
					  [lenTree3Count > 0 ->
 | 
				
			||||||
     AND3_X1 C3Els[lenTree3Count];
 | 
					     AND3_X1 and3s[lenTree3Count];
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  (h:lenTree2Count:C2Els[h].vdd = supply.vdd;)
 | 
					  (h:lenTree2Count:and2s[h].vdd = supply.vdd;)
 | 
				
			||||||
  (h:lenTree3Count:C3Els[h].vdd = supply.vdd;)
 | 
					  (h:lenTree3Count:and3s[h].vdd = supply.vdd;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (h:lenTree2Count:C2Els[h].vss = supply.vss;)
 | 
					  (h:lenTree2Count:and2s[h].vss = supply.vss;)
 | 
				
			||||||
  (h:lenTree3Count:C3Els[h].vss = supply.vss;)
 | 
					  (h:lenTree3Count:and3s[h].vss = supply.vss;)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Reset the variables we just stole lol */
 | 
					  /* Reset the variables we just stole lol */
 | 
				
			||||||
  i = 0;
 | 
					  i = 0;
 | 
				
			||||||
@@ -226,25 +227,25 @@ defproc andtree (bool? in[N]; bool! out; power supply)
 | 
				
			|||||||
        j = j + 1;
 | 
					        j = j + 1;
 | 
				
			||||||
        [ i+1 >= end ->
 | 
					        [ i+1 >= end ->
 | 
				
			||||||
          /*-- last piece: use either a 2 input C-element --*/
 | 
					          /*-- last piece: use either a 2 input C-element --*/
 | 
				
			||||||
          C2Els[tree2Index].a = tmp[i];
 | 
					          and2s[tree2Index].a = tmp[i];
 | 
				
			||||||
          C2Els[tree2Index].b = tmp[i+1];
 | 
					          and2s[tree2Index].b = tmp[i+1];
 | 
				
			||||||
          C2Els[tree2Index].y = tmp[end+j];
 | 
					          and2s[tree2Index].y = tmp[end+j];
 | 
				
			||||||
          tree2Index = tree2Index +1;
 | 
					          tree2Index = tree2Index +1;
 | 
				
			||||||
          i = end;
 | 
					          i = end;
 | 
				
			||||||
        [] i+2 >= end ->
 | 
					        [] i+2 >= end ->
 | 
				
			||||||
          /*-- last piece: use either a 3 input C-element --*/
 | 
					          /*-- last piece: use either a 3 input C-element --*/
 | 
				
			||||||
          C3Els[tree3Index].a = tmp[i];
 | 
					          and3s[tree3Index].a = tmp[i];
 | 
				
			||||||
          C3Els[tree3Index].b = tmp[i+1];
 | 
					          and3s[tree3Index].b = tmp[i+1];
 | 
				
			||||||
          C3Els[tree3Index].c = tmp[i+2];
 | 
					          and3s[tree3Index].c = tmp[i+2];
 | 
				
			||||||
          C3Els[tree3Index].y = tmp[end+j];
 | 
					          and3s[tree3Index].y = tmp[end+j];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          tree3Index = tree3Index +1;
 | 
					          tree3Index = tree3Index +1;
 | 
				
			||||||
          i = end;
 | 
					          i = end;
 | 
				
			||||||
        [] else ->
 | 
					        [] else ->
 | 
				
			||||||
          /*-- more to come; so use a two input C-element --*/
 | 
					          /*-- more to come; so use a two input C-element --*/
 | 
				
			||||||
          C2Els[tree2Index].a = tmp[i];
 | 
					          and2s[tree2Index].a = tmp[i];
 | 
				
			||||||
          C2Els[tree2Index].b = tmp[i+1];
 | 
					          and2s[tree2Index].b = tmp[i+1];
 | 
				
			||||||
          C2Els[tree2Index].y = tmp[end+j];
 | 
					          and2s[tree2Index].y = tmp[end+j];
 | 
				
			||||||
          tree2Index = tree2Index +1;
 | 
					          tree2Index = tree2Index +1;
 | 
				
			||||||
          i = i + 2;
 | 
					          i = i + 2;
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
@@ -380,16 +381,16 @@ defproc vtree (std::data::Mx1of2?<N> in; bool! out; power supply)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    // OR layer for making OR between true and false of in (they are then sent to Ctree)
 | 
					    // OR layer for making OR between true and false of in (they are then sent to Ctree)
 | 
				
			||||||
    OR2_X1 OR2_tf[N];
 | 
					    OR2_X1 OR2_tf[N];
 | 
				
			||||||
    ctree<N> myctree;
 | 
					    ctree<N> ct;
 | 
				
			||||||
  (l:N:
 | 
					  (l:N:
 | 
				
			||||||
      OR2_tf[l].a = in.d[l].t;
 | 
					      OR2_tf[l].a = in.d[l].t;
 | 
				
			||||||
      OR2_tf[l].b = in.d[l].f;
 | 
					      OR2_tf[l].b = in.d[l].f;
 | 
				
			||||||
      OR2_tf[l].y = myctree.in[l];
 | 
					      OR2_tf[l].y = ct.in[l];
 | 
				
			||||||
      OR2_tf[l].vdd = supply.vdd;
 | 
					      OR2_tf[l].vdd = supply.vdd;
 | 
				
			||||||
      OR2_tf[l].vss = supply.vss;
 | 
					      OR2_tf[l].vss = supply.vss;
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  myctree.supply = supply;
 | 
					  ct.supply = supply;
 | 
				
			||||||
  out = myctree.out;
 | 
					  out = ct.out;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
export template<pint N>
 | 
					export template<pint N>
 | 
				
			||||||
defproc sigbuf (bool? in; bool! out[N]; power supply)
 | 
					defproc sigbuf (bool? in; bool! out[N]; power supply)
 | 
				
			||||||
@@ -416,5 +417,8 @@ defproc sigbuf (bool? in; bool! out[N]; power supply)
 | 
				
			|||||||
   ]
 | 
					   ]
 | 
				
			||||||
   (i:1..N-1:out[i]=out[0];)
 | 
					   (i:1..N-1:out[i]=out[0];)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}}
 | 
					}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										232
									
								
								test/unit_tests/arbiter_tree_test/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								test/unit_tests/arbiter_tree_test/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,232 @@
 | 
				
			|||||||
 | 
					my_tree.in[1].r my_tree.at_cell.tmp[8].a my_tree.in[3].r my_tree.at_cell.tmp[5].a my_tree.at_cell.arbs[3].ack_cell1._y my_tree.fifo_to_tree[2].fifo_element[1]._out_a_B my_tree._in[1].a my_tree.fifo_to_tree[3].fifo_element[1]._out_a_B my_tree._in[3].a my_tree.fifo_to_tree[0].fifo_element[1]._out_a_B my_tree._in[2].a my_tree.at_cell.arbs[2].ack_cell2._y my_tree.at_cell.arbs[1].ack_cell2._y my_tree._in[4].a my_tree.out.a my_tree._in[0].a my_tree.at_cell.arbs[1].ack_cell1._y my_tree.at_cell.tmp[6].a my_tree.in[2].r my_tree.in[4].r my_tree.at_cell.arbs[2].ack_cell1._y my_tree.in[0].r my_tree.fifo_to_tree[1].fifo_element[1]._out_a_B my_tree.fifo_to_tree[4].fifo_element[1]._out_a_B my_tree.at_cell.arbs[0].ack_cell1._y my_tree.at_cell.arbs[3].ack_cell2._y my_tree.at_cell.arbs[0].ack_cell2._y 
 | 
				
			||||||
 | 
						    217204 my_tree.in[0].r : 0
 | 
				
			||||||
 | 
						    217204 my_tree.out.a : 0
 | 
				
			||||||
 | 
						    217204 my_tree.in[4].r : 0
 | 
				
			||||||
 | 
						    217204 my_tree.in[2].r : 0
 | 
				
			||||||
 | 
						    217204 my_tree.in[1].r : 0
 | 
				
			||||||
 | 
						    217204 my_tree.in[3].r : 0
 | 
				
			||||||
 | 
						    217205 my_tree.at_cell.arbs[3].ack_cell2._y : 1  [by my_tree.out.a:=0]
 | 
				
			||||||
 | 
						    217216 my_tree._in[4].a : 0  [by my_tree.at_cell.arbs[3].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    217586 my_tree.fifo_to_tree[4].fifo_element[1]._out_a_B : 1  [by my_tree._in[4].a:=0]
 | 
				
			||||||
 | 
						    217752 my_tree.at_cell.arbs[3].ack_cell1._y : 1  [by my_tree.out.a:=0]
 | 
				
			||||||
 | 
						    217819 my_tree.at_cell.tmp[8].a : 0  [by my_tree.at_cell.arbs[3].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    217835 my_tree.at_cell.arbs[2].ack_cell1._y : 1  [by my_tree.at_cell.tmp[8].a:=0]
 | 
				
			||||||
 | 
						    220460 my_tree.at_cell.arbs[2].ack_cell2._y : 1  [by my_tree.at_cell.tmp[8].a:=0]
 | 
				
			||||||
 | 
						    220988 my_tree.at_cell.tmp[6].a : 0  [by my_tree.at_cell.arbs[2].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    222397 my_tree.at_cell.tmp[5].a : 0  [by my_tree.at_cell.arbs[2].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    223423 my_tree.at_cell.arbs[1].ack_cell2._y : 1  [by my_tree.at_cell.tmp[6].a:=0]
 | 
				
			||||||
 | 
						    223425 my_tree._in[3].a : 0  [by my_tree.at_cell.arbs[1].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    235438 my_tree.at_cell.arbs[0].ack_cell1._y : 1  [by my_tree.at_cell.tmp[5].a:=0]
 | 
				
			||||||
 | 
						    235441 my_tree._in[0].a : 0  [by my_tree.at_cell.arbs[0].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    235470 my_tree.fifo_to_tree[0].fifo_element[1]._out_a_B : 1  [by my_tree._in[0].a:=0]
 | 
				
			||||||
 | 
						    246322 my_tree.at_cell.arbs[0].ack_cell2._y : 1  [by my_tree.at_cell.tmp[5].a:=0]
 | 
				
			||||||
 | 
						    246639 my_tree._in[1].a : 0  [by my_tree.at_cell.arbs[0].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    247868 my_tree.at_cell.arbs[1].ack_cell1._y : 1  [by my_tree.at_cell.tmp[6].a:=0]
 | 
				
			||||||
 | 
						    248021 my_tree._in[2].a : 0  [by my_tree.at_cell.arbs[1].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    248065 my_tree.fifo_to_tree[2].fifo_element[1]._out_a_B : 1  [by my_tree._in[2].a:=0]
 | 
				
			||||||
 | 
						    248240 my_tree.fifo_to_tree[1].fifo_element[1]._out_a_B : 1  [by my_tree._in[1].a:=0]
 | 
				
			||||||
 | 
						    284383 my_tree.fifo_to_tree[3].fifo_element[1]._out_a_B : 1  [by my_tree._in[3].a:=0]
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					[0] System initialized
 | 
				
			||||||
 | 
						    284383 Reset : 0
 | 
				
			||||||
 | 
						    287144 my_tree._reset_B : 1  [by Reset:=0]
 | 
				
			||||||
 | 
						    287145 my_tree.fifo_to_tree[3].reset_buf._y : 0  [by my_tree._reset_B:=1]
 | 
				
			||||||
 | 
						    287145 my_tree.fifo_to_tree[0].reset_buf._y : 0  [by my_tree._reset_B:=1]
 | 
				
			||||||
 | 
						    287166 my_tree.fifo_to_tree[1].reset_buf._y : 0  [by my_tree._reset_B:=1]
 | 
				
			||||||
 | 
						    287325 my_tree.fifo_to_tree[1]._reset_BX : 1  [by my_tree.fifo_to_tree[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    287361 my_tree.fifo_to_tree[2].reset_buf._y : 0  [by my_tree._reset_B:=1]
 | 
				
			||||||
 | 
						    288648 my_tree.fifo_to_tree[2]._reset_BX : 1  [by my_tree.fifo_to_tree[2].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    288726 my_tree.fifo_to_tree[3]._reset_BX : 1  [by my_tree.fifo_to_tree[3].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    288871 my_tree.fifo_to_tree[3].reset_bufarray.buf1._y : 0  [by my_tree.fifo_to_tree[3]._reset_BX:=1]
 | 
				
			||||||
 | 
						    290880 my_tree.fifo_to_tree[2].reset_bufarray.buf1._y : 0  [by my_tree.fifo_to_tree[2]._reset_BX:=1]
 | 
				
			||||||
 | 
						    291703 my_tree.fifo_to_tree[3]._reset_BXX[0] : 1  [by my_tree.fifo_to_tree[3].reset_bufarray.buf1._y:=0]
 | 
				
			||||||
 | 
						    291704 my_tree.fifo_to_tree[3].fifo_element[0].reset_buf._y : 0  [by my_tree.fifo_to_tree[3]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    291866 my_tree.fifo_to_tree[3].fifo_element[0]._reset_BX : 1  [by my_tree.fifo_to_tree[3].fifo_element[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    296490 my_tree.fifo_to_tree[0]._reset_BX : 1  [by my_tree.fifo_to_tree[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    297234 my_tree.fifo_to_tree[2]._reset_BXX[0] : 1  [by my_tree.fifo_to_tree[2].reset_bufarray.buf1._y:=0]
 | 
				
			||||||
 | 
						    297241 my_tree.fifo_to_tree[2].fifo_element[1].reset_buf._y : 0  [by my_tree.fifo_to_tree[2]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    297248 my_tree.fifo_to_tree[2].fifo_element[0].reset_buf._y : 0  [by my_tree.fifo_to_tree[2]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    297401 my_tree.fifo_to_tree[2].fifo_element[1]._reset_BX : 1  [by my_tree.fifo_to_tree[2].fifo_element[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    300827 my_tree.fifo_to_tree[4].reset_buf._y : 0  [by my_tree._reset_B:=1]
 | 
				
			||||||
 | 
						    300828 my_tree.fifo_to_tree[4]._reset_BX : 1  [by my_tree.fifo_to_tree[4].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    300829 my_tree.fifo_to_tree[4].reset_bufarray.buf1._y : 0  [by my_tree.fifo_to_tree[4]._reset_BX:=1]
 | 
				
			||||||
 | 
						    300830 my_tree.fifo_to_tree[4]._reset_BXX[0] : 1  [by my_tree.fifo_to_tree[4].reset_bufarray.buf1._y:=0]
 | 
				
			||||||
 | 
						    301017 my_tree.fifo_to_tree[4].fifo_element[1].reset_buf._y : 0  [by my_tree.fifo_to_tree[4]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    301018 my_tree.fifo_to_tree[4].fifo_element[1]._reset_BX : 1  [by my_tree.fifo_to_tree[4].fifo_element[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    303073 my_tree.fifo_to_tree[4].fifo_element[0].reset_buf._y : 0  [by my_tree.fifo_to_tree[4]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    303859 my_tree.fifo_to_tree[0].reset_bufarray.buf1._y : 0  [by my_tree.fifo_to_tree[0]._reset_BX:=1]
 | 
				
			||||||
 | 
						    307001 my_tree.fifo_to_tree[1].reset_bufarray.buf1._y : 0  [by my_tree.fifo_to_tree[1]._reset_BX:=1]
 | 
				
			||||||
 | 
						    307002 my_tree.fifo_to_tree[1]._reset_BXX[0] : 1  [by my_tree.fifo_to_tree[1].reset_bufarray.buf1._y:=0]
 | 
				
			||||||
 | 
						    307007 my_tree.fifo_to_tree[1].fifo_element[1].reset_buf._y : 0  [by my_tree.fifo_to_tree[1]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    307255 my_tree.fifo_to_tree[4].fifo_element[0]._reset_BX : 1  [by my_tree.fifo_to_tree[4].fifo_element[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    307855 my_tree.fifo_to_tree[1].fifo_element[0].reset_buf._y : 0  [by my_tree.fifo_to_tree[1]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    307856 my_tree.fifo_to_tree[1].fifo_element[0]._reset_BX : 1  [by my_tree.fifo_to_tree[1].fifo_element[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    307898 my_tree.fifo_to_tree[1].fifo_element[1]._reset_BX : 1  [by my_tree.fifo_to_tree[1].fifo_element[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    318805 my_tree.fifo_to_tree[2].fifo_element[0]._reset_BX : 1  [by my_tree.fifo_to_tree[2].fifo_element[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    330987 my_tree.fifo_to_tree[3].fifo_element[1].reset_buf._y : 0  [by my_tree.fifo_to_tree[3]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    331004 my_tree.fifo_to_tree[3].fifo_element[1]._reset_BX : 1  [by my_tree.fifo_to_tree[3].fifo_element[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    338641 my_tree.fifo_to_tree[0]._reset_BXX[0] : 1  [by my_tree.fifo_to_tree[0].reset_bufarray.buf1._y:=0]
 | 
				
			||||||
 | 
						    341214 my_tree.fifo_to_tree[0].fifo_element[0].reset_buf._y : 0  [by my_tree.fifo_to_tree[0]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    341217 my_tree.fifo_to_tree[0].fifo_element[0]._reset_BX : 1  [by my_tree.fifo_to_tree[0].fifo_element[0].reset_buf._y:=0]
 | 
				
			||||||
 | 
						    347002 my_tree.fifo_to_tree[0].fifo_element[1].reset_buf._y : 0  [by my_tree.fifo_to_tree[0]._reset_BXX[0]:=1]
 | 
				
			||||||
 | 
						    347943 my_tree.fifo_to_tree[0].fifo_element[1]._reset_BX : 1  [by my_tree.fifo_to_tree[0].fifo_element[1].reset_buf._y:=0]
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					[1] System reset completed
 | 
				
			||||||
 | 
						    347943 my_tree.in[0].r : 1
 | 
				
			||||||
 | 
						    347943 my_tree.in[4].r : 1
 | 
				
			||||||
 | 
						    347943 my_tree.in[2].r : 1
 | 
				
			||||||
 | 
						    347944 my_tree.fifo_to_tree[4].fifo_element[0].buf_func._y : 0  [by my_tree.in[4].r:=1]
 | 
				
			||||||
 | 
						    347985 my_tree.fifo_to_tree[2].fifo_element[0].buf_func._y : 0  [by my_tree.in[2].r:=1]
 | 
				
			||||||
 | 
						    350761 my_tree.fifo_to_tree[4].fifo_element[1].in.r : 1  [by my_tree.fifo_to_tree[4].fifo_element[0].buf_func._y:=0]
 | 
				
			||||||
 | 
						    350856 my_tree.fifo_to_tree[4].fifo_element[1].buf_func._y : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    350864 my_tree._in[4].r : 1  [by my_tree.fifo_to_tree[4].fifo_element[1].buf_func._y:=0]
 | 
				
			||||||
 | 
						    350898 my_tree.at_cell.arbs[3].arbiter._y2 : 0  [by my_tree._in[4].r:=1]
 | 
				
			||||||
 | 
						    351096 my_tree.fifo_to_tree[4].fifo_element[0].inack_ctl._y : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    351100 my_tree.in[4].a : 1  [by my_tree.fifo_to_tree[4].fifo_element[0].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    351816 my_tree.at_cell.arbs[3]._y2_arb : 1  [by my_tree.at_cell.arbs[3].arbiter._y2:=0]
 | 
				
			||||||
 | 
						    354214 my_tree.at_cell.arbs[3].or_cell._y : 0  [by my_tree.at_cell.arbs[3]._y2_arb:=1]
 | 
				
			||||||
 | 
						    357429 my_tree.out.r : 1  [by my_tree.at_cell.arbs[3].or_cell._y:=0]
 | 
				
			||||||
 | 
						    361718 my_tree.fifo_to_tree[2].fifo_element[1].in.r : 1  [by my_tree.fifo_to_tree[2].fifo_element[0].buf_func._y:=0]
 | 
				
			||||||
 | 
						    361766 my_tree.fifo_to_tree[2].fifo_element[0].inack_ctl._y : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    361769 my_tree.in[2].a : 1  [by my_tree.fifo_to_tree[2].fifo_element[0].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    361947 my_tree.fifo_to_tree[2].fifo_element[0]._en : 0  [by my_tree.in[2].a:=1]
 | 
				
			||||||
 | 
						    364751 my_tree.fifo_to_tree[4].fifo_element[1].inack_ctl._y : 0  [by my_tree._in[4].r:=1]
 | 
				
			||||||
 | 
						    385728 my_tree.fifo_to_tree[4].fifo_element[1].in.a : 1  [by my_tree.fifo_to_tree[4].fifo_element[1].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    391679 my_tree.fifo_to_tree[4].fifo_element[0]._out_a_B : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    397478 my_tree.fifo_to_tree[4].fifo_element[0]._en : 0  [by my_tree.in[4].a:=1]
 | 
				
			||||||
 | 
						    397627 my_tree.fifo_to_tree[4].fifo_element[1]._en : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    406905 my_tree.fifo_to_tree[0].fifo_element[0].buf_func._y : 0  [by my_tree.in[0].r:=1]
 | 
				
			||||||
 | 
						    407732 my_tree.fifo_to_tree[0].fifo_element[1].in.r : 1  [by my_tree.fifo_to_tree[0].fifo_element[0].buf_func._y:=0]
 | 
				
			||||||
 | 
						    407905 my_tree.fifo_to_tree[0].fifo_element[1].buf_func._y : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    407906 my_tree._in[0].r : 1  [by my_tree.fifo_to_tree[0].fifo_element[1].buf_func._y:=0]
 | 
				
			||||||
 | 
						    407910 my_tree.fifo_to_tree[0].fifo_element[1].inack_ctl._y : 0  [by my_tree._in[0].r:=1]
 | 
				
			||||||
 | 
						    407916 my_tree.fifo_to_tree[0].fifo_element[0].inack_ctl._y : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    407979 my_tree.at_cell.arbs[0].arbiter._y1 : 0  [by my_tree._in[0].r:=1]
 | 
				
			||||||
 | 
						    408012 my_tree.in[0].a : 1  [by my_tree.fifo_to_tree[0].fifo_element[0].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    408013 my_tree.fifo_to_tree[0].fifo_element[0]._en : 0  [by my_tree.in[0].a:=1]
 | 
				
			||||||
 | 
						    408115 my_tree.at_cell.arbs[0]._y1_arb : 1  [by my_tree.at_cell.arbs[0].arbiter._y1:=0]
 | 
				
			||||||
 | 
						    408837 my_tree.fifo_to_tree[2].fifo_element[1].buf_func._y : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].in.r:=1]
 | 
				
			||||||
 | 
						    409078 my_tree._in[2].r : 1  [by my_tree.fifo_to_tree[2].fifo_element[1].buf_func._y:=0]
 | 
				
			||||||
 | 
						    409090 my_tree.fifo_to_tree[2].fifo_element[1].inack_ctl._y : 0  [by my_tree._in[2].r:=1]
 | 
				
			||||||
 | 
						    412990 my_tree.fifo_to_tree[2].fifo_element[1].in.a : 1  [by my_tree.fifo_to_tree[2].fifo_element[1].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    412991 my_tree.fifo_to_tree[2].fifo_element[0]._out_a_B : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    413037 my_tree.at_cell.arbs[1].arbiter._y1 : 0  [by my_tree._in[2].r:=1]
 | 
				
			||||||
 | 
						    413047 my_tree.fifo_to_tree[2].fifo_element[0].buf_func._y : 1  [by my_tree.fifo_to_tree[2].fifo_element[0]._out_a_B:=0]
 | 
				
			||||||
 | 
						    413048 my_tree.fifo_to_tree[2].fifo_element[1].in.r : 0  [by my_tree.fifo_to_tree[2].fifo_element[0].buf_func._y:=1]
 | 
				
			||||||
 | 
						    414019 my_tree.fifo_to_tree[2].fifo_element[1]._en : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    414056 my_tree.fifo_to_tree[2].fifo_element[1].inack_ctl._y : 1  [by my_tree.fifo_to_tree[2].fifo_element[1]._en:=0]
 | 
				
			||||||
 | 
						    427161 my_tree.at_cell.arbs[0].or_cell._y : 0  [by my_tree.at_cell.arbs[0]._y1_arb:=1]
 | 
				
			||||||
 | 
						    427162 my_tree.at_cell.tmp[5].r : 1  [by my_tree.at_cell.arbs[0].or_cell._y:=0]
 | 
				
			||||||
 | 
						    430726 my_tree.at_cell.arbs[2].arbiter._y1 : 0  [by my_tree.at_cell.tmp[5].r:=1]
 | 
				
			||||||
 | 
						    432418 my_tree.at_cell.arbs[2]._y1_arb : 1  [by my_tree.at_cell.arbs[2].arbiter._y1:=0]
 | 
				
			||||||
 | 
						    432431 my_tree.at_cell.arbs[2].or_cell._y : 0  [by my_tree.at_cell.arbs[2]._y1_arb:=1]
 | 
				
			||||||
 | 
						    436963 my_tree.fifo_to_tree[4].fifo_element[0].buf_func._y : 1  [by my_tree.fifo_to_tree[4].fifo_element[0]._en:=0]
 | 
				
			||||||
 | 
						    437320 my_tree.fifo_to_tree[4].fifo_element[1].in.r : 0  [by my_tree.fifo_to_tree[4].fifo_element[0].buf_func._y:=1]
 | 
				
			||||||
 | 
						    437345 my_tree.fifo_to_tree[4].fifo_element[1].inack_ctl._y : 1  [by my_tree.fifo_to_tree[4].fifo_element[1].in.r:=0]
 | 
				
			||||||
 | 
						    437366 my_tree.fifo_to_tree[4].fifo_element[1].in.a : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].inack_ctl._y:=1]
 | 
				
			||||||
 | 
						    437367 my_tree.fifo_to_tree[4].fifo_element[0]._out_a_B : 1  [by my_tree.fifo_to_tree[4].fifo_element[1].in.a:=0]
 | 
				
			||||||
 | 
						    437431 my_tree.fifo_to_tree[2].fifo_element[1].in.a : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].inack_ctl._y:=1]
 | 
				
			||||||
 | 
						    445198 my_tree.fifo_to_tree[0].fifo_element[1].in.a : 1  [by my_tree.fifo_to_tree[0].fifo_element[1].inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    445199 my_tree.fifo_to_tree[0].fifo_element[1]._en : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    445199 my_tree.fifo_to_tree[0].fifo_element[0]._out_a_B : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].in.a:=1]
 | 
				
			||||||
 | 
						    445360 my_tree.fifo_to_tree[0].fifo_element[0].buf_func._y : 1  [by my_tree.fifo_to_tree[0].fifo_element[0]._out_a_B:=0]
 | 
				
			||||||
 | 
						    446397 my_tree.fifo_to_tree[0].fifo_element[1].in.r : 0  [by my_tree.fifo_to_tree[0].fifo_element[0].buf_func._y:=1]
 | 
				
			||||||
 | 
						    446402 my_tree.fifo_to_tree[0].fifo_element[1].inack_ctl._y : 1  [by my_tree.fifo_to_tree[0].fifo_element[1].in.r:=0]
 | 
				
			||||||
 | 
						    446983 my_tree.fifo_to_tree[0].fifo_element[1].in.a : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].inack_ctl._y:=1]
 | 
				
			||||||
 | 
						    447079 my_tree.fifo_to_tree[2].fifo_element[0]._out_a_B : 1  [by my_tree.fifo_to_tree[2].fifo_element[1].in.a:=0]
 | 
				
			||||||
 | 
						    447391 my_tree.fifo_to_tree[0].fifo_element[0]._out_a_B : 1  [by my_tree.fifo_to_tree[0].fifo_element[1].in.a:=0]
 | 
				
			||||||
 | 
						    449415 my_tree.at_cell.tmp[8].r : 1  [by my_tree.at_cell.arbs[2].or_cell._y:=0]
 | 
				
			||||||
 | 
						    458043 my_tree.at_cell.arbs[1]._y1_arb : 1  [by my_tree.at_cell.arbs[1].arbiter._y1:=0]
 | 
				
			||||||
 | 
						    458054 my_tree.at_cell.arbs[1].or_cell._y : 0  [by my_tree.at_cell.arbs[1]._y1_arb:=1]
 | 
				
			||||||
 | 
						    459101 my_tree.at_cell.tmp[6].r : 1  [by my_tree.at_cell.arbs[1].or_cell._y:=0]
 | 
				
			||||||
 | 
						    459101 my_tree.out.a : 1
 | 
				
			||||||
 | 
						    459115 my_tree.at_cell.arbs[3].ack_cell2._y : 0  [by my_tree.out.a:=1]
 | 
				
			||||||
 | 
						    459133 my_tree._in[4].a : 1  [by my_tree.at_cell.arbs[3].ack_cell2._y:=0]
 | 
				
			||||||
 | 
						    459137 my_tree.fifo_to_tree[4].fifo_element[1]._out_a_B : 0  [by my_tree._in[4].a:=1]
 | 
				
			||||||
 | 
						    459241 my_tree.fifo_to_tree[4].fifo_element[1].buf_func._y : 1  [by my_tree.fifo_to_tree[4].fifo_element[1]._out_a_B:=0]
 | 
				
			||||||
 | 
						    490685 my_tree._in[4].r : 0  [by my_tree.fifo_to_tree[4].fifo_element[1].buf_func._y:=1]
 | 
				
			||||||
 | 
						    491889 my_tree.at_cell.arbs[3].arbiter._y2 : 1  [by my_tree._in[4].r:=0]
 | 
				
			||||||
 | 
						    492117 my_tree.at_cell.arbs[3].arbiter._y1 : 0  [by my_tree.at_cell.arbs[3].arbiter._y2:=1]
 | 
				
			||||||
 | 
						    492732 my_tree.at_cell.arbs[3]._y2_arb : 0  [by my_tree.at_cell.arbs[3].arbiter._y2:=1]
 | 
				
			||||||
 | 
						    494191 my_tree.at_cell.arbs[3].or_cell._y : 1  [by my_tree.at_cell.arbs[3]._y2_arb:=0]
 | 
				
			||||||
 | 
						    494261 my_tree.out.r : 0  [by my_tree.at_cell.arbs[3].or_cell._y:=1]
 | 
				
			||||||
 | 
						    499140 my_tree.fifo_to_tree[4].fifo_element[1]._en : 1  [by my_tree._in[4].r:=0]
 | 
				
			||||||
 | 
						    499140 my_tree.out.a : 0
 | 
				
			||||||
 | 
						    549562 my_tree.at_cell.arbs[3].ack_cell2._y : 1  [by my_tree.out.a:=0]
 | 
				
			||||||
 | 
						    549573 my_tree._in[4].a : 0  [by my_tree.at_cell.arbs[3].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    549576 my_tree.at_cell.arbs[3]._y1_arb : 1  [by my_tree._in[4].a:=0]
 | 
				
			||||||
 | 
						    549627 my_tree.fifo_to_tree[4].fifo_element[1]._out_a_B : 1  [by my_tree._in[4].a:=0]
 | 
				
			||||||
 | 
						    550724 my_tree.at_cell.arbs[3].or_cell._y : 0  [by my_tree.at_cell.arbs[3]._y1_arb:=1]
 | 
				
			||||||
 | 
						    551885 my_tree.out.r : 1  [by my_tree.at_cell.arbs[3].or_cell._y:=0]
 | 
				
			||||||
 | 
						    551885 my_tree.out.a : 1
 | 
				
			||||||
 | 
						    560537 my_tree.at_cell.arbs[3].ack_cell1._y : 0  [by my_tree.out.a:=1]
 | 
				
			||||||
 | 
						    560618 my_tree.at_cell.tmp[8].a : 1  [by my_tree.at_cell.arbs[3].ack_cell1._y:=0]
 | 
				
			||||||
 | 
						    571695 my_tree.at_cell.arbs[2].ack_cell1._y : 0  [by my_tree.at_cell.tmp[8].a:=1]
 | 
				
			||||||
 | 
						    589678 my_tree.at_cell.tmp[5].a : 1  [by my_tree.at_cell.arbs[2].ack_cell1._y:=0]
 | 
				
			||||||
 | 
						    589770 my_tree.at_cell.arbs[0].ack_cell1._y : 0  [by my_tree.at_cell.tmp[5].a:=1]
 | 
				
			||||||
 | 
						    598081 my_tree._in[0].a : 1  [by my_tree.at_cell.arbs[0].ack_cell1._y:=0]
 | 
				
			||||||
 | 
						    599825 my_tree.fifo_to_tree[0].fifo_element[1]._out_a_B : 0  [by my_tree._in[0].a:=1]
 | 
				
			||||||
 | 
						    600438 my_tree.fifo_to_tree[0].fifo_element[1].buf_func._y : 1  [by my_tree.fifo_to_tree[0].fifo_element[1]._out_a_B:=0]
 | 
				
			||||||
 | 
						    614460 my_tree._in[0].r : 0  [by my_tree.fifo_to_tree[0].fifo_element[1].buf_func._y:=1]
 | 
				
			||||||
 | 
						    614505 my_tree.at_cell.arbs[0].arbiter._y1 : 1  [by my_tree._in[0].r:=0]
 | 
				
			||||||
 | 
						    615457 my_tree.fifo_to_tree[0].fifo_element[1]._en : 1  [by my_tree._in[0].r:=0]
 | 
				
			||||||
 | 
						    616154 my_tree.at_cell.arbs[0]._y1_arb : 0  [by my_tree.at_cell.arbs[0].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    616679 my_tree.at_cell.arbs[0].or_cell._y : 1  [by my_tree.at_cell.arbs[0]._y1_arb:=0]
 | 
				
			||||||
 | 
						    617579 my_tree.at_cell.tmp[5].r : 0  [by my_tree.at_cell.arbs[0].or_cell._y:=1]
 | 
				
			||||||
 | 
						    617631 my_tree.at_cell.arbs[2].arbiter._y1 : 1  [by my_tree.at_cell.tmp[5].r:=0]
 | 
				
			||||||
 | 
						    617638 my_tree.at_cell.arbs[2].arbiter._y2 : 0  [by my_tree.at_cell.arbs[2].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    633243 my_tree.at_cell.arbs[2]._y1_arb : 0  [by my_tree.at_cell.arbs[2].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    639710 my_tree.at_cell.arbs[2].or_cell._y : 1  [by my_tree.at_cell.arbs[2]._y1_arb:=0]
 | 
				
			||||||
 | 
						    639712 my_tree.at_cell.tmp[8].r : 0  [by my_tree.at_cell.arbs[2].or_cell._y:=1]
 | 
				
			||||||
 | 
						    640066 my_tree.at_cell.arbs[3].arbiter._y1 : 1  [by my_tree.at_cell.tmp[8].r:=0]
 | 
				
			||||||
 | 
						    640199 my_tree.at_cell.arbs[3]._y1_arb : 0  [by my_tree.at_cell.arbs[3].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    640200 my_tree.at_cell.arbs[3].or_cell._y : 1  [by my_tree.at_cell.arbs[3]._y1_arb:=0]
 | 
				
			||||||
 | 
						    640204 my_tree.out.r : 0  [by my_tree.at_cell.arbs[3].or_cell._y:=1]
 | 
				
			||||||
 | 
						    640204 my_tree.out.a : 0
 | 
				
			||||||
 | 
						    640750 my_tree.at_cell.arbs[3].ack_cell1._y : 1  [by my_tree.out.a:=0]
 | 
				
			||||||
 | 
						    686313 my_tree.at_cell.tmp[8].a : 0  [by my_tree.at_cell.arbs[3].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    686314 my_tree.at_cell.arbs[2].ack_cell1._y : 1  [by my_tree.at_cell.tmp[8].a:=0]
 | 
				
			||||||
 | 
						    698692 my_tree.at_cell.tmp[5].a : 0  [by my_tree.at_cell.arbs[2].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    698771 my_tree.at_cell.arbs[2]._y2_arb : 1  [by my_tree.at_cell.tmp[5].a:=0]
 | 
				
			||||||
 | 
						    698859 my_tree.at_cell.arbs[2].or_cell._y : 0  [by my_tree.at_cell.arbs[2]._y2_arb:=1]
 | 
				
			||||||
 | 
						    701125 my_tree.at_cell.arbs[0].ack_cell1._y : 1  [by my_tree.at_cell.tmp[5].a:=0]
 | 
				
			||||||
 | 
						    706641 my_tree.at_cell.tmp[8].r : 1  [by my_tree.at_cell.arbs[2].or_cell._y:=0]
 | 
				
			||||||
 | 
						    706700 my_tree.at_cell.arbs[3].arbiter._y1 : 0  [by my_tree.at_cell.tmp[8].r:=1]
 | 
				
			||||||
 | 
						    706730 my_tree.at_cell.arbs[3]._y1_arb : 1  [by my_tree.at_cell.arbs[3].arbiter._y1:=0]
 | 
				
			||||||
 | 
						    708197 my_tree.at_cell.arbs[3].or_cell._y : 0  [by my_tree.at_cell.arbs[3]._y1_arb:=1]
 | 
				
			||||||
 | 
						    729452 my_tree._in[0].a : 0  [by my_tree.at_cell.arbs[0].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    748836 my_tree.fifo_to_tree[0].fifo_element[1]._out_a_B : 1  [by my_tree._in[0].a:=0]
 | 
				
			||||||
 | 
						    767701 my_tree.out.r : 1  [by my_tree.at_cell.arbs[3].or_cell._y:=0]
 | 
				
			||||||
 | 
						    767701 my_tree.out.a : 1
 | 
				
			||||||
 | 
						    768386 my_tree.at_cell.arbs[3].ack_cell1._y : 0  [by my_tree.out.a:=1]
 | 
				
			||||||
 | 
						    785101 my_tree.at_cell.tmp[8].a : 1  [by my_tree.at_cell.arbs[3].ack_cell1._y:=0]
 | 
				
			||||||
 | 
						    785228 my_tree.at_cell.arbs[2].ack_cell2._y : 0  [by my_tree.at_cell.tmp[8].a:=1]
 | 
				
			||||||
 | 
						    785397 my_tree.at_cell.tmp[6].a : 1  [by my_tree.at_cell.arbs[2].ack_cell2._y:=0]
 | 
				
			||||||
 | 
						    785440 my_tree.at_cell.arbs[1].ack_cell1._y : 0  [by my_tree.at_cell.tmp[6].a:=1]
 | 
				
			||||||
 | 
						    785452 my_tree._in[2].a : 1  [by my_tree.at_cell.arbs[1].ack_cell1._y:=0]
 | 
				
			||||||
 | 
						    786731 my_tree.fifo_to_tree[2].fifo_element[1]._out_a_B : 0  [by my_tree._in[2].a:=1]
 | 
				
			||||||
 | 
						    786964 my_tree.fifo_to_tree[2].fifo_element[1].buf_func._y : 1  [by my_tree.fifo_to_tree[2].fifo_element[1]._out_a_B:=0]
 | 
				
			||||||
 | 
						    786967 my_tree._in[2].r : 0  [by my_tree.fifo_to_tree[2].fifo_element[1].buf_func._y:=1]
 | 
				
			||||||
 | 
						    786968 my_tree.fifo_to_tree[2].fifo_element[1]._en : 1  [by my_tree._in[2].r:=0]
 | 
				
			||||||
 | 
						    787005 my_tree.at_cell.arbs[1].arbiter._y1 : 1  [by my_tree._in[2].r:=0]
 | 
				
			||||||
 | 
						    799757 my_tree.at_cell.arbs[1]._y1_arb : 0  [by my_tree.at_cell.arbs[1].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    799849 my_tree.at_cell.arbs[1].or_cell._y : 1  [by my_tree.at_cell.arbs[1]._y1_arb:=0]
 | 
				
			||||||
 | 
						    802576 my_tree.at_cell.tmp[6].r : 0  [by my_tree.at_cell.arbs[1].or_cell._y:=1]
 | 
				
			||||||
 | 
						    802578 my_tree.at_cell.arbs[2].arbiter._y2 : 1  [by my_tree.at_cell.tmp[6].r:=0]
 | 
				
			||||||
 | 
						    802579 my_tree.at_cell.arbs[2]._y2_arb : 0  [by my_tree.at_cell.arbs[2].arbiter._y2:=1]
 | 
				
			||||||
 | 
						    804080 my_tree.at_cell.arbs[2].or_cell._y : 1  [by my_tree.at_cell.arbs[2]._y2_arb:=0]
 | 
				
			||||||
 | 
						    804082 my_tree.at_cell.tmp[8].r : 0  [by my_tree.at_cell.arbs[2].or_cell._y:=1]
 | 
				
			||||||
 | 
						    804100 my_tree.at_cell.arbs[3].arbiter._y1 : 1  [by my_tree.at_cell.tmp[8].r:=0]
 | 
				
			||||||
 | 
						    804219 my_tree.at_cell.arbs[3]._y1_arb : 0  [by my_tree.at_cell.arbs[3].arbiter._y1:=1]
 | 
				
			||||||
 | 
						    809939 my_tree.at_cell.arbs[3].or_cell._y : 1  [by my_tree.at_cell.arbs[3]._y1_arb:=0]
 | 
				
			||||||
 | 
						    809947 my_tree.out.r : 0  [by my_tree.at_cell.arbs[3].or_cell._y:=1]
 | 
				
			||||||
 | 
						    809947 my_tree.out.a : 0
 | 
				
			||||||
 | 
						    810001 my_tree.at_cell.arbs[3].ack_cell1._y : 1  [by my_tree.out.a:=0]
 | 
				
			||||||
 | 
						    860539 my_tree.at_cell.tmp[8].a : 0  [by my_tree.at_cell.arbs[3].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    860544 my_tree.at_cell.arbs[2].ack_cell2._y : 1  [by my_tree.at_cell.tmp[8].a:=0]
 | 
				
			||||||
 | 
						    861611 my_tree.at_cell.tmp[6].a : 0  [by my_tree.at_cell.arbs[2].ack_cell2._y:=1]
 | 
				
			||||||
 | 
						    861612 my_tree.at_cell.arbs[1].ack_cell1._y : 1  [by my_tree.at_cell.tmp[6].a:=0]
 | 
				
			||||||
 | 
						    861750 my_tree._in[2].a : 0  [by my_tree.at_cell.arbs[1].ack_cell1._y:=1]
 | 
				
			||||||
 | 
						    861751 my_tree.fifo_to_tree[2].fifo_element[1]._out_a_B : 1  [by my_tree._in[2].a:=0]
 | 
				
			||||||
 | 
					-------------------------------------------------
 | 
				
			||||||
 | 
					[3] Sent three inputs, received 3 outputs
 | 
				
			||||||
							
								
								
									
										1085
									
								
								test/unit_tests/arbiter_tree_test/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1085
									
								
								test/unit_tests/arbiter_tree_test/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										64
									
								
								test/unit_tests/arbiter_tree_test/test.act
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								test/unit_tests/arbiter_tree_test/test.act
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					/*************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  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/primitives.act";
 | 
				
			||||||
 | 
					import "../../dataflow_neuro/coders.act";
 | 
				
			||||||
 | 
					import globals;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					open tmpl::dataflow_neuro;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defproc arbiter_treee (a1of1 in[5]; a1of1 out)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    //Low active Reset
 | 
				
			||||||
 | 
					    bool _reset_B;
 | 
				
			||||||
 | 
					    prs {
 | 
				
			||||||
 | 
					        Reset => _reset_B-
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a1of1 _in[5];
 | 
				
			||||||
 | 
					    power _supply;
 | 
				
			||||||
 | 
					    _supply.vdd = Vdd;
 | 
				
			||||||
 | 
					    _supply.vss = GND;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fifo_t<2> fifo_to_tree[5];
 | 
				
			||||||
 | 
					    (i:5:
 | 
				
			||||||
 | 
					        fifo_to_tree[i].in = in[i];
 | 
				
			||||||
 | 
					        fifo_to_tree[i].out = _in[i];
 | 
				
			||||||
 | 
					        fifo_to_tree[i].supply = _supply;
 | 
				
			||||||
 | 
					        fifo_to_tree[i].reset_B = _reset_B;
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    arbtree<5> at_cell(.in=_in, .out = out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    at_cell.supply = _supply;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					arbiter_treee my_tree;
 | 
				
			||||||
							
								
								
									
										64
									
								
								test/unit_tests/arbiter_tree_test/test.prsim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								test/unit_tests/arbiter_tree_test/test.prsim
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					watchall
 | 
				
			||||||
 | 
					set Reset 1
 | 
				
			||||||
 | 
					set my_tree.in[0].r 0
 | 
				
			||||||
 | 
					set my_tree.in[1].r 0
 | 
				
			||||||
 | 
					set my_tree.in[2].r 0
 | 
				
			||||||
 | 
					set my_tree.in[3].r 0
 | 
				
			||||||
 | 
					set my_tree.in[4].r 0
 | 
				
			||||||
 | 
					set my_tree.out.a 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.in[0].a 0
 | 
				
			||||||
 | 
					assert my_tree.in[1].a 0
 | 
				
			||||||
 | 
					assert my_tree.in[2].a 0
 | 
				
			||||||
 | 
					assert my_tree.in[3].a 0
 | 
				
			||||||
 | 
					assert my_tree.in[4].a 0
 | 
				
			||||||
 | 
					assert my_tree.out.r 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '-------------------------------------------------'"
 | 
				
			||||||
 | 
					system "echo '[0] System initialized'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set Reset 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					system "echo '-------------------------------------------------'"
 | 
				
			||||||
 | 
					system "echo '[1] System reset completed'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set my_tree.in[0].r 1
 | 
				
			||||||
 | 
					set my_tree.in[2].r 1
 | 
				
			||||||
 | 
					set my_tree.in[4].r 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 1
 | 
				
			||||||
 | 
					set my_tree.out.a 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 0
 | 
				
			||||||
 | 
					set my_tree.out.a 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 1
 | 
				
			||||||
 | 
					set my_tree.out.a 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 0
 | 
				
			||||||
 | 
					set my_tree.out.a 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 1
 | 
				
			||||||
 | 
					set my_tree.out.a 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert my_tree.out.r 0
 | 
				
			||||||
 | 
					set my_tree.out.a 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '-------------------------------------------------'"
 | 
				
			||||||
 | 
					system "echo '[3] Sent three inputs, received 3 outputs'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										85
									
								
								test/unit_tests/arbtree_5/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								test/unit_tests/arbtree_5/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					t.in[0] t.out t.in[2] t.in[3] t.at.tmp[6] t.at.tmp[5] t.at.tmp[8] t.in[4] t.at.arbs[1]._y t.in[1] t.at.arbs[2]._y t.at.arbs[3]._y t.at.arbs[0]._y 
 | 
				
			||||||
 | 
					0
 | 
				
			||||||
 | 
					1
 | 
				
			||||||
 | 
						         0 t.in[0] : 0
 | 
				
			||||||
 | 
						         0 t.in[4] : 0
 | 
				
			||||||
 | 
						         0 t.in[3] : 0
 | 
				
			||||||
 | 
						         0 t.in[2] : 0
 | 
				
			||||||
 | 
						         0 t.in[1] : 0
 | 
				
			||||||
 | 
						         1 t.at.arbs[1]._y : 1  [by t.in[2]:=0]
 | 
				
			||||||
 | 
						      7092 t.at.arbs[0]._y : 1  [by t.in[1]:=0]
 | 
				
			||||||
 | 
						      7094 t.at.tmp[5] : 0  [by t.at.arbs[0]._y:=1]
 | 
				
			||||||
 | 
						     10468 t.at.tmp[6] : 0  [by t.at.arbs[1]._y:=1]
 | 
				
			||||||
 | 
						     15221 t.at.arbs[2]._y : 1  [by t.at.tmp[6]:=0]
 | 
				
			||||||
 | 
						     16358 t.at.tmp[8] : 0  [by t.at.arbs[2]._y:=1]
 | 
				
			||||||
 | 
						     16472 t.at.arbs[3]._y : 1  [by t.at.tmp[8]:=0]
 | 
				
			||||||
 | 
						     81838 t.out : 0  [by t.at.arbs[3]._y:=1]
 | 
				
			||||||
 | 
					[] setting all low
 | 
				
			||||||
 | 
					[] setting bit 0 high
 | 
				
			||||||
 | 
						     81838 t.in[0] : 1
 | 
				
			||||||
 | 
						     83564 t.at.arbs[0]._y : 0  [by t.in[0]:=1]
 | 
				
			||||||
 | 
						     83603 t.at.tmp[5] : 1  [by t.at.arbs[0]._y:=0]
 | 
				
			||||||
 | 
						     83618 t.at.arbs[2]._y : 0  [by t.at.tmp[5]:=1]
 | 
				
			||||||
 | 
						     84109 t.at.tmp[8] : 1  [by t.at.arbs[2]._y:=0]
 | 
				
			||||||
 | 
						     84122 t.at.arbs[3]._y : 0  [by t.at.tmp[8]:=1]
 | 
				
			||||||
 | 
						     84162 t.out : 1  [by t.at.arbs[3]._y:=0]
 | 
				
			||||||
 | 
					[] setting all low
 | 
				
			||||||
 | 
						     84162 t.in[0] : 0
 | 
				
			||||||
 | 
						     84577 t.at.arbs[0]._y : 1  [by t.in[0]:=0]
 | 
				
			||||||
 | 
						     84597 t.at.tmp[5] : 0  [by t.at.arbs[0]._y:=1]
 | 
				
			||||||
 | 
						     90658 t.at.arbs[2]._y : 1  [by t.at.tmp[5]:=0]
 | 
				
			||||||
 | 
						     90705 t.at.tmp[8] : 0  [by t.at.arbs[2]._y:=1]
 | 
				
			||||||
 | 
						     90721 t.at.arbs[3]._y : 1  [by t.at.tmp[8]:=0]
 | 
				
			||||||
 | 
						    134819 t.out : 0  [by t.at.arbs[3]._y:=1]
 | 
				
			||||||
 | 
					[] setting bit 1 high
 | 
				
			||||||
 | 
						    134819 t.in[1] : 1
 | 
				
			||||||
 | 
						    148543 t.at.arbs[0]._y : 0  [by t.in[1]:=1]
 | 
				
			||||||
 | 
						    148547 t.at.tmp[5] : 1  [by t.at.arbs[0]._y:=0]
 | 
				
			||||||
 | 
						    157676 t.at.arbs[2]._y : 0  [by t.at.tmp[5]:=1]
 | 
				
			||||||
 | 
						    157691 t.at.tmp[8] : 1  [by t.at.arbs[2]._y:=0]
 | 
				
			||||||
 | 
						    200939 t.at.arbs[3]._y : 0  [by t.at.tmp[8]:=1]
 | 
				
			||||||
 | 
						    237870 t.out : 1  [by t.at.arbs[3]._y:=0]
 | 
				
			||||||
 | 
					[] setting all low
 | 
				
			||||||
 | 
						    237870 t.in[1] : 0
 | 
				
			||||||
 | 
						    237925 t.at.arbs[0]._y : 1  [by t.in[1]:=0]
 | 
				
			||||||
 | 
						    289578 t.at.tmp[5] : 0  [by t.at.arbs[0]._y:=1]
 | 
				
			||||||
 | 
						    319358 t.at.arbs[2]._y : 1  [by t.at.tmp[5]:=0]
 | 
				
			||||||
 | 
						    333207 t.at.tmp[8] : 0  [by t.at.arbs[2]._y:=1]
 | 
				
			||||||
 | 
						    358019 t.at.arbs[3]._y : 1  [by t.at.tmp[8]:=0]
 | 
				
			||||||
 | 
						    372362 t.out : 0  [by t.at.arbs[3]._y:=1]
 | 
				
			||||||
 | 
					[] setting bit 2 high
 | 
				
			||||||
 | 
						    372362 t.in[2] : 1
 | 
				
			||||||
 | 
						    372784 t.at.arbs[1]._y : 0  [by t.in[2]:=1]
 | 
				
			||||||
 | 
						    421498 t.at.tmp[6] : 1  [by t.at.arbs[1]._y:=0]
 | 
				
			||||||
 | 
						    421499 t.at.arbs[2]._y : 0  [by t.at.tmp[6]:=1]
 | 
				
			||||||
 | 
						    421500 t.at.tmp[8] : 1  [by t.at.arbs[2]._y:=0]
 | 
				
			||||||
 | 
						    441705 t.at.arbs[3]._y : 0  [by t.at.tmp[8]:=1]
 | 
				
			||||||
 | 
						    441987 t.out : 1  [by t.at.arbs[3]._y:=0]
 | 
				
			||||||
 | 
					[] setting all low
 | 
				
			||||||
 | 
						    441987 t.in[2] : 0
 | 
				
			||||||
 | 
						    442755 t.at.arbs[1]._y : 1  [by t.in[2]:=0]
 | 
				
			||||||
 | 
						    442758 t.at.tmp[6] : 0  [by t.at.arbs[1]._y:=1]
 | 
				
			||||||
 | 
						    465199 t.at.arbs[2]._y : 1  [by t.at.tmp[6]:=0]
 | 
				
			||||||
 | 
						    465750 t.at.tmp[8] : 0  [by t.at.arbs[2]._y:=1]
 | 
				
			||||||
 | 
						    466821 t.at.arbs[3]._y : 1  [by t.at.tmp[8]:=0]
 | 
				
			||||||
 | 
						    467775 t.out : 0  [by t.at.arbs[3]._y:=1]
 | 
				
			||||||
 | 
					[] setting bit 3 high
 | 
				
			||||||
 | 
						    467775 t.in[3] : 1
 | 
				
			||||||
 | 
						    468856 t.at.arbs[1]._y : 0  [by t.in[3]:=1]
 | 
				
			||||||
 | 
						    523326 t.at.tmp[6] : 1  [by t.at.arbs[1]._y:=0]
 | 
				
			||||||
 | 
						    524308 t.at.arbs[2]._y : 0  [by t.at.tmp[6]:=1]
 | 
				
			||||||
 | 
						    524326 t.at.tmp[8] : 1  [by t.at.arbs[2]._y:=0]
 | 
				
			||||||
 | 
						    528339 t.at.arbs[3]._y : 0  [by t.at.tmp[8]:=1]
 | 
				
			||||||
 | 
						    532342 t.out : 1  [by t.at.arbs[3]._y:=0]
 | 
				
			||||||
 | 
					[] setting all low
 | 
				
			||||||
 | 
						    532342 t.in[3] : 0
 | 
				
			||||||
 | 
						    577243 t.at.arbs[1]._y : 1  [by t.in[3]:=0]
 | 
				
			||||||
 | 
						    598827 t.at.tmp[6] : 0  [by t.at.arbs[1]._y:=1]
 | 
				
			||||||
 | 
						    603587 t.at.arbs[2]._y : 1  [by t.at.tmp[6]:=0]
 | 
				
			||||||
 | 
						    604089 t.at.tmp[8] : 0  [by t.at.arbs[2]._y:=1]
 | 
				
			||||||
 | 
						    604292 t.at.arbs[3]._y : 1  [by t.at.tmp[8]:=0]
 | 
				
			||||||
 | 
						    606146 t.out : 0  [by t.at.arbs[3]._y:=1]
 | 
				
			||||||
 | 
					[] setting bit 4 high
 | 
				
			||||||
 | 
						    606146 t.in[4] : 1
 | 
				
			||||||
 | 
						    606285 t.at.arbs[3]._y : 0  [by t.in[4]:=1]
 | 
				
			||||||
 | 
						    642631 t.out : 1  [by t.at.arbs[3]._y:=0]
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								test/unit_tests/arbtree_5/run/prsim.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/unit_tests/arbtree_5/run/prsim.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										55
									
								
								test/unit_tests/arbtree_5/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								test/unit_tests/arbtree_5/run/test.prs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					= "GND" "GND"
 | 
				
			||||||
 | 
					= "Vdd" "Vdd"
 | 
				
			||||||
 | 
					= "Reset" "Reset"
 | 
				
			||||||
 | 
					"t.at.arbs[0].a"|"t.at.arbs[0].b"->"t.at.arbs[0]._y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[0].a"|"t.at.arbs[0].b")->"t.at.arbs[0]._y"+
 | 
				
			||||||
 | 
					"t.at.arbs[0]._y"->"t.at.arbs[0].y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[0]._y")->"t.at.arbs[0].y"+
 | 
				
			||||||
 | 
					"t.at.arbs[1].a"|"t.at.arbs[1].b"->"t.at.arbs[1]._y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[1].a"|"t.at.arbs[1].b")->"t.at.arbs[1]._y"+
 | 
				
			||||||
 | 
					"t.at.arbs[1]._y"->"t.at.arbs[1].y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[1]._y")->"t.at.arbs[1].y"+
 | 
				
			||||||
 | 
					"t.at.arbs[2].a"|"t.at.arbs[2].b"->"t.at.arbs[2]._y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[2].a"|"t.at.arbs[2].b")->"t.at.arbs[2]._y"+
 | 
				
			||||||
 | 
					"t.at.arbs[2]._y"->"t.at.arbs[2].y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[2]._y")->"t.at.arbs[2].y"+
 | 
				
			||||||
 | 
					"t.at.arbs[3].a"|"t.at.arbs[3].b"->"t.at.arbs[3]._y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[3].a"|"t.at.arbs[3].b")->"t.at.arbs[3]._y"+
 | 
				
			||||||
 | 
					"t.at.arbs[3]._y"->"t.at.arbs[3].y"-
 | 
				
			||||||
 | 
					~("t.at.arbs[3]._y")->"t.at.arbs[3].y"+
 | 
				
			||||||
 | 
					= "t.at.tmp[5]" "t.at.arbs[2].a"
 | 
				
			||||||
 | 
					= "t.at.tmp[5]" "t.at.arbs[0].y"
 | 
				
			||||||
 | 
					= "t.at.tmp[6]" "t.at.arbs[2].b"
 | 
				
			||||||
 | 
					= "t.at.tmp[6]" "t.at.arbs[1].y"
 | 
				
			||||||
 | 
					= "t.at.tmp[8]" "t.at.arbs[3].a"
 | 
				
			||||||
 | 
					= "t.at.tmp[8]" "t.at.arbs[2].y"
 | 
				
			||||||
 | 
					= "t.at.supply.vdd" "t.at.arbs[3].vdd"
 | 
				
			||||||
 | 
					= "t.at.supply.vdd" "t.at.arbs[2].vdd"
 | 
				
			||||||
 | 
					= "t.at.supply.vdd" "t.at.arbs[1].vdd"
 | 
				
			||||||
 | 
					= "t.at.supply.vdd" "t.at.arbs[0].vdd"
 | 
				
			||||||
 | 
					= "t.at.supply.vss" "t.at.arbs[3].vss"
 | 
				
			||||||
 | 
					= "t.at.supply.vss" "t.at.arbs[2].vss"
 | 
				
			||||||
 | 
					= "t.at.supply.vss" "t.at.arbs[1].vss"
 | 
				
			||||||
 | 
					= "t.at.supply.vss" "t.at.arbs[0].vss"
 | 
				
			||||||
 | 
					= "t.at.in[0]" "t.at.arbs[0].a"
 | 
				
			||||||
 | 
					= "t.at.in[0]" "t.at.tmp[0]"
 | 
				
			||||||
 | 
					= "t.at.in[1]" "t.at.arbs[0].b"
 | 
				
			||||||
 | 
					= "t.at.in[1]" "t.at.tmp[1]"
 | 
				
			||||||
 | 
					= "t.at.in[2]" "t.at.arbs[1].a"
 | 
				
			||||||
 | 
					= "t.at.in[2]" "t.at.tmp[2]"
 | 
				
			||||||
 | 
					= "t.at.in[3]" "t.at.arbs[1].b"
 | 
				
			||||||
 | 
					= "t.at.in[3]" "t.at.tmp[3]"
 | 
				
			||||||
 | 
					= "t.at.in[4]" "t.at.arbs[3].b"
 | 
				
			||||||
 | 
					= "t.at.in[4]" "t.at.tmp[9]"
 | 
				
			||||||
 | 
					= "t.at.in[4]" "t.at.tmp[7]"
 | 
				
			||||||
 | 
					= "t.at.in[4]" "t.at.tmp[4]"
 | 
				
			||||||
 | 
					= "t.at.out" "t.at.arbs[3].y"
 | 
				
			||||||
 | 
					= "t.at.out" "t.at.tmp[10]"
 | 
				
			||||||
 | 
					= "Vdd" "t.at.supply.vdd"
 | 
				
			||||||
 | 
					= "GND" "t.at.supply.vss"
 | 
				
			||||||
 | 
					= "t.out" "t.at.out"
 | 
				
			||||||
 | 
					= "t.in[0]" "t.at.in[0]"
 | 
				
			||||||
 | 
					= "t.in[1]" "t.at.in[1]"
 | 
				
			||||||
 | 
					= "t.in[2]" "t.at.in[2]"
 | 
				
			||||||
 | 
					= "t.in[3]" "t.at.in[3]"
 | 
				
			||||||
 | 
					= "t.in[4]" "t.at.in[4]"
 | 
				
			||||||
							
								
								
									
										41
									
								
								test/unit_tests/arbtree_5/test.act
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								test/unit_tests/arbtree_5/test.act
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					/*************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  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/treegates.act";
 | 
				
			||||||
 | 
					import globals;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					open tmpl::dataflow_neuro;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defproc arbtree_5 (bool? in[5]; bool! out){
 | 
				
			||||||
 | 
					    arbtree<5> at(.in=in, .out=out);
 | 
				
			||||||
 | 
					    at.supply.vss = GND;
 | 
				
			||||||
 | 
					    at.supply.vdd = Vdd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					arbtree_5 t;
 | 
				
			||||||
							
								
								
									
										88
									
								
								test/unit_tests/arbtree_5/test.prsim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								test/unit_tests/arbtree_5/test.prsim
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					watchall
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '0'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '1'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					mode run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# assert t.out 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting all low'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting bit 0 high'"
 | 
				
			||||||
 | 
					set t.in[0] 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting all low'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting bit 1 high'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting all low'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting bit 2 high'"
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting all low'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting bit 3 high'"
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting all low'"
 | 
				
			||||||
 | 
					set t.in[0] 0
 | 
				
			||||||
 | 
					set t.in[1] 0
 | 
				
			||||||
 | 
					set t.in[2] 0
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 0
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] setting bit 4 high'"
 | 
				
			||||||
 | 
					set t.in[3] 0
 | 
				
			||||||
 | 
					set t.in[4] 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
							
								
								
									
										355
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,355 @@
 | 
				
			|||||||
 | 
					b.b.addr_buf.vc.ct.in[1] b.b.dly.dly[9].__y b.b.addr_buf.out_a_B_buf_f.buf2._y b.b.addr_buf.vc.OR2_tf[6]._y b.b.addr_buf.vc.ct.in[0] b.b.addr_buf.vc.ct.C2Els[1]._y b.dly_cfg[2] b.in.d.d[4].f b.b.addr_buf._out_a_BX_f[0] b.in.d.d[1].f b.b.dly._a[1] b.in.d.d[1].t b.b.addr_buf.vc.ct.tmp[8] b.in.d.d[6].t b.b.addr_buf.vc.ct.in[6] b.b.addr_buf.in_v_buf._y b.b.addr_buf._in_v b.dly_cfg[3] b.b.dly.dly[10].y b.b.dly.dly[6]._y b.in.d.d[3].t b.b.dly.dly[7].y b.in.d.d[4].t b.b.addr_buf.vc.ct.in[4] b.b.dly._a[3] b.b.dly.dly[5].y b.in.d.d[3].f b.in.v b.b.addr_buf.vc.ct.tmp[9] b.b.dly.dly[9].___y b.b.addr_buf._out_a_BX_t[0] b.b.addr_buf.vc.ct.in[2] b.b.dly.dly[14].___y b.in.d.d[0].f b.b.dly.mu2[0]._y b.b.dly.dly[6].___y b.b.dly.mu2[3]._y b.b.dly.and2[3]._y b.in.d.d[5].t b.b.dly.dly[14].__y b.b.dly.mu2[2]._y b.in.d.d[0].t b.in.d.d[6].f b.b.addr_buf._out_a_B b.in.d.d[2].t b.b.addr_buf.vc.ct.tmp[7] b.b.dly.dly[7]._y b.b.dly.out b.b.dly.dly[4].__y b.b.dly.dly[12].__y b.b.dly.dly[1].y b.b.dly.dly[14]._y b.b.addr_buf.vc.ct.in[5] b.b.addr_buf.vc.OR2_tf[4]._y b.b.dly.dly[3].a b.b.dly.mu2[3].b b.in.d.d[5].f b.dly_cfg[1] b.b.dly.dly[7].a b.b.dly.dly[8].y b.b.dly.dly[3].___y b.b.dly._a[2] b.b.addr_buf.vc.ct.C3Els[1]._y b.b.dly.dly[1].a b.in.d.d[2].f b.b.addr_buf.vc.ct.in[3] b.b.dly.dly[3]._y b.b.dly.dly[10].__y b.b.dly.dly[1]._y b.b.dly.dly[11]._y b.b.dly.and2[1]._y b.b.dly.dly[9].y b.b.addr_buf.out_a_B_buf_t.buf2._y b.b.dly.dly[13]._y b.b.addr_buf.vc.OR2_tf[3]._y b.b.dly.dly[5].___y b.b.dly.dly[13].__y b.b.dly.dly[11].__y b.b.dly.dly[13].y b.b.dly.dly[4]._y b.b.dly.dly[11].y b.b.dly.dly[7].___y b.b.dly.dly[8].__y b.b.dly.dly[4].___y b.b.dly.dly[8]._y b.dly_cfg[0] b.b.dly.dly[12].___y b.b.dly.dly[12].y b.b.addr_buf.vc.OR2_tf[2]._y b.b.dly.dly[6].y b.b.dly.dly[2].y b.b.dly.mu2[1]._s b.b.dly.dly[4].y b.b.dly.dly[13].___y b.b.addr_buf.vc.OR2_tf[5]._y b.b.dly.dly[12]._y b.b.dly.dly[2].___y b.b.dly.mu2[2]._s b.b.dly.dly[10].___y b.b.dly.dly[6].__y b.b.dly.dly[3].y b.b.dly.dly[5].__y b.b.dly.mu2[0]._s b.b.addr_buf.vc.OR2_tf[0]._y b.b.dly.mu2[1]._y b.b.dly.mu2[3]._s b.b.dly.dly[1].___y b.b.dly.dly[2]._y b.b.dly.dly[7].__y b.b.dly.dly[8].___y b.b.addr_buf.vc.ct.C2Els[0]._y b.b.dly.dly[5]._y b.b.addr_buf.vc.ct.C3Els[0]._y b.b.dly.dly[1].__y b.b.addr_buf.vc.OR2_tf[1]._y b.b.dly.and2[2]._y b.b.dly.dly[11].___y b.b.dly.dly[2].__y b.b.dly.dly[3].__y b.b.dly.dly[9]._y b.b.dly.dly[10]._y 
 | 
				
			||||||
 | 
						    175726 b.in.d.d[0].f : 0
 | 
				
			||||||
 | 
						    175726 b.dly_cfg[3] : 0
 | 
				
			||||||
 | 
						    175726 b.dly_cfg[2] : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[1].f : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[3].f : 0
 | 
				
			||||||
 | 
						    175726 b.b.dly.out : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[6].t : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[2].t : 0
 | 
				
			||||||
 | 
						    175726 b.dly_cfg[1] : 1
 | 
				
			||||||
 | 
						    175726 b.dly_cfg[0] : 1
 | 
				
			||||||
 | 
						    175726 b.in.d.d[6].f : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[5].t : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[0].t : 0
 | 
				
			||||||
 | 
						    175726 Reset : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[2].f : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[5].f : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[4].t : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[1].t : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[4].f : 0
 | 
				
			||||||
 | 
						    175726 b.in.d.d[3].t : 0
 | 
				
			||||||
 | 
						    175727 b.b.dly.mu2[3]._s : 1  [by b.dly_cfg[3]:=0]
 | 
				
			||||||
 | 
						    175730 b.b.addr_buf.vc.OR2_tf[5]._y : 1  [by b.in.d.d[5].f:=0]
 | 
				
			||||||
 | 
						    175734 b.b.addr_buf.vc.OR2_tf[6]._y : 1  [by b.in.d.d[6].f:=0]
 | 
				
			||||||
 | 
						    175760 b.b.addr_buf.vc.OR2_tf[0]._y : 1  [by b.in.d.d[0].t:=0]
 | 
				
			||||||
 | 
						    175763 b.b.addr_buf.vc.ct.in[0] : 0  [by b.b.addr_buf.vc.OR2_tf[0]._y:=1]
 | 
				
			||||||
 | 
						    175768 b.b.dly.and2[2]._y : 1  [by b.dly_cfg[2]:=0]
 | 
				
			||||||
 | 
						    175782 b.b.addr_buf.vc.ct.in[6] : 0  [by b.b.addr_buf.vc.OR2_tf[6]._y:=1]
 | 
				
			||||||
 | 
						    175821 b.b.dly.mu2[1]._s : 0  [by b.dly_cfg[1]:=1]
 | 
				
			||||||
 | 
						    175946 b.b.dly.dly[3].a : 0  [by b.b.dly.and2[2]._y:=1]
 | 
				
			||||||
 | 
						    176061 b.b.dly.mu2[0]._s : 0  [by b.dly_cfg[0]:=1]
 | 
				
			||||||
 | 
						    176644 b.b.addr_buf.vc.OR2_tf[2]._y : 1  [by b.in.d.d[2].f:=0]
 | 
				
			||||||
 | 
						    178124 b.b.addr_buf.vc.OR2_tf[4]._y : 1  [by b.in.d.d[4].f:=0]
 | 
				
			||||||
 | 
						    178543 b.b.dly.mu2[2]._s : 1  [by b.dly_cfg[2]:=0]
 | 
				
			||||||
 | 
						    178941 b.b.addr_buf.vc.OR2_tf[3]._y : 1  [by b.in.d.d[3].t:=0]
 | 
				
			||||||
 | 
						    179768 b.b.addr_buf.vc.ct.in[3] : 0  [by b.b.addr_buf.vc.OR2_tf[3]._y:=1]
 | 
				
			||||||
 | 
						    182595 b.b.addr_buf.vc.ct.in[2] : 0  [by b.b.addr_buf.vc.OR2_tf[2]._y:=1]
 | 
				
			||||||
 | 
						    182768 b.b.addr_buf.vc.ct.C2Els[1]._y : 1  [by b.b.addr_buf.vc.ct.in[2]:=0]
 | 
				
			||||||
 | 
						    182952 b.b.addr_buf.vc.ct.tmp[8] : 0  [by b.b.addr_buf.vc.ct.C2Els[1]._y:=1]
 | 
				
			||||||
 | 
						    187960 b.b.dly.mu2[0]._y : 1  [by b.b.dly.mu2[0]._s:=0]
 | 
				
			||||||
 | 
						    187961 b.b.dly._a[1] : 0  [by b.b.dly.mu2[0]._y:=1]
 | 
				
			||||||
 | 
						    188034 b.b.dly.and2[1]._y : 1  [by b.b.dly._a[1]:=0]
 | 
				
			||||||
 | 
						    188038 b.b.dly.dly[1].a : 0  [by b.b.dly.and2[1]._y:=1]
 | 
				
			||||||
 | 
						    189459 b.b.addr_buf._out_a_B : 1  [by b.b.dly.out:=0]
 | 
				
			||||||
 | 
						    189555 b.b.addr_buf.out_a_B_buf_t.buf2._y : 0  [by b.b.addr_buf._out_a_B:=1]
 | 
				
			||||||
 | 
						    189556 b.b.addr_buf._out_a_BX_f[0] : 1  [by b.b.addr_buf.out_a_B_buf_t.buf2._y:=0]
 | 
				
			||||||
 | 
						    189595 b.b.addr_buf.out_a_B_buf_f.buf2._y : 0  [by b.b.addr_buf._out_a_B:=1]
 | 
				
			||||||
 | 
						    189613 b._reset_B : 1  [by Reset:=0]
 | 
				
			||||||
 | 
						    189854 b.b.addr_buf.reset_buf._y : 0  [by b._reset_B:=1]
 | 
				
			||||||
 | 
						    193813 b.b.addr_buf._reset_BX : 1  [by b.b.addr_buf.reset_buf._y:=0]
 | 
				
			||||||
 | 
						    193825 b.b.addr_buf.reset_bufarray.buf2._y : 0  [by b.b.addr_buf._reset_BX:=1]
 | 
				
			||||||
 | 
						    196923 b.b.dly.dly[3]._y : 1  [by b.b.dly.dly[3].a:=0]
 | 
				
			||||||
 | 
						    197725 b.b.addr_buf._reset_BXX[0] : 1  [by b.b.addr_buf.reset_bufarray.buf2._y:=0]
 | 
				
			||||||
 | 
						    197952 b.b.dly.dly[3].__y : 0  [by b.b.dly.dly[3]._y:=1]
 | 
				
			||||||
 | 
						    197953 b.b.dly.dly[3].___y : 1  [by b.b.dly.dly[3].__y:=0]
 | 
				
			||||||
 | 
						    198009 b.b.dly.dly[3].y : 0  [by b.b.dly.dly[3].___y:=1]
 | 
				
			||||||
 | 
						    208641 b.b.addr_buf._out_a_BX_t[0] : 1  [by b.b.addr_buf.out_a_B_buf_f.buf2._y:=0]
 | 
				
			||||||
 | 
						    217609 b.b.addr_buf.vc.ct.in[4] : 0  [by b.b.addr_buf.vc.OR2_tf[4]._y:=1]
 | 
				
			||||||
 | 
						    222104 b.b.addr_buf.vc.OR2_tf[1]._y : 1  [by b.in.d.d[1].t:=0]
 | 
				
			||||||
 | 
						    222105 b.b.addr_buf.vc.ct.in[1] : 0  [by b.b.addr_buf.vc.OR2_tf[1]._y:=1]
 | 
				
			||||||
 | 
						    222142 b.b.addr_buf.vc.ct.C2Els[0]._y : 1  [by b.b.addr_buf.vc.ct.in[1]:=0]
 | 
				
			||||||
 | 
						    222849 b.b.addr_buf.vc.ct.in[5] : 0  [by b.b.addr_buf.vc.OR2_tf[5]._y:=1]
 | 
				
			||||||
 | 
						    222850 b.b.addr_buf.vc.ct.C3Els[0]._y : 1  [by b.b.addr_buf.vc.ct.in[5]:=0]
 | 
				
			||||||
 | 
						    225326 b.b.dly.dly[1]._y : 1  [by b.b.dly.dly[1].a:=0]
 | 
				
			||||||
 | 
						    226414 b.b.addr_buf.vc.ct.tmp[9] : 0  [by b.b.addr_buf.vc.ct.C3Els[0]._y:=1]
 | 
				
			||||||
 | 
						    227018 b.b.dly.dly[1].__y : 0  [by b.b.dly.dly[1]._y:=1]
 | 
				
			||||||
 | 
						    227031 b.b.dly.dly[1].___y : 1  [by b.b.dly.dly[1].__y:=0]
 | 
				
			||||||
 | 
						    234688 b.b.dly.and2[3]._y : 1  [by b.dly_cfg[3]:=0]
 | 
				
			||||||
 | 
						    235045 b.b.dly.dly[7].a : 0  [by b.b.dly.and2[3]._y:=1]
 | 
				
			||||||
 | 
						    235070 b.b.dly.dly[7]._y : 1  [by b.b.dly.dly[7].a:=0]
 | 
				
			||||||
 | 
						    235091 b.b.dly.dly[7].__y : 0  [by b.b.dly.dly[7]._y:=1]
 | 
				
			||||||
 | 
						    235092 b.b.dly.dly[7].___y : 1  [by b.b.dly.dly[7].__y:=0]
 | 
				
			||||||
 | 
						    243015 b.b.dly.dly[4]._y : 1  [by b.b.dly.dly[3].y:=0]
 | 
				
			||||||
 | 
						    243016 b.b.dly.dly[4].__y : 0  [by b.b.dly.dly[4]._y:=1]
 | 
				
			||||||
 | 
						    243017 b.b.dly.dly[4].___y : 1  [by b.b.dly.dly[4].__y:=0]
 | 
				
			||||||
 | 
						    243178 b.b.dly.dly[4].y : 0  [by b.b.dly.dly[4].___y:=1]
 | 
				
			||||||
 | 
						    244015 b.b.dly.dly[1].y : 0  [by b.b.dly.dly[1].___y:=1]
 | 
				
			||||||
 | 
						    244020 b.b.dly.dly[2]._y : 1  [by b.b.dly.dly[1].y:=0]
 | 
				
			||||||
 | 
						    244215 b.b.dly.dly[5]._y : 1  [by b.b.dly.dly[4].y:=0]
 | 
				
			||||||
 | 
						    244601 b.b.dly.dly[2].__y : 0  [by b.b.dly.dly[2]._y:=1]
 | 
				
			||||||
 | 
						    244612 b.b.dly.dly[2].___y : 1  [by b.b.dly.dly[2].__y:=0]
 | 
				
			||||||
 | 
						    244623 b.b.dly.dly[5].__y : 0  [by b.b.dly.dly[5]._y:=1]
 | 
				
			||||||
 | 
						    244637 b.b.dly.dly[5].___y : 1  [by b.b.dly.dly[5].__y:=0]
 | 
				
			||||||
 | 
						    244655 b.b.dly.dly[5].y : 0  [by b.b.dly.dly[5].___y:=1]
 | 
				
			||||||
 | 
						    244659 b.b.dly.dly[6]._y : 1  [by b.b.dly.dly[5].y:=0]
 | 
				
			||||||
 | 
						    244740 b.b.dly.dly[7].y : 0  [by b.b.dly.dly[7].___y:=1]
 | 
				
			||||||
 | 
						    244763 b.b.dly.dly[6].__y : 0  [by b.b.dly.dly[6]._y:=1]
 | 
				
			||||||
 | 
						    245517 b.b.addr_buf.vc.ct.tmp[7] : 0  [by b.b.addr_buf.vc.ct.C2Els[0]._y:=1]
 | 
				
			||||||
 | 
						    245659 b.b.dly.dly[2].y : 0  [by b.b.dly.dly[2].___y:=1]
 | 
				
			||||||
 | 
						    245887 b.b.dly.mu2[1]._y : 1  [by b.b.dly.dly[2].y:=0]
 | 
				
			||||||
 | 
						    245967 b.b.dly.dly[6].___y : 1  [by b.b.dly.dly[6].__y:=0]
 | 
				
			||||||
 | 
						    246730 b.b.dly._a[2] : 0  [by b.b.dly.mu2[1]._y:=1]
 | 
				
			||||||
 | 
						    246800 b.b.dly.mu2[2]._y : 1  [by b.b.dly._a[2]:=0]
 | 
				
			||||||
 | 
						    247426 b.b.dly.dly[6].y : 0  [by b.b.dly.dly[6].___y:=1]
 | 
				
			||||||
 | 
						    253972 b.b.addr_buf.vc.ct.C3Els[1]._y : 1  [by b.b.addr_buf.vc.ct.tmp[7]:=0]
 | 
				
			||||||
 | 
						    253983 b.b.addr_buf._in_v : 0  [by b.b.addr_buf.vc.ct.C3Els[1]._y:=1]
 | 
				
			||||||
 | 
						    253986 b.b.addr_buf.in_v_buf._y : 1  [by b.b.addr_buf._in_v:=0]
 | 
				
			||||||
 | 
						    254040 b.in.v : 0  [by b.b.addr_buf.in_v_buf._y:=1]
 | 
				
			||||||
 | 
						    276184 b.b.dly.dly[8]._y : 1  [by b.b.dly.dly[7].y:=0]
 | 
				
			||||||
 | 
						    277332 b.b.dly.dly[8].__y : 0  [by b.b.dly.dly[8]._y:=1]
 | 
				
			||||||
 | 
						    278493 b.b.dly.dly[8].___y : 1  [by b.b.dly.dly[8].__y:=0]
 | 
				
			||||||
 | 
						    287145 b.b.dly.dly[8].y : 0  [by b.b.dly.dly[8].___y:=1]
 | 
				
			||||||
 | 
						    287226 b.b.dly.dly[9]._y : 1  [by b.b.dly.dly[8].y:=0]
 | 
				
			||||||
 | 
						    297222 b.b.dly._a[3] : 0  [by b.b.dly.mu2[2]._y:=1]
 | 
				
			||||||
 | 
						    298303 b.b.dly.dly[9].__y : 0  [by b.b.dly.dly[9]._y:=1]
 | 
				
			||||||
 | 
						    298395 b.b.dly.dly[9].___y : 1  [by b.b.dly.dly[9].__y:=0]
 | 
				
			||||||
 | 
						    306706 b.b.dly.dly[9].y : 0  [by b.b.dly.dly[9].___y:=1]
 | 
				
			||||||
 | 
						    308450 b.b.dly.dly[10]._y : 1  [by b.b.dly.dly[9].y:=0]
 | 
				
			||||||
 | 
						    309063 b.b.dly.dly[10].__y : 0  [by b.b.dly.dly[10]._y:=1]
 | 
				
			||||||
 | 
						    315205 b.b.dly.mu2[3]._y : 1  [by b.b.dly._a[3]:=0]
 | 
				
			||||||
 | 
						    323085 b.b.dly.dly[10].___y : 1  [by b.b.dly.dly[10].__y:=0]
 | 
				
			||||||
 | 
						    323130 b.b.dly.dly[10].y : 0  [by b.b.dly.dly[10].___y:=1]
 | 
				
			||||||
 | 
						    324127 b.b.dly.dly[11]._y : 1  [by b.b.dly.dly[10].y:=0]
 | 
				
			||||||
 | 
						    325776 b.b.dly.dly[11].__y : 0  [by b.b.dly.dly[11]._y:=1]
 | 
				
			||||||
 | 
						    326301 b.b.dly.dly[11].___y : 1  [by b.b.dly.dly[11].__y:=0]
 | 
				
			||||||
 | 
						    327201 b.b.dly.dly[11].y : 0  [by b.b.dly.dly[11].___y:=1]
 | 
				
			||||||
 | 
						    327253 b.b.dly.dly[12]._y : 1  [by b.b.dly.dly[11].y:=0]
 | 
				
			||||||
 | 
						    327260 b.b.dly.dly[12].__y : 0  [by b.b.dly.dly[12]._y:=1]
 | 
				
			||||||
 | 
						    342872 b.b.dly.dly[12].___y : 1  [by b.b.dly.dly[12].__y:=0]
 | 
				
			||||||
 | 
						    349339 b.b.dly.dly[12].y : 0  [by b.b.dly.dly[12].___y:=1]
 | 
				
			||||||
 | 
						    349341 b.b.dly.dly[13]._y : 1  [by b.b.dly.dly[12].y:=0]
 | 
				
			||||||
 | 
						    349695 b.b.dly.dly[13].__y : 0  [by b.b.dly.dly[13]._y:=1]
 | 
				
			||||||
 | 
						    349828 b.b.dly.dly[13].___y : 1  [by b.b.dly.dly[13].__y:=0]
 | 
				
			||||||
 | 
						    349829 b.b.dly.dly[13].y : 0  [by b.b.dly.dly[13].___y:=1]
 | 
				
			||||||
 | 
						    349833 b.b.dly.dly[14]._y : 1  [by b.b.dly.dly[13].y:=0]
 | 
				
			||||||
 | 
						    350379 b.b.dly.dly[14].__y : 0  [by b.b.dly.dly[14]._y:=1]
 | 
				
			||||||
 | 
						    395942 b.b.dly.dly[14].___y : 1  [by b.b.dly.dly[14].__y:=0]
 | 
				
			||||||
 | 
						    395943 b.b.dly.mu2[3].b : 0  [by b.b.dly.dly[14].___y:=1]
 | 
				
			||||||
 | 
					[] set Reset 1
 | 
				
			||||||
 | 
						    395943 Reset : 1
 | 
				
			||||||
 | 
						    408321 b._reset_B : 0  [by Reset:=1]
 | 
				
			||||||
 | 
						    408400 b.b.addr_buf.reset_buf._y : 1  [by b._reset_B:=0]
 | 
				
			||||||
 | 
						    410833 b.b.addr_buf._reset_BX : 0  [by b.b.addr_buf.reset_buf._y:=1]
 | 
				
			||||||
 | 
						    410921 b.b.addr_buf.reset_bufarray.buf2._y : 1  [by b.b.addr_buf._reset_BX:=0]
 | 
				
			||||||
 | 
						    418703 b.b.addr_buf._reset_BXX[0] : 0  [by b.b.addr_buf.reset_bufarray.buf2._y:=1]
 | 
				
			||||||
 | 
					[] set Reset 0
 | 
				
			||||||
 | 
						    418703 Reset : 0
 | 
				
			||||||
 | 
						    447030 b._reset_B : 1  [by Reset:=0]
 | 
				
			||||||
 | 
						    447089 b.b.addr_buf.reset_buf._y : 0  [by b._reset_B:=1]
 | 
				
			||||||
 | 
						    447119 b.b.addr_buf._reset_BX : 1  [by b.b.addr_buf.reset_buf._y:=0]
 | 
				
			||||||
 | 
						    448586 b.b.addr_buf.reset_bufarray.buf2._y : 0  [by b.b.addr_buf._reset_BX:=1]
 | 
				
			||||||
 | 
						    508090 b.b.addr_buf._reset_BXX[0] : 1  [by b.b.addr_buf.reset_bufarray.buf2._y:=0]
 | 
				
			||||||
 | 
					[] Sending packet in
 | 
				
			||||||
 | 
						    508090 b.in.d.d[0].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[6].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[2].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[5].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[1].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[4].t : 1
 | 
				
			||||||
 | 
						    508090 b.in.d.d[3].t : 1
 | 
				
			||||||
 | 
						    508091 b.b.addr_buf.t_buf_func[4]._y : 0  [by b.in.d.d[4].t:=1]
 | 
				
			||||||
 | 
						    508093 b.b.addr_buf.t_buf_func[1]._y : 0  [by b.in.d.d[1].t:=1]
 | 
				
			||||||
 | 
						    508095 b.b.atree_x[2].in[1] : 1  [by b.b.addr_buf.t_buf_func[1]._y:=0]
 | 
				
			||||||
 | 
						    508096 b.b.vtree_x.OR2_tf[1]._y : 0  [by b.b.atree_x[2].in[1]:=1]
 | 
				
			||||||
 | 
						    508102 b.b.addr_buf.vc.OR2_tf[5]._y : 0  [by b.in.d.d[5].t:=1]
 | 
				
			||||||
 | 
						    508104 b.b.addr_buf.vc.ct.in[5] : 1  [by b.b.addr_buf.vc.OR2_tf[5]._y:=0]
 | 
				
			||||||
 | 
						    508128 b.b.addr_buf.vc.OR2_tf[4]._y : 0  [by b.in.d.d[4].t:=1]
 | 
				
			||||||
 | 
						    508133 b.b.addr_buf.t_buf_func[2]._y : 0  [by b.in.d.d[2].t:=1]
 | 
				
			||||||
 | 
						    508146 b.b.addr_buf.vc.ct.in[4] : 1  [by b.b.addr_buf.vc.OR2_tf[4]._y:=0]
 | 
				
			||||||
 | 
						    508182 b.b.addr_buf.t_buf_func[3]._y : 0  [by b.in.d.d[3].t:=1]
 | 
				
			||||||
 | 
						    508217 b.b.addr_buf.t_buf_func[6]._y : 0  [by b.in.d.d[6].t:=1]
 | 
				
			||||||
 | 
						    508225 b.b.atree_y[8].in[3] : 1  [by b.b.addr_buf.t_buf_func[6]._y:=0]
 | 
				
			||||||
 | 
						    508252 b.b.atree_x[4].in[2] : 1  [by b.b.addr_buf.t_buf_func[2]._y:=0]
 | 
				
			||||||
 | 
						    508259 b.b.addr_buf.vc.OR2_tf[2]._y : 0  [by b.in.d.d[2].t:=1]
 | 
				
			||||||
 | 
						    508264 b.b.addr_buf.vc.ct.in[2] : 1  [by b.b.addr_buf.vc.OR2_tf[2]._y:=0]
 | 
				
			||||||
 | 
						    508279 b.b.vtree_y.OR2_tf[3]._y : 0  [by b.b.atree_y[8].in[3]:=1]
 | 
				
			||||||
 | 
						    508323 b.b.addr_buf.vc.OR2_tf[1]._y : 0  [by b.in.d.d[1].t:=1]
 | 
				
			||||||
 | 
						    508324 b.b.addr_buf.vc.ct.in[1] : 1  [by b.b.addr_buf.vc.OR2_tf[1]._y:=0]
 | 
				
			||||||
 | 
						    508775 b.b.addr_buf.t_buf_func[0]._y : 0  [by b.in.d.d[0].t:=1]
 | 
				
			||||||
 | 
						    508913 b.b.atree_x[1].in[0] : 1  [by b.b.addr_buf.t_buf_func[0]._y:=0]
 | 
				
			||||||
 | 
						    508914 b.b.atree_x[7].and3s[0]._y : 0  [by b.b.atree_x[1].in[0]:=1]
 | 
				
			||||||
 | 
						    508977 b.b.vtree_x.OR2_tf[0]._y : 0  [by b.b.atree_x[1].in[0]:=1]
 | 
				
			||||||
 | 
						    508979 b.b.vtree_x.ct.in[0] : 1  [by b.b.vtree_x.OR2_tf[0]._y:=0]
 | 
				
			||||||
 | 
						    509037 b.outx[7] : 1  [by b.b.atree_x[7].and3s[0]._y:=0]
 | 
				
			||||||
 | 
						    509346 b.b.vtree_y.ct.in[3] : 1  [by b.b.vtree_y.OR2_tf[3]._y:=0]
 | 
				
			||||||
 | 
						    509369 b.b.addr_buf.t_buf_func[5]._y : 0  [by b.in.d.d[5].t:=1]
 | 
				
			||||||
 | 
						    509406 b.b.atree_y[4].in[2] : 1  [by b.b.addr_buf.t_buf_func[5]._y:=0]
 | 
				
			||||||
 | 
						    509407 b.b.vtree_y.OR2_tf[2]._y : 0  [by b.b.atree_y[4].in[2]:=1]
 | 
				
			||||||
 | 
						    509416 b.b.vtree_y.ct.in[2] : 1  [by b.b.vtree_y.OR2_tf[2]._y:=0]
 | 
				
			||||||
 | 
						    509417 b.b.atree_y[14].and2s[1]._y : 0  [by b.b.atree_y[4].in[2]:=1]
 | 
				
			||||||
 | 
						    509441 b.b.vtree_y.ct.C2Els[1]._y : 0  [by b.b.vtree_y.ct.in[2]:=1]
 | 
				
			||||||
 | 
						    509457 b.b.atree_y[12].and2s[1]._y : 0  [by b.b.atree_y[4].in[2]:=1]
 | 
				
			||||||
 | 
						    509549 b.b.atree_y[15].and2s[1]._y : 0  [by b.b.atree_y[4].in[2]:=1]
 | 
				
			||||||
 | 
						    509597 b.b.vtree_x.ct.in[1] : 1  [by b.b.vtree_x.OR2_tf[1]._y:=0]
 | 
				
			||||||
 | 
						    509602 b.b.atree_y[12].tmp[5] : 1  [by b.b.atree_y[12].and2s[1]._y:=0]
 | 
				
			||||||
 | 
						    509848 b.b.atree_y[13].and2s[1]._y : 0  [by b.b.atree_y[4].in[2]:=1]
 | 
				
			||||||
 | 
						    510078 b.b.atree_y[13].tmp[5] : 1  [by b.b.atree_y[13].and2s[1]._y:=0]
 | 
				
			||||||
 | 
						    510818 b.b.atree_y[2].in[1] : 1  [by b.b.addr_buf.t_buf_func[4]._y:=0]
 | 
				
			||||||
 | 
						    511509 b.b.vtree_y.OR2_tf[1]._y : 0  [by b.b.atree_y[2].in[1]:=1]
 | 
				
			||||||
 | 
						    511523 b.b.vtree_y.ct.in[1] : 1  [by b.b.vtree_y.OR2_tf[1]._y:=0]
 | 
				
			||||||
 | 
						    512962 b.b.vtree_y.ct.tmp[5] : 1  [by b.b.vtree_y.ct.C2Els[1]._y:=0]
 | 
				
			||||||
 | 
						    513902 b.b.atree_y[1].in[0] : 1  [by b.b.addr_buf.t_buf_func[3]._y:=0]
 | 
				
			||||||
 | 
						    513903 b.b.vtree_y.OR2_tf[0]._y : 0  [by b.b.atree_y[1].in[0]:=1]
 | 
				
			||||||
 | 
						    513904 b.b.vtree_y.ct.in[0] : 1  [by b.b.vtree_y.OR2_tf[0]._y:=0]
 | 
				
			||||||
 | 
						    513913 b.b.atree_y[11].and2s[0]._y : 0  [by b.b.atree_y[1].in[0]:=1]
 | 
				
			||||||
 | 
						    514552 b.b.atree_y[11].tmp[4] : 1  [by b.b.atree_y[11].and2s[0]._y:=0]
 | 
				
			||||||
 | 
						    515445 b.b.atree_y[15].and2s[0]._y : 0  [by b.b.atree_y[1].in[0]:=1]
 | 
				
			||||||
 | 
						    515513 b.b.atree_y[3].and2s[0]._y : 0  [by b.b.atree_y[1].in[0]:=1]
 | 
				
			||||||
 | 
						    515645 b.b.atree_y[3].tmp[4] : 1  [by b.b.atree_y[3].and2s[0]._y:=0]
 | 
				
			||||||
 | 
						    517238 b.b.atree_y[15].tmp[4] : 1  [by b.b.atree_y[15].and2s[0]._y:=0]
 | 
				
			||||||
 | 
						    519670 b.b.atree_y[14].tmp[5] : 1  [by b.b.atree_y[14].and2s[1]._y:=0]
 | 
				
			||||||
 | 
						    520405 b.b.vtree_y.ct.C2Els[0]._y : 0  [by b.b.vtree_y.ct.in[0]:=1]
 | 
				
			||||||
 | 
						    520406 b.b.vtree_y.ct.tmp[4] : 1  [by b.b.vtree_y.ct.C2Els[0]._y:=0]
 | 
				
			||||||
 | 
						    520423 b.b.vtree_y.ct.C2Els[2]._y : 0  [by b.b.vtree_y.ct.tmp[4]:=1]
 | 
				
			||||||
 | 
						    520575 b.b.C2el.c2 : 1  [by b.b.vtree_y.ct.C2Els[2]._y:=0]
 | 
				
			||||||
 | 
						    520842 b.b.addr_buf.vc.OR2_tf[3]._y : 0  [by b.in.d.d[3].t:=1]
 | 
				
			||||||
 | 
						    523825 b.b.addr_buf.vc.ct.in[3] : 1  [by b.b.addr_buf.vc.OR2_tf[3]._y:=0]
 | 
				
			||||||
 | 
						    523828 b.b.addr_buf.vc.ct.C2Els[1]._y : 0  [by b.b.addr_buf.vc.ct.in[3]:=1]
 | 
				
			||||||
 | 
						    524252 b.b.addr_buf.vc.ct.tmp[8] : 1  [by b.b.addr_buf.vc.ct.C2Els[1]._y:=0]
 | 
				
			||||||
 | 
						    524805 b.b.addr_buf.vc.OR2_tf[6]._y : 0  [by b.in.d.d[6].t:=1]
 | 
				
			||||||
 | 
						    524811 b.b.addr_buf.vc.ct.in[6] : 1  [by b.b.addr_buf.vc.OR2_tf[6]._y:=0]
 | 
				
			||||||
 | 
						    525717 b.b.atree_y[15].tmp[5] : 1  [by b.b.atree_y[15].and2s[1]._y:=0]
 | 
				
			||||||
 | 
						    527399 b.b.addr_buf.vc.ct.C3Els[0]._y : 0  [by b.b.addr_buf.vc.ct.in[6]:=1]
 | 
				
			||||||
 | 
						    527474 b.b.addr_buf.vc.OR2_tf[0]._y : 0  [by b.in.d.d[0].t:=1]
 | 
				
			||||||
 | 
						    528178 b.b.atree_y[15].and2s[2]._y : 0  [by b.b.atree_y[15].tmp[5]:=1]
 | 
				
			||||||
 | 
						    528180 b.outy[15] : 1  [by b.b.atree_y[15].and2s[2]._y:=0]
 | 
				
			||||||
 | 
						    528229 b.b.addr_buf.vc.ct.tmp[9] : 1  [by b.b.addr_buf.vc.ct.C3Els[0]._y:=0]
 | 
				
			||||||
 | 
						    531414 b.b.atree_y[7].and2s[0]._y : 0  [by b.b.atree_y[1].in[0]:=1]
 | 
				
			||||||
 | 
						    531608 b.b.atree_y[7].tmp[4] : 1  [by b.b.atree_y[7].and2s[0]._y:=0]
 | 
				
			||||||
 | 
						    550406 b.b.addr_buf.vc.ct.in[0] : 1  [by b.b.addr_buf.vc.OR2_tf[0]._y:=0]
 | 
				
			||||||
 | 
						    551009 b.b.addr_buf.vc.ct.C2Els[0]._y : 0  [by b.b.addr_buf.vc.ct.in[0]:=1]
 | 
				
			||||||
 | 
						    551147 b.b.addr_buf.vc.ct.tmp[7] : 1  [by b.b.addr_buf.vc.ct.C2Els[0]._y:=0]
 | 
				
			||||||
 | 
						    551164 b.b.addr_buf.vc.ct.C3Els[1]._y : 0  [by b.b.addr_buf.vc.ct.tmp[7]:=1]
 | 
				
			||||||
 | 
						    551181 b.b.addr_buf._in_v : 1  [by b.b.addr_buf.vc.ct.C3Els[1]._y:=0]
 | 
				
			||||||
 | 
						    551607 b.b.addr_buf.in_v_buf._y : 0  [by b.b.addr_buf._in_v:=1]
 | 
				
			||||||
 | 
						    551608 b.in.v : 1  [by b.b.addr_buf.in_v_buf._y:=0]
 | 
				
			||||||
 | 
						    558790 b.b.vtree_x.OR2_tf[2]._y : 0  [by b.b.atree_x[4].in[2]:=1]
 | 
				
			||||||
 | 
						    558791 b.b.vtree_x.ct.in[2] : 1  [by b.b.vtree_x.OR2_tf[2]._y:=0]
 | 
				
			||||||
 | 
						    559817 b.b.vtree_x.ct.C3Els[0]._y : 0  [by b.b.vtree_x.ct.in[2]:=1]
 | 
				
			||||||
 | 
						    559818 b.b.C2el.c1 : 1  [by b.b.vtree_x.ct.C3Els[0]._y:=0]
 | 
				
			||||||
 | 
						    559837 b.b.C2el._y : 0  [by b.b.C2el.c1:=1]
 | 
				
			||||||
 | 
						    560005 b.b.C2el.y : 1  [by b.b.C2el._y:=0]
 | 
				
			||||||
 | 
						    560166 b.b.addr_buf.inack_ctl._y : 0  [by b.b.C2el.y:=1]
 | 
				
			||||||
 | 
						    560339 b.in.a : 1  [by b.b.addr_buf.inack_ctl._y:=0]
 | 
				
			||||||
 | 
						    560544 b.b.dly.and2[0]._y : 0  [by b.b.C2el.y:=1]
 | 
				
			||||||
 | 
						    562886 b.b.addr_buf._en : 0  [by b.in.a:=1]
 | 
				
			||||||
 | 
						    562887 b.b.addr_buf.en_buf_f.buf2._y : 1  [by b.b.addr_buf._en:=0]
 | 
				
			||||||
 | 
						    562887 b.b.addr_buf.en_buf_t.buf2._y : 1  [by b.b.addr_buf._en:=0]
 | 
				
			||||||
 | 
						    563094 b.b.addr_buf._en_X_t[0] : 0  [by b.b.addr_buf.en_buf_t.buf2._y:=1]
 | 
				
			||||||
 | 
						    563277 b.b.addr_buf._en_X_f[0] : 0  [by b.b.addr_buf.en_buf_f.buf2._y:=1]
 | 
				
			||||||
 | 
						    575605 b.b.dly.dly[0].a : 1  [by b.b.dly.and2[0]._y:=0]
 | 
				
			||||||
 | 
						    576438 b.b.dly.dly[0]._y : 0  [by b.b.dly.dly[0].a:=1]
 | 
				
			||||||
 | 
						    576466 b.b.dly.dly[0].__y : 1  [by b.b.dly.dly[0]._y:=0]
 | 
				
			||||||
 | 
						    576473 b.b.dly.dly[0].___y : 0  [by b.b.dly.dly[0].__y:=1]
 | 
				
			||||||
 | 
						    576887 b.b.dly.dly[0].y : 1  [by b.b.dly.dly[0].___y:=0]
 | 
				
			||||||
 | 
						    576891 b.b.dly.mu2[0]._y : 0  [by b.b.dly.dly[0].y:=1]
 | 
				
			||||||
 | 
						    578670 b.b.dly._a[1] : 1  [by b.b.dly.mu2[0]._y:=0]
 | 
				
			||||||
 | 
						    601544 b.b.dly.and2[1]._y : 0  [by b.b.dly._a[1]:=1]
 | 
				
			||||||
 | 
						    601710 b.b.dly.dly[1].a : 1  [by b.b.dly.and2[1]._y:=0]
 | 
				
			||||||
 | 
						    641580 b.b.dly.dly[1]._y : 0  [by b.b.dly.dly[1].a:=1]
 | 
				
			||||||
 | 
						    650225 b.b.dly.dly[1].__y : 1  [by b.b.dly.dly[1]._y:=0]
 | 
				
			||||||
 | 
						    651158 b.b.dly.dly[1].___y : 0  [by b.b.dly.dly[1].__y:=1]
 | 
				
			||||||
 | 
						    652014 b.b.dly.dly[1].y : 1  [by b.b.dly.dly[1].___y:=0]
 | 
				
			||||||
 | 
						    652153 b.b.dly.dly[2]._y : 0  [by b.b.dly.dly[1].y:=1]
 | 
				
			||||||
 | 
						    678362 b.b.dly.dly[2].__y : 1  [by b.b.dly.dly[2]._y:=0]
 | 
				
			||||||
 | 
						    678557 b.b.dly.dly[2].___y : 0  [by b.b.dly.dly[2].__y:=1]
 | 
				
			||||||
 | 
						    678559 b.b.dly.dly[2].y : 1  [by b.b.dly.dly[2].___y:=0]
 | 
				
			||||||
 | 
						    732008 b.b.dly.mu2[1]._y : 0  [by b.b.dly.dly[2].y:=1]
 | 
				
			||||||
 | 
						    732014 b.b.dly._a[2] : 1  [by b.b.dly.mu2[1]._y:=0]
 | 
				
			||||||
 | 
						    732268 b.b.dly.mu2[2]._y : 0  [by b.b.dly._a[2]:=1]
 | 
				
			||||||
 | 
						    732276 b.b.dly._a[3] : 1  [by b.b.dly.mu2[2]._y:=0]
 | 
				
			||||||
 | 
						    732277 b.b.dly.mu2[3]._y : 0  [by b.b.dly._a[3]:=1]
 | 
				
			||||||
 | 
						    732283 b.b.dly.out : 1  [by b.b.dly.mu2[3]._y:=0]
 | 
				
			||||||
 | 
						    783319 b.b.addr_buf._out_a_B : 0  [by b.b.dly.out:=1]
 | 
				
			||||||
 | 
						    783545 b.b.addr_buf.out_a_B_buf_f.buf2._y : 1  [by b.b.addr_buf._out_a_B:=0]
 | 
				
			||||||
 | 
						    784364 b.b.addr_buf._out_a_BX_t[0] : 0  [by b.b.addr_buf.out_a_B_buf_f.buf2._y:=1]
 | 
				
			||||||
 | 
						    784365 b.b.addr_buf.t_buf_func[0]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    784366 b.b.addr_buf.t_buf_func[2]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    784370 b.b.addr_buf.t_buf_func[1]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    784379 b.b.addr_buf.t_buf_func[4]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    784458 b.b.atree_x[1].in[0] : 0  [by b.b.addr_buf.t_buf_func[0]._y:=1]
 | 
				
			||||||
 | 
						    784471 b.b.addr_buf.t_buf_func[6]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    784472 b.b.atree_y[8].in[3] : 0  [by b.b.addr_buf.t_buf_func[6]._y:=1]
 | 
				
			||||||
 | 
						    784473 b.b.atree_y[12].and2s[1]._y : 1  [by b.b.atree_y[8].in[3]:=0]
 | 
				
			||||||
 | 
						    784473 b.b.vtree_y.OR2_tf[3]._y : 1  [by b.b.atree_y[8].in[3]:=0]
 | 
				
			||||||
 | 
						    784474 b.b.vtree_y.ct.in[3] : 0  [by b.b.vtree_y.OR2_tf[3]._y:=1]
 | 
				
			||||||
 | 
						    784479 b.b.atree_y[12].tmp[5] : 0  [by b.b.atree_y[12].and2s[1]._y:=1]
 | 
				
			||||||
 | 
						    785137 b.b.atree_y[2].in[1] : 0  [by b.b.addr_buf.t_buf_func[4]._y:=1]
 | 
				
			||||||
 | 
						    785144 b.b.vtree_y.OR2_tf[1]._y : 1  [by b.b.atree_y[2].in[1]:=0]
 | 
				
			||||||
 | 
						    785159 b.b.atree_y[7].and2s[0]._y : 1  [by b.b.atree_y[2].in[1]:=0]
 | 
				
			||||||
 | 
						    785172 b.b.atree_y[7].tmp[4] : 0  [by b.b.atree_y[7].and2s[0]._y:=1]
 | 
				
			||||||
 | 
						    785174 b.b.vtree_x.OR2_tf[0]._y : 1  [by b.b.atree_x[1].in[0]:=0]
 | 
				
			||||||
 | 
						    785209 b.b.vtree_y.ct.in[1] : 0  [by b.b.vtree_y.OR2_tf[1]._y:=1]
 | 
				
			||||||
 | 
						    786018 b.b.atree_x[4].in[2] : 0  [by b.b.addr_buf.t_buf_func[2]._y:=1]
 | 
				
			||||||
 | 
						    786122 b.b.vtree_x.OR2_tf[2]._y : 1  [by b.b.atree_x[4].in[2]:=0]
 | 
				
			||||||
 | 
						    786163 b.b.vtree_x.ct.in[2] : 0  [by b.b.vtree_x.OR2_tf[2]._y:=1]
 | 
				
			||||||
 | 
						    786212 b.b.atree_y[15].and2s[1]._y : 1  [by b.b.atree_y[8].in[3]:=0]
 | 
				
			||||||
 | 
						    786213 b.b.atree_y[15].tmp[5] : 0  [by b.b.atree_y[15].and2s[1]._y:=1]
 | 
				
			||||||
 | 
						    786214 b.b.atree_y[15].and2s[2]._y : 1  [by b.b.atree_y[15].tmp[5]:=0]
 | 
				
			||||||
 | 
						    786298 b.b.vtree_x.ct.in[0] : 0  [by b.b.vtree_x.OR2_tf[0]._y:=1]
 | 
				
			||||||
 | 
						    786409 b.b.addr_buf.out_a_B_buf_t.buf2._y : 1  [by b.b.addr_buf._out_a_B:=0]
 | 
				
			||||||
 | 
						    787081 b.b.atree_x[7].and3s[0]._y : 1  [by b.b.atree_x[1].in[0]:=0]
 | 
				
			||||||
 | 
						    787082 b.outx[7] : 0  [by b.b.atree_x[7].and3s[0]._y:=1]
 | 
				
			||||||
 | 
						    787926 b.b.addr_buf.t_buf_func[3]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    788309 b.b.atree_x[2].in[1] : 0  [by b.b.addr_buf.t_buf_func[1]._y:=1]
 | 
				
			||||||
 | 
						    791445 b.b.vtree_x.OR2_tf[1]._y : 1  [by b.b.atree_x[2].in[1]:=0]
 | 
				
			||||||
 | 
						    792271 b.b.vtree_x.ct.in[1] : 0  [by b.b.vtree_x.OR2_tf[1]._y:=1]
 | 
				
			||||||
 | 
						    794104 b.b.vtree_x.ct.C3Els[0]._y : 1  [by b.b.vtree_x.ct.in[1]:=0]
 | 
				
			||||||
 | 
						    796624 b.b.atree_y[13].and2s[1]._y : 1  [by b.b.atree_y[8].in[3]:=0]
 | 
				
			||||||
 | 
						    796682 b.b.atree_y[13].tmp[5] : 0  [by b.b.atree_y[13].and2s[1]._y:=1]
 | 
				
			||||||
 | 
						    799581 b.b.addr_buf._out_a_BX_f[0] : 0  [by b.b.addr_buf.out_a_B_buf_t.buf2._y:=1]
 | 
				
			||||||
 | 
						    805165 b.b.addr_buf.t_buf_func[5]._y : 1  [by b.b.addr_buf._out_a_BX_t[0]:=0]
 | 
				
			||||||
 | 
						    806736 b.b.atree_y[3].and2s[0]._y : 1  [by b.b.atree_y[2].in[1]:=0]
 | 
				
			||||||
 | 
						    807608 b.b.atree_y[4].in[2] : 0  [by b.b.addr_buf.t_buf_func[5]._y:=1]
 | 
				
			||||||
 | 
						    807645 b.b.atree_y[11].and2s[0]._y : 1  [by b.b.atree_y[2].in[1]:=0]
 | 
				
			||||||
 | 
						    807659 b.b.atree_y[11].tmp[4] : 0  [by b.b.atree_y[11].and2s[0]._y:=1]
 | 
				
			||||||
 | 
						    807751 b.b.atree_y[1].in[0] : 0  [by b.b.addr_buf.t_buf_func[3]._y:=1]
 | 
				
			||||||
 | 
						    808107 b.b.vtree_y.OR2_tf[0]._y : 1  [by b.b.atree_y[1].in[0]:=0]
 | 
				
			||||||
 | 
						    810652 b.b.C2el.c1 : 0  [by b.b.vtree_x.ct.C3Els[0]._y:=1]
 | 
				
			||||||
 | 
						    812671 b.b.atree_y[14].and2s[1]._y : 1  [by b.b.atree_y[8].in[3]:=0]
 | 
				
			||||||
 | 
						    812776 b.b.atree_y[14].tmp[5] : 0  [by b.b.atree_y[14].and2s[1]._y:=1]
 | 
				
			||||||
 | 
						    823509 b.b.atree_y[3].tmp[4] : 0  [by b.b.atree_y[3].and2s[0]._y:=1]
 | 
				
			||||||
 | 
						    824626 b.b.atree_y[15].and2s[0]._y : 1  [by b.b.atree_y[2].in[1]:=0]
 | 
				
			||||||
 | 
						    824735 b.b.atree_y[15].tmp[4] : 0  [by b.b.atree_y[15].and2s[0]._y:=1]
 | 
				
			||||||
 | 
						    843945 b.b.vtree_y.ct.in[0] : 0  [by b.b.vtree_y.OR2_tf[0]._y:=1]
 | 
				
			||||||
 | 
						    843946 b.b.vtree_y.ct.C2Els[0]._y : 1  [by b.b.vtree_y.ct.in[0]:=0]
 | 
				
			||||||
 | 
						    843955 b.b.vtree_y.ct.tmp[4] : 0  [by b.b.vtree_y.ct.C2Els[0]._y:=1]
 | 
				
			||||||
 | 
						    844807 b.b.vtree_y.OR2_tf[2]._y : 1  [by b.b.atree_y[4].in[2]:=0]
 | 
				
			||||||
 | 
						    850592 b.outy[15] : 0  [by b.b.atree_y[15].and2s[2]._y:=1]
 | 
				
			||||||
 | 
						    882760 b.b.vtree_y.ct.in[2] : 0  [by b.b.vtree_y.OR2_tf[2]._y:=1]
 | 
				
			||||||
 | 
						    882761 b.b.vtree_y.ct.C2Els[1]._y : 1  [by b.b.vtree_y.ct.in[2]:=0]
 | 
				
			||||||
 | 
						    919155 b.b.vtree_y.ct.tmp[5] : 0  [by b.b.vtree_y.ct.C2Els[1]._y:=1]
 | 
				
			||||||
 | 
						    919156 b.b.vtree_y.ct.C2Els[2]._y : 1  [by b.b.vtree_y.ct.tmp[5]:=0]
 | 
				
			||||||
 | 
						    922245 b.b.C2el.c2 : 0  [by b.b.vtree_y.ct.C2Els[2]._y:=1]
 | 
				
			||||||
 | 
						    970971 b.b.C2el._y : 1  [by b.b.C2el.c2:=0]
 | 
				
			||||||
 | 
						    971721 b.b.C2el.y : 0  [by b.b.C2el._y:=1]
 | 
				
			||||||
 | 
						    978476 b.b.dly.and2[0]._y : 1  [by b.b.C2el.y:=0]
 | 
				
			||||||
 | 
						    978527 b.b.dly.dly[0].a : 0  [by b.b.dly.and2[0]._y:=1]
 | 
				
			||||||
 | 
						    978537 b.b.dly.dly[0]._y : 1  [by b.b.dly.dly[0].a:=0]
 | 
				
			||||||
 | 
						    978857 b.b.dly.dly[0].__y : 0  [by b.b.dly.dly[0]._y:=1]
 | 
				
			||||||
 | 
						    986439 b.b.dly.dly[0].___y : 1  [by b.b.dly.dly[0].__y:=0]
 | 
				
			||||||
 | 
						    986440 b.b.dly.dly[0].y : 0  [by b.b.dly.dly[0].___y:=1]
 | 
				
			||||||
 | 
						    986441 b.b.dly.mu2[0]._y : 1  [by b.b.dly.dly[0].y:=0]
 | 
				
			||||||
 | 
						    988171 b.b.dly._a[1] : 0  [by b.b.dly.mu2[0]._y:=1]
 | 
				
			||||||
 | 
						    989858 b.b.dly.and2[1]._y : 1  [by b.b.dly._a[1]:=0]
 | 
				
			||||||
 | 
						    989873 b.b.dly.dly[1].a : 0  [by b.b.dly.and2[1]._y:=1]
 | 
				
			||||||
 | 
						   1014147 b.b.dly.dly[1]._y : 1  [by b.b.dly.dly[1].a:=0]
 | 
				
			||||||
 | 
						   1014601 b.b.dly.dly[1].__y : 0  [by b.b.dly.dly[1]._y:=1]
 | 
				
			||||||
 | 
						   1014917 b.b.dly.dly[1].___y : 1  [by b.b.dly.dly[1].__y:=0]
 | 
				
			||||||
 | 
						   1014918 b.b.dly.dly[1].y : 0  [by b.b.dly.dly[1].___y:=1]
 | 
				
			||||||
 | 
						   1015301 b.b.dly.dly[2]._y : 1  [by b.b.dly.dly[1].y:=0]
 | 
				
			||||||
 | 
						   1022764 b.b.dly.dly[2].__y : 0  [by b.b.dly.dly[2]._y:=1]
 | 
				
			||||||
 | 
						   1022784 b.b.dly.dly[2].___y : 1  [by b.b.dly.dly[2].__y:=0]
 | 
				
			||||||
 | 
						   1024107 b.b.dly.dly[2].y : 0  [by b.b.dly.dly[2].___y:=1]
 | 
				
			||||||
 | 
						   1024194 b.b.dly.mu2[1]._y : 1  [by b.b.dly.dly[2].y:=0]
 | 
				
			||||||
 | 
						   1030916 b.b.dly._a[2] : 0  [by b.b.dly.mu2[1]._y:=1]
 | 
				
			||||||
 | 
						   1030928 b.b.dly.mu2[2]._y : 1  [by b.b.dly._a[2]:=0]
 | 
				
			||||||
 | 
						   1031073 b.b.dly._a[3] : 0  [by b.b.dly.mu2[2]._y:=1]
 | 
				
			||||||
 | 
						   1031974 b.b.dly.mu2[3]._y : 1  [by b.b.dly._a[3]:=0]
 | 
				
			||||||
 | 
						   1033323 b.b.dly.out : 0  [by b.b.dly.mu2[3]._y:=1]
 | 
				
			||||||
 | 
						   1033542 b.b.addr_buf._out_a_B : 1  [by b.b.dly.out:=0]
 | 
				
			||||||
 | 
						   1041873 b.b.addr_buf.out_a_B_buf_t.buf2._y : 0  [by b.b.addr_buf._out_a_B:=1]
 | 
				
			||||||
 | 
						   1041891 b.b.addr_buf._out_a_BX_f[0] : 1  [by b.b.addr_buf.out_a_B_buf_t.buf2._y:=0]
 | 
				
			||||||
 | 
						   1065123 b.b.addr_buf.out_a_B_buf_f.buf2._y : 0  [by b.b.addr_buf._out_a_B:=1]
 | 
				
			||||||
 | 
						   1067317 b.b.addr_buf._out_a_BX_t[0] : 1  [by b.b.addr_buf.out_a_B_buf_f.buf2._y:=0]
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/prsim.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/prsim.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2110
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2110
									
								
								test/unit_tests/decoder_2d_dly_8_16/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										47
									
								
								test/unit_tests/decoder_2d_dly_8_16/test.act
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test/unit_tests/decoder_2d_dly_8_16/test.act
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					/*************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					open tmpl::dataflow_neuro;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defproc decoder_2d_dly_8_16(avMx1of2<3+4> in; bool? outx[8], outy[16], dly_cfg[4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  bool _reset_B; 
 | 
				
			||||||
 | 
					  prs {
 | 
				
			||||||
 | 
					    Reset => _reset_B-
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  decoder_2d_dly<3,4,8,16,4> b(.in = in, .outx = outx, .outy = outy, .dly_cfg = dly_cfg);
 | 
				
			||||||
 | 
					  b.supply.vdd = Vdd;
 | 
				
			||||||
 | 
					  b.supply.vss = GND; 
 | 
				
			||||||
 | 
					  b.reset_B = _reset_B;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					decoder_2d_dly_8_16 b;
 | 
				
			||||||
							
								
								
									
										59
									
								
								test/unit_tests/decoder_2d_dly_8_16/test.prsim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								test/unit_tests/decoder_2d_dly_8_16/test.prsim
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					watchall
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set-qdi-channel-neutral "b.in" 7
 | 
				
			||||||
 | 
					set b.b.addr_buf.out.a 0
 | 
				
			||||||
 | 
					set Reset 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set delay config lines
 | 
				
			||||||
 | 
					set b.dly_cfg[0] 1
 | 
				
			||||||
 | 
					set b.dly_cfg[1] 1
 | 
				
			||||||
 | 
					set b.dly_cfg[2] 0
 | 
				
			||||||
 | 
					set b.dly_cfg[3] 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] set Reset 1'"
 | 
				
			||||||
 | 
					set Reset 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] set Reset 0'"
 | 
				
			||||||
 | 
					set Reset 0
 | 
				
			||||||
 | 
					mode run
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system "echo '[] Sending packet in'"
 | 
				
			||||||
 | 
					set-qdi-channel-valid "b.in" 7 127
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					assert b.in.a 1
 | 
				
			||||||
 | 
					assert b.in.v 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# system "echo '[]' Setting ack from DLY high"
 | 
				
			||||||
 | 
					# set b.b.addr_buf.out.a 1
 | 
				
			||||||
 | 
					cycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert b.outx[0] 0
 | 
				
			||||||
 | 
					assert b.outx[1] 0
 | 
				
			||||||
 | 
					assert b.outx[2] 0
 | 
				
			||||||
 | 
					assert b.outx[3] 0
 | 
				
			||||||
 | 
					assert b.outx[4] 0
 | 
				
			||||||
 | 
					assert b.outx[5] 0
 | 
				
			||||||
 | 
					assert b.outx[6] 0
 | 
				
			||||||
 | 
					assert b.outx[7] 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert b.outy[0] 0
 | 
				
			||||||
 | 
					assert b.outy[1] 0
 | 
				
			||||||
 | 
					assert b.outy[2] 0
 | 
				
			||||||
 | 
					assert b.outy[3] 0
 | 
				
			||||||
 | 
					assert b.outy[4] 0
 | 
				
			||||||
 | 
					assert b.outy[5] 0
 | 
				
			||||||
 | 
					assert b.outy[6] 0
 | 
				
			||||||
 | 
					assert b.outy[7] 0
 | 
				
			||||||
 | 
					assert b.outy[8] 0
 | 
				
			||||||
 | 
					assert b.outy[9] 0
 | 
				
			||||||
 | 
					assert b.outy[10] 0
 | 
				
			||||||
 | 
					assert b.outy[11] 0
 | 
				
			||||||
 | 
					assert b.outy[12] 0
 | 
				
			||||||
 | 
					assert b.outy[13] 0
 | 
				
			||||||
 | 
					assert b.outy[14] 0
 | 
				
			||||||
 | 
					assert b.outy[15] 0
 | 
				
			||||||
		Reference in New Issue
	
	Block a user