From 92b0b36325bba483346c60acc4eb9f8d799644be Mon Sep 17 00:00:00 2001 From: Michele Date: Mon, 28 Feb 2022 18:58:32 +0100 Subject: [PATCH] pushed merge in primitives.act --- dataflow_neuro/primitives.act | 68 ++++++++++++++++++++++++++ test/unit_tests/arbiter/run/prsim.out | 39 +++++++++++++++ test/unit_tests/arbiter/run/prsim.pdf | Bin 0 -> 7478 bytes test/unit_tests/arbiter/test.act | 18 +++++++ test/unit_tests/arbiter/test.prsim | 39 +++++++++++++++ 5 files changed, 164 insertions(+) create mode 100644 test/unit_tests/arbiter/run/prsim.out create mode 100644 test/unit_tests/arbiter/run/prsim.pdf create mode 100644 test/unit_tests/arbiter/test.act create mode 100644 test/unit_tests/arbiter/test.prsim diff --git a/dataflow_neuro/primitives.act b/dataflow_neuro/primitives.act index 00b72e9..9724355 100644 --- a/dataflow_neuro/primitives.act +++ b/dataflow_neuro/primitives.act @@ -444,6 +444,74 @@ namespace tmpl { BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); } + export template + defproc merge (avMx1of2 in1; avMx1of2 in2; avMx1of2 out ; bool? reset_B; power supply) { + + //control + bool _in1_a_B,_in2_a_B,_en, _reset_BX,_reset_BXX[2*N]; + bool _in1_arb,_in2_arb,_out_a_X[2*N+1]; + A_4C_RB_X4 in1ack_ctl(.c1=_in1_arb,.c2=_en,.c3=in1.v,.c4=out.v,.y=in1.a,.pr_B=_reset_BX,.sr_B=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); + A_4C_RB_X4 in2ack_ctl(.c1=_in2_arb,.c2=_en,.c3=in2.v,.c4=out.v,.y=in2.a,.pr_B=_reset_BX,.sr_B=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); + A_4P1N1N_X1 en_ctl(.p1 = in1.a,.p2=in2.a,.p3=_out_a_X[N],.p4 = out.v, .n1 = in1.a,.y = _en,.vdd=supply.vdd,.vss=supply.vss); + INV_X1 in1ack_ctl_inv(.a=in1.a,.y=_in1_a_B,.vdd=supply.vdd,.vss=supply.vss); + INV_X1 in2ack_ctl_inv(.a=in2.a,.y=_in2_a_B,.vdd=supply.vdd,.vss=supply.vss); + + //reset_buffers + BUF_X1 reset_buf(.a=reset_B, .y=_reset_BX,.vdd=supply.vdd,.vss=supply.vss); + sigbuf reset_bufarray(.in=_reset_BX, .out=_reset_BXX); + + //validity + a1of1 _in1_temp,_in2_temp,_out_temp; + + bool _in1_arb2function,_in2_arb2function; + bool _in1_arb2function_X[2*N],_in2_arb2function_X[2*N]; + + valtree vc1(.in=in1.d,.out=in1.v,.supply=supply); + valtree vc2(.in=in2.d,.out=in2.v,.supply=supply); + arbiter_handshake validity_arb(.in1 = _in1_temp,.in2 = _in2_temp,.out =_out_temp); + _in1_temp.r = in1.v; + _in2_temp.r = in2.v; + _in1_temp.a = _in1_arb; + _in1_temp.a = _in2_arb; + _out_temp.r = _out_temp.a; + AND2_X1 AND_arb1(.a = _in2_a_B,.b = _in1_arb, .y = _in1_arb2function); + AND2_X1 AND_arb2(.a = _in1_a_B,.b = _in2_arb, .y = _in2_arb2function); + sigbuf<2*N> arb2function1(.in = _in1_arb2function,.out = _in1_arb2function_X); + sigbuf<2*N> arb2function2(.in = _in2_arb2function,.out = _in2_arb2function_X); + + //function + A_2C2N2N_R_X1 merge_func_t[N]; + A_2C2N2N_R_X1 merge_func_f[N]; + sigbuf buf_out_a(.in = out.a,.out = _out_a_X); + buf_out_a.supply=supply; + buf_out_a.supply=supply; + (i:N: + merge_func_t[i].c1 = _en; + merge_func_t[i].c2 = _out_a_X[i]; + merge_func_t[i].n1 = _in1_arb2function_X[i]; + merge_func_t[i].n2 = in1.d.d[i].t; + merge_func_t[i].n3 = _in2_arb2function_X[i]; + merge_func_t[i].n4 = in2.d.d[i].t; + merge_func_t[i].y = out.d.d[i].t; + merge_func_t[i].vdd=supply.vdd; + merge_func_t[i].vss=supply.vss; + merge_func_t[i].pr_B = _reset_BXX[i+N-1]; + merge_func_t[i].sr_B = _reset_BXX[i+N-1]; + + merge_func_f[i].c1 = _en; + merge_func_f[i].c2 = _out_a_X[i+N-1]; + merge_func_f[i].n1 = _in1_arb2function_X[i+N-1]; + merge_func_f[i].n2 = in1.d.d[i].f; + merge_func_f[i].n3 = _in2_arb2function_X[i+N-1]; + merge_func_f[i].n4 = in2.d.d[i].f; + merge_func_f[i].y = out.d.d[i].f; + merge_func_f[i].vdd=supply.vdd; + merge_func_f[i].vss=supply.vss; + merge_func_f[i].pr_B = _reset_BXX[i]; + merge_func_f[i].sr_B = _reset_BXX[i]; + ) + } + export defproc buffer_t(a1of1 in; a1of1 out; bool? reset_B; power supply) { diff --git a/test/unit_tests/arbiter/run/prsim.out b/test/unit_tests/arbiter/run/prsim.out new file mode 100644 index 0000000..79cfcef --- /dev/null +++ b/test/unit_tests/arbiter/run/prsim.out @@ -0,0 +1,39 @@ +a._v a.a a.u a.v a._u a.b +reset done + 0 a.a : 0 + 0 a.b : 0 + 1 a._u : 1 [by a.a:=0] + 7092 a._v : 1 [by a.b:=0] + 7094 a.v : 0 [by a._v:=1] + 10468 a.u : 0 [by a._u:=1] + +step 1.1 finished + 10468 a.a : 1 + 10468 a.b : 1 + 15221 a._u : 0 [by a.a:=1] + 15335 a.u : 1 [by a._u:=0] + +step 1.2 finished + 15335 a.a : 0 + 15335 a.b : 0 + 80701 a._u : 1 [by a.a:=0] + 82427 a.u : 0 [by a._u:=1] + +step 2.1 finished + 82427 a.a : 1 + 82427 a.b : 1 + 82466 a._u : 0 [by a.a:=1] + 82957 a.u : 1 [by a._u:=0] + +step 2.2 finished + 82957 a.a : 0 + 82957 a.b : 0 + 82970 a._u : 1 [by a.a:=0] + 83010 a.u : 0 [by a._u:=1] + +step 3.1 finished + 83010 a.b : 1 + 83425 a._v : 0 [by a.b:=1] + 83445 a.v : 1 [by a._v:=0] + +step 3.2 finished diff --git a/test/unit_tests/arbiter/run/prsim.pdf b/test/unit_tests/arbiter/run/prsim.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f7c99b92874b142b243f608e1d61ced05df9f7ce GIT binary patch literal 7478 zcmcIJ30O>P*rCK!XcJv=5-pbI%s$hmebu6pP-&VO)3nS?v!qBWl}hLqB9-M@vu~x4 z7SyFh2}N9z6v9@=CdeGS{A%X`po(R@En$JS8Hgpj^jK@YSEHErC6CzSaEU=3bIe3Za zA{IiFF0$uwMF>H9?LilbSOP9Wg0~o~hk(cMVu_HIfR3#_*q;?8La}VP-UhJ3;(|MxbOQ$g zPs~T4m^NMr)|M5?VX!dUsf+JFm33y1%1FjXxROiVO^27oL&?QtBkX@=vsNNBZgnY>ux95ZbT_ITeFrZ9Z z7K6tGx?jxVvPHoN4w}dlE)lp;ZsrvAe_@r9|9Cny`Q~o- zKcmn4<~~_idg)$?t?H31lVT4a_qY==e{+_{`o$7T^Y{KffBL)173n>(Cz-Ju!b|bj zc5T{LHe{Z7<%Wa&$_cSi1E1>m?hV-RXV>NzUFJO@?I+SIi!@euxWB8ZWY=B!a_`ED zfZZE(TPmLDoh{3rdsjQ;{1!|1x@=`d=C*el>+hjuuL^D-if_2DjSx?idrgu*b7E)A zg&SrI<3b&u+#K()H(WpKxwFOg_Ax#&f3*~=_^PWbwRh(@AMo7L*7^9A($aY=Ov*gH z;#%A{H#SvTu*1{sTjbGunYomp(!hOdLftOvQ_RyAR6kL7UEHnBs688|apt(n@AsTq zydTUEeptTeP}$}If+!-3?>$MgE33!OOVjYIQ&KPT$vw9b%gtD!S^x3e*_1rC+u#o+F-gYN*)dkglJ@RGK*4>gjacW@k#@(-vs!pDu zkh?;e=-`{X;=+aAlG!uO&pCT-%4piDa7#bVq9{hSM`2yik>TANo z3fjeK3$I>Rh*T)=sx8xMkGk8uBYc?wn?CPEnxTThjQTDsd zZc}Q%AGlIkqssF5`GqT-P0HHqeqEX~{@MWt{#3&~a^oL-u&dEZ?^4YTX#2Fpv9s2a zkYs!{q6R}f=yY5DS(pYvgLrxM;Jfw`IV_OXny(Yf_iRCyL8LYZdvT z%c>LSwpa8yGcWXa=Q;XqjM!j=4`}T3nX~=u=0~9s8w)pEF$5cfPYGIrb$V+Ll6HnJ zUTHwd7bKPHOx&^eR^Qq=#yurhXH8d$-e8q!XW7`7%p|_();zW(;zpv%k%`N?0~_d* zHU*#9XmG#Fau)MOw_wuw)cQw}$xkCx>$=m+{V3h(C@#7vl&!4w@B-l$N6fujrxA6G zt+J(L*^EOrhFv9l3|$ZP816afkUCJ3r<$yOCg;&~dU|}F(3FAp`eJM18Lr&}>= zTkD9_npqi5}@r}DZoEZx+MXA=?tDgAt8Pc8 zz#=+wvC^%$^%YC=*L|6N^ZH@J#9c5m5nWR>lS!AT~63Z}YH zlQRkp0s_JfFK4ZdsqZzpp_6%I;4S8D?xKg`Hz>>mWnv(6IW4*FvVqMN#bkz~ zs!3R<`sewsa!Wgvql?4!6I1@)yuUiUDD?)K;SBJ?wKHC>p1xIAH_>gb`s`nuVNqmX$SS{H-xz?6Eaox71#p zJ}gjHIjuf-vG%iRYStAeX7YShH6oI3x*{I;bnB!D! z#6D5!PI)2n6?!a2p6C4@;?!F>;+40!zuMJ+~Yl zJaWl{v>v$-MpD(O8D1^3lH`(n9$)Wse#{EGvUs{_XVduijiDdpO42pVO2=dBEv+vx zhTgd%J<*TWJ9b-qP|uHEdrf)jq|~L&Gn)LDRCAV>UMWTc*0Sk3#hcOCZCUz~3(;pa z>4kUrK__1au95OMf2_~yKi#&P2}>TO%^S?^@^7L(vCXraSOPx zyZuhnu9^CW&9uJyf^#-?AEzYGbep%RJw}n9SZ-7x|0}?WcUUrU_RDn>DwC||S+&PZ zrZVcURcS7>ujLkITU-zlm)~%!u^%nNr_$|6Wal-(4+alwd zls}Fpw{5I%FdIA*^ZxOt?pd>Ps){xuQNdvvNt@2OwN5Nu z_cj{;B@^4pzP4d-`QVs@-t$#C&s#RXx{?x{u)qKK3!XPE`yworhI93B(Im;?Fxlg1 zB!aAx!ogbR-&6nulsGE=n`fG4R-(!_>+%w`s?+}X%@mhCd zu2$`o$;@K!ezzrWy6+H5-#AY+S1Wwx`*yu)&e<;QJ=8a`@9gj2N8(Y21;Pu?V zRxf=!HKtpkFL(33{I~lJ4-1op(~(y#X~~`)LCcPBP&VZ)z_u)?-d>}Gw?E>VPmQXM z-ICKAz2jxn-($jhgr+~S#>g7>pGq%0fig<*c1xTD^18~GKhE!sKUOjSeZE`mv7VvO z1q3Izsez$5PJH~rs8rqiWi|2G;uzOXVhjcU=)FnHOuqXiYj}v#B6c;LO#66~$-ey)ZWkJ-nCzZ&Ad(&t^5;(7*?YwdQdR$Ex7m?Z&j(MS zub0fpY-B4wj?n+jb*KM0T5)v28J~Hy6pMg{n~ASP1@Vk44+?wLIZuoGRy|X+SUVXnb#Z3ET%bmZbTBqr1Im%tHd66)&BX0S4 zOYH+x#Z&s5=Bvov>{QYJkuZK_iT_XL!clOeD7$93PO{dWvhic?0WEZY&$w+p!G2wT z7e&4wXiMmI(X}~JIZnr+&E6rot~2V)@3=`K*C1%_^K-Q%Fq|7@3%Rl=JOm0Htm4~FjIk@kwSVq-7g^=~>P{&-gplUu#jL-`lJ zLi1hoNv&#i?{f67c^ggNL)|{vTkF?zEfbTD9tz6#S{j_*=41YDb3pgNnDRc;&p(lQ zWMB4AGL!J5L?)1csy*&p^u9yFlb50-`Ex3@i#0u!i=V#no1i{tZ>56QM0)%|;gos8 zOO0~g*^_mCLK}8~|0XU`M$;yxpH(eGCyZNn_|62fZ{WKu7rQ>5O^n+(tj^@@1LZ4J zN)q(=;$vSL^!$sB?6Mhk3C|)5RypGA&5!Cme^TXMyox_nZT*k@;9v(S#EF_W%2#!J{A~-yO0Q*CTV#^XT1RTDICjgBjSO@w-IPFRo2{@A8(ilad)xp27 zS77O4`Yx%ipOC>-&|l5pqDmpd2d^GK&5efcd}fL%>lHBCsEk zj3QJ56(JMI7#ayhC{z@|Q%DGb22KtDkN}_XIm9QBancc_8G!#!fRQ~X09*)g4;hdM zI0T161yG3qz(zDGLZN_ra5_N(#3>L!q`=ci7yt;FL`Fy?unF)}3K8H^0Rt$wh9i7V z003$h3Rn;Kq)};Ll+M9XA`F3ofg@xB3I%}-JPocT0l}qv09-&jX1awK@B_hz^IwC>>BNZqMjuHR|FHjj!32=n;B}Rh^1Uvx6VjxWt zSR+x2j5#<;JPlGJ!W$H-2(k@DgChWmT_8CrU`WF@`?{6%0x&4u0uLkx%Sezbz`4u~ zWag5MfLn}=5y=ijkgI^$6851VeBB>nL761Z1RM(9f87N#g`ybAv*8VBWEvs^=m=6D zfPOFfB@o?<|bfM=E9_%mE6WgVh{G$C0a4hOlJ zNCs)kLjcZD8Ish8N+kVhNi!Vbalq?jho9i}l349)mXjP9%W|^pP#7!CBajpj`Rg%h z_x%RWa}N!>2FKlMYJ8W1W_!(Jsm*uGVwA_e3vIiIiJI}Gs>68OHiJ(si}ntf4e^Ut z9Wlriop{unnDvD=#LJs0_uihUwePoLIh|UC&R}Cp2jLi#9Hl!AesNnn#)|%FdkxnQ~v; zs!CklqwL=Pr^@^pwPC|SJ^%8lwEM2Qo5}s~wG~d;pT*$s;Fs)(m;aeD{}=k968dq| zt4hq@MXdRMa;Q-}^l151>K*^Fs+PQ2@QtTXak7v#vhcUziNTu>!j%h$39DwwhZav* z%zpctAsi8l@FU}$4fs$Y;_$e(@Y|4~tqC5*!~X;v4JDzJ`6%81MGcHFSP32|hz-N( zB7PW86vhcc2*x;L`~oCcB;uQ3vELpT^8{?L1eEzqF#~)o8M%hfT#W?L8KEHbO4l2W z;4DhOT8#l!7zqPvq~RYZfk+@>tVX`h!E^zC2v;^ohIPSrb0i{2VL!}))b{-xi3&0Y z{C(SxL`HwaBSSlk#zRpM$G)E(8F9aeeNxsJ;!&E(bKQj48U6Coo z5o<*PIwy=JkbK~D;;!Z)5=RAD-jm0J{w+-}oV6_AAkyqX7l _u- + [keeper=0] ~a | ~_v -> _u+ + [keeper=0] b & _u -> _v- + [keeper=0] ~b | ~_u -> _v+ + [keeper=0] _u => u- + [keeper=0] _v => v- + } + spec { + mk_excllo(_u, _v) + } +} + + +arbiter a; diff --git a/test/unit_tests/arbiter/test.prsim b/test/unit_tests/arbiter/test.prsim new file mode 100644 index 0000000..165685c --- /dev/null +++ b/test/unit_tests/arbiter/test.prsim @@ -0,0 +1,39 @@ +watchall +cycle +system "echo 'reset done'" +set a.a 0 +set a.b 0 +advance 1000000 +status X +mode run +system "echo 'step 1.1 finished'" +set a.a 1 +set a.b 1 +advance 1000000 +status X +mode run +system "echo 'step 1.2 finished'" +set a.a 0 +set a.b 0 +advance 1000000 +status X +mode run +system "echo 'step 2.1 finished'" +set a.a 1 +set a.b 1 +advance 1000000 +status X +mode run +system "echo 'step 2.2 finished'" +set a.a 0 +set a.b 0 +advance 1000000 +status X +mode run +system "echo 'step 3.1 finished'" +set a.a 0 +set a.b 1 +advance 1000000 +status X +mode run +system "echo 'step 3.2 finished'"