diff --git a/dataflow_neuro/registers.act b/dataflow_neuro/registers.act index 5522717..554fda4 100644 --- a/dataflow_neuro/registers.act +++ b/dataflow_neuro/registers.act @@ -71,7 +71,7 @@ defproc register_rw (avMx1of2<1+log_nw+wl> in; d1of data[2< reset_bufarray(.in=_reset_mem_BX, .out=_reset_mem_BXX,.supply=supply); // Creating the different flip flop arrays - bool _out_encoder[_nw],_clock_word_temp[_nw],_clock_word[_nw]; + bool _out_encoder[_nw],_clock_word_temp[_nw],_clock_word[_nw],_clock_buffer_out[_nw*wl]; andtree atree[_nw]; AND2_X1 and_encoder[_nw]; sigbuf clock_buffer[_nw]; @@ -98,7 +98,16 @@ defproc register_rw (avMx1of2<1+log_nw+wl> in; d1of data[2<> cause: t.registers.clock_buffer[0].buf1._y (val: 0) +>> time: 599338 + 599338 t.registers.clock_buffer[0].buf1._y : 0 [by t.registers._clock_word_temp[0]:=1] + 601738 t.registers.ack_dly._a[1] : 1 [by t.registers.ack_dly.mu2[0]._y:=0] + 601741 t.registers.ack_dly.and2[1]._y : 0 [by t.registers.ack_dly._a[1]:=1] + 602682 t.registers.ack_dly.dly[1].a : 1 [by t.registers.ack_dly.and2[1]._y:=0] + 607699 t.registers._clock_buffer_out[0] : X [by t.registers.clock_buffer[0].buf1._y:=0] + 630124 t.registers.clock_buffer[4].buf1._y : 0 [by t.registers._clock_word_temp[4]:=1] + 661644 t.registers.ack_dly.dly[1]._y : 0 [by t.registers.ack_dly.dly[1].a:=1] + 661645 t.registers.ack_dly.dly[1].__y : 1 [by t.registers.ack_dly.dly[1]._y:=0] + 661687 t.registers.ack_dly.dly[1].___y : 0 [by t.registers.ack_dly.dly[1].__y:=1] + 664504 t.registers.ack_dly.dly[1].y : 1 [by t.registers.ack_dly.dly[1].___y:=0] + 678237 t.registers.ack_dly.dly[2]._y : 0 [by t.registers.ack_dly.dly[1].y:=1] + 678332 t.registers.ack_dly.dly[2].__y : 1 [by t.registers.ack_dly.dly[2]._y:=0] + 678667 t.registers.ack_dly.dly[2].___y : 0 [by t.registers.ack_dly.dly[2].__y:=1] + 678675 t.registers.ack_dly.dly[2].y : 1 [by t.registers.ack_dly.dly[2].___y:=0] + 678709 t.registers.ack_dly.mu2[1]._y : 0 [by t.registers.ack_dly.dly[2].y:=1] + 692596 t.registers._in_a_temp : 1 [by t.registers.ack_dly.mu2[1]._y:=0] + 693514 t.registers.ack_input_X.buf1._y : 0 [by t.registers._in_a_temp:=1] + 693518 t.in.a : 1 [by t.registers.ack_input_X.buf1._y:=0] + 693518 t.in.d.d[0].t : 0 + 693518 t.in.d.d[4].f : 0 + 693518 t.registers.atree[0].in[0] : 0 + 693518 t.in.d.d[1].t : 0 + 693518 t.registers.atree[0].in[1] : 0 + 693521 t.registers.val_input.OR2_tf[1]._y : 1 [by t.in.d.d[1].t:=0] + 693566 t.registers.atree[4].and2s[0]._y : 1 [by t.registers.atree[0].in[0]:=0] + 693696 t.registers.val_input.OR2_tf[3]._y : 1 [by t.registers.atree[0].in[1]:=0] + 695916 t.registers.val_input.OR2_tf[4]._y : 1 [by t.in.d.d[4].f:=0] + 696733 t.registers.val_input.OR2_tf[2]._y : 1 [by t.registers.atree[0].in[0]:=0] + 697560 t.registers.val_input.ct.in[2] : 0 [by t.registers.val_input.OR2_tf[2]._y:=1] + 699647 t.registers.val_input.ct.in[3] : 0 [by t.registers.val_input.OR2_tf[3]._y:=1] + 705465 t.registers._out_encoder[4] : 0 [by t.registers.atree[4].and2s[0]._y:=1] + 705638 t.registers.and_encoder[4]._y : 1 [by t.registers._out_encoder[4]:=0] + 705822 t.registers._clock_word_temp[4] : 0 [by t.registers.and_encoder[4]._y:=1] + 705823 t.registers.clock_buffer[4].buf1._y : 1 [by t.registers._clock_word_temp[4]:=0] + 714498 t.registers.val_input.ct.in[1] : 0 [by t.registers.val_input.OR2_tf[1]._y:=1] + 735401 t.registers.val_input.ct.in[4] : 0 [by t.registers.val_input.OR2_tf[4]._y:=1] + 735474 t.registers.val_input.ct.C3Els[0]._y : 1 [by t.registers.val_input.ct.in[4]:=0] + 735478 t.registers.val_input.ct.tmp[6] : 0 [by t.registers.val_input.ct.C3Els[0]._y:=1] + 739896 t.registers.val_input.OR2_tf[0]._y : 1 [by t.in.d.d[0].t:=0] + 740637 t.registers.atree[0].and2s[0]._y : 1 [by t.registers.atree[0].in[0]:=0] + 740733 t.registers._out_encoder[0] : 0 [by t.registers.atree[0].and2s[0]._y:=1] + 740869 t.registers.and_encoder[0]._y : 1 [by t.registers._out_encoder[0]:=0] + 740870 t.registers._clock_word_temp[0] : 0 [by t.registers.and_encoder[0]._y:=1] + 759916 t.registers.clock_buffer[0].buf1._y : 1 [by t.registers._clock_word_temp[0]:=0] + 760157 t.registers._clock_buffer_out[0] : 0 [by t.registers.clock_buffer[0].buf1._y:=1] + 777184 t.registers.val_input.ct.in[0] : 0 [by t.registers.val_input.OR2_tf[0]._y:=1] + 781143 t.registers.val_input.ct.C2Els[0]._y : 1 [by t.registers.val_input.ct.in[0]:=0] + 781155 t.registers.val_input.ct.tmp[5] : 0 [by t.registers.val_input.ct.C2Els[0]._y:=1] + 785055 t.registers.val_input.ct.C2Els[1]._y : 1 [by t.registers.val_input.ct.tmp[5]:=0] + 786084 t.registers._in_v_temp : 0 [by t.registers.val_input.ct.C2Els[1]._y:=1] + 786085 t.registers.clk_dly.and2[0]._y : 1 [by t.registers._in_v_temp:=0] + 786140 t.registers.val_input_X.buf1._y : 1 [by t.registers._in_v_temp:=0] + 786141 t.in.v : 0 [by t.registers.val_input_X.buf1._y:=1] + 831091 t.registers.clk_dly.dly[0].a : 0 [by t.registers.clk_dly.and2[0]._y:=1] + 831128 t.registers.clk_dly.dly[0]._y : 1 [by t.registers.clk_dly.dly[0].a:=0] + 854503 t.registers.clk_dly.dly[0].__y : 0 [by t.registers.clk_dly.dly[0]._y:=1] + 854504 t.registers.clk_dly.dly[0].___y : 1 [by t.registers.clk_dly.dly[0].__y:=0] + 858068 t.registers.clk_dly.dly[0].y : 0 [by t.registers.clk_dly.dly[0].___y:=1] + 859760 t.registers.clk_dly.mu2[0]._y : 1 [by t.registers.clk_dly.dly[0].y:=0] + 859773 t.registers.clk_dly._a[1] : 0 [by t.registers.clk_dly.mu2[0]._y:=1] + 876757 t.registers.clk_dly.and2[1]._y : 1 [by t.registers.clk_dly._a[1]:=0] + 877114 t.registers.clk_dly.dly[1].a : 0 [by t.registers.clk_dly.and2[1]._y:=1] + 877139 t.registers.clk_dly.dly[1]._y : 1 [by t.registers.clk_dly.dly[1].a:=0] + 877160 t.registers.clk_dly.dly[1].__y : 0 [by t.registers.clk_dly.dly[1]._y:=1] + 877161 t.registers.clk_dly.dly[1].___y : 1 [by t.registers.clk_dly.dly[1].__y:=0] + 886809 t.registers.clk_dly.dly[1].y : 0 [by t.registers.clk_dly.dly[1].___y:=1] + 886810 t.registers.clk_dly.dly[2]._y : 1 [by t.registers.clk_dly.dly[1].y:=0] + 886811 t.registers.clk_dly.dly[2].__y : 0 [by t.registers.clk_dly.dly[2]._y:=1] + 886972 t.registers.clk_dly.dly[2].___y : 1 [by t.registers.clk_dly.dly[2].__y:=0] + 888009 t.registers.clk_dly.dly[2].y : 0 [by t.registers.clk_dly.dly[2].___y:=1] + 888014 t.registers.clk_dly.mu2[1]._y : 1 [by t.registers.clk_dly.dly[2].y:=0] + 888595 t.registers._clock_temp : 0 [by t.registers.clk_dly.mu2[1]._y:=1] + 889003 t.registers.clk_X.buf1._y : 1 [by t.registers._clock_temp:=0] + 889014 t.registers._clock : 0 [by t.registers.clk_X.buf1._y:=1] + 890061 t.registers.ack_dly.and2[0]._y : 1 [by t.registers._clock:=0] + 890075 t.registers.ack_dly.dly[0].a : 0 [by t.registers.ack_dly.and2[0]._y:=1] + 890093 t.registers.ack_dly.dly[0]._y : 1 [by t.registers.ack_dly.dly[0].a:=0] + 890097 t.registers.ack_dly.dly[0].__y : 0 [by t.registers.ack_dly.dly[0]._y:=1] + 890201 t.registers.ack_dly.dly[0].___y : 1 [by t.registers.ack_dly.dly[0].__y:=0] + 921645 t.registers.ack_dly.dly[0].y : 0 [by t.registers.ack_dly.dly[0].___y:=1] + 922849 t.registers.ack_dly.mu2[0]._y : 1 [by t.registers.ack_dly.dly[0].y:=0] + 931304 t.registers.ack_dly._a[1] : 0 [by t.registers.ack_dly.mu2[0]._y:=1] + 931532 t.registers.ack_dly.and2[1]._y : 1 [by t.registers.ack_dly._a[1]:=0] + 932375 t.registers.ack_dly.dly[1].a : 0 [by t.registers.ack_dly.and2[1]._y:=1] + 933834 t.registers.ack_dly.dly[1]._y : 1 [by t.registers.ack_dly.dly[1].a:=0] + 933904 t.registers.ack_dly.dly[1].__y : 0 [by t.registers.ack_dly.dly[1]._y:=1] + 984326 t.registers.ack_dly.dly[1].___y : 1 [by t.registers.ack_dly.dly[1].__y:=0] + 984337 t.registers.ack_dly.dly[1].y : 0 [by t.registers.ack_dly.dly[1].___y:=1] + 984340 t.registers.ack_dly.dly[2]._y : 1 [by t.registers.ack_dly.dly[1].y:=0] + 984394 t.registers.ack_dly.dly[2].__y : 0 [by t.registers.ack_dly.dly[2]._y:=1] + 985542 t.registers.ack_dly.dly[2].___y : 1 [by t.registers.ack_dly.dly[2].__y:=0] + 986703 t.registers.ack_dly.dly[2].y : 0 [by t.registers.ack_dly.dly[2].___y:=1] + 995355 t.registers.ack_dly.mu2[1]._y : 1 [by t.registers.ack_dly.dly[2].y:=0] + 995436 t.registers._in_a_temp : 0 [by t.registers.ack_dly.mu2[1]._y:=1] + 1006513 t.registers.ack_input_X.buf1._y : 1 [by t.registers._in_a_temp:=0] + 1024496 t.in.a : 0 [by t.registers.ack_input_X.buf1._y:=1] +WRONG ASSERT: "t.registers.ff[0].q" has value X and not 1. +WRONG ASSERT: "t.registers.ff[1].q" has value X and not 1. [3] clock checked diff --git a/test/unit_tests/register_write/run/test.prs b/test/unit_tests/register_write/run/test.prs index 780451f..b663a6e 100644 --- a/test/unit_tests/register_write/run/test.prs +++ b/test/unit_tests/register_write/run/test.prs @@ -282,7 +282,6 @@ = "t.registers.clk_X.supply.vdd" "t.registers.clk_X.buf1.vdd" = "t.registers.clk_X.supply.vss" "t.registers.clk_X.buf1.vss" = "t.registers.clk_X.out" "t.registers.clk_X.buf1.y" -= "t.registers.clk_X.out" "t.registers.clk_X._out" = "t.registers.clk_X.in" "t.registers.clk_X.buf1.a" = "t.registers.in.d.d[0].d[0]" "t.registers.in.d.d[0].f" = "t.registers.in.d.d[0].d[1]" "t.registers.in.d.d[0].t" @@ -659,7 +658,6 @@ = "t.registers.val_input_X.supply.vdd" "t.registers.val_input_X.buf1.vdd" = "t.registers.val_input_X.supply.vss" "t.registers.val_input_X.buf1.vss" = "t.registers.val_input_X.out" "t.registers.val_input_X.buf1.y" -= "t.registers.val_input_X.out" "t.registers.val_input_X._out" = "t.registers.val_input_X.in" "t.registers.val_input_X.buf1.a" "t.registers.ack_input_X.buf1.a"->"t.registers.ack_input_X.buf1._y"- ~("t.registers.ack_input_X.buf1.a")->"t.registers.ack_input_X.buf1._y"+ @@ -668,8 +666,31 @@ = "t.registers.ack_input_X.supply.vdd" "t.registers.ack_input_X.buf1.vdd" = "t.registers.ack_input_X.supply.vss" "t.registers.ack_input_X.buf1.vss" = "t.registers.ack_input_X.out" "t.registers.ack_input_X.buf1.y" -= "t.registers.ack_input_X.out" "t.registers.ack_input_X._out" = "t.registers.ack_input_X.in" "t.registers.ack_input_X.buf1.a" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[8]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[7].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[7].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[7]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[6].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[6].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[6]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[5].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[5].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[5]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[4].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[4].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[4]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[3].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[3].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[3]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[2].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[2].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[2]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[1].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[1].out[0]" += "t.registers._clock_buffer_out[0]" "t.registers._clock_buffer_out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[0].out[1]" += "t.registers._clock_buffer_out[0]" "t.registers.clock_buffer[0].out[0]" ~"t.registers.val_input.ct.C2Els[0].c1"&~"t.registers.val_input.ct.C2Els[0].c2"->"t.registers.val_input.ct.C2Els[0]._y"+ "t.registers.val_input.ct.C2Els[0].c1"&"t.registers.val_input.ct.C2Els[0].c2"->"t.registers.val_input.ct.C2Els[0]._y"- "t.registers.val_input.ct.C2Els[0]._y"->"t.registers.val_input.ct.C2Els[0].y"- @@ -957,9 +978,6 @@ = "t.registers.atree[7].in[1]" "t.registers.atree[7].tmp[1]" = "t.registers.atree[7].out" "t.registers.atree[7].and2s[0].y" = "t.registers.atree[7].out" "t.registers.atree[7].tmp[2]" -= "t.registers._in_v_temp" "t.registers.clk_dly.in" -= "t.registers._in_v_temp" "t.registers.val_input_X.in" -= "t.registers._in_v_temp" "t.registers.val_input.out" "t.registers.clock_buffer[0].buf1.a"->"t.registers.clock_buffer[0].buf1._y"- ~("t.registers.clock_buffer[0].buf1.a")->"t.registers.clock_buffer[0].buf1._y"+ "t.registers.clock_buffer[0].buf1._y"->"t.registers.clock_buffer[0].buf1.y"- @@ -1032,14 +1050,9 @@ = "t.registers.clock_buffer[7].out[0]" "t.registers.clock_buffer[7].out[1]" = "t.registers.clock_buffer[7].out[0]" "t.registers.clock_buffer[7].buf1.y" = "t.registers.clock_buffer[7].in" "t.registers.clock_buffer[7].buf1.a" -= "t.registers.clock_buffer[7].out[0]" "t.registers.clock_buffer[7].out[1]" -= "t.registers.clock_buffer[6].out[0]" "t.registers.clock_buffer[6].out[1]" -= "t.registers.clock_buffer[5].out[0]" "t.registers.clock_buffer[5].out[1]" -= "t.registers.clock_buffer[4].out[0]" "t.registers.clock_buffer[4].out[1]" -= "t.registers.clock_buffer[3].out[0]" "t.registers.clock_buffer[3].out[1]" -= "t.registers.clock_buffer[2].out[0]" "t.registers.clock_buffer[2].out[1]" -= "t.registers.clock_buffer[1].out[0]" "t.registers.clock_buffer[1].out[1]" -= "t.registers.clock_buffer[0].out[0]" "t.registers.clock_buffer[0].out[1]" += "t.registers._in_v_temp" "t.registers.clk_dly.in" += "t.registers._in_v_temp" "t.registers.val_input_X.in" += "t.registers._in_v_temp" "t.registers.val_input.out" = "t.registers._clock" "t.registers.and_encoder[7].b" = "t.registers._clock" "t.registers.and_encoder[6].b" = "t.registers._clock" "t.registers.and_encoder[5].b" diff --git a/test/unit_tests/register_write/test.prsim b/test/unit_tests/register_write/test.prsim index 2895ba3..09d42e8 100644 --- a/test/unit_tests/register_write/test.prsim +++ b/test/unit_tests/register_write/test.prsim @@ -36,6 +36,8 @@ 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'"