From 34274ccb4068692e15722021464b9972aca627ea Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Fri, 2 Feb 2024 15:34:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=BB=D0=B8=D1=87=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B8=D0=BC=D0=B8=20=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8=D1=80=D1=83=D1=8E?= =?UTF-8?q?=D1=89=D0=B8=D0=BC=D0=B8=20=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignments/fig_01.drawio.svg | 4 + .../assignments/fig_02.drawio.svg | 4 + .../assignments/fig_03.drawio.svg | 4 + .../assignments/fig_04.png | Bin 0 -> 9762 bytes .../assignments/fig_05.drawio.svg | 4 + .../assignments/fig_06.png | Bin 0 -> 20588 bytes .../assignments/fig_07.png | Bin 0 -> 20312 bytes .../assignments/fig_08.png | Bin 0 -> 15604 bytes .../assignments/fig_09.png | Bin 0 -> 15331 bytes .../assignments/fig_10.png | Bin 0 -> 16887 bytes .../assignments/fig_11.png | Bin 0 -> 38410 bytes .../assignments/fig_12.png | Bin 0 -> 14685 bytes .../assignments/fig_13.drawio.svg | 4 + Basic Verilog structures/Assignments.md | 426 ++++++++++++++++++ 14 files changed, 446 insertions(+) create mode 100644 .pic/Basic Verilog structures/assignments/fig_01.drawio.svg create mode 100644 .pic/Basic Verilog structures/assignments/fig_02.drawio.svg create mode 100644 .pic/Basic Verilog structures/assignments/fig_03.drawio.svg create mode 100644 .pic/Basic Verilog structures/assignments/fig_04.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_05.drawio.svg create mode 100644 .pic/Basic Verilog structures/assignments/fig_06.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_07.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_08.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_09.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_10.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_11.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_12.png create mode 100644 .pic/Basic Verilog structures/assignments/fig_13.drawio.svg create mode 100644 Basic Verilog structures/Assignments.md diff --git a/.pic/Basic Verilog structures/assignments/fig_01.drawio.svg b/.pic/Basic Verilog structures/assignments/fig_01.drawio.svg new file mode 100644 index 0000000..4b5d2c9 --- /dev/null +++ b/.pic/Basic Verilog structures/assignments/fig_01.drawio.svg @@ -0,0 +1,4 @@ + + + +
logic [31:0] a,b,c;
initial begin
  a = 5;
  b = a;
  c = b;
end
a5b5c5
0ns
0ns
\ No newline at end of file diff --git a/.pic/Basic Verilog structures/assignments/fig_02.drawio.svg b/.pic/Basic Verilog structures/assignments/fig_02.drawio.svg new file mode 100644 index 0000000..c09a55a --- /dev/null +++ b/.pic/Basic Verilog structures/assignments/fig_02.drawio.svg @@ -0,0 +1,4 @@ + + + +55a35b23c72235abc
logic [31:0] a,b,c;
initial begin
  // ...
  a <= 5;
  b <= a;
  c <= b;
end
5ns
5ns
\ No newline at end of file diff --git a/.pic/Basic Verilog structures/assignments/fig_03.drawio.svg b/.pic/Basic Verilog structures/assignments/fig_03.drawio.svg new file mode 100644 index 0000000..db8f9c5 --- /dev/null +++ b/.pic/Basic Verilog structures/assignments/fig_03.drawio.svg @@ -0,0 +1,4 @@ + + + +
a
b
c
in
out
clk
\ No newline at end of file diff --git a/.pic/Basic Verilog structures/assignments/fig_04.png b/.pic/Basic Verilog structures/assignments/fig_04.png new file mode 100644 index 0000000000000000000000000000000000000000..57e58763c2901e55821f07cadc3be2f7bcf7f302 GIT binary patch literal 9762 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 + + +
a
b
c
in
out
clk
\ No newline at end of file diff --git a/.pic/Basic Verilog structures/assignments/fig_06.png b/.pic/Basic Verilog structures/assignments/fig_06.png new file mode 100644 index 0000000000000000000000000000000000000000..af67b95a098403d1a6c8487dbdf2c8e3b2328ab9 GIT binary patch literal 20588 zcmc$`2{@Gf+dr&T+Efw}lNO31WM8JJqzockmZ^lKF^M5zrbR@SO0o zwf*3BAt9k%rk5{R2?=fD0YA@f+X{U3iud>deB0n_Wnv^$(0+&poNV?u4>>O+R2aL1 zdut1DF7n{AgRhX#?%MUw4UO>6cZ7s2H<(^HfBlgQqYB=6+9ZS;2z}90zFbl~L3ZS1 zDQHfz0!QC7Bv?HQ-ZccA3dbhWBJ?HXZ46_v?SE@GNL|g zu>PUWOHK1lv)&?f>U}`vm<%fmX~@d95Elh=zw8wf`lejCau|b$R}H# z(}abd9KSthl86*~Li^6#bV||;EF^SlZxFbKxk<=O6brif{U&>Z(9MW`&R#4?=;q@y zJfR(1NuokRSL;S%ffFH;@3a{75%%1+)7HQ!LiR_Nk)gn_iLz#3qa6o;dxYMPKgZ!KWk@e(eKA?x4+t7o1EB zn!fJS+?841f@JyD4=iDnkhC?VQ~ngxI%SOut8W=!njmahTJC*kGaE!-%ZmF&;7@0| z=_DK=GSmHZ#gK+hv3Ner5OPCix!o>D^F%B!6;>KLz_@-R^y|9hzFe5$Z39Gk#=w*$ zSb=iK>U~l3;gJ=B(Q67$_~TBah(}lYE`teY*EDC!TQ-I1-Fb4MP=<0_n@7ToRF2pt=~^B8Yv$}V@_>QW;!Yk4j^Jinry z7*Tx5g~?Uxs8h}Q%V14xIj|QuKkOj#jq4q0W5;Ah0A6&1S-A#;sJWo3&KrVO<===$ z@ipoZX*7#jss|h0%YSf?(~QcTUfJ1-eCisLdGYd&KWS&28~fsIrl5F^(_tcoeB*K+ z-s<}^XqukLZ}21I>Ny-8#OIc5+X=5YDgkxLz=%aIXQh(&s}zfFJt8V$<%!TY`jalE z-6yHAJFBSM!lo`udlx%PJ5$f$+}Or&F-aRyi6LRpdp0A6Hsw8r z$Qxi;8T_Bu{JEJxcY1vm6-xc|L?q`*<%nJQMUZ|E;`cCW7l}G)9q$Yaw_{s-!jRh{ z{(P^VI#0ee+1u@79F`gvXScNHJFod%@nh)wH;?D%Q6ou(D071&SSYUF?k%wjO0K0S z#2=75{U>GU=mYHY?$WxMf7=K61>oX0=1unA8(;qXs6=GwfxJR2NG^0w@^j5w?7c?Y zGGEY4?tZUf9u3`dqv#B8o7~wd;Ol97V+hy?IMIrhdnanNEgcwW{g>-c1&%|q>m!}| z=UK)#=0EKoxO8|67L>l_k7WbSPMY@$HhtR&IHUF3&TTgXe|z>nJc-Ot=A(%Zj2F_w zy>kgdH=WmC2{>Ng&czA>z?{BOR5^pF=;GU<^a^Ldx0Kl~o zF?~$>`#Z5Fb@8kwi0~Pq|9Iv8GMWVM2SWf`SnjASD_v!dA)3vOTw=e{B33;b$(>cK zwuj@|}LGm|W(gaW!fobR-K%$|YPdyJ{snc0t=E|#}YSnKC8l%4MULmde;L3AL ze~hq7>*f`*MVGQa}-F`VUvoG?DKXiSMsI!>ip^B4@Ns=GpRWIJY%- zQFZL}g@3zMyQF9?PH_h?SuprkaGwMgmGtp6Ud2ps#t8Ouk5TxCR5YI@xPyVeCSDsl z41VT8JUUl(Wln$p&ddH&%3ug zDZI&^Qi$qc*DzJAzt%6mpn)#^Q*1UQ)RKhv2}5QljMc|pRhr`{K9Nl1uZfHm10rhK z4=V&_9lrOTap)f1&9GkP^A;*wh2Jvjx-#Sl->_5ozmd*iGr{h?Btb2hYZV2K+WLR| zE0vqvTc^-xc@oMgDzo|_h=o2vb;+k(3#vm3@qt_^=66k%hgrG$ia+Uc^-7vf{-Un) zP~hB}c{%KaO$X$pTk!q0kE8%R>;b> zaY0K$AI_GlMO6E?HSs0enwWIqlPhVSkgZshz>J9ec2x8m-hfZ&bvGXTSf=UZd{9ug zsUGH~9P&Q53kya=##KT8P_lI~c4494R%M2|h{x z>N(dJ6`kK=pYO^hA)-NJ_PaEAWv*YOlqOaQ4Enejr2}uFlXizlsGKmUKRx%k+r~3D z9O5`f&=@q@pNqqoCftQuQ3RScbhr>7t_ql ziizx9(1|z^)8?Q5X-qBS3N$nBi_NXK2d5WfV$6_P=J}Cv^4`V4tF<6yLv~kepW|uJ z+7FYc+yB(#M83=@8o6Oi)VLo@BfGaGhJCxxkEv_k>?BWkyjalNWSvP6``w&Tn){3~ zUap30uhWaqDkx4KvV)$#yEISNx!`~$YCgm>%y?IfUt1H#3s)LSLiP@Iyt5-f&nOd> ziwtaCA*l98+hsmsI`-_+D7TS*F+E-aGqAl8H)6Q|imb=aey%3Pl(=QEMu&gh@z}I9 zIBVGdi%&W|B0m}6#a|r5o?TqQdLUh))*658*ulEoFo|yy$+#H7&)pUw|e(sWvU=YCd`AiC~*m968uV zQs4F%r3AauaH4}rR!YjElb;Cpo%Wx}E^YAp;YG@Pnmt&2Pl4E$!^p`eXSdkHTA2!F znTCJ7$iZQ(a!%`Y3VZ7Mw0(-I>|Kmye;=n!55xO%-SP6^@6zRVv^{9W*&>h4HpA2+ z4MW__dMACbYP@}OIfDTeSm>7qXphJ0i+@?L6;=?TKn!09cbTm2#tfSDsH!}!NmVsX zi1%8`9nbW^PaIpi&RQVBu9RV^$Yp{r{ebTB^%P8&cZZyhT;{aeC24hD&YX4Q=OxJ; zxl82b!u+5d7|ULj65;C8@CZx8)e!pOE{?yyAR2c;{)?NX=OF zc$%FOZ#PAY=l=p4N;BD(Ub?OrZtNE(Af9Fe=WN$K z**u7O)FOJvZ6bS`HidE3efSQ>h8X~|44jG3Zu-lI=JhEbx>cKVsBNVQCDVjR3hFrb8D++vJ087*QHIdO*U>Px9 zk)6$yHYD6!SK?(I6AGJEc~)ufWfTglB{E}t^1>vY#cc5j+0S(Y zj9^}*dZdVwLD`gY-dOX*LBv@9p&&gcKe!VX+#0 z(ltjj)*Ai5qT!1N8tFA-V_$~Lz}3V|&n@kssPoe2=BFeD|5BBQX2kgk6;!VzN(hr} z20n;;w~&;3@VP_s>uEWNr|q=(q$N9B00wU-1^ zTiGY?qxvu3z5o#fRQne4uk&7GRD?hPLiu`uq*9cdaHQ&C%cGVSs5q=Qge9FuNTAxXIhI4mS}bLFJSIu2jJ1 z&`(Q%rMqfm?C${#PMRwug zTM`Ld^IY?yeU}=}<>e(VlxQzlNw7Mt}L0$y|qm7)Ri@m|?2sI=F1PyR#@AO}MOoVfRg!ueUm&OR&m!^3i6-iY2 zIN^)%nVQsv0s>lVW93}% ztFGNhkUrULImt{0)LI;J_?GPy%%JM)Cwg|vk2cc%$3E=y&+1iLEK3OH(x)4hNCUIE zUNh+?U(7i>)+sY7ZjB0e;|*gWp)+aqXrwXhO1_h?qCE4neg62bCo9{_(vc^AHclj) zijBO_cbopjurtW`OnO9&RB6ETSp4e-Bvxd?wfuep$0TO>CW#$*;z;9&X~GGUn6hCl zgp*=yuc{JHW1Ycsd*UM_3KJIkBFnkOj(h3A+;#d?@+S4=lkdIRV8L1k8RIXC*zn}! z_tKbf{3aoLQ8Vx%nw%mkC#J>~ifbz=2Nj@~B= zDrO1A$2{FYiC`w9^4q_L`SuKm8G>)aC%w8uxbx)Q&p~qT1*$%@iYk zYXg9!{&y9}c}~$Vh#FGA)`79O(tY{HfbgVfh@Q%sg0XalkWk+ylIWM4_*-nEbut^Z zs3Q2H+LOSaBRX(n!MykG98g|?N_)tH7h?KWlqvzkpRs$DP&qn?4Td%n1>dh>gJeGO znmE-?mA^d(HP`B)f={D`aIj0`ZVxmTYWt{up0)6sQ0>M~_*x{YRI?Obohl(oUg-1} z5~4q)3EQ8sMk5#6Z{Mu{!5;^Q1T91mSFIL$R?;+mL=CxZqpZd`bsrUEJzP9ipDiP1 z7+N^FjE+T;1NX>1{w`P!8^uyO`c8(aoLPA9_fH^%9u+&yx|4O3GP}Fd>SNFi=_WvpktS0aF-TH6*aTUJ#LR}m+ z*Vws$UnQD&79LDtATAry6CEAe1gT(l@#q#XFo`+m<;l_6SlkLd#&vozZH4OEOm>G} z9f{OldKyIUS!-=#I$E#BB{;kD6KsBcQO!d>P+!e5h>dy0@fA!rB>L&CzLH(cx)wX5 z5}CY60ZGFK&(*ZJQhVoOybIvDVB9nl#>;xBcWan9FkRGD9T`=2Fe|os9~#Wb;oNx@ z^7Y!-K`#@TwEJ{FN~Q?++(ZAev2OqilqbB-LYu+Z3`Jtzd}HZqoprq^k(*yn1wM&&@YKxN@QS-$Shg}D5H*{(^ zh^K!!Ru*<^qwAaKcf*nwJA{%Rmr$O^qMn-#5Q?g9%hnHj)L$62N+vf|7vEEC_^A0!=I94o7epzh{XWI7FQb$* zVt8z>2-&D4J(ZO9m{nek2``?Ou^;xgtIt$ksKnkWug>SNj_q;R1NXxBBI+kguG0{&h;`ppz>n+YHB1ahPSV`{jR_37{B@S9##YMX%|6 zZQ`<{AXb%!5pJtXVw<#)C9 zS3alU50Uq4`t8iP7-dDC-%+8-tC45h#u)3T@u-&g@I#KjC5zel>b5!l_gBO+8vzoY z6Vmg}bphgyFtc9iGPh&L!4mHJhEJb=idM$uA=cyIf7+VcgbSaUlE|j>f3~-avO<0z z#hi9|v_@2pL5@aG!h1#C#3q;VC;_MqGw+y?j#z7k8tmhCRllxg&uh`E7W?CA5_vjN zNk(#>>}b^!3S6~?m1sNH&D{74ZZ*2JciFF`UR?`JSfwNzyzqr`lh@9JRr!kouaSpW7gSIjfd;CjA zHZDxy)Tc`5&|k_sX)!(j*3QW>n5_=Yc5P6_Dx-oajjsf=jVMx&9G1ZQh3U&)8o<*8 zGa)Ozj^a?h6&I%gM5L+0M%i5B^2GR`J-DERmkxJFOTL>Y2^Y(pnRi`0z{JBBU9m*7 zVU5>5wJMwKJ`ui6a`5`g-5C`PIJH@mwgAr6XN*J0`6I3uZKGKB5zCkX=IApRNVC)* zY>g$50Gl9S!NY(}5E7RLRV=%&-26BMc>*xg>wz4Iz+p5AJ{wI{9+`)GtD{7z$qs9~ ziIv@gLJN#m7&VN@ViNOLrakh?Lb#*W^|>SSX;`x^>S_AY>`KU2bJdhW#M&zk=##=`?R}g?`P456=4&auRYQn_IZ}D>urAB`UfUb^IYJ}w#@@aiYf1h~H6M8gW;Vg| z5;b#I76!hzc!c4QGP|A_PekC1lel7;OfUjXA^o?kM9%%6Uud>e@t z?>X(;8KPHfSo0^ygQvyHH9%d~1am4u);_hT1?jsP9)R;1go14={SZ~Ii^gxyE~awi z^1Qxc0+$CyVOo68g->8qYT${Y-ITMu1A&>2)h(&r-_ao#-(Nd)Q$K6mlH>0k68aw~ zEXae6T24UW9!&^X!j}Y%Dm)jN?O!mh^~_i|iAl|^|BmKjfhr7!Q&U@?AX{#!&t$>H z!3#U!S^|2$YQ zWc4IuBZ;WKQ3$(da^K6LPL!<&4~k6J9EhlrR5}mID&(14z(C>6iZ-pYVU!Yi2RDO zEc2?;N2X`y-j>Ve#y1moI_BF-v3zT1sCbubB1DE)(O^FEEb=P93OXm58XPtbmBB3$ z5+G;>KcO%{WW9n799A>=G>KY4EQ&E)527wFL?@&4|Y)(8ub>m|oT2w1?DGg)&8 z*TRVI|Iad!5=n*FEy(6nTj@I-P)ueG;c$;H=rK?xp=Q{^I)U4oD1*(FKWy<>}R{dx;Q zYRN%NbW~NABtZ^7xG3f_>s3vLzE?=nqlvLdG%Gi@Pj>nHorVq7e(lBw#L2IXusg=JldHP3Ey`l7N zme*1VafCV(*J>QTLla|VEqE-L?suT!nwLo+c~^+wXsrG-%lGXVfzg>mnHMYCteHEE z?uv}wcoBBOqjKG*=!J6!jRF6hsv^r~6P~@*Ha+T@Wzwpc+bMmV`M{_O;q&7ryQ}B+ zsH*u_ivC67;n4So3vBMb++D-mK|~H?B&{)TGX{1i@>$p5dnHR44!r7(46pCZPucZ# zt|@m3fsx4b+fJW%%I(}E6Gao&zJ7*x_nzv4q{1L9?IU!L(bYX<#j_WHP7nj2H3NG< zEY|1a@Z?GM7P+sRee#Wrfj*9Y-~Yue*fTtdb{89`ZtlyEed6^H3FXZzT{+7gSG_V< zBH~f?khQh+w(Pk}-C8cnPTG!62-6eQJ;&|DL4rpkj|wMN$8NShqJ&NMdJp^Q1}DHu z8AZjMiAZ$HJi6dDo(hqM8MXNY9`toCagFm*Ga`A;7>vKoZPz9Ds*>%|D^{}vpsV7` zikSzyLV{In=X|@hVIb`lZ&liiyA|=P22wBnRC-UcOQ2Y6<-)!hO6!7EW}InTDUXmJ zSmLNP>@*0Yuzt`Ju0~!hxXbzGgi=0P>)z?&Dt^x+D9GcGMNm2L*~NxUtsAm*ZJ@bg+5@>`Jj0;erk_8K9B;5}d9b{Ha+vNXFVQWUkQ1 z9g`rA%i`|Ghue&8$-~?}u)r6Pi_#7CQ@8A#d@kBbCuwV7x7H^W!BV_(QWwoCa@cNB zHbGA2fy*gBeq=c!ZHOn?+vL8c(a1i?^7G_ZFaBfdy;o4HHBcDGNA2WSiGaB9mBG9d zC8)TDq5Xp*ii0r?=K5Ht!db~^-67CXZ>JJn&qk>D6r8~NAw@XZRycecc<=r~I~uc2 zxoaf#>+JNGByN18LkJ}ObVnGPZU(qGN(cQ!1+;nbzH`TWF>BNvhglaP0&c3mw%Q0_e^+E3cnq&pKHb z<0S53lBoaGjD{;jV$OcEPw+kbwi@Eez`#sEHy&wi{VL;zKBjkI3ij*RlLaX+x2&z?WgsRb_a`6GLk$+ROGX-{Y$wQk8{1}lRW%%z@&Fs7;NLOqBS zji}ebn7F7+B8e9P4^ZXdh+9FE^RFjj8p^VNcTC=%ofNmak5Y(EJR%?ONKT9h2fJ8# zy7Cw;7G$#{Jzix0#XU%IpWnwah~_8TN`{SowNKR*asrQ2C>C^>BP%mbQM?nj~6CPwUmqwb`~UFbh|CS^gta?5@xk`>A%e zTXG(NAtf+{18Z@62HMvZv}~9Q{A#A3=l6?IUd1bA_j5%?K|!d;XX3N&<8tMAw_^+* z>UU`_HeB&{>hK9@me#iAaUuOrRH>(_b1iMGy+(Hrl2m*?;Uwhmr>!`y`^6yqnlWG`ByVQ7ZI^>;i2mjcN_Y^C! zfI8)!KHh$EE;4tcD&h$k`Nk4$ym(O6wrH_${T;|0%nZ zKwP__qqVO`oPn20YRXzU>?*@BCT7TUDmt;i4Rr>acZmVctK(lWgJqL{1m@rC5y2bH zE9$s^{C=dN(Ka8^^R@rmXz=#|gs+;SryP?!*X9Wnkae4E&#<<=lgg%EQ8@H)r-G7J zTbGYdLCmwY=QI=RR}qccUEWLkdC&ITcvfngE?2{hmAj4akO9HSdlVo<5Yj5|O6`cG zpw;yZ#icw>ya8nzrNI*_(`R-XvlJvZGBhoIO9y37aIml z2neo5M4)x*=Z!7K-`3}o$g_Fquos*oQyk&t^bj@;yRpO$Mq@@g>U1tup-K!7dN=1o zg4)JZkLjWpBhYH;kd6551?k2nOC;DEo6>e9x zrBo34x|i!5Hla6U45t@1thL_oR<|j%Q}yyeTebwiUj6M$+{~!}Kbpezdj*q-neqH~ zyDdX!f4R=fZkAj%7rgz(tnE3oASwLs;!NbLZiXP-LRs|ruDMBR_55yKp9o%`8qX#P z!cvP(=N$f!gIUrLN(2b%#Dns(V;_bmMR*&9u0HV+-?@PV4$By@4Xe@|oXzDKl{~Ay z5s|(;wz&$Um}Tt^>*kgBurLA0*J6LHa+LEm1MFJroh0!{m{$;7>Hk*O($3l|% z!m^J(JYsl39rag#K1W=B6^5qd8~R+QYhZhQmGD}rdPk$%;czWJ+8n$3^2P*pXSDA+~twg z$nFM>rMYL#0k(1AFX9KFn@8jv(`yXeJfHAGX{}w$gn})Q@8&4lB_W1Ney-)w>U) zS+(0x(3drT(YX!FDcNSk!|tfkUn+Zz8TsF|aDCynysJfHGR3lM<|rv?LA207R+Qd% z=G5QbeG($DzoSv*S|_cp5;mkY-JG#f&ygPq-t}$P@l&ml5?elRim~bLU)NM9sGVy@ z%*zOG^&|HaaQq;wfjH*uf~}(AyXrcw)HyTMfxi=W(%2R7jKtqv`TlqM{RcMwJ7e3h ze8>!JwhO?_o!(2K$PG`9e=FG@2GB9*z~9oI15dd17fW%~4sbe@s%w)neb*+X#}xl8 z+vG!QIZ_FH zN`8Iuj84D1MEWCb*OE}RPOmwRvuFG1Xr}g*3^y9=))EEpp8P&!_HT|OhSGblH^$W% zfuyDXPD2|k@B=4OF>V`O`_O8T$EvfskO)j{xUcv068!0343@8YHZItrJ;OQbg-aD_ zazIPw_L2KHQq3*bR^^YlE2hjp6zo(7shGS7m>=Wn-`WjSUBL6-Hr0DUIfJ9$g+Y17 zH;$b;AkmPfHBm~Ma+$Au84bUBs#k!}b>v_vU?D@+wM_XT%|#-e3> z;k$@+Zb!$8G)LNV0%1L4N>c_4O-sj~Tp8;*S^{@o8B^mKrfB^|>rp$OHdO{1^ov~0 zA78^lrDofaiuq9Q*6V&XbgqTp>XV0O+r54uWzU#QuBIYkKuMbacJkKypSYqOlee5| zt~ZXdRuek9!i6>3*R0aSG()EK)qF-aJ*$4`zVk1p2Qq%32F1xLj-?alMl@O!^TiVS zJ5;pX6^(w$o3%ou(`;hwv`~7;s526i?0>qwiNpErgodvbt`*OvNE^oBT?>!7^p0oi zZV&YK#Yoi$S^_DZPCV53#cwhC52+?2&$sd))IyKA_5^)9HrAtW5*KbU{R@3uZ$wJa ztJ4Q@Nv(CS6z*tIYY!}L$QlBXQ1gFwGgOh5w4b#_iN!R~EB$ZNk_!#3cA_7L9)+~C z>NxT)i>wYinLbtCarsls*Lj(NKMr4JZy_H4D`p4)A`rfjpM-QU6-}ZQ6vC;N3mt?D z!QFL^*{hc9x3g#s!}8tPeoNthiG+a9;goiZE$Pc~8?P3tfK zTIMnpl;ZI{SL&0QS=(jqY?~N+P@rvC6zCuO>yF#fJHK?->&*A@>*)01U_QenR)Yid z3HG%I9CK|+{ZL)SyWMA2t&8j=d$b@h(?ygE2WM; z>11JyqRXR!xOy4ZUkpxJay7oQu5B$c1!|x8r8#GIn~XDZAMlE3l%ctb0`~`9f!SV~LqGs<;=Z zWAcYOuOg4W&Gq8~U4@e5j*L<@En?xLz79tky!p1wpX8j*>O9viiK|icOOVE3ThDf;lf&w8ejRI|LD+?XY_gbsW!MNn`k~N4{{2DEI*VQ?ucWuj^{Gi%RbZ6 z-kcoSH+Xu!wX;B1aC1Oj5Vdspa(VRIx@J`j!f_mgdJdBP0VaUtWkAQ@Dr(*%KbC4?78RGhyUh3N%s>_jI*!kHyT(P~+#N`^Qon=9G zj3})h`!bQ_M|1UCViIcI{OJ2m*0y{)?tee6DS?M(PmbYT6Q8T`J|+m7X`>;6<+yqd zm`S??f6QT+C+m|`6mn7@yxONwmN|F(jE1qY*%x5LQ|*t8Z)IJafHn3c^yCBUn0n4s zlJ9fTpDC{<5XaAE&#U^}yFD8JDHbBHm@X1!oRhcnq4zQ6+3|VHCJkP>AQ^@l(q?4K zzwN5dHxpd*{DxjS*Gc1r#JS-`_r9&0jyu(25}!}n)qK=EjYgP4=40cwGB5fM8^dI@ z&p(hp;yzrwQ?E$ZVj>r#E*k-vxi{e@hYyVNSMg9@ufi4j3WXSue2axYQKR5{i5 zFzuIUdW(&l|K+;lvBpv!0__x7$ISpdVh!nhJtxV_0PKIw=p=DLH%_k}TXwnFToMKjbfs(A`oqL95SLdmn?Y2(j@ZdJMC@*{X( zf`u>|30Cfve{cRsW9}Y@=tvk@xF&YL0zvmuU3kh~TWf5W0SnFrmNiNpDTRZO!`5!e zXV9qeRSo1LMZtBaHP7yaYihGMX5<#ksqk)Q1yOyXny|LH20#Q>9L; z@OJtPkWX+9R=V1{`tW_U5lPKV0xMuTPO&zYlvw(sFllUo9v88sX`BM+o(emOuphJf zN~Krz^mFK(Xj%_HB3I=c;!zcpsrRbgP*=bXdoWaRDp|VVhUZK{Pk-=zDenfsoNpd3Pca+EGSj`vq*+W>_qzS zo?DVUt+&(c?yt4U6O0{!SZFLrBP~Uf$#IAdzw1aCt5fySts=sU%nWAt)lHKeZSQdF z40rJT<-L;lYG*4{is-WU=$(j6vm|vFZbvnZyjgbpjCUsZb^BqTHw#?@D&79{KCMvi ziV_d_N)9UMD2*!e6xTuuEVSjZ_NgAk*$rNSqSytvpJ+T&)!nVs%N| z&HfXvjnkOkS_FMx%s}5mIhL4Y?Yx+?6Rdn`%1hX-%%dely|p5i8DdU66h#vV=h9!P zAXzxNWx_8i4QIZ*+ME>7^;spDHh0QaV!yP<$f3J9OPfIdiuT4~yu_}u51%6vVqS&B z^k@a&|8n*W&v~4Cuc6{%LzM_qe%sa%7gn9#lx@U#Zingl@HN^NF?rFSl@DI1Z+OFe z{7{^oa^!mWhMk(G?i8=MO~=SgVI0c^J+KrM`&TG zj&eD4%;}C)x@e;o@B17!NWMq)rOeoX#N4cvX6kAm#T`r?r!%fQQGNQkN8Riw zNFEOcV~fG!0X;3wh{?Yo`}v2oP@t&I*`yGwhkLLB5Fgl{1T^=h>Snb31})~Q>`v`n z=r^4U*Q3n7zzyPk9zT>{rSPi{##_wP?9Wx1*^-C^>7b0poG~Vg18J0zHQ434@OA|; zEGc*O$J&$`^4V|Q&wdY`a}@TzHBnD8Eu7RiJax%R#=@Cer*aImuMA7%)&K6%eibGB zJf=AC(aIZLaAPpXEu+~&P@o)Wq>^B3x7sNc(Or^Wv@ZmWM@yjX zN?^;^0;PPd$*TJAxnJInup0;K@~;|upybYY-|HqPMB!WV;a^-%cj2#2;5uZ$sf1L7 z?1kS|TN@WUe-(CUEEI~-rrutgy6|Dfw9%v~(N`%dCkuI5Z6lRQfzHKNAAoS&$fjjSCEXD9x(#ue;M?U0Z?_`Lx3?%A1j0NWbC3Qz%NHM>#D5U{|}k?UO?HKCqWyauqe2U}w@!%l+H88HLRNP&eE z78OZ|m%aSGBawKTGtHPD?U}SrNN-sJ;{ty@U3>OVMkS%@o|b@*zq#96Uo>&k%fRNx zueYtW{vOgf31Jwf)P`?d8A;AKxwT~kjRdK#4gL)8@nZL0Np8^J^6qE#hU++ou+(rN_~BA?44N!U8j~1Z3DaAKKdR>fi%Yh+ceLO z4-M$JRmCKUC`Y6^=SDSo+vS&}h%YpKwj~i9Cl_^qg0>0jVaGuwURt5%-7#n9&XBQG zZu{*B{j(3M?RtisLgMD&xkb<2Hjk$G{bFkde*3td!2rzfzjKN;-;Ui?BV zIJjyn6+}7oj{M`io|+*tHxtWH0nm9&?(U0-vavCDdokU7=7}O&7(J}*+93} zDM?#^4F`Zg=Zinl;r}f|^}omo|7R4~|LFnz{R;KdJ=c7K3r6n0p0}>gzLcwWA?_s@ zAkEfj7PgA8?D$9xnuWOTk3G$eK-D1l&eDu*ZBz5)Nt#iky;TB?-kWVKucP%AZ+O!o zcldFm3FwVap?~#JDaYB(ECxejuCh>fd)ggq%T!Lf&l?SwjWGY&)z3tJ5w*+5fxR{9 zgP^-^u%If1frdzVk`^%r7nBVjh@NX-m^tk;2muK-bo}%-CBH3r{2~RO=DRc59$z@a<38&jW!-P0}oViJ%1v4aL-ihZW9O?5% za0oP>ZuZjQ-k8F%nQ^GxrEY9Q^sZFwD~cvL*fL)1-m9MrCWBV<^n3z@{|3J;e%R6c zFz7i|0vTMN=-bkbFU$}D!OKB4er5s|qZtnDT6HzTC>K=Dd^BB3iP1rfDSpC1h{4r~ zXW#F_4k@Z+85((-!yaYrE-dZwdB>{g?z`3<&#J)R7e!k*`iGpl_k#O^U^w>96EA%P zCVu*8FaCJCYwprLiu(NPOy3!~jQeo#db8oWz%4CK+)0}-f9$wv|FVj~!nFKsa7=o) zHtRCOkzAF!Gtm926r0<-DJg0^Su??DY4EFqdBq_iuM#vl>}>(fgC=kfwjC>xvO^5< z#435Caj#=e=1pj*xgfBI9e)Gv(oD(%j9S~f&wq{bjV<5`0-J8OznG*?#$S( zHWGDrLRbFPjGZd6@B0e_<)O>)X>=?l<`&Sq2vGOnD6{P;(p9Jg9GrjN`gGkWPvpsZ zhGe#{S>#-MMr&PmM1)<8p=Q$OQ28^;@q4`nT@RN{+K`XpTsUnv7?ZKm9(kW5?)V+D z!3uuN1*DEpwH(|zd*n>>44aCAuMg-Bf6yNtPeKOGlJDtyo`c>Y8}#)3T2k<;T*U|{ z@0l9(l)5gsfVS8Dg{KF42vy1Mf zEFHey7^VLZ;DX)+>-o4q>!!7i6&&;D@03-M5wp5I3eyYV_G>=xfs%L&kEQ`e9$hY*2 zDWA_Xta8it@AN6`ct%WZx`8F`Y@2;GQyxC38_Wk_x1bo#)_5AevBHrinxTH#=}xfU z@~f}I<*Z%llmddelxy9Lgid?Z!^ydoTnx0^aTRo>!Ctqh9Awatw6cPFT4Cg$P}! z-ia0i$655Pk&uizU-lNDoeL;qRs6^(@wJAxR%)F;b2(AtEKqoXI4#1K^Sf@PqpL-% zbN6mY5qX(Gj?3-zz?4Us>qQ+VS89r0H5(XH(B;$s=2McM;T4q#>@aD{9>`m+7!IZQ zWE(0p|2|CuO`Si&GL09Hl6Ijw^{Ml+t2@binj+xE#W2drRmEH&|E^a+HVk{1E$NV#3 z6Jv+`jJ4bh)?Rl^?5e(|cm6YwTX?hO&9dwk-k3g9UlaLA|Ipo(k(qYkvTWO(hW}@a zPsLwfd1=N^_jQ%I^*?XqpFf=P9RFDz!aoBiDs`SkgW{QW&4Ggl{@?^gl! zEuQv-|K+|78fhe_d$H*8;RzSZc7El(wp#U8*~&j(cRpVJdE4f5%^VjuCU!nucsO}} z_M>F=OXpP=pX+qEnKwVTqGpQA?eiQWYVb{YmTl{vg|c3A@Y+(}mnc1nd~VsZNODPOJZp4`0j z>Bh~ir)Inrf8kywU-xWh)3K`yc=L1ha;=iRqCacea|r$U>X#gJRhoI@rX;tUQ?h-x z{fk-jz3|(4pXXCo_B&n=-mjLipXs7p+_Cw;G7Dad<{D34cX$8od7W0b|M>3eDT`OY zI;mvOX4umEu*7ixyUayLI$m8(s#FjFj)ZRc#b%M#vDhtg`s2wO#}y}?yXn5va7FT@ zlC6n$ky8_oZ`-R>dfG~C>VC)R?~iLvDh>PjyR_q4W+e{aELs-tv&8K0I>E2<95=3? z(B?In9~dm9w_SJnJ@pOs`MYkUH|JkaUH5OlXZB%RrqY!cjw{VC{p<3|!dGtN2dn&_ zZ`RyP{#CmLZKD6a;_*FMhqYRK3L9cROLCXTd9Uv&`ds7m{_@Ifw_WG#zHNRWx4!Z~ zVazh~nb(frTl1sZ;-{9?aUl<3r}xv>7%#i;4qQqP0v0^L@vc?xS7irBNIw7e`_i!%EU<0Bal&n80*dezDoMuyqSXFIR=E37dMeG|tle3P0=alsfD+ zXKe|#W~X#eI1J3i6^BH_f-pXyH6NdzVUUjt$_q`9Mxxz4u==v&l{K=`9SwjP9y&xSh00vEPkq*LmWAQpc`m(%nb--)rZDm<$ zUK4_szU*OWLTOvG)6&K`KeV(qOhpN$q5_vjXv0t{sw(P8RYhr46;(B56;)*wZ6y^= z9aT*oxVrSWKeAvtKUX)MGe?enn+*J>FMEMN@X=9L4h#&01**Yte(uU}ZEbC63{_Pn z&_W4M#1dSBl(2ZY)e(-M@hCqJAA$!CD-Dh4g2ed~^kurUBD}v;(x)R#F8@1Bb(8PlDYm9UCa3lUNn}XxiIqipY^+%!o^kt24SQOfaAbk`IaDqnr zd0^e8O)$vgveK?79XFgG#swUR2gb!6t?Yw!=S^g0reli56I?(?(q9-($ZAdQbMXCHI-c4RMALnSEL$3Rdcof5gf`NQWmKH3c_4*C@{u% zDeJguxWbWIXjLUJqN|dci@J&uQe73UWBtQ({NGORMJ8q)s@f)S1mPlH@K<>QcYI+$GpZkZ=9bQ&J`S~8iX() z1r&75IKOXzwM6@Vd*$t65P?cumitIue@4mq5QX=;1_}i!5jUp>tS!g_dy`| z>3F+f-GL~TT+wbWU`Sa5q&E)b1rEa*b-~30`_Cy>`a@H!j>-d?&T$VsSSj(_*gr2- znujeN7ZhYC^kwlb0ccm*Z*O}1htvG;$!%rOzzb+F9Tz_uF`2U2%c<1FLHT+sC@2f#Ft`RsJEezi-ABsO?YN@p18U0oEGr zhu4=y;jjT{KLXlS+RYD#k#_O%@%BKuKr&Dcz`B03hTl(Lnt+r3q3i$UeE&<~{r8~o ze_ePyJ^iMg|J0Y2-;b{N-~cITotz}n@bjr- z24UPO&SFmbA7QxOF>2WOD0Q(0S2I|3e}A)D-A+_2{M&!UOv~`U)LQ85xYc){&lH>V ziVw0R5Ab-A?Y=h{ngjIm;$C^yTIj{bizFfFrwShu2K{`-7fFGB@~xBpf73ukF(dfX zHk$u(crm1dl7OTZyPMc^t=Y?&Yj;@e{HsXH zv(r%&zGtzu4v99=6fvhDmm;r@f~(D&5KQUMYZVW`#daQCSx)2R33woz)g)B&C6X-S z%kOw`K<>wS&N+$i!e6;7^d$A?8ND8$uv-Xg65~li8xz2W=*Q`3qLMLv(`DE*zn|8B z3dbnJc=@tl-!mS;=>|`I4xUPFe_G31g78mEn5x^(n`F;VleCH3^Tw;&_Cp@0aItX2 zh6+CMlXU)TC+KLAfbpK{C5OFcdKQgo24TUYM2GO?G~K`**M+6VLWu&K_dKeKg|$w< ze~NBA*KwdHVDi%|yt(tz0&8Mn+j;3)hb+W9lK3x<7vom8{B*-@B)0a=ltY1MU%y;I z*+D^*8*kV5m-RhOF0g1P#!#L`Mp05n=O+3`BF>o=2afkN2(Sv^2+7R;!fK4vmn3c0 zwR`Kkg_qiw9jc~V#=JG0mm-#w4Yxl#qc!uo{@r-W630ELT^U;Z5o@hpnWc{!K?){Y%r6TeDf;v91`nb9U7X~&}6f|p7U@pbpn^L zptCOacT!{EpU!TU>60h16}3#gPjy!aNBT_@^;y?s)_2>42e-^`i!xv$O&d#i4ucv~mqBcl0UPCa1Wjb&Vz&HX3$M51+YWXHO`{V`eKpb% zEPL5n4t*=Wjr}?(-B#Z5*e{<{R|c#fP%eEOe8@ul&0x)zk~j*7XtOv?Za$5~?ic7z zT4G{o;}INVT0J$ix3wvPdmT}>S@yaG)%}2>0E#}xD$O81CJ9ASO5UNl5WPuF-HNW=Ha=Xv%^0_5P7tbUg;VIsFZ9G{WMB z`}``pTi0{}2*HzZ%lB_DtNylkQA2$>#v_H45`OFRZolh0@RqN;$++Hra+`8`hmH;~ zWp~CSDHln)SVwYviU#YLtD@911?Qu71_8&3ecINJ8=B-U5GQT*3rQ*1%5rlnhGH$6 z)w1jsM;WTH&aZGR-0?p5IIwTOOt<=-GrqOUZ|F*Rsm(ocQ(PN#cWP^&h7wr&={x?@TjHy6@kg#MAxG z@4&Bt+t4K*F06UdsH_11VBl{e<(NQ9xz0SPTwPMWyu?kKspwJzXC1;?n|p{p+N;i} zZ|WzWb&RE3Sdx9RVAQM;yHZaLgQQT6uO)CqM1osIcg2zS=TO-BJ;~N52a|parygXj zmHU;|>P$Ba(YC67`zY>SEmP(y6IgL$U<9FIJ4(I{`^YS*W4m=5{?UTYfI@6;neKk) zB`|DF>ZB7D1I)jWJgc==Q)uXtW(37Ni7jPBm#}-e2?_I;rLB{rZl- zqog9B)u4J{q?_=%FcX&9jA~()9k!wK+b;a&D8p)HDR)}c>@3yhv*R4D7)rYJ6dg}7 z-bgtNtjlpazx5>&qtL_IS1Z0Tw~ZiOmSY;yp0)1UQ4&UVoFu+a;uj_N7Ke*hx8b$9 zhfAu=6%=kQkLtpft@VQ|DJhEfS}75X^Zc_jTk&GEscvr= zif>IBikYHh4Cbw-kc@Q=>>yY|q=$cSG%*J$zZ`XFhNYBA!jF&m6H7 zOQboR{~dVc4%J$w)#g=I1J2Ab6~?GH%k?@Q`_kb?g>Twq`y>CP+Yt_VXX08=iRIP1|oOkyzozkT_xeTwZ~-HgCrGhz#p# z-WhuL%X0&(Z7pty?R8RRx;ZyS!UnF09CaOOdpLWRXQM#j+C^BCeK_S?WdMEK4&&WIM}_NcFfFS ztUdoLBvV8Ur>XCaiB$I!&U{A=b&^~J2+A!I!w^2}OQh%9p;Kx$>Ifh7?b6FSWp__J z_se9Pg*cwQPK4ILT<~LCh58HFpKv+3G8^PaJCQP&?9(^O{X2k7u=PN~V(KiA|ZoWTDu3uIy8g}i-G5YT$)+3^>{S2PwqsNMdQhL}f88`27ss|Ztm=$Ok@CsgW5jN+8qoJ-KiR#^%01JV zdvQ<%-@jm~9v8vz+=fqq6*s-xIpk$i8qZrfS!%W?Wc;mws#-3h!#Sc_O7MI_6y>{w z8x-)l^okmm~<`#0S-NsO3Oo@JcaICTy_&Ss{>jf!_ zr|^p>T~w@}zI!EHZso6%UvTDlo=}0u^p{NAJLX9yA2mDhJt3^RAxmc52yq>%3qZhg#N_ynSn92*W(N#0C@o>`B&QSR1EBfpu*|`OsZ2%-YBL zc$*9oLm1uxb`|;4uB>HPStHb2a0KCBB|s>l;?eu87^h1XcdO{a$x_GyK9GOH=ksf0L5Z!)}Ik4HpX68MPd;HHEQhM}}nL<3fy#%k?=+oTajVZ`gSM)8WkF z$O)OXCpgcJ6(tvpq~9i%-5yYbHRtw}p(y91s3^=3Lz;pG?6zw%_R*pQiY zFuQ!~Z+nHG5T&CZR9S?cZ8REFgd+^?Li6ZNg?OE=P$I4=HR<5&O7IE+xuTA#i64G@ zz|i5D>Q)%3*bN)MT?uK#7ugp*y6RfbZc# z7|ne(OC24lYVmrLZGc68;n|l!U)kXV;mm}x&7^5*NA!VT>o|$CMv79*Y|rJFL5$1? zW%Zu#7yA2D+Y;AV$@nMAy|DNeY&}WA-Fi)6uo!#aIy!M?8fee|=u`K-QV;zF@QRsH=9zCj>600m7sqED>4 z>X=<7b>70g`-TFdM{H*`fQ^%3&6ofihpnk)hDTD40S0=64!Lb^LXCr=@MFrt2Pa3H zymzKDMcBPw;dlHQ8!}Jtdajw&hqrnb+t^?{38I?bcuh>k>%9%lz(kF1OJe+bb$$}_ zXT&Dnkc+19*?0C4kAgm2`pYeIn{xyty}wINTsc0K-KC4@b-Q<>EBxL;qr^fRDpJe2 z$d0^tNHRJbu=#;g#iCb9mGc0nnWRcwuh8$8L@YuVY0#qo23u_GhEO&csgQ7fcVF4Er^pTMa&HmC}dye*W6E2aY(Uv%#)8o#)u%fn#Ha z^9+fZ6g;riA!2bleD2~V(~Vb2LjB;Bm7T4UrT$dRZyv>`TqV+&C6@!`P}rnHx?c3A z*)Nzskl6N7MF=5)EdD$ch=Z%12K9?)_%$zl6~=*pEN%s~iwzHu-Ag6nBKS5`Dh)Jz*kbC@9!lAw*ywz(2PM!DZ6{2!hqxXKI_?TkPzVb=P+!vY7DH%S4j+I zIN1GY4W!+@B zSz&c*&f(e?^d?8nQVskS0)a|_0~EoVN#YThU?bn@c8h{N@Iak^=QMx?D#ZJ^*~)+Z-ne{x*o@6Rt5<>)VtyhIEo?kO+_@LF7tbPd`C8G?OR=En+B_g z&}K$U*AMX=oMGT*uOtB30OosCY_Ymn@;VtCc4DGAka{m@?jtwmoY7cw8l&UN=sn}W z?E~!<9B%*Am`Sa}MadsT9&8>AYM$Jbg5W-H0A}jtEL}g~i?f&^=XQ%Sto*~}>G8kh z^*;9XSrrDqIcu*{yF)M@2QRI@AV?MQ>nD^sY{9Py-uHtK0iEn1g)lITXasfQ+#uaz zp|%}~+19Lh!|;W5aoPHQ zpI(!l9}`lzfJNN3_`z$XcwV&rM)ecb$k5Nm)!2G#32IqOZmesh25qI*1Ulm7$mdXRtPPXtyDFsGTp&LR{oY_{8--W56#<2+?7 z!-@t+hF+wOjI}HZ^Ae*M290ZGb@5@T)%`bgJyBQ#D|;0OzgIMxf-~nu-*bUwv){-x zBVq=yTG1d)2-2kr`@$(HGl$&VruSKcAP zC_6tlSHCO|76pQIxY!na{ce25!lx!L3q`ut;0qz;EqIy(6h-85pK}W}-C11R(sg%9 z`NDLD9_N(>Rsvu1^=kZfTyUGAQuA|OUl(TS<5ASzcLQ|XU4Uj(-U*SkSpl`o7J?R`l%t})De0g<#Xa#C7NtHzQ z)dcvjEYZU9Gj#MAe3sMFOJs4!lUhRK7blqE`($5dowrAb1T(y8=W89{Hm~_11)w<; zgK*=TIClTcm-lU2D_e3YBZahEMbva;#Mxd=DYJYjhxMj?pc;eo<#z<=gO;zb70=iR zRsup+k`nMvcXvS|S_CVD_A1SiWhM6@$CSu=c%|q+A&<;oj)wLMW&jccN_i!kGQoWz3(<30{KCul4HY28 z{Br}y0E*(lRgK_({zPCazJ3cqSjr%@nE~#X!kPyIr#`k>9U8+tU60s2Bw+$>_MlY)F~RWBl)@mI#ngQ9Z~jN-=9Ysh zxtrl)wakg;TXNT<7rD6HNCGz+=#Vt)hB~Xj^R<5XLQoNgQC13q4Y?b2_3ho8CniK} z>=T~LnRs6DO}fb-gyl5b^PmX?3^vx7iX6)_vrr75w&`^Uoz7kMEil|RaU_&cmb*LR zP5h&gC1W~2JTTO9NzS?b$Y)V}{Vu!>{BxaPS2@)T9=N=;m>?yt;L}#mx}~1x-d6wa z-)@{<+D{V`3)PS?X`bN#@sKPli?T4;7>%gU|6lh zPI@yn;VY2>f*r_qDX@|c*D+0t-CHCLZINRykYoNGj*fa0QAz33`avW4hG#>k9@GS| zUX4jvOtYWh2WO&kb8bjhyDv`mJuHLV$`-s$L|;5HULZerH~CCt{Z&G*<C` zHCpS!U8L`p!YpaVcG))0fJ;Ct_37=ha~D((fE3KO!w91i!oWS?%Ur=UmpsYhOnyFES`Tqj<-ZkwgX7j0hpOOk%%D z_hcD=<4(M#R$RhU=+##1$Z2ZzW*ptUT^ns$=}Ibg8F%6o7`hT$?h z!lr7>UwI4&u?s1aUQ)@k=Cux%P9BUBev9s`L&=in%xuLQ$DEOD25;0 zMX=;EQ#i%0zQCSMut_urJTX3v#dpCJ?+B=G&7s>zL|}qYVInxz*QHm1vEl-C=_oDKYxX0WBw5jxK+>U)ti2q2f5mF+HQPoH{1#QUI`H40A#h z1%tJz1!PAQ-}C{6O^K2(RsmUTe}${2w`ZC#!3QvTPfu73SLXGBL@9uT?n3?!Bn?Bv zO_vBFmf{|zEY%!b$RdR-PFoaKk9U=hbd|PMjbd~a#w#U>pRzl~dkvO3?lwJv-Toc3 zpFT@zRI+8}!Sari4M`=s~w_QRHRx_G|MXhRR zo-4ij%TuA|)LvQw{^Qlb7z$m3<>cQU7}#^--smv1-iFEyYIeHLxjmI5Y6B7-@IZfg ziMNUp86`M(^0!#e2#ZfMSQF)YD*N%VjE5crfS9c^5)z!n5;&v=76kB= z=+S2-X~me1q~uEAxf>~_b`y385x?9rm;EM;;^i$xl{0)7h)0wPz0*qEu}3`gI@l@;G8cVV6c?r>wQ%6;ekj>M5QMi&_-bWDYT$g33V4KaYqtT=yw-$=>| zg|d-m!BjuNZfk;DQHbmOTLS?}5ITUfTR{NG4nv%7#l|)7WnsH3N;`|)EyizePSq&8 zsQ}2}H=YJ%l6m$89teX6o^u0tu9A56V@6BBqa11$#E&aK!e^5rIL$rbF8X2fw!R;p zQIUY}GzarBD+6b{ehXhbqYPQ_9&N(s8>J7b2jhh&f<)rQC+1{Ws);1=nr&u+MiY2n zi17!4wU1o{;rw-oK?1gmP+_G%FS^kA_s3b>rJ#Xh!Lg5mJt(9`5)zv{RsYrY{n*MB zYCoos#J8<^EgAZ?cRR>S3B`c4bI@YaEg@L>UG|QRL;sq~l>Zez;hMQhee$E)uQ~$i z^8)uvUIi(HJBldiwy-j*0JTTGomQbNHDv?$v5FC?{OaY&MrAGba&L`6#!{o&^3rra z`*OrmW?xl=56iEI5aQd{C{K@Msbwsl^6jgQqBJQlwkkL6!J}FmW)`e0j?pFX^f()F zr?BbvlW-$m=v4Wdl)}1q{l<>*p!$)R+=BVB$7Sb_Tc}q3a+>F1&Ds@IbNam7Yx|FP z-M9y1&A=_ffK?>o3|nGDH8I_98)rK}f;qpr)GUDqRGwbDH-Wq5$9?4Rk+ih3^N|VG zL+ar!V!W`Tksg6iJ&*+fh?(EyDy0WBfi?B)d<09 z9ZtG%))FUUxw6l{FvNGFR^BQ2-L_lyxW#*Y52O}L)oM;J`HpTI{~I9?!DEUcRD%@4 zvtRr}SjX-zzBK8vWcoGYTY@KjIRi6^m;7p^`9LR*OlVSU--2f(lZ^t zWGLVxFY#S)T-uL>YOTc1^8<%)LMC0^2J`T1d*M>Oxy8H6JeUW!wg>96IS`rqdx@w; zdoH4{NLo^?L4lZSEe$+iqf(1Q<#J9kp?6w&iH2`pSZ24}K~%ZacX5@gr!Mz}jdQ8v zbomy#yJSX6IBT-6YA}_ON@kv6hV(h9-6!@6^pIyr8imB^TxWftGZ`rr?ZZ$U2ofCU ze}&IVjL+QxQF%$&{Wm3^zv}xw?h<;#!^(`cP*DU{lF)XLIYlj*e*%O2@nD*vo%oSf zj)d;aiw16iaM=s6-23|Z2o;m;V-Xj`dCE>v+n1uwGN;@vVYM- zJa=y0bzWo-)Pqm%PivNWae`6DU3-KP&=};H))lOv-xJ;XOZX(LG{j z25gb=UJ5>=qi84+l^~xU3+?en2vQ+^@&t40IyLCaafP7V%{d?gnMD%M?d*5IKP)W1 zI*2PAA;H%KnR;Zwxw0r5;*pmJYw{fE=!BIN2T1B1f*cR{^!=)#UyFoY{1Kc(pYgPm zZzVilaR`eWSNzLbXe+R%C+tGz-bbmTG!w-44aE3Ael@PCBEWIv}H zgwYqHRu>2aumx{cvrXn8HJm%!`!1+rL$z^NNLUt+&NA%q}A zo5lzNhrGBZB2csj!Vyqdd8vXsRv8lF*X3VOHQCSyT)0K(Z(Hyt>Ia&~n3ToT*`uWB z3n_(~r{3gv@*|@u;}Of$2Knv626HhZvj{7T{m7oVI(Oihjw%PA!EB+-569FjE(R1z z8Mr+KnW#I!9V@=gw?+WN%VQ|Oq=6(E5EMRb`-T38eOC7n`>elaSyfqm1nC0cN5Un) zBta1qM45nch=AN!twZt6s4K}2tMPK3iDZZ4MTmTZypRJcF1SknDzn1SXXg*`$MCXc z$xfHCl9-e%&l(4Kl2sh#cGl1ex*c4saWszSfhv1RrSKZ&uLJJ8k zCSX%b~PE(+Cp`a%0?%Udikxn_+Xidm$hJSZr>Hp~p3v4vHw? z*^O}{Nj)~DMhI_E=I#U5fPMq+$0|VO^f$BfO)CSX0iVchGR9i%iBl3A-eVXZx<~*> zD^Jaew>V55TQrVaSr5nqp60|{$ZP0+Iv@z@RKJ;|6`RQf1+$@|-oLyr@YS&HXXT>h zGMg)!jOOPmc8YhXIXXEk9i%xNP67cQ30Sl$NkaS{?N4Ha)f4}wfbLO+R<~5k#3JwB zF?n0E_psH?pDM--epHMZgr9NP?0d1aqB``tBv9HNqWCt!?)q`V04~4dKNd!;XZqDD zS%fZtd-~dTs7TD_#><~e#0re)7*T?AkdyE86y^QtGh^AJHoak`=O*7TdR4Y8Oh!yQ z4EDt+r)z@J_j+2WV%1Rc%r}6W?jX2BReNdku+Fo4in<{U)T{U|9Y{`WDK8d@r+{&g#;oJzK0r#>(foV5IaZtH z6g;#STzys2kGlh|50U?eA@sOTouU583k*=|+g{G8Wpot`gK5TZ=#H)4o~&Tx{Rfg) zEJXJRHz@wMRC})nfC@E(mhFN4lPNPrpuEAiMSr%_?J&Kx>GG;ieR|0}RqMAs0Ghr9 zm17m9ih1A+@83%q(ftb`S*6XO`GtNWPyL7upNhVPtu`$bT-M}-#+gI9kY=FHw<<1r7bB$ zOL3he@;ceLS<>DNn`PxfCoX?PdNGmB0+r8~)^VxT4U3w-hyS4{AWSS;8z2HlSg*+* z+3i9$w>z*$foKC~nQx@HyVc*2fbvhD1l(%-k}AP@fu|ts75C@|$CpDSl&8QDZQw(W zsn#5O0=32jK)@5Z`Jp*;n#O0f)f}4$1sIkoV)!bvh{d4Iu-~o#p*7?`sf>L1Q zrW_^_R6w#L*~dGyU*L7dvl1!+hK*n`u@qpS4A^Q@LYKb_n6(Elyr+Dcj!&v=IzE_{ z0x=+f%25RCT1lMI;&63$976@Fy7teX4+T-Y#QovFCbz7t2DDwZXWpmi8o-AD*GQfv zRn8>n_iRViN{*t9W74) zFjXbv4dy@3&-&L=E9%k3U4WJW+dGzu8pDGm9kQdqvAVel(X05kPAijw^$(-4RI#yx zQ9kxddq8icq5nFn;Ec=aD0RBw>D zGvsB2yJTes?wHo{uyZ#kmPW!hLfQdo6C@`<=z@?1AO{LOo9aPN;%JX;m_8nArW$N5Q-}@FSJ#TKI-C3UpnV%Rf&EeX9N%#H`P07F!YGKnb zcub1NTA{N{JjkLh43KvK0bblSR0~R*c^MTR%i}2>HrK z2UcP`h<1PTev1C|>Q8^LV+Qqcw|5OW;G6dHV%Qa1#iJU=k(4?pI0c;JN3Wtz#KMQ? zSL*VbLVCGQhTH%CF&|$7xZO8^20>drB!$#V7(Sh;#?)zp$L5}016PIf&{#=UAdCP9 zVf++af4%GN08el2zagow(?76qC0(7j?!-A)j8}0;K>-_?Q=bav&g>It(#k)bz7;!lAl- zjt<-~j5VlGNHmMSdHeGD-&^!-!OfpvAJK#q*H+iiY6@!cHKSTIoF(k1IVIH+jN{~^ zf<0D)yKpg26hE)c17+bWJ1*J^I8meO@KzZ)&#d1pf*E|x%fd*JW4z! z>w-g~2}|>m#QCe>iM}u>9BQGp z85~sCF98=tL5cUb)$fI5jDD+Ol=V4zJkZ`9ls^<%|0{WRQ~F*OE7z|w?`d3P>`i;B zIiDQRy?=J9i+)p7!1D%$3i!61!J|Fv`4m7p|ML}yHrAbh1l0Hll&ua;5Mx7FENWG&2M5m0bwKw-Kt@9%qO<|eceqYmho6u<-Hyf8|>UR znu2YsShEujYBYo)6zs~i%r+Ml5SH{#B}fq$r$N#pgwaM9Y|-tRAi$FzzScB4RvY)h zuE*)_E3m%Eax(?D!J;Ok?(ixrGI-d`2i(}MjC8Mu8peG`b(dqchdHOTOTm+ldPd(o z@T9C;j_mysTzoxmZj~&X7|(2fDNb?6Iv{v)-shvy6y*p`K6s9^=2a}A%$s6FzbXi= z>|BYdh^lo|R{f{QxZDa=vbkU$+;`psSFhPht@5|mehaoN8S(NUKo936&n|$xDLBQW zUfX2Yq7{xt{h;a3k0jMZZiBKlKIti}*x*bAB zOGj#A$2uoU)Nmmc=RR_}d&8KMBMcZs2&I z0;-FEWFJP>16r2E6Lhe3oOV8QS zl%h#;WFpUC!~i|Wx0Y2@h6#~|X{#M|ASWq9Rqv}^_wnR7vK!AH-LX&NkrzP2OS1h-!$Lr2 zr&WDF9Us7KOA^D0`L3bjlg@#DG4fCkIJd!udL~uJzkyUr{B+A?;WQs#34n_?2ueXC zK0X2{@b~^5#PWnT4O)R?N3uwBbDB*I^ic_T#uxf%w;W4#JBJ!`8>%BH4Y4$@97KjX zoC(aFHt?tP6!p5c`KPcnNhKZbUk>cbeylTIZcrq@_esTUrIo44~kUse!FK{`$B7;*naDE3PD?T;TX7p zS8(kQXh31C^e`b#w~xGRQdYoLPGYty1hD1W>W3OHN$_1f3@mwK0%Q&np@PRxYl_VD z91=+4vLCSE0o<^dE9aVXn=m_)MBkK|Rv9{GmqDE#f~>#diW;SW>cX{Hov@TeJD>vB zwilzkuAFP}YVAOsd6_@IGZ(*xZ#{6ew$?o8Xab`C+xBg)Rc_VQ z4N_uBUgHjY7oP+0tS+YmB(sjzSE(W-{>+O{pm0{~7oYcjkdOm`Z%CWj^4*|Mw=y*4 z(mJYGcaX4?4?t0=@MX<9eSDk$7x36%WWPrtcryJMsHL#AJ^-EJQ$ri4Y~zZB+!s&5$lu4>g9sEOZ-nih z2Glia5JiCvF7I0O-L5-{H59>)r#4)3t3fu-eOOg41Hi$osm`)T?Jg zNB;$$H5Bn>e7T)s4`eKYF!E@7x3w5s{Mro-l7W0r{D9Grsa%>L=}5m>GalA!BR)?D zOr-I?I;MDwfNsna(%OFYTmHamWtMjZ*hj@N)ezmykVpOi6wG)9AD+eTSiuTllVI1V z;8os%3$qkeL?5vtZ*ClX`v*wcocDp|*#>zf*;23~753PX&3G*8rJU3*6PC& z3;S$KQ*g^SXQuL_>3n>O8qoA-Al8i*0j2s2(vFxid(u8o2}aC6G`jnITh9BO_*ce( zNsn(AmOH*3UBmb61vqNsnLm=MT$MiW-p2kY9MLJvUp>4VZ%plek$Jq*6BK-7W%fD$ zOBXysDw|mE-#GiF2^S&)1o;&tu)v>-YXFR(7wbWu4EnhfN}J1l;+mT$YxM=S8(ep6 zexS#>)r^>o{EFE(!^o?|w)L#PohesicW52d`_wiW zIbaYjOP!>HTi4>A_5OV`P4NbXLnF7O=o@UY(03~+fcZK%VB$AO6{*}f)H8GZtIU1l z_FHWu-mdgCg6nj7+9aRlQfODt4a^GuM|k*0p|Lt`XHd z*?Djaaxw0;hEbj88+aiol-@f67D*j`fA|I%#TE$+-?7iTW!P8l#`(4|2@>2+HAG)f zmx37hG?4_Hok-WQmpouw(et<@t0)Rs?cJg|@&e}*8O1n&v%FR2v%e4^8+=U#Wc#5t z9qHBt;T6ODcV^BAqJ<>R?Jc92pl`-_atPYz1#s}^SqzbqO>w!P;5qavwmbYeNS(-BWdpt( zIIqQ!dg`#@J#kT3|R$3$EdOGE_Lk%;j(Ah z0-Q6dRoEiu>|6PWu?{r118~uNp{{TOIP&DpZ%dJ`J=&kgg9FWiY=?h-m{x!HPV640Ak<)G#7m|zVQS&1OM&~d84^)=yUH||9 literal 0 HcmV?d00001 diff --git a/.pic/Basic Verilog structures/assignments/fig_08.png b/.pic/Basic Verilog structures/assignments/fig_08.png new file mode 100644 index 0000000000000000000000000000000000000000..c66be0199170c8c29a8c1bac6b26848af8d04765 GIT binary patch literal 15604 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 literal 0 HcmV?d00001 diff --git a/.pic/Basic Verilog structures/assignments/fig_10.png b/.pic/Basic Verilog structures/assignments/fig_10.png new file mode 100644 index 0000000000000000000000000000000000000000..4a35308a93397b87ce47cf49bef48b85865f6524 GIT binary patch literal 16887 zcmch;2UJu^*Dj312qr{KBng5jIdzkxghm?4ARq!Z&|s6AoRdltX^!0P!oO8Nr?_Ilgc=oRHiH4dI#VNW|BqSsh z%C{7>NJ#!>B_TPcf8sCjWoju+oP^}0KSo|&LqYNOZDtKYxPaI#W_hd)){$Am5o>|5 zL31kz3-R-lklbp{e{QK0qeR_2?U6hm__mUp+vSzYBKp`*7Y;&R&NqUDijvJO{=cXc z75J0I@n4IwEj$0$&R^_sm18$!5xc}I!W+{VW zbUBdv5Y{~QdMYOkF3dnji#{Aoz!;rVl9iuAVAC}rp z*w%D?>NRn*TQ0*jlYB7McfZp#R%%a2l60wV7IQF^ML6rEc-=`tfduE@+=uyGVvNWn60&of*SwC4O)Zf=X!u8MI zdAxpK*oM5a{$S~jD4E*h)o*fJ=k6UB`7r%WZHvyEn(^`W5|=yeu@h8jtf3)i>kwDY z@m;(41mWIdmr3(Vf$o`bCONGFBeSt>vZ@)+HB!3G-*MkPZToO4^>Mer4;yEy_vc3f7G%d{BhoCpxoFM=g`-ey`~@%0 z-Ilbtk#*7Od{6k#`mp;J{Gau?pFixYyNjxRLp5;5hHB&QjVl|Rt`{Yq`b4mfU$hSr zwYi1$v~3)?de;7sSLqk3}jE2|bOfkTjU`kwU6MxB{*LeNvhsEw5W_ zO~I3P|1Y1H2bx-H1T{hAN~(F{WX@!6Oju05PK-{GPG#?lUL~?-G-bUm~_)Edc+C&B-P zcg1Ia`Ws#9_|7rVv34aY^igOwvId#=>4I(*r=ifD_41k2nOr&*o?G+&cjE>nRYDt4 z-;3@VXwR6t(67VS$<~AEXede%kD8Qmy9sZyo>;uLz)eZ<=zrGXQk%`}4-vjQbWg&d z@}`$uaHd&yG`=Snmap<%&ka?`}Lwo9n)aGxL z@~ZL$C>&9q^=)KvH)DofhDg)hCe5boFs677RY}#eFV+&h1%+VW<4fatU%Yw|nAn$~ z`UYczb>-N7E;cwk>K)-xxJ`aq`{|jdr!UtU&gfs)FV*kBn%agA_LgIskgc3`xuc=j z_IGE?4*C=V47`#7+kH&|M!p}VnY zz+vFY_{DEJ^J{Getzu0TeIBii4d`r@6t2O(k@b+-zm>x4zr&rL54R1wR#22j5AP4> zjih)z@LZDgltihEbY>)LC+dpaz%H!(WqhSD!&trAU=%Ydvwh#Y%E!vvc#CdpYWM7p z=6>mJ$yWZ>&~DteI#~|6IoTR{C|S^PVe$epF|t_l<;Uxf+>Vb?M4o+e`sdlkAhICg zKwhlFprg%an-|LZngd&R`uktzmz61FRfb(XDt~N*%v0BQ6K@iEh_h72R1{R7B}65x z+_)VW%9|?+S!`LkSg6xqr+>D=RV68|iocYW5!_5McVmF1U{FVpU|4?nJO^62mwn^%~hT$t+%dTiF?BWHsZq`opZ*UKC8P@tci$%u)#26uWwu5rsO;7 zE6oy{5ly5`OsWB@OH7K=34SlPw%Vg#->{DM%I?x`RBueaBOUG2zx1?;Z{Az`;5(-I zXWF!H=MBqpSfQ`#p^H!H((!G@?=S1_tyU4e7ay(G?Z+7!chn$#N=o(D61T7=g?%Q6 zTb1*R@+u!yim~q4zx`rr&{a~a9a~0+Z#P$pV>4q*`o=fIHZ5h|$ei&#vm;veygJ;d za3^#5)pYUhG{?;-*=LNl=38tTtYW9MADaCAsLYDweqcp?w&272`Nqs!y(A=pCuL2h zQkt5gMqk*33<5}Y(*Bl#6A1|~0BO9e$K3HUt|TNUj4(R-&ibmi#m%s`yeM<5DVo>a z)*g%|A(51Ew?~;-qn(*e(UurHDVD{`S{7!ExfF|@kSf2by*&B>=9Z@;TH8}i$IR2( zOw61`Mw(gDT^tawMLVOI-ED2`oW$LwSdQq5gJtJ15qEC@7$v z%p5WH&KRs6Gei+(igj_8VgaK5T7#|qAF_5%zx4z(#^;W*=M&)Nht_m7(Ei`}|HnY^ z0~iSVGtk`Z4?%kuN1G!l&CU4GHfUS4owE}dEAVG5(5I^EpW**O_8pv@Sa@IosONal1>0tPu$@UMh&RC}h*#CpJ z{`~w$XZGUqj%buKS^@kk#R9e(&ciPV{^$t6#0B}qh2W4_zXxF*b+A|)DHb&wR}9*X zS%g=JR}``iFkXyD5EzYsfB^Fy1!XC?0JD;!vJ_18*JM>-bmk~$)PKtZCJqeO$8yU_&srC`&Y-y`AL|BUM##WjiNl6qu;2AjJX}$&105i^D90!~{)6g?KE`79u<_ zGdP;ZR2XH-gAx!k6SY7I3t0#Y{4-wxYvuwO3pD?ihnZu|0F6Id7DtH*z)(UWFdi{9 z(5ip{oSz2;6S3eCguz8&FmoYMQGs8}2GXcIVu0`{n}4SYNo5WwnxoJb76Nb!9uW~? zQyw96xG;~X7{3UQxv7OIzqy4N3I?}eVg482qasfgYYw&)26-6Jf*G{USjXQEtBrQ} z{bYlYcE!5bI7{+DZU^3&e?9#g!S^3C!HYA-*#`Z4>P;KxKSUt+6SqOxSprq^n4>LF zfFz4F+8t$UZ-X`w`mfY~O@*lcL-5GQ#BX7ofRG-)$^N^P%tvk|jxvKngcOSt$`x(S z^7|v^zuCzDnaX|#)?|GQ!S8s>zxaCSpEqHkJ)P5&o$YW(AI%z|)U7&E&b z#?Bn;=EU)jY-SIDQqUk~^Re*#OI!cB7;|8;|F#@^lp_iRYP6%16pIR%4{;$gWpLxOm@5(ze(cgyoU+v}B zyTUI`A|PEI1yb?<7ux`lRUEkVA1D9+=8nJkWB*^>8rsF9h5uWM{O1$MyU^pGj1OM^ zUe#pZ^-FjCa z)hM@fl2hXp)qtU^!ZTT}q=2)6a+6%q>=Slcv`)qg$Qrl*jx=H$6r*s{x$B3xCoE|6`{h zA(6#^2PEmgJ!sJV{sKMt6Tr)#hZwToU!aFnIQZ$$1OC|WFVMpu!hatAHx4mIdU{`S zY~NQ_O3_23V#uKX;*WuWvKWZ#eUiI|hDz1>`T4f?c&ggmq9OtBXGr`wPe8oZ_Wy}trhpNgv7+^+klpT0@YoXcOP?PVr^zA)8Se}*F-M; z#p;`zmWI*^*AR*?>lz(Rb_rb4UG89~0Lzf&d9q7eN9HqJe~!S?8ul?3QB_jT#cF{l zj~rkmKA&K#ruEW{N@65h6(Q>S#%t*pw9fM&Nx^b8U{Sc;*QD`5Z`E1d)D^d^C387v zcMO6R8*43$@{5bLF_5aPZl4HquhQ=S-l}=~F&FL`dBw>`>z2Z)76<&7BgwoBfM#4pk&N(w6b{)xH@Zmuu&8tB=3iX>V-~pG8x3mw?XQp z!O$kExF!HkwfQpOS<8FL4hePf8;gV5t+t%MwKBAsCK5GpOE5zRANd+j&&eVd#5t){ z#sBpS(VGqu=6#e$ZcSPWtK_0yphb%WpJX1>N;0eDb9Hu>!e2|e=0!8E7R1udUrzWj zBK%o0IYQFP#->fei50F)5F6|RqE`v9JEG($qN%)j-G1+U}9O11^;~WCv*YH0ohbA0thLKIWi}I0{?%$YCyUo!J~fv`ujBv zek5xBf4<5eSxijO?_d9UB|y%~PVrw}@ehIc8gxN~BTDlBum==zRz=?1E64F0Pt?6l zN8Y=P-UdRR!GCPw0jr>n;C%eEC;KVI(cJr)aZNX5wp-D7m~}sQ(J>MvBoa>ZDkaiA zarR3gHT}`lhXi&9OvtY(vX~e=yn*aUAdPxFP&M6XDzS6x%hc4=(w8Mmp_rh7-wSSf zD>x$m4^ay6Fv)?FryMyftF6X#CHC6dK21olxRFOJd)KC(t;b1$PlH2~{UeR(KK|&= zh>$th&%0wZ+OsNqD3VoKsb?vSNKZpK>V4@$g7xBvF>2X{ckf1FKWk7K85!;K;g-I? z(&4-}(Ax_S!(SC9NzGE3_&};X(H!yAkac&lcJq6j-|}Ydp@E-p7CpVC&CuESkRvlcfbIDDtOVct zAF!UR`O9U9>#Cm3V$&~;_nzfyPz%5uW%>w$GTyoQwvk7~Xs#u74Ghq1nq~I<1TlZ? zSmq8l5On!dBV|^uIi%H`5kd%kvtjA5Up+S}_E!rFefjyP#l;6> zpna}S1yONGGmPRYf7EGtNArb#b}c$pRn`6YVof4pD|*1ab8YOkkM{&UAAJytCP?$) z@=DV}9QnfdQ@)PMjb3?59+}m)3!zL}eO>%wu?ZGaWrWljB&&sdBxy=$3_=EGrjKN8 zYHEvzHQ%NYTEA1zf2N+F6K>I#C~fuTRK6oU<*PxT%_JD*E6<&uhU3OhZG$b^G%g|^ z=W^lP=d`t`z#b?#KGQ9UZAuWb&QeVj_N>dn$c*|P4&7j~-<6<%2(oW(t@cp*PJftx zQ-4+wIWg*0>o6a!V%v0G!;)A; zTi8-WM?B23CrfqIiA1A)CAng8{fpo7W2Srd11P`CB9f&;c5Qpx&BH#MwdS_U*;+kU zr10>ZJRdsZX|R(+Lqikrh$V;hn4mV0EqHNW6EsMsE8PgD)f&B`Zo?KEgVO z6Wmn93oHzORMApUL<7G7MtA11=oeG_Rk)xb-m^bBik3v960bQa`${e&BO||yvkaK@ zcxzqk(Pl9lcyU^1D@>s@8&z1X({hPC6!FJMN(|{L=leDGWM3VmRPZGk({8%J;kVB+ zapCTA;K-T0?G;~*xDMG$Nl78iXeN`@Gepd;BdRhxodTM<0t{(J3C{r29(?!oL#;rB z+vW@neFb8x6>e1kzs#-ApL^yq?>$jR(+uGbs^qrSg<^QrJq#AhRB$wH7T?_quiSd5 z)u?nUM#t*zTecp8pkKgZJFr0aMXxb0t)Fw{6XC3!!U)|V24r>*4-ZePn}xQvwvv+4 z%2#QXjLrEBUr4<^@7KJB*AX9CoVEJMpl{w$z7nc4cG3^(aRn8oIRw z6bV0L4e-l>eBMOjL$Ar!V8)>>d$#7i#v5VrI^Bd5@dB0|FJI7F_rGrSN-8Za73E@u z@JK#@F)@h!wiBIqjW|z6h_Xt8(1CD22?OT9mJMQOF)!uAw4*^r`HqQg4Y&FePf?wB zd+@G=M~jZFEzEcq`mw1+(#b@;T98+)WPWo&wS&rduJUAJ7|vb9i%&z^A#2R%K!03jG`jfH}(t?e>@t}SeF=>7ZmAjLyA z$@(51luTP9ca&}MnrQ?Yv0tQu2ss*eud$bI|2nr0}$wo>n#~%@ep*7#Y>eg6S2}B zzTcbK#&)My$rt3AcDnqLtR4MtPQ)G|hFI7A_h@Y_gYLF~+34C$zH^zskV+1YAi7~0 z-1}V`=f0*>9{%hIgxse=nk}=Qwi+Kzpele^_!DTR0B{^GE#=jqIzl?^xbrcHa(*$V z6#48UkfTBOm>VYtveUHyh+`KY1qH=WX^OZYpN+M(wT;c~(gL8Ko}X*Xc9NsF`f(X> zt0JH2TfNTH~Vvaa>-ho_kSgCttBuSSpO`y&M1p49{e&0S>%2da- z7$_Iliv$u#QV#;(wIp~_A(`{w<0ei|S$u6zTmmGHaGU=jFgM0omREuO{rzDj5{H>^ zU>|R5B#kTZctx-iznFPt$owro71%1MEkFiJnF*76at{@=)aYN4|2Lmxwv&-Acf-u_ z9Dk@E<9h3^^KvF1==YZf?xPHAH8AFl{vH4(9s#@`g}w_tKX|GVY#*GlR{y=aZ|c{A z6~8aMrs>*-JM!uMGuBG_(py)gIj{E6@bF7Rs(4d5bB2SMk_{b4W%hu!yhbCIiVL4& z$&N4`g})~kZn$UZ`v^KRL|aIZ`n{?kD~v3vFDI&XjHoR@Lnh8}4}i!c33g`?PW%rdJ zs*Lyh4J%RAa*B}26R2AT69@owuxC2leI>^gOR$x?3bQ1MGzD^D-rhjb$CX&r(a7pj$Xtw{|H;K z;{Zf9C8cR1{Ad?3VeuA@&!keBAO;ua59U7;8QbggJD8@3GdXCypuQ)o#jxl-Jz41e zor|w(>5<;iCO;(5bOVI!kK)GJD@*#B^!E0~h}mZBsIWTO4A^gO)@-U5TXu#;pvN0d z#u@M6cnnM3NB&`L2w3N+mFUv7>R0bnDlz%!&*1F-HDcV+M!{;^Rdvnjj8D zu3zEO22(WX@C+g&&Ob-J7O55vH-@l&Kk;!JYisT|e-mD@vbO$g)OIZvc_|bZ8Vf3c z7zCy{OI1b&XlQwQuk}Vs6{hEU;Va1WNb#DyNl8hqMJ)n6fEOJdT^(C{dwV^k7Y#Z# zrY|Ob%bCg->PW>_T3Ahdx6yogzo%Vxh>d+6-O*HiC0_ela1mV4%&g<3m@g?gJ1#9k ziLt^pLdx}I1iJsVf!ankWayycQ5^P(bVHwh8lX&Z#aOA$Bef@A|mSo6!Ub z{8)~2JNPR7SkP{`e1{#!50X?*cCGc0m`M1F$`!n3IN=5SC&TU>tdD*EL}xCLq~t2^ zB29ynj;<5NX5bAGKw)|qN@q*V8c=H}8p~Cd7vpgQ$%aN<%4Kz-vbMx>qE}me-szG1 zRtn3iIV*tuq&qy9Sl__enSjo%WcBp)RAUe=VPA_agZ-QbE3-yc6Dw1E)-m<`VQFC{ zg_$XgF|;s?UTsVO731fClM)*h#3+yO$lI+~WMU9mz__GU#R4q{K#Y8&o{`&Q}YFfLHe7L5}}GW)z#IYL*tgkgalgm)A_y%;2r>I z{L_!sSp8?=aU#gtlQ=xuKk~+FRCkBjKX{p@M*;>4Iu#;O{>_npi zz#uY1&}^b9r3s%?P(D6nKqeGln>kzjyq%LvP1K8d2 zHl8$gQ^&0F1_!#sl=Ir+)oZ8>F3F{(rRcmsa^t-#pV)B;kzUfcrSOQ_j8oX1Dif`E z07Lx=Ig{lJ@1NGodreE+fc!n4QtTk&nOiX8V%amBOB}eX&k=7Uld9r!OX2CSd%`IS z;HTRC=^8%Hv*S2pH-|X93onb`FZ&CB6$T*Uw!;>&xGtk|GU_Re$#Gzit7iSO$eUC9 zaSsWg?yfRQa1+rx~;~+3=CurIbS| zk9l#E+^vB%ZsQa|?J%q_Uf^v^$}<>Es+#fZwyXe-Sk+~k!)z})<&BB zz*80Smp{+3$24%6Gs+5e5ki6)E*q#`w^>o_tMS9o{(bm(^7=CJdf#&qv12=l81W?L$)FomGh-u#6aqCd9^zg?OtKQ zx^}S$WhCpp^QGO^rpXBRi}ESiR9G394)C+0qq(`}-b;_M3=}T)6e8xfmjK`(u!ork)XW)hxC{Hojj*Qgl8sGr_55JmOr*ls|(M=>!ibNFS6hEj6Lf4IG& z&Gwaa*=bF>KqPCi+C(BqgXMQM2C&{;}=r%P{{~MQ+{X7g@USMv4~;ifoVw! zasz?$Dx|WQUI$D-(HG;&;NYLsvcL;KVmn=vi)2kwYmT*anvOn`10S!RcbbQ=1nAtX z3x`W> zM20^mTXLFSM6pz@&J{6L7xQs%dzDgV?^`gFvGEwb$bFgivGJ`p%dg{6j|bR$XiiR_ z;9E1?JBUG0k=_jl6=gbWkC%@;D?#(iZD6?d zm%5kuJ4GkL*ht;JM-*(ujqwP4f-e{!GP&FXDqwnXv4+j5P+J#IWyhmNpXhqw?OjXQgdO3)wg9W$R)w9O{e2&S2pJy$F3)_@S zNH#4`G*@p=C5~S0#T~R|uuF@O0-i{-TW0Gsi$TrqEmvXHQW|uCCdgd$hg%UTCn6k{ z#}!8zp%y(}^X)RVpM$-77}uTGOB-Mes8|VMCDw;NYd^Xtns7sJP>;*VfvmuREbcjX zTh@_EevjE6rT;ZMp$PqXe|MqM(%oNV%)5A#?4OZtBaOuF`I0a1L`L1~y?~K`#UlAf zy;t>M7IXBBBLuukwE)!WzogrYFLM4FS0|q+?y{+8;?sAU;+L>AhpRGfbMJaGm%0in zrsxUea>gHU4nuriT5?l%?lWDPYu9PUj$DjX!a>4sjfa= z1UuTFZ&-bJEQU-LAa_vsNL~u;ZI{GJEZ(Erw1665Z%Y9s(ACAAe+@4&Z=D_=4vSWo z-Y)rKy!!Sp0DD1L41y>79fV&{+md~0yYjWuxBsU0?>Sd-`G$Tjjh7D3MZ8E5br^T~ zVl>_Nw+5YtCn!8o))_@bMO~NbvH@x#bDPM|&nGt3rzBeflDR0Gua1Y5zV;u(Xm^{8 zXqy=&EZY-=jFI4sq+Wv#G-Qay06}WZ;v>}xL4=e+RDzp9iw$YkA6`r~# zCkGc1Y37O0;e;x6LplZqhUHUNg~u(S2+6KPr~7@Wp7QhFY{Qca7M;>_t0{-~PK4_3Mlvi>vbK8UlA8G?URl#LC)>mhN9$HEqzkfpOPR-;M)=VW>+tqAOc`Z~} zf^N1kD_G{G^NuVCMe(F?A{8G8l#19X)EoUxYg*0*>u|=dS3mP6y{s2C$HzNd#xj;W zGBUE947xEF{k{U%rJA+*+8H}A*BAVBAr zAO{+EC-fLiG1sbz6r`!}oC^*aGMjo)4iBL)%#OmCZ+NqGcyg{VXzmT=d*i95?HcD! z9wL_sExX0(8kouIvgPJS1HfZ@BgzFLy}IPQyea{l1bH)Rfc@Rrz?GkdZ#K91BSF`X4>|hgm@G!aY@CnVNrY;g?BTDOA*pj^J9 zfn*JNYB!x^de)zinl9+K{z5@c(nkCsRA5!+;NJ3wAH(&GucZPB>>ijicJ262afrRM z?ZbVvWe3Gs>gKVCJ=A$$=W9j+lN|@1{{KqMwC-Ki-(O^hT5qvtq|l z-$I@n*OrkzUh1{gKkF3zz79`?<(~~kI5LK{?ExS*sUx{Oa07n~Y-S1}B$}gGEu5;L zYx>TufwLjCVPT2V^YimlKmaI5Vi%A7a8i>CRAK#!kJp5&Ky zK!R%F8Yo&~q!&5o3 zB^$GfO%9k|81%tl!{r#dt@k`6;C| zP#=oQhd2e0g7P}1iMMj@t@_U}S{TAc#|g7$$)G-T4g`})U*UK~sd9`a8#m58eo#)Y zC4t&F6CTB+x(|r0hF<(yP3lkBGQ)5imc9-s^Jo|P5`s&MK~$72g39f_JwP}`qAsIj zC)Tpzq3nXB*Hm7n8Sj;y7YH5iB#z@F=Td>x{{K*f6?weeCYI|XFNB91LjhG%s^b73-c{EPb8r!&QHPuS%zGwPTCE^3)} zc2F!pr#w3V4cOi8H~-}Rz-2{d9~6l?;RbL(OkwZ--q!N&yvTlLwDjJ0K0jiDb-_V9 z*0-mpX9BGSb+~e7fH;jR8D$?pEk02TvI3ApB3R|Rdb0hn!=lX3%nTKwgAJ^Vpp%7F zcGC6lh?Wis5$~;frkbtsr%c{UH~XMoBVH2^1PP5pIDT+Tdqt%#wcfk-v!_0=*h1B$ zwx+nOEbrY!pWdR+TK8;0<-#~%VLe(!sg@+pwwgRwv%7HmGIu$E2PS^|E`>>;%^8Dm z0o5-!+Yt~RS9XoQ;A`pAy4oot0~)hSUmsJBV(Wt{RT$|F%;pFEYBvU-c8FV#zQa_q zwHEcLNhG=S8|3K~md1fBaR*ey`(h+-yFTebope1qQ?ro%LKCJBBMdd#+#6^dfd^=|`uQprekIw>i_Ttu9qEWLFtvx!98; zU1Exl3~Oeb72O<;Sge>XaNx463ph!%T^&2zA2X%~P3N#w!ik~f)>p<8p3{x$Pc({v zuI1OBn(Ud*4HOZ-R_@H4=3=5pRV_F1Nr(@IOYgifAIUB5l-`ZEOkM^!k0iB21>j$B z=$FNEIz|5KU79eo4rXxOBE;29x^n{Fy-t`0 zQg3>C`skC*X;S0cwBzxKz`p>6_Cz;R_Zf&=ax!_4fN-7r-f}otneaxFUFAGs)EB=! z4nS8=SQ`Oz?RUJumbz>3g>gw9sJugmX)LC@h zqJd4R@@;$6xQ&#cK;?T!-UeW&H{RPa!Mhh0`pO;5pr%c}VcFSz)hM9}_C28_wcV3= zI6y;ZBHE&1=C6`L6Sc^mSho}rKH@MJXD4>U=1kvyx#xGv=dm5&uyenuNxuGq`$7d% zVGtqY2ok*cmeJaQE3y7^79UM6FmVEih|IWm_wHT6vet2F+#B>AUHo!wynyT6r&z9P zBH1)(*^HD9&V}<;*;}qRAZW_Q4(6pc2GB#T2iM2kCvcD59}sbLFjl9p@9a@48{iOz z6d180zUOB-18Af^_wdkd?|DYcww6X&EkwWj+2lY0=z(VTi<|FOz0&mxi7wVx<5&IC zxEy6JjkPI07Xet$pTJ&SzR2Rn${nB-3(o4;^HUDivK>mBW(yC~2Te1wrypW{R}Y&m zHA$~TMt~kl+F?XqT3XsIm4@T}p(!k&{s60rG1Z*3OBWIrz9Wxm33C+P`bHYOtl;Yt zF0ruHp(devYSVtIEq=B?f3}l#W^RuAojhxCPJYB|NWnU4pr_K`txb$_7sRn!uMZ)? zu@-wYUWJdcb7r_ASkDsFY!>aIq-O_i47XNqj_!isGq+0BIFa!-oTSYsMMOlzYdsb^ z#QM}a7pma6rekS2{RUb~N}RDLW^Q1S=-`A(ZM3S`(biprQv*Jg)*?H&C@*Q_id#f@@~UBgHF(FE8n2lVrXht zO-hPV$HT^EaBWr0=|FOL2s%+(ZG#0eYJw)`;(4WTdI`JmAl7H537 z`tZODYba>FK##48+@u2bLPPJNC%P00j@>|uOb4pYIj0_-<~^alC9_vQ)~A38Snkyp zQICJCUEVqU(n&3{`BFMdu?RS3kbmf2air^n<-S5+mlQ3p&B`$z7-yM~$NoA>-uqzB z%nA>$E1yozD;@K#v@gS!6UhowLAb>q>-%xAyGWThx9GEYOh|_g1yw2bWj8>T(r`iD zoeCmLks}VQb5 zMcE8*^;B>AS`%MG?N?(Z$RtT~7mX@a+kyG#>G_Eaug;eaEf7@rj0D)rq<1HDJM;Nh z!u`B$A|b&(hCo*bgkM*_e-B+NAP~B`_{$R+WPH8Lzw#I^6gCcsE|hPozuXGHS?E{_ znuaK|L3Tk@e?2N&-KFMnFlW`b5R_K}H&CrIdDlQ3|6W?J%|nV-js;7cB7H z5ghXbqSHLVN50(mw8s~LEnh0RaD7hyDc%9#{}XP$pgjuCqd_(5Pw*$iARGnfva+&* zY{?uF`D(UI%L9#EJuKVNO|g2(^b6aW%F)RlQ?!c|VE1KPk)T7z8iVli^4fCm!Y{Y5 zMg$B=E`89kMK_UB?%4x95t9#xYWEXGpi|pRJ+)Td!lwMLkMiXQv2PVrgp#Z!=xW&gU@0&MsR=!G;zv8jOJ8^ug{v2Bpe zn?)p5+g{#E1D&q~x8o3>3U~+9GQh)pcASeeiwL5tZO4hie6@Q|OSI@LlRf0h>nj)D z&o26IN?=by96Wx5p9;GXacIH|0kcE<#M-^@lvXUTnw`Gl`sxvfW`@PeMd?LyFoB(- z2!MhjRDDo)hEfE*$OgEgpt&FKu>IZS45iF45g2@TBDlx|&QNT0u$W=zo``yin!|l^ zJwFR>qaD0xu;otze)J?10@zRzLN-m{!kdmVCIojXrs>gf%K-YSAL*Ss9v0ry68QqK zn)Q6F2mR4mdI&C;7gV2R3vWNG5y_amUT5q~Tl^h&&+!S9z>&9`W(=xKfIAWtWgE$x zbGjwCBA401gM&qx%L|iWSv9Lki(A`&0TTk4#_Ge#8&~w&gVn0{R@6bv+$S=IGe~R% z(c3L~Lg95vC8N4p%J&K=uAJT6D7}DuQC=HgEkRs^xz25L%J?Z=vSlg_!p7P9H0Vq-bU?4~D}yTyQ*u)<<6UE2-16?&;auV2&eoRn zOPRyTvBQH+V{Q_EaSmJ)xY}|W_|mwA$*4g~EFajT^E^D3fj5?7w8LNJww3R1U>A!! zd+nR$j{9s@swIF8GQoF)1m@x)nasJlLgd6<6K;a8#`IGOK(}IYGn>FlJ=cCTGZj8> zv^8-jcGPYsQa10pwp=Y{^xJcgL6VSw^FDD2iDF(X26Hm5thAI9_nrfHzdOArH%&ko zTZ3(l>J$Q3K-@5UTMpDlYb8)SrjrUt%#9n)$doe+_?(!SmBmoxZ_P3XO}@MH44=U{ey#UP>y2tz5)#%Nc&=4SP#aBX zFq5x4C_-^Qyq=zJ*i%=U# z-16X5Rmx|_kn0IRmsLcoFqu7KGFPFbTT_^inb}-XGh>{QYkWPPgao00G0&Ik`}&nu zn&@j8XU0QV&xS^KWGF{pPjVf^fTr6j(DK4}aN95q zFCdBr_kaX0q9zVrn1!G090dnqZXIHl+=i~cubRNkC%10J6oc}m7(nhrTl}kM0`U?b z5fO|&T{p>n4pviYK?!k%4GLnp1wbw5*4NhB5`>&|XsIr=JdYg3ix$75FPv zcuga`13~#ll8LyWSvisw*+I~!09THBb$*Odq|j-Aijzm^*Dy^-!Hn1V$W6Un6imvl zUjz=H9J$Oldj2~*&fRy%JviD)DTp%4=!!v6B zg7V;UMr$6{SA*Yfd{{G}TRufpsk#7x0B|Mg%|m0hUHEuM@Nhhh!P|v=AE-$52bbI4 zR2xgJ!b9iow(ugxPp;ZEVR_>F~NsJ0{?2!p^YrUqH|Im++AuTN(rU5ycGS7=h57G#|QnCH2PO zD~x6-Wl%ayHOF^X+NNcfo7yb1KIJr^b7;EtY6^30dhEyC+#2K2vU1>_W20gk-V-&a zz9ffMO79eJ=u}y7#yUQ-2LV&|JCb!s&;s=|>a5B$?aNj0`Uq@Is=;Ci$7KlMw)OwD1x%X^S z9CRv{dD$ccqIREeN`nok#;Q~BIWsy#n)-Ex{P#o7vDRy$(iENuaxfigw?gavx7+5R zb^O20`F)=q6pvu>;Ac>WfF1g`2SDk6ez9Gn_mEtx*geH%=L|cTMxv~!rcfYv|Iz;f D9T)cw literal 0 HcmV?d00001 diff --git a/.pic/Basic Verilog structures/assignments/fig_11.png b/.pic/Basic Verilog structures/assignments/fig_11.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c4b8e97416a3b226f97aeeccf40a59e1988790 GIT binary patch literal 38410 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 BEs6jD literal 0 HcmV?d00001 diff --git a/.pic/Basic Verilog structures/assignments/fig_12.png b/.pic/Basic Verilog structures/assignments/fig_12.png new file mode 100644 index 0000000000000000000000000000000000000000..c93ed4d53ad987a71b1d2e68dd90b26f1decc397 GIT binary patch literal 14685 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 literal 0 HcmV?d00001 diff --git a/.pic/Basic Verilog structures/assignments/fig_13.drawio.svg b/.pic/Basic Verilog structures/assignments/fig_13.drawio.svg new file mode 100644 index 0000000..aab00c1 --- /dev/null +++ b/.pic/Basic Verilog structures/assignments/fig_13.drawio.svg @@ -0,0 +1,4 @@ + + + +
logic [31:0] a,b,c;
always_comb begin
  temp <= a | b;
  d    <= c & temp;
end
abctempd01lӏxх|
5ns
5ns
Первый проход блока always
Второй проход блока always
\ No newline at end of file diff --git a/Basic Verilog structures/Assignments.md b/Basic Verilog structures/Assignments.md new file mode 100644 index 0000000..9c6630e --- /dev/null +++ b/Basic Verilog structures/Assignments.md @@ -0,0 +1,426 @@ +# Различие блокирующего и неблокирующего присваивания + +Вскоре после начала курса студенты сталкиваются с понятиями "блокирующего" и "неблокирующего" присваивания. Часто объяснения преподавателей по этой теме сопровождаются словами "последовательный" и "параллельный", а также предлагается _просто запомнить_[1, стр. 2](http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf): + +- При описании последовательностной логики (регистров) используйте **неблокирующее** присваивание. +- При описании комбинационной логики используйте **блокирующее** присваивание. + +Давайте разберемся что это за присваивания и почему необходимо руководствоваться этими правилами. + +Начать придется издалека. Несмотря на то, что SystemVerilog является **языком описания аппаратуры**, он так же является и языком для верификации описанной аппаратуры (слово `Verilog` является объединением двух слов: `verification` и `logic`). Для целей верификации в языке выделено целое подмножество конструкций, которые не могут быть использованы для описания аппаратуры — так называемое "_несинтезируемое подмножество языка SystemVerilog_". Разумеется, часть языка, которая может быть использована для описания аппаратуры ("_синтезируемое подмножество языка SystemVerilog_") тоже может использоваться в верификации (хотя бы для того, чтобы было что проверять, ведь проверяемая аппаратура описывается этими средствами). + +Давайте для начала разберемся в том, как будут использоваться операторы присваивания при программном моделировании (так называемой симуляции) — одним из инструментов верификации. Разобравшись в поведении операторов во время симуляции будет куда проще объяснить результат использования операторов при синтезе цифровой схемы. + +Для начала введем пару сокращений для удобства дальнейшего повествования: + +- под `LHS (left hand side)` мы будем подразумевать "выражение, **которому присваивают**"; +- под `RHS` (right hand side) мы будем подразумевать "выражение **которое присваивают**". + +В выражении `a = b+c`, `a` является `LHS`, `b+c` является `RHS`. + +Существует два вида присваиваний: **непрерывное** и **процедурное**. + +С непрерывным присваиванием вы знакомитесь в самом начале — это оператор `assign`. Непрерывное присваивание постоянно следит за `RHS` этого оператора, и каждый раз, когда любая часть этого выражения меняет своё значение, производит пересчёт значения `RHS`, а затем сразу же передает это значение `LHS`. Если мы произведем `assign a = b+c`, то каждый раз, когда будет меняться значение `b` или `c`, будет пересчитываться результат их суммы, который сразу же будет присвоен выражению `a`. + +**Непрерывное присваивание может быть использовано только вне программных блоков**. Под "программными блоками" подразумеваются блоки `always` (всех типов) и `initial`. Есть и другие программные блоки, но в рамках данного курса лабораторных работ вы с ними не столкнетесь. Вообще говоря, синтаксис языка SystemVerilog допускает использование оператора `assign` внутри программного блока, однако в рамках данного курса не существует ни одной ситуации, когда это может потребоваться и со 100% вероятностью будет ошибочно. + +В отличие от непрерывного присваивания, **процедурное присваивание может быть использовано только в программных блоках**. + +С точки зрения моделирования (не описания аппаратуры), программный блок — это программа (в привычном вам понимании парадигмы программирования), исполняющаяся в отдельном процессе. Программные блоки исполняются независимо друг от друга по определенным событиям. + +Блоки `initial` (их может быть много) исполняются в момент начала моделирования. Блоки `always` исполняются по событиям указанным в **списке чувствительности**: + +- `always @(posedge clk)` будет исполняться каждый раз когда произойдет положительный фронт `clk`; +- `always @(a,b,c)` будет исполняться каждый раз, когда изменится значение любого из сигналов `a`,`b`,`c`; +- `always @(*)` будет исполняться каждый раз, когда изменится состояние любой составляющей любого RHS в этом блоке (когда изменится хоть что-то, от чего зависит любое выражение слева от оператора присваивания в этом блоке). + +Похожие правила применимы и к остальным блокам `always`: `always_comb`, `always_ff`, `always_latch` (с некоторыми оговорками, не имеющими значения в рамках данного повествования). + +Под независимостью исполнения подразумевается то, что порядок исполнения блоков не зависит от очередности, в которой они были описаны. Более того, исполнение одного блока может быть приостановлено, чтобы исполнить другой блок. + +А вот выражения внутри отдельного программного блока (с точке зрения моделирования) исполняются последовательно. И вот тут на сцену выходят два типа программного присваивания: блокирующее и неблокирующее. + +Блокирующее присваивание (оператор `=`) **блокирует** исполнение дальнейших выражений до завершения вычисления `RHS` и присвоения вычисленного результата `LHS` (иными словами, это привычное вам присваивание из мира программирования, там все работает точно так же). + +Неблокирующее присваивание (оператор `<=`) производит вычисление `RHS`, запоминает его, и **откладывает** присваивание вычисленного значения, позволяя выполняться остальным выражениям до завершения присваивания `LHS`. + +Пример, представленный на _рис. 1_. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_01.drawio.svg](../.pic/Basic%20Verilog%20structures/assignments/fig_01.drawio.svg) + +_Рисунок 1. Пример цепочки блокирующих присваиваний._ + +1. Сперва вычисляется `RHS` первого присваивания программного блока — константа `5`. +2. Затем, вычисленное значение записывается в LHS первого присваивания — сигнал `a` становится равным `5`. +3. Далее вычисляется `RHS` следующего присваивания — `a`, которое к этому моменту уже равно `5`. +4. Поскольку вычисленное `RHS` равняется `5` то `LHS` второго присваивания (`b`) тоже становится равным `5`. +5. Аналогичным образом `c` тоже становится равным `5`. + +Обратите внимание, что все это произошло в нулевой момент времени. На временной диаграмме Vivado просто отобразится, что все сигналы одновременно стали равны `5`, однако с точки зрения симулятора это было не так. Другие симуляторы (например `QuestaSim`) позволяют настроить временную диаграмму таким образом, чтобы отображались все переходы между присваиваниями. + +Посмотрим, как работает аналогичная цепочка неблокирующих присваиваний. Чтобы иллюстрация была более наглядной, предположим, что перед присваиваниями был исполнен какой-то код, который привел `a` в состояние `3`, `b` в `2`, `c` в `7`. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_02.drawio.svg](../.pic/Basic%20Verilog%20structures/assignments/fig_02.drawio.svg) + +_Рисунок 2. Пример цепочки неблокирующих присваиваний._ + +1. Сперва вычисляется значение `RHS` первого присваивания (`5`). Присваивание этого значения **откладывается** на потом. +2. Затем вычисляется значение `RHS` второго присваивания. Поскольку `a` еще не присвоили значение `5`, результатом `RHS` становится текущее значение `a` — 3. Присваивание этого значения сигналу `b` **откладывается** на потом. +3. Аналогичным образом вычисляется `RHS` третьего присваивания (`2`). Присваивание этого значения **откладывается** на потом. + +Так называемое "**потом**" наступает когда завершается вычисление `RHS` всех неблокирующих присваиваний и завершение присвоений всех блокирующих присваиваний (однако "потом" все равно происходит в тот же момент времени, обратите внимание на значение времени на _рис. 2_). В стандарте SystemVerilog этот момент называется как `NBA-region` (сокр. от "Non-Blocking Assignment region") [2, стр. 61]. Выполнение отложенных присваиваний происходит в том же порядке, в котором они шли в программном блоке. Подробнее о том как работает событийная симуляция (event based simulation) в SystemVerilog вы можете прочесть в стандарте [IEEE 1800-2017](https://ieeexplore.ieee.org/document/8299595) (раздел 4). Стандарт доступен бесплатно всем желающим по программе "IEEE GET Program". + +Таким образом, если `LHS` блокирующего присваивания используется в качестве операнда `RHS` любого другого последующего присваивания, результат предыдущего выражение будет передан дальше **в тот же момент времени**, что очень похоже на "_последовательное вычисление_". + +С другой стороны `LHS` неблокирующего присваивания не может использоваться в качестве операнда `RHS` последующих присваиваний, что создает иллюзию "_параллельного вычисления_". + +Теперь, понимая как работают присваивания с точки зрения моделирования, посмотрим на то, во что могут синтезироваться подобные операторы. + +Начнем с непрерывного присваивания. Оно превращается в провод, передающий данные от `RHS` к `LHS`. При вы должны контролировать что к чему вы присваиваете (не путайте местами `RHS` и `LHS`). + +То во что синтезируются блокирующие и неблокирующие присваивания зависят от описываемой логики, поэтому давайте разберем несколько примеров. + +Рассмотрим исходный примера c цепочкой блокирующих присваиваний, только теперь перепишем его в синтезируемом виде, сохранив изначальную идею. + +```SystemVerilog +module example_1( + input logic clk, + input logic [31:0] in, + output logic [31:0] out +); + +logic [31:0] a,b,c; + +always_ff @(posedge clk) begin + a = in; + b = a; + c = b; +end + +assign out = c; + +endmodule +``` + +_Листинг 1. Пример описания модуля, использующего цепочку блокирующих присваиваний._ + +Если вы уже знакомы с содержимым документа о том, [как описывать регистры](Registers.md), подумайте, какой будет результат синтеза у этой схемы? + +--- + +Давайте "прочитаем" эту схему. Мы видим модуль, с входом `in`, выходом `out` и тактирующим синхроимпульсом `clk`. Так же мы видим три сигнала `a`,`b`,`c`, которые описываются в блоке `always_ff`, предназначенном для описания регистров. Значение `in` по цепочке этих регистров передается до регистра `c`, выход которого подключен к выходу `out`. + +Похоже, что здесь был описан [**сдвиговый регистр**](https://ru.wikipedia.org/wiki/Регистр_(цифровая_техника)#Сдвигающие_(последовательные)_регистры), представленный на _рис. 3_. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_03.drawio.svg](../.pic/Basic%20Verilog%20structures/assignments/fig_03.drawio.svg) + +_Рисунок 3. Трехразрядный сдвиговый регистр._ + +Давайте откроем цифровую схему, сгенерированную Vivado и убедимся в наших выводах. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_04.png](../.pic/Basic%20Verilog%20structures/assignments/fig_04.png) + +_Рисунок 4. Схема, сгенерированная Vivado по описанию из Листинга 1._ + +Произошло что-то странное. Вместо трех регистров Vivado создал только один и судя по названию — это последний регистр `c`. Почему это произошло? + +Изучим внимательней поведение цепочки блокирующих присваиваний, представленное на _рис. 1_. + +Каждое последующее присваивание ожидало, пока не выполнится предыдущее, таким образом, `RHS` первого присваивания (`5`) сразу же (без каких-либо задержек) распространился по всем регистрам. Моделируя _Листинг 1_ мы получим **поведение**, когда на вход каждого регистра будет подаваться сигнал `in`. + +Таким образом на самом деле, мы должны были изображать нашу схему как на _рис. 5_. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_05.drawio.svg](../.pic/Basic%20Verilog%20structures/assignments/fig_05.drawio.svg) + +_Рисунок 5. Схема, описанная Листингом 1._ + +Но почему тогда на схеме Vivado не осталось регистров `a` и `b`? Посмотрим на них внимательней. Их выходы ни на что не влияют, они висят неподключенные. А значит эти регистры не имеют никакого смысла и если их убрать, ничего не изменится. + +При генерации схемы, Vivado вывел в `Tcl Console` следующие предупреждения: + +```text +WARNING: [Synth 8-6014] Unused sequential element a_reg was removed. [block_assignment.sv:10] +WARNING: [Synth 8-6014] Unused sequential element b_reg was removed. [block_assignment.sv:11] +``` + +Если вы используете Vivado 2023.1 и новее, вы можете обнаруживать подобные ошибки более удобным способом — посредством линтера, который можно вызвать из вкладки `RTL ANALYSIS` окна `Flow Navigator`. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_06.png](../.pic/Basic%20Verilog%20structures/assignments/fig_06.png) + +_Рисунок 6. Пример вызова линтера._ + +Давайте заменим в _Листинге 1_ блокирующие присваивания на неблокирующие. Напоминаем, что оператор неблокирующего присваивания записывается как `<=`. + +```SystemVerilog +module example_2( + input logic clk, + input logic [31:0] in, + output logic [31:0] out +); + +logic [31:0] a,b,c; + +always_ff @(posedge clk) begin + a <= in; + b <= a; + c <= b; +end + +assign out = c; + +endmodule +``` + +_Листинг 2. Пример описания модуля, использующего цепочку неблокирующих присваиваний._ + +Посмотрим, какую схему сгенерирует Vivado в этот раз. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_07.png](../.pic/Basic%20Verilog%20structures/assignments/fig_07.png) + +_Рисунок 7. Схема, сгенерированная Vivado по описанию из Листинга 2._ + +Вряд ли полученный результат стал для вас неожиданным сюжетным поворотом, но давайте разберемся, почему в этот раз сгенерировалась схема, аналогичная представленной на _рис. 3_. + +Для этого обратимся к примеру, представленному на _рис. 2_. В данном примере **неблокирующем присваивании** сперва вычислялись значения всех `RHS` (запоминались значения выходов всех регистров) и только потом происходило присваивание новых значений. Подобное **поведение** аналогично поведению сдвиговых регистров. + +Слово "_поведение_" было выделено дважды неспроста. Описание схем, которое мы сделали называется "**поведенческим описанием схемы**". + +Можно ли реализовать сдвиговый регистр, используя блокирующие присваивания? Конечно. Например, можно поменять порядок присваиваний как в _Листинге 3_. + +```SystemVerilog +module example_3( + input logic clk, + input logic [31:0] in, + output logic [31:0] out +); + +logic [31:0] a,b,c; + +always_ff @(posedge clk) begin + c = b; + b = a; + a = in; +end + +assign out = c; + +endmodule +``` + +_Листинг 3. Цепочка блокирующих присваиваний в порядке обратном приведенному в Листинге 1._ + +В этом случае, линтер не сообщит ни о каких ошибках, а Vivado сгенерирует схему, аналогичную _рис. 7_ + +Так произошло, поскольку мы разорвали зависимость значений `RHS` последующих присваиваний от значений `LHS` предыдущих (поведение, которое демонстрировала цепочка неблокирующих присваиваний с самого начала). Однако данное решение является скорее хаком, чем примером хорошего проектирования. По сути, мы просто подстроили код, описанный с помощью блокирующих присваиваний таким образом, чтоб он вел себя как код, использующий неблокирующие присваивания. + +Важно отметить, что при использовании неблокирующих присваиваний, их порядок вообще не имеет значения. + +Давайте разнесем логику работы каждого регистра по отдельным блокам `always`. + +```SystemVerilog +module example_4( + input logic clk, + input logic [31:0] in, + output logic [31:0] out +); + +logic [31:0] a,b,c; + +always_ff @(posedge clk) begin + a = in; +end + +always_ff @(posedge clk) begin + b = a; +end + +always_ff @(posedge clk) begin + c = b; +end + +assign out = c; + +endmodule +``` + +_Листинг 4. Сдвиговый регистр, описанный через блокирующие присваивания в отдельных блоках always._ + +Сгенерированная в Vivado схема будет аналогична _рис. 7_. Но давайте попробуем промоделировать работу этой схемы, подавая случайные воздействия на вход `in`. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_08.png](../.pic/Basic%20Verilog%20structures/assignments/fig_08.png) + +_Рисунок 8. Симуляция модуля, описанного Листингом 4._ + +Выглядит как-то не по "сдвигово-регистрерски". В чем же дело? + +Как уже упоминалось ранее, программные блоки (коими являются блоки `always`) исполняются во время моделирования независимо друг от друга в недетерминированном стандартом порядке. На практике это означает то, что сперва может исполниться второй блок, потом третий, а потом первый — либо в любом другом порядке. Так сделано для того, чтобы разработчик не мог рассчитывать на порядок блоков `always` при описании. + +Конкретно в данной ситуации, симулятор воспроизвел блоки ровно в том порядке, в котором они были описаны. Сперва `a` получил значение `in`, потом `b` получил обновленное значение `a`, затем `c` получил обновленное значение `b`. + +Поскольку поведение недетерминировано, нельзя однозначно сказать, какую схему должен был воспроизвести синтезатор. В данной ситуации, он воспроизвел схему которую мы хотели получить, что не помогло, тем не менее с моделированием. + +Если заменить порядок `always` подобно тому, как мы изменили порядок в _Листинге 3_, результат на временной диаграмме совпадет с поведением сдвигового регистра. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_09.png](../.pic/Basic%20Verilog%20structures/assignments/fig_09.png) + +_Рисунок 9. Моделирование поведения сдвигового регистра._ + +Однако, как уже объяснялось ранее, вы не можете рассчитывать на такой результат. Сегодня симулятор смоделировал поведение одним образом — завтра он смоделирует этот же код, в котором не изменилась ни одна строка, и будет по прежнему работать в соответствии со стандартом. + +Для того, чтобы получить детерминированный результат, вам необходимо снова воспользоваться неблокирующим присваиванием, поскольку и в этом случае порядок исполнения блоков `always` не влияет на результат присваиваний — сначала вычисляются значения `RHS` всех неблокирующих присваиваний всех программных блоков, и только потом происходит присваивание этих значений `LHS`. + +Рассмотрим еще один пример того, как различие в присваиваниях приведет к описанию двух различных схем: + +```SystemVerilog +module example_5( + input logic clk, + input logic a, b, c, + output logic d +); + +logic temp; + +always_ff @(posedge clk) begin + temp = a | b; + d = c & temp; +end + +endmodule +``` + +_Листинг 5. Пример цепочки блокирующих присваиваний с комбинационной логикой._ + +Остановитесь на минуту и подумайте, схему с каким поведением описывает _Листинг 5_? + +--- + +Как вы могли догадаться, данный листинг описывает схему с одним регистром `d`, на вход которого подается результат комбинационной логики `c & (a | b)`, поскольку сперва в `temp` попадает результат `a | b` и только после этого вычисляется значение `c & temp`. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_10.png](../.pic/Basic%20Verilog%20structures/assignments/fig_10.png) + +_Рисунок 10. Схема, сгенерированная Vivado по описанию из Листинга 5._ + +Попробуйте догадаться о том, что произойдет, если снова заменить блокирующие присваивания на неблокирующие? + +--- + +Результат изменится следующим образом. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_11.png](../.pic/Basic%20Verilog%20structures/assignments/fig_11.png) + +_Рисунок 11. Схема, сгенерированная Vivado по описанию из Листинга 5 после замены блокирующих присваиваний на неблокирующие._ + +Из прочтенного может сложиться впечатление, будто бы автор хочет показать, что блокирующее присваивание — это плохо, а неблокирующее — хорошо, однако это не так. Это просто два похожих инструмента, работающих разными способами, о которых должен знать профессионал, использующий эти инструменты. + +Одно и тоже описание, использующее разные типы присваиваний приводит к синтезу разных схем. + +Рассмотрим предыдущий пример еще раз. Нельзя сказать, что одна схема лучше другой — это просто две разные схемы и то, какая из них вам нужна зависит только от вашей задачи. + +Однако нельзя не заметить, что при использовании блокирующего присваивания, мы "теряли" регистры. + +Пока что мы рассматривали только синхронные схемы (схемы, работающие по тактовому синхроимпульсу). + +Рассмотрим зависимость от типа присваивания в комбинационных схемах. Для этого возьмем предыдущий пример, у уберем тактирующий синхроимпульс. + +```SystemVerilog +module example_6( + input logic a, b, c, + output logic d +); + +logic temp; + +always_comb begin + temp = a | b; + d = c & temp; +end + +endmodule +``` + +_Листинг 6. Пример цепочки блокирующих присваиваний в комбинационной схеме._ + +> Обратите внимание на то, что изменился и блок always. + +Как вы думаете, какая схема будет сгенерирована по описанию, представленному _Листинга 6_, и что произойдет с этой схемой, если заменить в нем все блокирующие присваивания на неблокирующие? + +--- + +Вас может это удивить, но в обоих случаях будет сгенерирована схема, представленная на _рис. 12_. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_12.png](../.pic/Basic%20Verilog%20structures/assignments/fig_12.png) + +_Рисунок 12. Схема, сгенерированная Vivado по описанию из Листинга 6._ + +> Девочка остолбенела. У неё возникло отчётливое чувство какой-то ужасной несправедливости по отношению к ней. Гарри Поттер был грязным, отвратительным обманщиком и лжецом. Но во время игры все его ответы были верными. [Элиезер Юдковский / Гарри Поттер и методы рационального мышления] + +На протяжении всего документа вам рассказывали, что использование блокирующих присваиваний приведет к изменению поведения и синтезу другой схемы, а теперь сами же приводят пример, где схема остается точно такой же! + +Давайте разберемся по порядку, что же произошло. + +Все дело в изменении блока `always`. Когда мы использовали `always_ff @(posedge clk)`, этот программный блок исполнялся только один раз за такт. + +Теперь, когда мы стали использовать блок `always_comb`, правила игры изменились. Нет, принцип работы блокирующих и неблокирующих присваиваний остался тем же самым. Изменилось только то, сколько раз будет вызван данный блок. + +Начнем со схемы, построенной по блокирующему присваиванию. В общем-то, тут у вас не должно было возникнуть вопросов, логика ровно та же, что была и при построении схемы по _Листингу 5_ (_рис. 10)_, только без выходного регистра. Что логично, ведь мы убрали тактирующий сигнал. + +Вопрос в том, почему это вдруг схема, построенная после замены блокирующих присваиваний на неблокирующие ведет себя точно так же? + +Рассмотрим _рис. 13_. + +![../.pic/Basic%20Verilog%20structures/assignments/fig_13.drawio.svg](../.pic/Basic%20Verilog%20structures/assignments/fig_13.drawio.svg) + +_Рисунок 13. Моделирование цепочки присваиваний в комбинационном блоке `always`._ + +Комбинационный блок `always` начинает исполняться **каждый раз**, когда операнд любого `RHS` этого блока меняет своё значение. + +Изначально, блок `always` начал исполняться, когда операнды `a`, `b` и `c` приняли значение `1`, `0` и `1` соответственно. В этот момент (поскольку присваивание неблокирующее), вычисляются значения `RHS` для присваивания сигналам `temp` и `d`. Новое значение `temp` будет `1`, но пока что этого не произошло, и `temp` все ещё в состоянии `x`, поэтому новым значением `d` все ещё будет `x`. + +После происходит присваивание вычисленных значений сигналам `temp` и `d`. + +Однако `temp` является операндом `RHS` в выражении `d = c & temp`, поэтому блок `always`. Запускается еще один раз в этот же момент времени (в примере это `5ns`). Поскольку значения `a` и `b` не менялись, значение `RHS` первого выражения останется прежним. А вот значение `temp` уже иное, поэтому `RHS` второго выражения станет `1`. + +После повторного присваивания сигналы `temp` и `d` примут установившееся значение. Поскольку ни один из операндов `RHS`—выражений больше не изменил своего значения, блок `always` больше не вызывается. + +Подобное поведение можно сравнить с переходным процессом в комбинационной схеме. + +Обратите внимание, поведение схем описанных при разных типах присваивания слегка различаются. При блокирующем присваивании все сигналы приняли установившиеся значения за один проход блока `always`, при неблокирующем потребовалось несколько проходов. Однако с точки зрения пользователя, читающего временную диаграмму, в обоих ситуациях сигналы изменили свое значение мгновенно. + +Поэтому не смотря на различия в типах присваиваний схемы получились одинаковыми. + +> Получается что для комбинационной логики нет разницы между блокирующим и неблокирующим присваиванием, после переходных процессов результат будет одинаковым? + +И да и нет. С точки зрения синтеза схемы так и есть. Однако есть нюанс в случае моделирования схемы. + +Особенность планировщика событий симуляции такова, что все `RHS` неблокирующих присваиваний будут вычислены после выполнения всех блокирующих присваиваний. + +Чем это может быть удобно? + +Давайте сделаем небольшое лирическое отступление и разберем часто используемую в мире разработки цифровых схем аббревиатуру `RTL`. Она расшифровывается как `Register Transfer Level` — уровень межрегистровых передач. Цифровую схему можно рассматривать на различных уровнях абстракции. Можно рассматривать с физического уровня: как набор проводников, транзисторов, а так же электронов и "дырок", бегающих по ним. Можно рассматривать схему на уровне логических вентилей (gate-level). Одним из таких уровней абстракции является уровень межрегистровых передач, когда мы делим схему на две части: регистры, и комбинационную логика их связывающая. + +По каждому такту синхроимпульса, в регистры будет записываться новое значение, что приведет к изменению на выходе регистра и начнет цепочку изменений в комбинационной логике, соединяющей регистры. К следующему такту на концах комбинационной логике, являющихся входами регистров должны оказаться установившееся значения, которые будут записаны и все повторится снова. + +Было бы удобно разделить эти две части: обновление значений в регистрах и обновление значений в комбинационной логике таким образом, чтобы сперва обновлялась комбинационная логика, а потом уже обновлялось значение в регистрах. + +Именно этого можно добиться, если комбинационная логика будет описана посредством блокирующих присваиваний, которые будут выполнены до неблокирующих присваиваний, используемых при описании регистров. + +Подведем итоги прочитанному: + +- Блокирующее присваивание блокирует выполнение остальных операций до завершения текущего присваивания. Оно подобно обычному присваиванию в парадигме программирования. +- Неблокирующее присваивание сперва вычисляет `RHS`, давая исполниться остальным операциям до самого присваивания. Причем `RHS` в случае, если после неблокирующего присваивания выполняется блокирующее от `LHS` которого зависело `RHS` неблокирующего присваивания — значение `RHS` будет обновлено. + +В связи с особенностями поведения блокирующего и неблокирующего присваивания, выведены следующие две максимы: + +- При описании последовательностной логики (регистров) используйте **неблокирующее** присваивание. +- При описании комбинационной логики используйте **блокирующее** присваивание. + +Кроме того, существуют следующие рекомендации и требования[1, стр. 5]: + +- _При описании как последовательностной логики, так и комбинационной в одном блоке `always` используйте неблокирующее присваивание._ +- _Не смешивайте в одном блоке блокирующие и неблокирующие присваивания_ — стандарт допускает подобное описание, но оно затрудняет его чтение. +- _Не смешивайте блокирующие и неблокирующие присваивания для одного и того же сигнала_ — стандарт это запрещает. + +Использованная литература: + +1. [Clifford E. Cummings / Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kil](http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf) +2. [1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language](https://ieeexplore.ieee.org/document/8299595)