Compare commits
	
		
			5 Commits
		
	
	
		
			a12b77edd5
			...
			ad318259a5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | ad318259a5 | ||
|  | 932e967f3d | ||
|  | cf66c0e665 | ||
|  | aa67bd6168 | ||
|  | 78a8f72d25 | 
| @@ -51,64 +51,62 @@ namespace tmpl { | |||||||
| //        - the last wl the word to write | //        - the last wl the word to write | ||||||
| // data -> the data saved in the flip flop, sized wl x nw | // data -> the data saved in the flip flop, sized wl x nw | ||||||
| export template<pint log_nw,wl,N_dly_cfg> | export template<pint log_nw,wl,N_dly_cfg> | ||||||
| defproc register_rw (avMx1of2<1+log_nw+wl> in; d1of<wl> data[2<<log_nw]; power supply; bool reset_B,reset_mem_B){ | defproc register_rw (avMx1of2<1+log_nw+wl> in; d1of<wl> data[2<<log_nw]; power supply; bool? reset_B,reset_mem_B,dly_cfg[N_dly_cfg]){ | ||||||
|     bool _in_v_temp,_in_a_temp,_clock_temp,_clock; |     bool _in_v_temp,_in_a_temp,_clock_temp,_clock; | ||||||
|  |     pint _nw = 2<<log_nw; | ||||||
|     //Validation of the input  |     //Validation of the input  | ||||||
|     Mx1of2<1+log_nw+wl> in_temp; |     Mx1of2<1+log_nw+wl> _in_temp; | ||||||
|     (i:1+log_nw+wl:in_temp.d[i] = in.d.d[i];) |     (i:1+log_nw+wl:_in_temp.d[i] = in.d.d[i];) | ||||||
|     vtree<1+log_nw+wl> val_input(.in = in_temp,.out = _in_v_temp, .supply = supply); |     vtree<1+log_nw+wl> val_input(.in = _in_temp,.out = _in_v_temp, .supply = supply); | ||||||
|     sigbuf_1output<4> val_input_X(.in = _in_v_temp,.out = in.v,.supply = supply); |     sigbuf_1output<4> val_input_X(.in = _in_v_temp,.out = in.v,.supply = supply); | ||||||
|     in.v = _in_v_temp; |     // Generation of the fake clock pulse | ||||||
|     // Generation of the clock pulse |     delayprog<N_dly_cfg> clk_dly(.in = _in_v_temp, .out = _clock_temp,.s = dly_cfg, .supply = supply); | ||||||
|     delayprog<N_dly_cfg> dly(.in = _in_v_temp, .s = _clock_temp, .supply = supply); |     sigbuf_1output<4> clk_X(.in = _clock_temp,.out = _clock,.supply = supply); | ||||||
|     sigbuf_1output<4> val_input_X(.in = _clock_temp,.out = _clock,.supply = supply); |  | ||||||
|     // Sending back to the ackowledge |     // Sending back to the ackowledge | ||||||
|     delayprog<N_dly_cfg> dly(.in = _clock, .s = _in_a_temp, .supply = supply); |     delayprog<N_dly_cfg> ack_dly(.in = _clock, .out = _in_a_temp,.s = dly_cfg, .supply = supply); | ||||||
|     sigbuf_1output<4> val_input_X(.in = _in_a_temp,.out = in.a,.supply = supply); |     sigbuf_1output<4> ack_input_X(.in = _in_a_temp,.out = in.a,.supply = supply); | ||||||
|     //Reset Buffers |     //Reset Buffers | ||||||
|     bool _reset_BX,_reset_mem_BX,_reset_mem_BXX[_nw*w]; |     bool _reset_BX,_reset_mem_BX,_reset_mem_BXX[_nw*wl]; | ||||||
|     BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); |     BUF_X1 reset_buf_BX(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); | ||||||
|     BUF_X1 reset_buf(.a=reset_mem_B, .y=_reset_mem_BX,.vdd=supply.vdd,.vss=supply.vss); |     BUF_X1 reset_buf_BXX(.a=reset_mem_B, .y=_reset_mem_BX,.vdd=supply.vdd,.vss=supply.vss); | ||||||
|     sigbuf<_nw*wl> reset_bufarray(.in=_reset_mem_BX, .out=_reset_BXX_mem,.vdd=supply.vdd,.vss=supply.vss); |     sigbuf<_nw*wl> reset_bufarray(.in=_reset_mem_BX, .out=_reset_mem_BXX,.supply=supply); | ||||||
|     // Creating the different flip flop arrays |     // Creating the different flip flop arrays | ||||||
|     bool _nw = 2<<log_nw; |     bool _out_encoder[_nw],_clock_word_temp[_nw],_clock_word[_nw],_clock_buffer_out[_nw*wl]; | ||||||
|     bool _word_idx = 0; |  | ||||||
|     bool _out_encoder[_nw],_clock_word_temp[_nw],_clock_word[_nw]; |  | ||||||
|     andtree<log_nw> atree[_nw]; |     andtree<log_nw> atree[_nw]; | ||||||
|     AND2_X1 and_encoder[_nw]; |     AND2_X1 and_encoder[_nw]; | ||||||
|     sigbuf<wl> clock_buffer; |     sigbuf<wl> clock_buffer[_nw]; | ||||||
|     DFFQ_R_X1 ff[_nw*wl]; |     DFFQ_R_X1 ff[_nw*wl]; | ||||||
|     (k:_nw:atree_x[k].supply = supply;) |     pint _bitval; | ||||||
|  |     (k:_nw:atree[k].supply = supply;) | ||||||
|     (_word_idx:_nw: |     (_word_idx:_nw: | ||||||
|         // Decoding the bit pattern to understand which word we are looking at |         // Decoding the bit pattern to understand which word we are looking at | ||||||
|         (pin_idx:log_nw: |         (pin_idx:log_nw: | ||||||
|             bitval = (_word_idx & ( 1 << pin_idx )) >> pin_idx; // Get binary digit of integer i, column j |             _bitval = (_word_idx & ( 1 << pin_idx )) >> pin_idx; // Get binary digit of integer i, column j | ||||||
|             [bitval = 1 ->  |             [_bitval = 1 ->  | ||||||
|                 atree[_word_idx].in[pin_idx] = in.d.d[pin_idx+1].t; |                 atree[_word_idx].in[pin_idx] = in.d.d[pin_idx+wl].t; | ||||||
|             [] bitval = 0 -> |             [] _bitval = 0 -> | ||||||
|                 atree[_word_idx].in[pin_idx] = in.d.d[pin_idx+1].f; |                 atree[_word_idx].in[pin_idx] = in.d.d[pin_idx+wl].f; | ||||||
|             []bitval >= 2 -> {false : "fuck"}; |             []_bitval >= 2 -> {false : "fuck"}; | ||||||
|             ] |             ] | ||||||
|         ) |         ) | ||||||
|         // Activating the fake clock for the right word |         // Activating the fake clock for the right word | ||||||
|         atree_x[_word_idx].out = _out_encoder[_word_idx];     |         atree[_word_idx].out = _out_encoder[_word_idx];     | ||||||
|         and_encoder[_word_idx].a = _out_encoder[_word_idx]; |         and_encoder[_word_idx].a = _out_encoder[_word_idx]; | ||||||
|         and_encoder[_word_idx].b = _clock; |         and_encoder[_word_idx].b = _clock; | ||||||
|         and_encoder[_word_idx].y = _clock_word_temp[_word_idx]; |         and_encoder[_word_idx].y = _clock_word_temp[_word_idx]; | ||||||
|         and_encoder[_word_idx].vdd = supply.vdd; |         and_encoder[_word_idx].vdd = supply.vdd; | ||||||
|         and_encoder[_word_idx].vss = supply.vss; |         and_encoder[_word_idx].vss = supply.vss; | ||||||
|         clock_buffer[_word_idx].in = _clock_word_temp[_word_idx]; |         clock_buffer[_word_idx].in = _clock_word_temp[_word_idx]; | ||||||
|         clock_buffer[_word_idx].out = _clock_word[_word_idx]; |         clock_buffer[_word_idx].supply = supply; | ||||||
|         clock_buffer[_word_idx].vdd = supply.vdd; |  | ||||||
|         clock_buffer[_word_idx].vss = supply.vss; |  | ||||||
|         // Describing all the FF and their connection |         // Describing all the FF and their connection | ||||||
|         (_bit_idx:wl: |         (_bit_idx:wl: | ||||||
|             ff[_bit_idx*(1+_word_idx)].clk = _clock_word[_word_idx]; |             clock_buffer[_word_idx].out[_bit_idx] = _clock_buffer_out[_bit_idx*(1+_word_idx)]; | ||||||
|             ff[_bit_idx*(1+_word_idx)].d = in.d.d[_bit_idx+1+log_nw]; |             // ff[_bit_idx*(1+_word_idx)].clk = _clock_buffer_out[_bit_idx*(1+_word_idx)]; | ||||||
|             ff[_bit_idx*(1+_word_idx)].q = data[_word_idx].d[_bit_idx]; |             // ff[_bit_idx*(1+_word_idx)].d = in.d.d[_bit_idx+1+log_nw].t; | ||||||
|             ff[_bit_idx*(1+_word_idx)].reset_B = reset_mem_BXX[_bit_idx*(1+_word_idx)]; |             // ff[_bit_idx*(1+_word_idx)].q = data[_word_idx].d[_bit_idx]; | ||||||
|             ff[_bit_idx*(1+_word_idx)].vdd = supply.vdd; |             // ff[_bit_idx*(1+_word_idx)].reset_B = _reset_mem_BXX[_bit_idx*(1+_word_idx)]; | ||||||
|             ff[_bit_idx*(1+_word_idx)].vss = supply.vss; |             // ff[_bit_idx*(1+_word_idx)].vdd = supply.vdd; | ||||||
|  |             // ff[_bit_idx*(1+_word_idx)].vss = supply.vss; | ||||||
|         ) |         ) | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										298
									
								
								test/unit_tests/register_write/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								test/unit_tests/register_write/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -30,13 +30,13 @@ import "../../dataflow_neuro/registers.act"; | |||||||
| import globals; | import globals; | ||||||
|  |  | ||||||
| open tmpl::dataflow_neuro; | open tmpl::dataflow_neuro; | ||||||
|  | // 2 bits encoder, 2 bits long words, 2 delays???? | ||||||
| defproc register_test (avMx1of2<1+2+2> in; d1of<2> data[2<<2]){ | defproc register_test (avMx1of2<1+2+2> in; d1of<2> data[2<<2]; bool? dly_cfg[2]){ | ||||||
|  |  | ||||||
|     register_rw<2,2,2> registers(.in=in,.data = data); |     register_rw<2,2,2> registers(.in=in,.data = data); | ||||||
|     //Low active Reset  |     //Low active Reset  | ||||||
|     bool _reset_B;  |     bool _reset_B;  | ||||||
|     power supply; |     power _supply; | ||||||
|     prs { |     prs { | ||||||
|     	Reset => _reset_B- |     	Reset => _reset_B- | ||||||
|     } |     } | ||||||
| @@ -44,7 +44,8 @@ defproc register_test (avMx1of2<1+2+2> in; d1of<2> data[2<<2]){ | |||||||
|     _supply.vss = GND; |     _supply.vss = GND; | ||||||
|     _supply.vdd = Vdd; |     _supply.vdd = Vdd; | ||||||
|     registers.reset_B = _reset_B; |     registers.reset_B = _reset_B; | ||||||
|     registers.reset_B_mem = _reset_B; |     registers.reset_mem_B = _reset_B; | ||||||
|  |     registers.dly_cfg = dly_cfg; | ||||||
|      |      | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,43 @@ | |||||||
| watchall | watchall | ||||||
| system "echo '[0] start test'" | system "echo '[0] start test'" | ||||||
| set Reset 1 | set Reset 1 | ||||||
| set-qdi-channel-neutral "t.in" 2 |  | ||||||
|  |  | ||||||
|  | set-qdi-channel-neutral "t.in" 5 | ||||||
|  | set t.data[0].d[0] 0 | ||||||
|  | set t.data[0].d[1] 0 | ||||||
|  | set t.data[1].d[0] 0 | ||||||
|  | set t.data[1].d[1] 0 | ||||||
| cycle | cycle | ||||||
| status X | status X | ||||||
| mode run | mode run | ||||||
|  | assert-qdi-channel-neutral "t.in" 5 | ||||||
|  | assert t.data[0].d[0] 0 | ||||||
|  | assert t.data[0].d[1] 0 | ||||||
|  | assert t.data[1].d[0] 0 | ||||||
|  | assert t.data[1].d[1] 0 | ||||||
|  | set Reset 0 | ||||||
|  | cycle | ||||||
| system "echo '[1] reset completed'" | system "echo '[1] reset completed'" | ||||||
|  | # Set delay config lines | ||||||
|  | set t.dly_cfg[0] 1 | ||||||
|  | set t.dly_cfg[1] 1 | ||||||
|  | cycle | ||||||
|  | assert-qdi-channel-neutral "t.in" 5 | ||||||
|  | system "echo '[2] delay line set'" | ||||||
|  | set-qdi-channel-valid "t.in" 5 3 | ||||||
|  | cycle | ||||||
|  | assert-qdi-channel-valid "t.in" 5 3 | ||||||
|  | assert t.registers._clock 1 | ||||||
|  | assert t.registers._out_encoder[0] 1 | ||||||
|  | assert t.registers._out_encoder[1] 0 | ||||||
|  | assert t.registers._out_encoder[2] 0 | ||||||
|  | assert t.registers._out_encoder[3] 0 | ||||||
|  | set-qdi-channel-neutral "t.in" 5 | ||||||
|  | cycle | ||||||
|  | assert t.registers._clock 0 | ||||||
|  | assert t.registers.ff[0].q 1 | ||||||
|  | assert t.registers.ff[1].q 1 | ||||||
|  | system "echo '[3] clock checked'" | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								test/unit_tests/vtree_5/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								test/unit_tests/vtree_5/run/prsim.out
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | t._in.d[1].t t.vtree_test.ct.in[2] t._in.d[2].f t._in.d[3].t t._in.d[3].f t.vtree_test.ct.C3Els[0]._y t.vtree_test.ct.in[0] t._in.d[4].f t._in.d[0].f t._in.d[4].t t._in.d[0].t t.out t._in.d[1].f t._in.d[2].t t.vtree_test.ct.in[3] t.vtree_test.ct.tmp[6] t.vtree_test.OR2_tf[3]._y t.vtree_test.ct.in[1] t.vtree_test.ct.in[4] t.vtree_test.OR2_tf[4]._y t.vtree_test.OR2_tf[0]._y t.vtree_test.ct.C2Els[1]._y t.vtree_test.ct.C2Els[0]._y t.vtree_test.ct.tmp[5] t.vtree_test.OR2_tf[2]._y t.vtree_test.OR2_tf[1]._y  | ||||||
|  | [0] starting test true high | ||||||
|  | 	         0 t._in.d[0].f : 0 | ||||||
|  | 	         0 t._in.d[4].t : 0 | ||||||
|  | 	         0 t._in.d[4].f : 0 | ||||||
|  | 	         0 t._in.d[3].t : 0 | ||||||
|  | 	         0 t._in.d[1].f : 0 | ||||||
|  | 	         0 t._in.d[3].f : 0 | ||||||
|  | 	         0 t._in.d[2].t : 0 | ||||||
|  | 	         0 t._in.d[0].t : 0 | ||||||
|  | 	         0 t._in.d[2].f : 0 | ||||||
|  | 	         0 t._in.d[1].t : 0 | ||||||
|  | 	         1 t.vtree_test.OR2_tf[4]._y : 1  [by t._in.d[4].f:=0] | ||||||
|  | 	         2 t.vtree_test.OR2_tf[2]._y : 1  [by t._in.d[2].f:=0] | ||||||
|  | 	       116 t.vtree_test.ct.in[2] : 0  [by t.vtree_test.OR2_tf[2]._y:=1] | ||||||
|  | 	      1138 t.vtree_test.ct.in[4] : 0  [by t.vtree_test.OR2_tf[4]._y:=1] | ||||||
|  | 	      4753 t.vtree_test.OR2_tf[1]._y : 1  [by t._in.d[1].t:=0] | ||||||
|  | 	      7092 t.vtree_test.OR2_tf[3]._y : 1  [by t._in.d[3].f:=0] | ||||||
|  | 	      8818 t.vtree_test.ct.in[3] : 0  [by t.vtree_test.OR2_tf[3]._y:=1] | ||||||
|  | 	      8857 t.vtree_test.ct.C3Els[0]._y : 1  [by t.vtree_test.ct.in[3]:=0] | ||||||
|  | 	      8872 t.vtree_test.ct.tmp[6] : 0  [by t.vtree_test.ct.C3Els[0]._y:=1] | ||||||
|  | 	     10467 t.vtree_test.OR2_tf[0]._y : 1  [by t._in.d[0].t:=0] | ||||||
|  | 	     10958 t.vtree_test.ct.in[0] : 0  [by t.vtree_test.OR2_tf[0]._y:=1] | ||||||
|  | 	     70119 t.vtree_test.ct.in[1] : 0  [by t.vtree_test.OR2_tf[1]._y:=1] | ||||||
|  | 	     70132 t.vtree_test.ct.C2Els[0]._y : 1  [by t.vtree_test.ct.in[1]:=0] | ||||||
|  | 	     70172 t.vtree_test.ct.tmp[5] : 0  [by t.vtree_test.ct.C2Els[0]._y:=1] | ||||||
|  | 	     70587 t.vtree_test.ct.C2Els[1]._y : 1  [by t.vtree_test.ct.tmp[5]:=0] | ||||||
|  | 	     70607 t.out : 0  [by t.vtree_test.ct.C2Els[1]._y:=1] | ||||||
|  | 	     70607 t._in.d[0].t : 1 | ||||||
|  | 	     70607 t._in.d[4].f : 1 | ||||||
|  | 	     70607 t._in.d[2].f : 1 | ||||||
|  | 	     70607 t._in.d[1].t : 1 | ||||||
|  | 	     70607 t._in.d[3].f : 1 | ||||||
|  | 	     70623 t.vtree_test.OR2_tf[2]._y : 0  [by t._in.d[2].f:=1] | ||||||
|  | 	     70627 t.vtree_test.ct.in[2] : 1  [by t.vtree_test.OR2_tf[2]._y:=0] | ||||||
|  | 	     70654 t.vtree_test.OR2_tf[4]._y : 0  [by t._in.d[4].f:=1] | ||||||
|  | 	     76668 t.vtree_test.OR2_tf[0]._y : 0  [by t._in.d[0].t:=1] | ||||||
|  | 	     76683 t.vtree_test.ct.in[0] : 1  [by t.vtree_test.OR2_tf[0]._y:=0] | ||||||
|  | 	     79783 t.vtree_test.ct.in[4] : 1  [by t.vtree_test.OR2_tf[4]._y:=0] | ||||||
|  | 	     84331 t.vtree_test.OR2_tf[3]._y : 0  [by t._in.d[3].f:=1] | ||||||
|  | 	    114705 t.vtree_test.OR2_tf[1]._y : 0  [by t._in.d[1].t:=1] | ||||||
|  | 	    127579 t.vtree_test.ct.in[3] : 1  [by t.vtree_test.OR2_tf[3]._y:=0] | ||||||
|  | 	    127634 t.vtree_test.ct.C3Els[0]._y : 0  [by t.vtree_test.ct.in[3]:=1] | ||||||
|  | 	    151636 t.vtree_test.ct.in[1] : 1  [by t.vtree_test.OR2_tf[1]._y:=0] | ||||||
|  | 	    179287 t.vtree_test.ct.tmp[6] : 1  [by t.vtree_test.ct.C3Els[0]._y:=0] | ||||||
|  | 	    181416 t.vtree_test.ct.C2Els[0]._y : 0  [by t.vtree_test.ct.in[1]:=1] | ||||||
|  | 	    195265 t.vtree_test.ct.tmp[5] : 1  [by t.vtree_test.ct.C2Els[0]._y:=0] | ||||||
|  | 	    220077 t.vtree_test.ct.C2Els[1]._y : 0  [by t.vtree_test.ct.tmp[5]:=1] | ||||||
|  | 	    234420 t.out : 1  [by t.vtree_test.ct.C2Els[1]._y:=0] | ||||||
|  | [1] cleaning input | ||||||
							
								
								
									
										218
									
								
								test/unit_tests/vtree_5/run/test.prs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								test/unit_tests/vtree_5/run/test.prs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,218 @@ | |||||||
|  | = "GND" "GND" | ||||||
|  | = "Vdd" "Vdd" | ||||||
|  | = "Reset" "Reset" | ||||||
|  | ~"t.vtree_test.ct.C2Els[0].c1"&~"t.vtree_test.ct.C2Els[0].c2"->"t.vtree_test.ct.C2Els[0]._y"+ | ||||||
|  | "t.vtree_test.ct.C2Els[0].c1"&"t.vtree_test.ct.C2Els[0].c2"->"t.vtree_test.ct.C2Els[0]._y"- | ||||||
|  | "t.vtree_test.ct.C2Els[0]._y"->"t.vtree_test.ct.C2Els[0].y"- | ||||||
|  | ~("t.vtree_test.ct.C2Els[0]._y")->"t.vtree_test.ct.C2Els[0].y"+ | ||||||
|  | ~"t.vtree_test.ct.C2Els[1].c1"&~"t.vtree_test.ct.C2Els[1].c2"->"t.vtree_test.ct.C2Els[1]._y"+ | ||||||
|  | "t.vtree_test.ct.C2Els[1].c1"&"t.vtree_test.ct.C2Els[1].c2"->"t.vtree_test.ct.C2Els[1]._y"- | ||||||
|  | "t.vtree_test.ct.C2Els[1]._y"->"t.vtree_test.ct.C2Els[1].y"- | ||||||
|  | ~("t.vtree_test.ct.C2Els[1]._y")->"t.vtree_test.ct.C2Els[1].y"+ | ||||||
|  | ~"t.vtree_test.ct.C3Els[0].c1"&~"t.vtree_test.ct.C3Els[0].c2"&~"t.vtree_test.ct.C3Els[0].c3"->"t.vtree_test.ct.C3Els[0]._y"+ | ||||||
|  | "t.vtree_test.ct.C3Els[0].c1"&"t.vtree_test.ct.C3Els[0].c2"&"t.vtree_test.ct.C3Els[0].c3"->"t.vtree_test.ct.C3Els[0]._y"- | ||||||
|  | "t.vtree_test.ct.C3Els[0]._y"->"t.vtree_test.ct.C3Els[0].y"- | ||||||
|  | ~("t.vtree_test.ct.C3Els[0]._y")->"t.vtree_test.ct.C3Els[0].y"+ | ||||||
|  | = "t.vtree_test.ct.tmp[5]" "t.vtree_test.ct.C2Els[1].c1" | ||||||
|  | = "t.vtree_test.ct.tmp[5]" "t.vtree_test.ct.C2Els[0].y" | ||||||
|  | = "t.vtree_test.ct.tmp[6]" "t.vtree_test.ct.C2Els[1].c2" | ||||||
|  | = "t.vtree_test.ct.tmp[6]" "t.vtree_test.ct.C3Els[0].y" | ||||||
|  | = "t.vtree_test.ct.supply.vdd" "t.vtree_test.ct.C3Els[0].vdd" | ||||||
|  | = "t.vtree_test.ct.supply.vdd" "t.vtree_test.ct.C2Els[1].vdd" | ||||||
|  | = "t.vtree_test.ct.supply.vdd" "t.vtree_test.ct.C2Els[0].vdd" | ||||||
|  | = "t.vtree_test.ct.supply.vss" "t.vtree_test.ct.C3Els[0].vss" | ||||||
|  | = "t.vtree_test.ct.supply.vss" "t.vtree_test.ct.C2Els[1].vss" | ||||||
|  | = "t.vtree_test.ct.supply.vss" "t.vtree_test.ct.C2Els[0].vss" | ||||||
|  | = "t.vtree_test.ct.in[0]" "t.vtree_test.ct.C2Els[0].c1" | ||||||
|  | = "t.vtree_test.ct.in[0]" "t.vtree_test.ct.tmp[0]" | ||||||
|  | = "t.vtree_test.ct.in[1]" "t.vtree_test.ct.C2Els[0].c2" | ||||||
|  | = "t.vtree_test.ct.in[1]" "t.vtree_test.ct.tmp[1]" | ||||||
|  | = "t.vtree_test.ct.in[2]" "t.vtree_test.ct.C3Els[0].c1" | ||||||
|  | = "t.vtree_test.ct.in[2]" "t.vtree_test.ct.tmp[2]" | ||||||
|  | = "t.vtree_test.ct.in[3]" "t.vtree_test.ct.C3Els[0].c2" | ||||||
|  | = "t.vtree_test.ct.in[3]" "t.vtree_test.ct.tmp[3]" | ||||||
|  | = "t.vtree_test.ct.in[4]" "t.vtree_test.ct.C3Els[0].c3" | ||||||
|  | = "t.vtree_test.ct.in[4]" "t.vtree_test.ct.tmp[4]" | ||||||
|  | = "t.vtree_test.ct.out" "t.vtree_test.ct.C2Els[1].y" | ||||||
|  | = "t.vtree_test.ct.out" "t.vtree_test.ct.tmp[7]" | ||||||
|  | = "t.vtree_test.ct.in[0]" "t.vtree_test.OR2_tf[0].y" | ||||||
|  | = "t.vtree_test.ct.in[1]" "t.vtree_test.OR2_tf[1].y" | ||||||
|  | = "t.vtree_test.ct.in[2]" "t.vtree_test.OR2_tf[2].y" | ||||||
|  | = "t.vtree_test.ct.in[3]" "t.vtree_test.OR2_tf[3].y" | ||||||
|  | = "t.vtree_test.ct.in[4]" "t.vtree_test.OR2_tf[4].y" | ||||||
|  | "t.vtree_test.OR2_tf[0].a"|"t.vtree_test.OR2_tf[0].b"->"t.vtree_test.OR2_tf[0]._y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[0].a"|"t.vtree_test.OR2_tf[0].b")->"t.vtree_test.OR2_tf[0]._y"+ | ||||||
|  | "t.vtree_test.OR2_tf[0]._y"->"t.vtree_test.OR2_tf[0].y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[0]._y")->"t.vtree_test.OR2_tf[0].y"+ | ||||||
|  | "t.vtree_test.OR2_tf[1].a"|"t.vtree_test.OR2_tf[1].b"->"t.vtree_test.OR2_tf[1]._y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[1].a"|"t.vtree_test.OR2_tf[1].b")->"t.vtree_test.OR2_tf[1]._y"+ | ||||||
|  | "t.vtree_test.OR2_tf[1]._y"->"t.vtree_test.OR2_tf[1].y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[1]._y")->"t.vtree_test.OR2_tf[1].y"+ | ||||||
|  | "t.vtree_test.OR2_tf[2].a"|"t.vtree_test.OR2_tf[2].b"->"t.vtree_test.OR2_tf[2]._y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[2].a"|"t.vtree_test.OR2_tf[2].b")->"t.vtree_test.OR2_tf[2]._y"+ | ||||||
|  | "t.vtree_test.OR2_tf[2]._y"->"t.vtree_test.OR2_tf[2].y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[2]._y")->"t.vtree_test.OR2_tf[2].y"+ | ||||||
|  | "t.vtree_test.OR2_tf[3].a"|"t.vtree_test.OR2_tf[3].b"->"t.vtree_test.OR2_tf[3]._y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[3].a"|"t.vtree_test.OR2_tf[3].b")->"t.vtree_test.OR2_tf[3]._y"+ | ||||||
|  | "t.vtree_test.OR2_tf[3]._y"->"t.vtree_test.OR2_tf[3].y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[3]._y")->"t.vtree_test.OR2_tf[3].y"+ | ||||||
|  | "t.vtree_test.OR2_tf[4].a"|"t.vtree_test.OR2_tf[4].b"->"t.vtree_test.OR2_tf[4]._y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[4].a"|"t.vtree_test.OR2_tf[4].b")->"t.vtree_test.OR2_tf[4]._y"+ | ||||||
|  | "t.vtree_test.OR2_tf[4]._y"->"t.vtree_test.OR2_tf[4].y"- | ||||||
|  | ~("t.vtree_test.OR2_tf[4]._y")->"t.vtree_test.OR2_tf[4].y"+ | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.ct.supply.vss" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.ct.supply.vdd" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.OR2_tf[4].vdd" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.OR2_tf[3].vdd" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.OR2_tf[2].vdd" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.OR2_tf[1].vdd" | ||||||
|  | = "t.vtree_test.supply.vdd" "t.vtree_test.OR2_tf[0].vdd" | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.OR2_tf[4].vss" | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.OR2_tf[3].vss" | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.OR2_tf[2].vss" | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.OR2_tf[1].vss" | ||||||
|  | = "t.vtree_test.supply.vss" "t.vtree_test.OR2_tf[0].vss" | ||||||
|  | = "t.vtree_test.out" "t.vtree_test.ct.out" | ||||||
|  | = "t.vtree_test.in.d[0].d[0]" "t.vtree_test.in.d[0].f" | ||||||
|  | = "t.vtree_test.in.d[0].d[1]" "t.vtree_test.in.d[0].t" | ||||||
|  | = "t.vtree_test.in.d[1].d[0]" "t.vtree_test.in.d[1].f" | ||||||
|  | = "t.vtree_test.in.d[1].d[1]" "t.vtree_test.in.d[1].t" | ||||||
|  | = "t.vtree_test.in.d[2].d[0]" "t.vtree_test.in.d[2].f" | ||||||
|  | = "t.vtree_test.in.d[2].d[1]" "t.vtree_test.in.d[2].t" | ||||||
|  | = "t.vtree_test.in.d[3].d[0]" "t.vtree_test.in.d[3].f" | ||||||
|  | = "t.vtree_test.in.d[3].d[1]" "t.vtree_test.in.d[3].t" | ||||||
|  | = "t.vtree_test.in.d[4].d[0]" "t.vtree_test.in.d[4].f" | ||||||
|  | = "t.vtree_test.in.d[4].d[1]" "t.vtree_test.in.d[4].t" | ||||||
|  | = "t.vtree_test.in.d[4].d[0]" "t.vtree_test.in.d[4].f" | ||||||
|  | = "t.vtree_test.in.d[4].d[1]" "t.vtree_test.in.d[4].t" | ||||||
|  | = "t.vtree_test.in.d[3].d[0]" "t.vtree_test.in.d[3].f" | ||||||
|  | = "t.vtree_test.in.d[3].d[1]" "t.vtree_test.in.d[3].t" | ||||||
|  | = "t.vtree_test.in.d[2].d[0]" "t.vtree_test.in.d[2].f" | ||||||
|  | = "t.vtree_test.in.d[2].d[1]" "t.vtree_test.in.d[2].t" | ||||||
|  | = "t.vtree_test.in.d[1].d[0]" "t.vtree_test.in.d[1].f" | ||||||
|  | = "t.vtree_test.in.d[1].d[1]" "t.vtree_test.in.d[1].t" | ||||||
|  | = "t.vtree_test.in.d[0].d[0]" "t.vtree_test.in.d[0].f" | ||||||
|  | = "t.vtree_test.in.d[0].d[1]" "t.vtree_test.in.d[0].t" | ||||||
|  | = "t.vtree_test.in.d[4].d[0]" "t.vtree_test.OR2_tf[4].b" | ||||||
|  | = "t.vtree_test.in.d[4].d[0]" "t.vtree_test.in.d[4].f" | ||||||
|  | = "t.vtree_test.in.d[4].d[1]" "t.vtree_test.OR2_tf[4].a" | ||||||
|  | = "t.vtree_test.in.d[4].d[1]" "t.vtree_test.in.d[4].t" | ||||||
|  | = "t.vtree_test.in.d[3].d[0]" "t.vtree_test.OR2_tf[3].b" | ||||||
|  | = "t.vtree_test.in.d[3].d[0]" "t.vtree_test.in.d[3].f" | ||||||
|  | = "t.vtree_test.in.d[3].d[1]" "t.vtree_test.OR2_tf[3].a" | ||||||
|  | = "t.vtree_test.in.d[3].d[1]" "t.vtree_test.in.d[3].t" | ||||||
|  | = "t.vtree_test.in.d[2].d[0]" "t.vtree_test.OR2_tf[2].b" | ||||||
|  | = "t.vtree_test.in.d[2].d[0]" "t.vtree_test.in.d[2].f" | ||||||
|  | = "t.vtree_test.in.d[2].d[1]" "t.vtree_test.OR2_tf[2].a" | ||||||
|  | = "t.vtree_test.in.d[2].d[1]" "t.vtree_test.in.d[2].t" | ||||||
|  | = "t.vtree_test.in.d[1].d[0]" "t.vtree_test.OR2_tf[1].b" | ||||||
|  | = "t.vtree_test.in.d[1].d[0]" "t.vtree_test.in.d[1].f" | ||||||
|  | = "t.vtree_test.in.d[1].d[1]" "t.vtree_test.OR2_tf[1].a" | ||||||
|  | = "t.vtree_test.in.d[1].d[1]" "t.vtree_test.in.d[1].t" | ||||||
|  | = "t.vtree_test.in.d[0].d[0]" "t.vtree_test.OR2_tf[0].b" | ||||||
|  | = "t.vtree_test.in.d[0].d[0]" "t.vtree_test.in.d[0].f" | ||||||
|  | = "t.vtree_test.in.d[0].d[1]" "t.vtree_test.OR2_tf[0].a" | ||||||
|  | = "t.vtree_test.in.d[0].d[1]" "t.vtree_test.in.d[0].t" | ||||||
|  | = "Vdd" "t.vtree_test.supply.vdd" | ||||||
|  | = "GND" "t.vtree_test.supply.vss" | ||||||
|  | = "t._in.d[0].d[0]" "t._in.d[0].f" | ||||||
|  | = "t._in.d[0].d[1]" "t._in.d[0].t" | ||||||
|  | = "t._in.d[1].d[0]" "t._in.d[1].f" | ||||||
|  | = "t._in.d[1].d[1]" "t._in.d[1].t" | ||||||
|  | = "t._in.d[2].d[0]" "t._in.d[2].f" | ||||||
|  | = "t._in.d[2].d[1]" "t._in.d[2].t" | ||||||
|  | = "t._in.d[3].d[0]" "t._in.d[3].f" | ||||||
|  | = "t._in.d[3].d[1]" "t._in.d[3].t" | ||||||
|  | = "t._in.d[4].d[0]" "t._in.d[4].f" | ||||||
|  | = "t._in.d[4].d[1]" "t._in.d[4].t" | ||||||
|  | = "t._in.d[4].d[0]" "t._in.d[4].f" | ||||||
|  | = "t._in.d[4].d[1]" "t._in.d[4].t" | ||||||
|  | = "t._in.d[3].d[0]" "t._in.d[3].f" | ||||||
|  | = "t._in.d[3].d[1]" "t._in.d[3].t" | ||||||
|  | = "t._in.d[2].d[0]" "t._in.d[2].f" | ||||||
|  | = "t._in.d[2].d[1]" "t._in.d[2].t" | ||||||
|  | = "t._in.d[1].d[0]" "t._in.d[1].f" | ||||||
|  | = "t._in.d[1].d[1]" "t._in.d[1].t" | ||||||
|  | = "t._in.d[0].d[0]" "t._in.d[0].f" | ||||||
|  | = "t._in.d[0].d[1]" "t._in.d[0].t" | ||||||
|  | = "t._in.d[0].f" "t.vtree_test.in.d[0].f" | ||||||
|  | = "t._in.d[0].t" "t.vtree_test.in.d[0].t" | ||||||
|  | = "t._in.d[0].d[0]" "t.vtree_test.in.d[0].d[0]" | ||||||
|  | = "t._in.d[0].d[1]" "t.vtree_test.in.d[0].d[1]" | ||||||
|  | = "t._in.d[1].f" "t.vtree_test.in.d[1].f" | ||||||
|  | = "t._in.d[1].t" "t.vtree_test.in.d[1].t" | ||||||
|  | = "t._in.d[1].d[0]" "t.vtree_test.in.d[1].d[0]" | ||||||
|  | = "t._in.d[1].d[1]" "t.vtree_test.in.d[1].d[1]" | ||||||
|  | = "t._in.d[2].f" "t.vtree_test.in.d[2].f" | ||||||
|  | = "t._in.d[2].t" "t.vtree_test.in.d[2].t" | ||||||
|  | = "t._in.d[2].d[0]" "t.vtree_test.in.d[2].d[0]" | ||||||
|  | = "t._in.d[2].d[1]" "t.vtree_test.in.d[2].d[1]" | ||||||
|  | = "t._in.d[3].f" "t.vtree_test.in.d[3].f" | ||||||
|  | = "t._in.d[3].t" "t.vtree_test.in.d[3].t" | ||||||
|  | = "t._in.d[3].d[0]" "t.vtree_test.in.d[3].d[0]" | ||||||
|  | = "t._in.d[3].d[1]" "t.vtree_test.in.d[3].d[1]" | ||||||
|  | = "t._in.d[4].f" "t.vtree_test.in.d[4].f" | ||||||
|  | = "t._in.d[4].t" "t.vtree_test.in.d[4].t" | ||||||
|  | = "t._in.d[4].d[0]" "t.vtree_test.in.d[4].d[0]" | ||||||
|  | = "t._in.d[4].d[1]" "t.vtree_test.in.d[4].d[1]" | ||||||
|  | = "t.out" "t.vtree_test.out" | ||||||
|  | = "t.in.d.d[0].d[0]" "t.in.d.d[0].f" | ||||||
|  | = "t.in.d.d[0].d[1]" "t.in.d.d[0].t" | ||||||
|  | = "t.in.d.d[1].d[0]" "t.in.d.d[1].f" | ||||||
|  | = "t.in.d.d[1].d[1]" "t.in.d.d[1].t" | ||||||
|  | = "t.in.d.d[2].d[0]" "t.in.d.d[2].f" | ||||||
|  | = "t.in.d.d[2].d[1]" "t.in.d.d[2].t" | ||||||
|  | = "t.in.d.d[3].d[0]" "t.in.d.d[3].f" | ||||||
|  | = "t.in.d.d[3].d[1]" "t.in.d.d[3].t" | ||||||
|  | = "t.in.d.d[4].d[0]" "t.in.d.d[4].f" | ||||||
|  | = "t.in.d.d[4].d[1]" "t.in.d.d[4].t" | ||||||
|  | = "t.in.d.d[4].d[0]" "t.in.d.d[4].f" | ||||||
|  | = "t.in.d.d[4].d[1]" "t.in.d.d[4].t" | ||||||
|  | = "t.in.d.d[3].d[0]" "t.in.d.d[3].f" | ||||||
|  | = "t.in.d.d[3].d[1]" "t.in.d.d[3].t" | ||||||
|  | = "t.in.d.d[2].d[0]" "t.in.d.d[2].f" | ||||||
|  | = "t.in.d.d[2].d[1]" "t.in.d.d[2].t" | ||||||
|  | = "t.in.d.d[1].d[0]" "t.in.d.d[1].f" | ||||||
|  | = "t.in.d.d[1].d[1]" "t.in.d.d[1].t" | ||||||
|  | = "t.in.d.d[0].d[0]" "t.in.d.d[0].f" | ||||||
|  | = "t.in.d.d[0].d[1]" "t.in.d.d[0].t" | ||||||
|  | = "t.in.d.d[4].d[0]" "t.in.d.d[4].f" | ||||||
|  | = "t.in.d.d[4].d[1]" "t.in.d.d[4].t" | ||||||
|  | = "t.in.d.d[3].d[0]" "t.in.d.d[3].f" | ||||||
|  | = "t.in.d.d[3].d[1]" "t.in.d.d[3].t" | ||||||
|  | = "t.in.d.d[2].d[0]" "t.in.d.d[2].f" | ||||||
|  | = "t.in.d.d[2].d[1]" "t.in.d.d[2].t" | ||||||
|  | = "t.in.d.d[1].d[0]" "t.in.d.d[1].f" | ||||||
|  | = "t.in.d.d[1].d[1]" "t.in.d.d[1].t" | ||||||
|  | = "t.in.d.d[0].d[0]" "t.in.d.d[0].f" | ||||||
|  | = "t.in.d.d[0].d[1]" "t.in.d.d[0].t" | ||||||
|  | = "t.in.d.d[0].f" "t._in.d[0].f" | ||||||
|  | = "t.in.d.d[0].t" "t._in.d[0].t" | ||||||
|  | = "t.in.d.d[0].d[0]" "t._in.d[0].d[0]" | ||||||
|  | = "t.in.d.d[0].d[1]" "t._in.d[0].d[1]" | ||||||
|  | = "t.in.d.d[1].f" "t._in.d[1].f" | ||||||
|  | = "t.in.d.d[1].t" "t._in.d[1].t" | ||||||
|  | = "t.in.d.d[1].d[0]" "t._in.d[1].d[0]" | ||||||
|  | = "t.in.d.d[1].d[1]" "t._in.d[1].d[1]" | ||||||
|  | = "t.in.d.d[2].f" "t._in.d[2].f" | ||||||
|  | = "t.in.d.d[2].t" "t._in.d[2].t" | ||||||
|  | = "t.in.d.d[2].d[0]" "t._in.d[2].d[0]" | ||||||
|  | = "t.in.d.d[2].d[1]" "t._in.d[2].d[1]" | ||||||
|  | = "t.in.d.d[3].f" "t._in.d[3].f" | ||||||
|  | = "t.in.d.d[3].t" "t._in.d[3].t" | ||||||
|  | = "t.in.d.d[3].d[0]" "t._in.d[3].d[0]" | ||||||
|  | = "t.in.d.d[3].d[1]" "t._in.d[3].d[1]" | ||||||
|  | = "t.in.d.d[4].f" "t._in.d[4].f" | ||||||
|  | = "t.in.d.d[4].t" "t._in.d[4].t" | ||||||
|  | = "t.in.d.d[4].d[0]" "t._in.d[4].d[0]" | ||||||
|  | = "t.in.d.d[4].d[1]" "t._in.d[4].d[1]" | ||||||
|  | = "t.in.d.d[4].d[0]" "t.in.d.d[4].f" | ||||||
|  | = "t.in.d.d[4].d[1]" "t.in.d.d[4].t" | ||||||
|  | = "t.in.d.d[3].d[0]" "t.in.d.d[3].f" | ||||||
|  | = "t.in.d.d[3].d[1]" "t.in.d.d[3].t" | ||||||
|  | = "t.in.d.d[2].d[0]" "t.in.d.d[2].f" | ||||||
|  | = "t.in.d.d[2].d[1]" "t.in.d.d[2].t" | ||||||
|  | = "t.in.d.d[1].d[0]" "t.in.d.d[1].f" | ||||||
|  | = "t.in.d.d[1].d[1]" "t.in.d.d[1].t" | ||||||
|  | = "t.in.d.d[0].d[0]" "t.in.d.d[0].f" | ||||||
|  | = "t.in.d.d[0].d[1]" "t.in.d.d[0].t" | ||||||
							
								
								
									
										49
									
								
								test/unit_tests/vtree_5/test.act
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								test/unit_tests/vtree_5/test.act
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | /************************************************************************* | ||||||
|  |  * | ||||||
|  |  *  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/cell_lib_async.act"; | ||||||
|  | import "../../dataflow_neuro/cell_lib_std.act"; | ||||||
|  | import "../../dataflow_neuro/treegates.act"; | ||||||
|  | import "../../dataflow_neuro/primitives.act"; | ||||||
|  | import "../../dataflow_neuro/coders.act"; | ||||||
|  | import globals; | ||||||
|  | import std::channel; | ||||||
|  | open std::channel; | ||||||
|  | open tmpl::dataflow_neuro; | ||||||
|  |  | ||||||
|  | defproc vtree_5 (avMx1of2?<5> in; bool! out){ | ||||||
|  |  | ||||||
|  |     Mx1of2?<5> _in; | ||||||
|  |     (i:5:_in.d[i] = in.d.d[i];) | ||||||
|  |     vtree<5> vtree_test(.in=_in, .out=out); | ||||||
|  |     vtree_test.supply.vss = GND; | ||||||
|  |     vtree_test.supply.vdd = Vdd; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | vtree_5 t; | ||||||
							
								
								
									
										11
									
								
								test/unit_tests/vtree_5/test.prsim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								test/unit_tests/vtree_5/test.prsim
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | watchall | ||||||
|  | system "echo '[0] starting test true high'" | ||||||
|  | set-qdi-channel-neutral "t.in" 5 | ||||||
|  | cycle | ||||||
|  | mode run | ||||||
|  | assert t.out 0 | ||||||
|  | set-qdi-channel-valid "t.in" 5 3 | ||||||
|  | cycle | ||||||
|  | mode run | ||||||
|  | assert t.out 1 | ||||||
|  | system "echo '[1] cleaning input'" | ||||||
		Reference in New Issue
	
	Block a user