diff options
Diffstat (limited to 'fpga/usrp2')
22 files changed, 554 insertions, 2090 deletions
diff --git a/fpga/usrp2/control_lib/settings_bus.v b/fpga/usrp2/control_lib/settings_bus.v index d01a30ab4..fc960e456 100644 --- a/fpga/usrp2/control_lib/settings_bus.v +++ b/fpga/usrp2/control_lib/settings_bus.v @@ -10,7 +10,6 @@ module settings_bus       input wb_stb_i,       input wb_we_i,       output reg wb_ack_o, -     input sys_clk,       output strobe,       output reg [7:0] addr,       output reg [31:0] data); diff --git a/fpga/usrp2/control_lib/settings_bus_crossclock.v b/fpga/usrp2/control_lib/settings_bus_crossclock.v new file mode 100644 index 000000000..b043aa0ad --- /dev/null +++ b/fpga/usrp2/control_lib/settings_bus_crossclock.v @@ -0,0 +1,20 @@ + + +// This module takes the settings bus on one clock domain and crosses it over to another domain +// Typically it will be used with the input settings bus on the wishbone clock, and either  +// the system or dsp clock on the output side + +module settings_bus_crossclock +  (input clk_i, input rst_i, input set_stb_i, input [7:0] set_addr_i, input [31:0] set_data_i, +   input clk_o, input rst_o, output set_stb_o, output [7:0] set_addr_o, output [31:0] set_data_o); + +   wire  full, empty; +    +   fifo_xlnx_16x40_2clk settings_fifo +     (.rst(rst_i), +      .wr_clk(clk_i), .din({set_addr_i,set_data_i}), .wr_en(set_stb_i & ~full), .full(full), +      .rd_clk(clk_o), .dout({set_addr_o,set_data_o}), .rd_en(~empty), .empty(empty)); + +   assign set_stb_o = ~empty; + +endmodule // settings_bus_crossclock diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.ngc b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.ngc new file mode 100644 index 000000000..f42663419 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$2604g<,[o}e~g`n;"2*413&;$>"9 > %10?*nhel%fmyz cnpfc`h(|dz$Sni fhdl[}jipV;=t9>P2bnh*kah92:?7=>=10927>7)881986=<22087=b<;z8;<=hh444.14=39;1?<7GAPTV9`lh;;00;2<:4418LQQVR\3ndyy2<9;2=5`=32@D[YY4rne\ahvsqV~c~h}g<283:73<<3CE\XZ5psmd[`kw|pUdk|h^cpw`ts4:0;2?;44;KMTPR=x{elShctx]wlwct`Vdnklzj<283:4b<<3CE\XZ5psmd[cskdV~c~h}g<283:72<<3CE\XZ5psmd[cskdV~c~h}g_`qpawr;;3:5>95;:HLSQQ<wzfmTjxbc_ujqavnXflmjxh2<:1<2<>2=G\^[YY4kauc\gjsi|591<3?m;58LQQVR\3xoSio{a^alqkr;;3:5=o5;:NWWTPR={UomyoPcnwmp95=87;0:9599847?3?F9;1=O959CBA1?3C53>N?75:=109:0>?789>05=>62:;56>G7:2K:>6O=2:C0=>GTQGIT^HI<;CW1<>DR[VCEJB?4C59@E=G53JO:>6MGEBI\HLEBFZOTXT^J3:AOV<=DGDGBXYKK159@KWCXOLDN^LZFOO]JJCI03JXNMYKK1:F0?AVH=2N[^L>:;ERQE43<LYXJ>85KPSC00>@?0180JI=4FEA7?CBDM:1MH]:4FERF1>@fdzo:7J=4GOF2?L4<A980E<<4I308M6?<AGC__YO[E29JJS5<AFH97AA9;MMB@@B03EELENOC4:NVP72<D\^886BZT548HPR3WE?0A^I@Nb9Neoiu^lxxeb`l;LkmkwPbzzcdb>5A1168J467<2D:<<:4N0210>H68:>0B<>;4:L2402<F8:=86@>0668J46?<2D:<4=4N037?K768=1E=<?;;O3261=I989?7C?>459M54333G;::95A1057?K760=1E=<7<;O310>H6:9>0B<<>4:L2672<F88886@>2568J442;2D:?>5A1518J4343G;=?6@>729M5=5<F8387C<?3:L156=I:;90B?=<;O077>H5=:1E>;=4N350?K4?;2D95>5A3118J6743G99?6@<329M715<F:?87C=93:L036=I;190B>7<;O637>H39:1E8?=4N510?K23;2D?9?5A639M36=I?990B:?<;O507>H0=:1E;;<4N918J=243G2>?6@7629M<25<F1287C662:L:7>H>8:1E5<=4N800?K?4;2D28>5A9418J<043G3<?6@6829M=<`<FKUIY^^FN^RQKUU03GO_[B\D1:M1?JM63Y>0\L\[a:RJJZDR[@NSn6^FN^@VWKGJM:1[^H?4Q99QEH71P8N=7^AZRBG0?VVH<2^R\H=<;T2,cw`)zo%lou lljz,I}iuW{nT|cz}_ckm[}iu89:;S_k|umv276=R8&myj#|i/fa{*fjlp&GscQ}d^rmpwYeagUsc>?00]Qavsk|8987X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySoga_ymq4565W[oxyaz>339V4*aun'xm#jmw.bnh|*Kg{UyhR~ats]dgZ~hz9:;<R\jstnw564<]9%l~k }f.e`|+ekcq%Ftb|Pre]sjqtXojUsc>?00]Qavsk|8997X> gsd-vc)`kq$h`fv Mymq[wbXxg~ySjmPxnp3454XZly~`y?<3:W3+bta&{l$knv!cmi{+H~hzV}yS}`{r^`jjZ~hz9:;<R\jstnw565<]9%l~k }f.e`|+ekcq%Ftb|Pws]sjqtXj`dTtb|?013\V`urd};8?6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Rlfn^zlv567:VXnxb{1208Q5)`zo$yj"ilx/aoo})JpfxT{Qnup\cfYg{:;<=Q]erwop4553\:$kh!rg-dg}(ddbr$Aua}_vp\tkruWniTtb|?013\V`urd};8>6[?/fpe*w`(ojr%oaew/LzlvZquWyd~Ril_ymq4565W[oxyaz>209V4*aun'xm#jmw.bnh|*tcWyd~Rlfn=2=64=R8&myj#|i/fa{*fjlp&xoS}`{r^`jj979:81^<"i}f/pe+be&jf`t"|k_qlwvZdnf585><5Z0.eqb+ta'nis"nbdx.pg[uhszVhbb1=1219V4*aun'xm#jmw.bnh|*tcWyd~Rlfn^214>S7'nxm"h gbz-gim'{nT|cz}_ckm[4473\:$kh!rg-dg}(ddbr$~iQnup\flhX:;:0Y=!hrg,qb*adp'iggu!}d^rmpwYeagU8>;5Z0.eqb+ta'nis"nbdx.pg[uhszVhbbRv`r123470<]9%l~k }f.e`|+ekcq%yhR~ats]amkYg{:;<<<9;T2,cw`)zo%lou lljz,vaYwf}xTnd`Pxnp3454582_;#j|i.sd,cf~)keas#jPpovq[be;878;7X> gsd-vc)`kq$h`fv re]sjqtXoj6:2?>4U1-dvc(un&mht#mcky-q`Zvi|{Ulo1<1219V4*aun'xm#jmw.bnh|*tcWyd~Ril<2<2b>S7'nxm"h gbz-gim'{nT|cz}_fa\44`<]9%l~k }f.e`|+ekcq%yhR~ats]dgZ76n2_;#j|i.sd,cf~)keas#jPpovq[beX:8l0Y=!hrg,qb*adp'iggu!}d^rmpwY`kV99:6[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg=2=63=R8&myj#|i/fa{*fjlp&xoS}`{r^e`[duumn6:2?84U1-dvc(un&mht#mcky-q`Zvi|{UloRo|rde?6;413\:$kh!rg-dg}(ddbr$~iQnup\cfYf{{ol0>0=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ65=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR?=5:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZ45=2_;#j|i.sd,cf~)keas#jPpovq[beXizxnkR==9:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6494956[?/fpe*w`(ojr%oaew/sf\tkruWniTm~|jg^f2848512_;#j|i.sd,cf~)keas#jPpovq[beXizxnkRj><3<1=>S7'nxm"h gbz-gim'{nT|cz}_fa\evtboVn:0>0=8:W3+bta&{l$knv!cmi{+wbXxg~ySjmParpfcZb6W9837X> gsd-vc)`kq$h`fv re]sjqtXojUjkh_e3\57><]9%l~k }f.e`|+ekcq%yhR~ats]dgZgtzlmTh<Q=299V4*aun'xm#jmw.bnh|*tcWyd~Ril_`qqabYc9V9996[?/fpe*w`(ojr%oaew/sf\tkruWniTtb|?01211>S7'nxm"h gbz-gim'{nT|cz}_fa\|jt789;996[?/fpe*w`(ojr%oaew/sf\tkruWniTtb|?01015>S7'nxm"h gbz-gim'~xT|cz}_ckm858592_;#j|i.sd,cf~)keas#z|Ppovq[goi4849=6[?/fpe*w`(ojr%oaew/vp\tkruWkce0?0=1:W3+bta&{l$knv!cmi{+rtXxg~ySoga<2<14>S7'nxm"h gbz-gim'~xT|cz}_ckm[5473\:$kh!rg-dg}(ddbr${Qnup\flhX9;:0Y=!hrg,qb*adp'iggu!xr^rmpwYeagU9>=5Z0.eqb+ta'nis"nbdx.uq[uhszVhbbR==6:W3+bta&{l$knv!cmi{+rtXxg~ySoga_ymq4567:?1^<"i}f/pe+be&jf`t"y}_qlwvZdnfVrd~=>?1348Q5)`zo$yj"ilx/aoo})pzVzexQmio]{kw678;8;7X> gsd-vc)`kq$h`fv ws]sjqtXoj6;2?>4U1-dvc(un&mht#mcky-tvZvi|{Ulo1?1219V4*aun'xm#jmw.bnh|*quWyd~Ril<3<14>S7'nxm"h gbz-gim'~xT|cz}_fa?7;7a3\:$kh!rg-dg}(ddbr${Qnup\cfY79o1^<"i}f/pe+be&jf`t"y}_qlwvZadW8;m7X> gsd-vc)`kq$h`fv ws]sjqtXojU9=k5Z0.eqb+ta'nis"nbdx.uq[uhszVmhS><9;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd8585>2_;#j|i.sd,cf~)keas#z|Ppovq[beXizxnk1?1279V4*aun'xm#jmw.bnh|*quWyd~Ril_`qqab:56;<0Y=!hrg,qb*adp'iggu!xr^rmpwY`kVkx~hi33?06?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W98>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_006?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`W;8>7X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_20:?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;7<3<6;T2,cw`)zo%lou lljz,swYwf}xTknQnssgd[a7;97827X> gsd-vc)`kq$h`fv ws]sjqtXojUjkh_e3?6;4>3\:$kh!rg-dg}(ddbr${Qnup\cfYf{{olSi?33?0;?P6(o{l%~k!hcy,`hn~({U{by|Pgb]bwwc`Wm;T<?64U1-dvc(un&mht#mcky-tvZvi|{UloRo|rde\`4Y6:11^<"i}f/pe+be&jf`t"y}_qlwvZadWhyyijQk1^01<>S7'nxm"h gbz-gim'~xT|cz}_fa\evtboVn:S><:;T2,cw`)zo%lou lljz,swYwf}xTknQwos2345423\:$kh!rg-dg}(ddbr${Qnup\cfYg{:;<<<:;T2,cw`)zo%lou lljz,swYwf}xTknQwos23474f3\:$kh!rg-dh5(ul&my=#|iwgv,VDKXZMUNBRHXFU31g>S7'nxm"h gm2-va)`z8$yjzh{/SCN[WBXMGUM[KZ>_00:?P6(o{l%~k!hl1,q`*au9'xm{kz R@O\V@AH]]UNB<=<;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf273=R8&myj#|i/fn3*wb(o{;%~kyit.avvwYao~Tyo{e^DPIZ@Al8'Bb>64U1-dvc(un&mg<#|k/fp2*w`pn}%hy|Pfvdw[vrf|lUM_@QIFe3.Mk76;:1^<"i}f/pe+bj7&{n$k?!rguep*erz{Um{kzPsucwaZ@TEVLMh?=9;T2,cw`)zo%l`= }d.eq5+tao~$ox|}_guepZusi}oTJ^CPFGf1)Lh402_;#j|i.sd,ci6)zm%l~< }fvdw+fsuzVl|jyQ|t`vf[CUJWOLo> Ga100;?P6(o{l%~k!hl1,q`*au9'xm{kz elrw}Z`pn}Umn?94U1-dvc(un&mg<#|k/fp2*w`pn}%na}zv_guepZo5m2_;#j|i.sd,ci6)zm%l~< }fvdw+`kw|pUm{kzPi^mq4567:o1^<"i}f/pe+bj7&{n$k?!rguep*cjx}sTjzh{_h]lv56788827X> gsd-vc)`d9$yh"i}ar,qwqu(zhgTi`~{y^da[l573\:$kh!rg-dh5(ul&mym~ }suq,vdkXmdzuRhm_h]lv5678:90Y=!hrg,qb*ak8'xo#j|ns/pppv)uidUna}zv_g`\mZiu89:;=<?<3:W3+bta&{l$ka>!re-dvdu)zz~x#ob_dosp|YajVcTc>?0132<65<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi^mq45679=;8>6[?/fpe*w`(oe:%~i!hr`q-vvrt'{kfShctx]efZoXg{:;<=<9339V4*aun'xm#jb?.sf,cwgt&{y"|nm^gntqXnkUbSb|?0126764<]9%l~k }f.eo4+tc'nxj#||tr-qehYbey~rSklPi^mq45671:887X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{259V4*aun'xm#jb?.sf,vuhsz&Ghcx`{_bmvjq55<2_;#j|i.sd,ci6)zm%y|cz}/LalqkrXkfex;<;;T2,cw`)zo%l`= }d.psjqt(Eje~byQlotlw=64<]9%l~k }f.eo4+tc'{zex!BcnwmpZeh}g~Ttb|30?32[LHQW98h7X> gsd-vc)`d9$yh"|nup,Ifirf}Uhcx`{_ymq84869;i0Y=!hrg,qb*ak8'xo#~ats-Ngjsi|VidyczPxnp?6;76:j1^<"i}f/pe+bj7&{n$~}`{r.O`kphsWje~byQwos>0:476n2_;#j|i.sd,ci6)zm%y|cz}/bmvjq:768l0Y=!hrg,qb*ak8'xo#~ats-`kphs484:j6[?/fpe*w`(oe:%~i!}povq+firf}692<h4U1-dvc(un&mg<#|k/srmpw)dg|d0>0>e:W3+bta&{l$ka>!re-qtkru'je~byQ?1d9V4*aun'xm#jb?.sf,vuhsz&idyczP10g8Q5)`zo$yj"ic0/pg+wvi|{%hcx`{_33f?P6(o{l%~k!hl1,q`*twf}x$ob{at^116>S7'nxm"h gm2-va)uxg~y#naznu]g5969:;1^<"i}f/pe+bj7&{n$~}`{r.alqkrXl86:2?<4U1-dvc(un&mg<#|k/srmpw)dg|dSi?32?01?P6(o{l%~k!hl1,q`*twf}x$ob{at^f2868592_;#j|i.sd,ci6)zm%y|cz}/bmvjqYc9V:9=6[?/fpe*w`(oe:%~i!}povq+firf}Uo=R?=1:W3+bta&{l$ka>!re-qtkru'je~byQk1^015>S7'nxm"h gm2-va)uxg~y#naznu]g5Z55<2_;#j|i.sd,ci6)zm%y|cz}/bmvjqYig}:;<<<7;T2,cw`)zo%l`= xr.etev(p{}y$~lcPftno[cdXa;?0Y=!hrg,qb*ak8'}y#jyns/uppv)uidUmyabPi3a8Q5)`zo$yj"ic0/uq+bqf{'}xx~!}al]eqijXaVey<=>?2g9V4*aun'xm#jb?.vp,crgt&~y"|nm^dvhiYnWfx;<=>>1910?P6(o{l%~k!hl1,tv*apiz$|y} r`o\bpjkW`Ud~=>?003;[VQ7:o1^<"i}f/pe+bj7&~x$kzo|.vqww*tfeVl~`aQf_np34566<88n7X> gsd-vc)`d9$|~"ixar,twqu(zhgTjxbc_h]lv5678;<9i6[?/fpe*w`(oe:%{!hw`q-svrt'{kfSk{cl^k\kw6789?8>h5Z0.eqb+ta'nf;"z| gvcp*rus{&xjaRhzlm]j[jt789:2?<j4U1-dvc(un&mg<#y}/scn[rtXmgUb=?=4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov10>S7'nxm"h gm2-sw)pxg~y#@m`uov\gjsi|:8?7X> gsd-vc)`d9$|~"ynup,Ifirf}Uhcx`{6368Q5)`zo$yj"ic0/uq+rvi|{%Fob{at^alqkr>;;1^<"i}f/pe+bj7&~x${}`{r.O`kphsWje~byQwos>3:47XAG\T<?m4U1-dvc(un&mg<#y}/vrmpw)JkfexRm`uov\|jt;97;:>n5Z0.eqb+ta'nf;"z| wqlwv*Kdg|dSnaznu]{kw:568;9o6[?/fpe*w`(oe:%{!xpovq+Heh}g~Tob{at^zlv95998;m7X> gsd-vc)`d9$|~"ynup,gjsi|5:5=k5Z0.eqb+ta'nf;"z| wqlwv*eh}g~7=3?i;T2,cw`)zo%l`= xr.usjqt(kfex1<11g9V4*aun'xm#jb?.vp,suhsz&idycz33?3f?P6(o{l%~k!hl1,tv*qwf}x$ob{at^22a>S7'nxm"h gm2-sw)pxg~y#naznu]25`=R8&myj#|i/fn3*rt(yd~"m`uov\64c<]9%l~k }f.eo4+qu'~zex!lotlw[6453\:$kh!rg-dh5(pz&}{by| cnwmpZb64949>6[?/fpe*w`(oe:%{!xpovq+firf}Uo=1?1239V4*aun'xm#jb?.vp,suhsz&idyczPd0>1:74<]9%l~k }f.eo4+qu'~zex!lotlw[a7;;78:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn:S=<>;T2,cw`)zo%l`= xr.usjqt(kfexRj>_002?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f2[7463\:$kh!rg-dh5(pz&}{by| cnwmpZb6W:897X> gsd-vc)`d9$|~"ynup,gjsi|Vn90=0=2:W3+bta&{l$ka>!ws-ttkru'je~byQk2=3=67=R8&myj#|i/fn3*rt(yd~"m`uov\`7:56;80Y=!hrg,qb*ak8'}y#z~ats-`kphsWm87?3<>;T2,cw`)zo%l`= xr.usjqt(kfexRj=_102?P6(o{l%~k!hl1,tv*qwf}x$ob{at^f1[4463\:$kh!rg-dh5(pz&}{by| cnwmpZb5W;8:7X> gsd-vc)`d9$|~"ynup,gjsi|Vn9S><;;T2,cw`)zo%l`= xr.usjqt(kfexR``t123540<]9%l~k }f.ofi*bh}}UbS=?9;T2,cw`)zo%fi`!kotv\mZ76?2_;#j|i.sd,i`k(lfSdQ>0058Q5)`zo$yj"cjm.flqqYnW8;:;6[?/fpe*w`(elg$hb{{_h]2641<]9%l~k }f.ofi*bh}}UbS<=>7:W3+bta&{l$ahc dnww[lY6<8=0Y=!hrg,qb*kbe&ndyyQf_0723>S7'nxm"h mdo,`jssW`U::<94U1-dvc(un&gna"j`uu]j[416?2_;#j|i.sd,i`k(lfSdQ>8058Q5)`zo$yj"cjm.flqqYnW83::6[?/fpe*w`(elg$hb{{_h]152=R8&myj#|i/lgn+air|VcT>=?8;T2,cw`)zo%fi`!kotv\mZ469>1^<"i}f/pe+hcj'me~xRgP2334?P6(o{l%~k!bel-gkprXaV88=:5Z0.eqb+ta'dof#iazt^k\61703\:$kh!rg-nah)cg|~TeR<:169V4*aun'xm#`kb/emvpZoX:?;<7X> gsd-vc)jmd%ocxzPi^0452=R8&myj#|i/lgn+air|VcT>5?8;T2,cw`)zo%fi`!kotv\mZ4>9?1^<"i}f/pe+hcj'me~xRgP3058Q5)`zo$yj"cjm.flqqYnW:::;6[?/fpe*w`(elg$hb{{_h]0541<]9%l~k }f.ofi*bh}}UbS><>7:W3+bta&{l$ahc dnww[lY4;8=0Y=!hrg,qb*kbe&ndyyQf_2623>S7'nxm"h mdo,`jssW`U89<94U1-dvc(un&gna"j`uu]j[606?2_;#j|i.sd,i`k(lfSdQ<7058Q5)`zo$yj"cjm.flqqYnW:2:;6[?/fpe*w`(elg$hb{{_h]0=40<]9%l~k }f.ofi*bh}}UbS9?9;T2,cw`)zo%fi`!kotv\mZ36>2_;#j|i.sd,i`k(lfSdQ9179V4*aun'xm#`kb/emvpZoX?8<0Y=!hrg,qb*kbe&ndyyQf_935?P6(o{l%~k!bel-gkprXaV3:i6[?/fpe*w`(elg$kic!dl-NvdkXZHG:=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF==?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@?>1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB133e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL305c=R8&myj#|i/lgn+bbj&mg$Aob_SCN517a3\:$kh!rg-nah)`ld$oa"C}al]QEH729o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ9?;m7X> gsd-vc)jmd%lh` km.OqehYUID;<=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF=5?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@?61d9V4*aun'xm#`kb/ffn*ak(E{kfS_OB20d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM322b>S7'nxm"h mdo,cak)ld%F~lcPR@O154`<]9%l~k }f.ofi*ace'nf#@|nm^PBI746n2_;#j|i.sd,i`k(omg%h`!Br`o\VDK5;8l0Y=!hrg,qb*kbe&moa#jb/LpbiZTFE;>:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG99<h4U1-dvc(un&gna"ikm/fn+HtfeVXJA?8>f:W3+bta&{l$ahc geo-`h)JzhgT^LC=70d8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM3:2b>S7'nxm"h mdo,cak)ld%F~lcPR@O1=4c<]9%l~k }f.ofi*ace'nf#@|nm^PBI67a3\:$kh!rg-nah)`ld$oa"C}al]QEH579o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ;8;m7X> gsd-vc)jmd%lh` km.OqehYUID99=k5Z0.eqb+ta'dof#jjb.eo,IwgjW[KF?>?i;T2,cw`)zo%fi`!hdl,gi*KuidUYM@=;1g9V4*aun'xm#`kb/ffn*ak(E{kfS_OB343e?P6(o{l%~k!bel-d`h(ce&Gym`Q]AL155c=R8&myj#|i/lgn+bbj&mg$Aob_SCN727a3\:$kh!rg-nah)`ld$oa"C}al]QEH5?9o1^<"i}f/pe+hcj'nnf"ic Mscn[WGJ;0;n7X> gsd-vc)jmd%lh` km.OqehYUID>:j6[?/fpe*w`(elg$kic!dl-NvdkXZHG?<<k4U1-dvc(un&gna"ikm/fn+HtfeVXJA8?j;T2,cw`)zo%fi`!hdl,gi*KuidUYM@8>e:W3+bta&{l$ahc geo-`h)JzhgT^LC81d9V4*aun'xm#`kb/ffn*ak(E{kfS_OB80g8Q5)`zo$yj"cjm.egi+bj'DxjaR\NM806?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;878=7X> gsd-vc)jmd%lh` km.]uewoillr;<=>311<12>S7'nxm"h mdo,cak)ld%Tzl|fneg{456748;5>;5Z0.eqb+ta'dof#jjb.eo,[sguagnnt=>?0=31:70<]9%l~k }f.ofi*ace'nf#Rxnrhlga}67896:?3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?5185>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0<;1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349716;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2>7?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;9149:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<0;=60=R8&myj#|i/lgn+bbj&mg$S{o}ioff|56785;5>;5Z0.eqb+ta'dof#jjb.eo,[sguagnnt=>?0=03:70<]9%l~k }f.ofi*ace'nf#Rxnrhlga}678969=3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?6785>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0?=1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349436;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2=5?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;:?49:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<35=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|56785832?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>1=;423\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7>3<9;T2,cw`)zo%fi`!hdl,gi*Yqi{cehhv?012?7585>2_;#j|i.sd,i`k(omg%h`!Pv`pjjac89:;0>?1279V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349556;<0Y=!hrg,qb*kbe&moa#jb/^tbvlhcmq:;<=2<3?05?P6(o{l%~k!bel-d`h(ce&U}mgaddz3456;;=49:6[?/fpe*w`(elg$kic!dl-\rdtnfmos<=>?<27=63=R8&myj#|i/lgn+bbj&mg$S{o}ioff|567859=2?84U1-dvc(un&gna"ikm/fn+Zpfz`doiu>?01>03;413\:$kh!rg-nah)`ld$oa"Qyaskm``~789:7?50=6:W3+bta&{l$ahc geo-`h)X~hxbbikw012386?9:<1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1=1249V4*aun'xm#`kb/ffn*ak(Wkyecjjx1234929:<1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1;1249V4*aun'xm#`kb/ffn*ak(Wkyecjjx1234909:<1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<191249V4*aun'xm#`kb/ffn*ak(Wkyecjjx12349>9:<1^<"i}f/pe+hcj'nnf"ic _wcqmkbbp9:;<1711d9V4*aun'xm#`kb/ffn*ak(lfSd2?>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg311<2b>S7'nxm"h mdo,cak)ld%ocxzPi=32:4`<]9%l~k }f.ofi*ace'nf#iazt^k?5786n2_;#j|i.sd,i`k(omg%h`!kotv\m97468l0Y=!hrg,qb*kbe&moa#jb/emvpZo;9=4:j6[?/fpe*w`(elg$kic!dl-gkprXa5;>2<h4U1-dvc(un&gna"ikm/fn+air|Vc7=;0>f:W3+bta&{l$ahc geo-`h)cg|~Te1?8>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg319<2b>S7'nxm"h mdo,cak)ld%ocxzPi=3::4c<]9%l~k }f.ofi*ace'nf#iazt^k?5;7a3\:$kh!rg-nah)`ld$oa"j`uu]j87699o1^<"i}f/pe+hcj'nnf"ic dnww[l:597;m7X> gsd-vc)jmd%lh` km.flqqYn4;85=k5Z0.eqb+ta'dof#jjb.eo,`jssW`69?3?i;T2,cw`)zo%fi`!hdl,gi*bh}}Ub0?:11g9V4*aun'xm#`kb/ffn*ak(lfSd2=5?3e?P6(o{l%~k!bel-d`h(ce&ndyyQf<34=5c=R8&myj#|i/lgn+bbj&mg$hb{{_h>13;7a3\:$kh!rg-nah)`ld$oa"j`uu]j87>99o1^<"i}f/pe+hcj'nnf"ic dnww[l:517;n7X> gsd-vc)jmd%lh` km.flqqYn4;4:j6[?/fpe*w`(elg$kic!dl-gkprXa59;2<h4U1-dvc(un&gna"ikm/fn+air|Vc7?<0>f:W3+bta&{l$ahc geo-`h)cg|~Te1==>0d8Q5)`zo$yj"cjm.egi+bj'me~xRg332<2b>S7'nxm"h mdo,cak)ld%ocxzPi=17:4`<]9%l~k }f.ofi*ace'nf#iazt^k?7086n2_;#j|i.sd,i`k(omg%h`!kotv\m95168l0Y=!hrg,qb*kbe&moa#jb/emvpZo;;>4:j6[?/fpe*w`(elg$kic!dl-gkprXa5932<h4U1-dvc(un&gna"ikm/fn+air|Vc7?40>e:W3+bta&{l$ahc geo-`h)cg|~Te1=11d9V4*aun'xm#`kb/ffn*ak(lfSd2;>0g8Q5)`zo$yj"cjm.egi+bj'me~xRg35?3f?P6(o{l%~k!bel-d`h(ce&ndyyQf<7<2a>S7'nxm"h mdo,cak)ld%ocxzPi=5=5`=R8&myj#|i/lgn+bbj&mg$hb{{_h>;:4c<]9%l~k }f.ofi*ace'nf#iazt^k?=;7c3\:$kh!rg-nah)`ld$oa"j`uu]j[57c3\:$kh!rg-nah)`ld$oa"j`uu]j[47b3\:$kh!rg-nah)`ld$oa"j`uu]j[466m2_;#j|i.sd,i`k(omg%h`!kotv\mZ769l1^<"i}f/pe+hcj'nnf"ic dnww[lY6:8o0Y=!hrg,qb*kbe&moa#jb/emvpZoX9:;n7X> gsd-vc)jmd%lh` km.flqqYnW8>:i6[?/fpe*w`(elg$kic!dl-gkprXaV;>=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U::<k4U1-dvc(un&gna"ikm/fn+air|VcT=:?j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS<6>e:W3+bta&{l$ahc geo-`h)cg|~TeR?61e9V4*aun'xm#`kb/ffn*ak(lfSdQ=1d9V4*aun'xm#`kb/ffn*ak(lfSdQ=00g8Q5)`zo$yj"cjm.egi+bj'me~xRgP203f?P6(o{l%~k!bel-d`h(ce&ndyyQf_302a>S7'nxm"h mdo,cak)ld%ocxzPi^005`=R8&myj#|i/lgn+bbj&mg$hb{{_h]104c<]9%l~k }f.ofi*ace'nf#iazt^k\607b3\:$kh!rg-nah)`ld$oa"j`uu]j[706m2_;#j|i.sd,i`k(omg%h`!kotv\mZ409l1^<"i}f/pe+hcj'nnf"ic dnww[lY508o0Y=!hrg,qb*kbe&moa#jb/emvpZoX:0;o7X> gsd-vc)jmd%lh` km.flqqYnW:;n7X> gsd-vc)jmd%lh` km.flqqYnW:::i6[?/fpe*w`(elg$kic!dl-gkprXaV9:=h5Z0.eqb+ta'dof#jjb.eo,`jssW`U8><k4U1-dvc(un&gna"ikm/fn+air|VcT?>?j;T2,cw`)zo%fi`!hdl,gi*bh}}UbS>:>e:W3+bta&{l$ahc geo-`h)cg|~TeR=:1d9V4*aun'xm#`kb/ffn*ak(lfSdQ<60g8Q5)`zo$yj"cjm.egi+bj'me~xRgP363f?P6(o{l%~k!bel-d`h(ce&ndyyQf_2:2a>S7'nxm"h mdo,cak)ld%ocxzPi^1:5a=R8&myj#|i/lgn+bbj&mg$hb{{_h]75a=R8&myj#|i/lgn+bbj&mg$hb{{_h]65a=R8&myj#|i/lgn+bbj&mg$hb{{_h]55a=R8&myj#|i/lgn+bbj&mg$hb{{_h]45a=R8&myj#|i/lgn+bbj&mg$hb{{_h];5a=R8&myj#|i/lgn+bbj&mg$hb{{_h]:52=R8&myj#|i/scn[wc`g|~Tic?k;T2,cw`)zo%yylck.pg[wusWhyyij<?;T2,cw`)zo%yylck.pg[wusWhyyijQk1328Q5)`zo$yj"||tcnh+wbXzz~Tm~|jg^f15f=R8&myj#|i/sqwfim(zmUyyQlol`2`>S7'nxm"h rrvahn)ulVxxxRm`mc32a>S7'nxm"h rrvahn)ulVxxxR|jg=2=5`=R8&myj#|i/sqwfim(zmUyyQ}ef>2:4c<]9%l~k }f.pppgjl'{nT~~zPrde?6;7c3\:$kh!rg-qwqdkc&xoS}{_sgd[57c3\:$kh!rg-qwqdkc&xoS}{_sgd[47c3\:$kh!rg-qwqdkc&xoS}{_sgd[77c3\:$kh!rg-qwqdkc&}yS}{_`qqab473\:$kh!rg-qwqdkc&}yS}{_`qqabYc9;:0Y=!hrg,qb*tt|kf`#z|Prrv\evtboVn9=n5Z0.eqb+ta'{ynae ws]qwqYdgdh:h6[?/fpe*w`(zz~i`f!xr^pppZehek;:i6[?/fpe*w`(zz~i`f!xr^pppZtbo5:5=h5Z0.eqb+ta'{ynae ws]qwqYumn6:2<j4U1-dvc(un&xxxobd/vp\vvrXzlmT<<j4U1-dvc(un&xxxobd/vp\vvrXzlmT=l5ZSDP\EIOF[j1^_H\PVHQJFIC43_IH56XFEV]W]UC33^IGG?5XE0f8\LJNFQ'SHO.?.0"PPPD'8';+M^MFI79[WQJNJ>1S_YQHNE`8\ZEHZLUBBKA9;Yfa[Lba3QncS]|fmWgqwlii991Sh`QBakmqR`ttafd:<6Vkm^OjjjtQm{ybccm4amolwqYbey~rn6ocmnqw[cskd?1imnezpe9aefmrxVgj~fk}3:aooa=ci}kTob{at)2*`>bf|hUhcx`{(0+g?agsiVidycz'2(f8`drfWje~by&<)g9geqgXkfex1=50?58`gosm{x=7iga(1+5?aoi 8#<7iga(02*3>bnf!;:%:5kio*26,1<l`d#=>'8;ekm,42.?2nbb%?:)69gmk.6> =0hd`'16+4?aoi 82";6jfn)3:-3=cag"9%:5kio*14,1<l`d#><'8;ekm,74.?2nbb%<<)69gmk.5< =0hd`'24+4?aoi ;<";6jfn)04-2=cag"94$94dhl+6</13mce$>'8;ekm,66.?2nbb%=>)69gmk.4: =0hd`'32+4?aoi :>";6jfn)16-2=cag"8:$94dhl+72/03mce$>6&7:fjj-5>!?1oec&;)79gmk.2!?1oec&9)79gmk.0!?1oec&7)79gmk.>!?1oec2?>69gmk:687=0hd`310<4?aoi4885;6jfn=30:2=cag6:8394dhl?50803mce0<817:fjj9706>1oec2>8?58`lh;904=7iga<0<4?aoi4;:5;6jfn=02:2=cag69>394dhl?66803mce0?:17:fjj9426>1oec2=6?58`lh;:>4<7iga<3:=3>bnf5822;5kio>1:2=cag68<394dhl?74803mce0><17:fjj9546>1oec2<4?58`lh;;<4<7iga<24=3>bnf59<2:5kio>0<;?<l`d7?44?>69gmk:417<0hd`33?48`lh;<7<0hd`35?48`lh;>7<0hd`37?48`lh;07<0hd`39?58`jss 9#<7iazt)3*<>bh}}":<$64dnww,47.02ndyy&>2(:8`jss 89"46j`uu*20,><lf$<;&8:flqq.6> 20hb{{(05*<>bh}}":4$64dnww,4?.?2ndyy&=)99gkpr/:9#37iazt)02-==cg|~#>?'7;emvp-44!11ocxz'25+;?air|!8>%55kotv+63/?3me~x%<8)99gkpr/:1#37iazt)0:-2=cg|~#?$64dnww,66.02ndyy&<1(:8`jss :8"46j`uu*07,><lf$>:&8:flqq.4= 20hb{{(24*<>bh}}"8;$64dnww,6>.02ndyy&<9(58`jss =#<7iazt)7*3>bh}}"=%:5kotv+3,1<lf$5'8;emvp-?.?2ndyy2?>99gkpr;99437iazt=32:==cg|~7=?07;emvp974611ocxz315<;?air|5;>255kotv?538?3me~x1?8>99gkpr;91437iazt=3::2=cg|~7=364dnww876902ndyy2=1?:8`jss4;8546j`uu>17;><lf0?:18:flqq:5=720hb{{<34=<>bh}}69;364dnww87>902ndyy2=9?58`jss4;437iazt=13:==cg|~7?<07;emvp955611ocxz332<;?air|59?255kotv?708?3me~x1=9>99gkpr;;>437iazt=1;:d=cg|~7?44?>99gkpr;;04<7iazt=1=3>bh}}6?2:5kotv?1;1<lf0;08;emvp919?2ndyy27>69gkpr;1720iigi2oeg1>cjx}s8>6hffn]dakcui}eyS{:P3-"[mioip)ID^H.Heogqeqiu(8:%=#><159emciXpedsS<8w41]1gim4:2lbjbQwloz\53~38V8h`f"iigm\c`hbzh~d~Rx;_2.MKKC+FFDN?oj4fhdl[}jipV;=t9>P2bnh(coagVmnbh|ntnp\r1Y4$riTdl}Piov\gim:8%iTdl}Pssqw95*dW{nTjk~=0.`[mgtW{nThlzn_bmvjq;7$jUoecQxievk916+kVbjRy}_ecweZeh}g~6<!mPftno[cjfozUyyQyam?2(fYneyfnah`{aukljZr~xl79 nQzsd]figccllnT~hi20-a\swYazl{6=!mPurg\`jssW{y1<"l_tlgaw`kg~Ugcz3?,b]kevYh~lxm`by20-a\twckghnT`lzjnb{>4)eXlfSzgkti?74)eXezmdbRxnl<3/gZtcWmo{xe3>6-a\lduX}gnn~kb`w<2/gZnf{Vkgab}{_gwoh86+kVbjR||t<3/gZbf|hUhcx`{_vkgpm;3$jUcm~Qxr^c`o86+kVxiRklc<2/gZehedeeSnb`cj?3(fYpzVkhgRb`w<2/gZtcWyd~Ryfduj>0)eX}zoTjzh{_ecweZeh}g~6<!mPh`q\eikh{}Una}zv=1.`[wbXlh~jSnaznu]tmaro5=&hSbxjrgnlsZjh4:'oRy}_qlwvZqnl}b68!mPpsmd[`kw|pUu}k20-a\swYci}kTob{at^uj`qn:<%iT|kco`f\v`at58&hSiazt^pppZpfd4:'oRfns^fbpdYdg|d1="l_qplcZ`rdeUdk|h^lfcdrbWkg1<:#c^uq[acw|a7::!mPpsmd[`kw|pUdk|h^lfcdrbWkg18"l_qplcZcjx}sTxe|jsi]bwvcu|V|j`0:#c^jbwZpfd`n6<!mPpsmd[cskdV~c~h}g_`qpawrX~hf6=8"lolrlj`hsWgkfi0hffn]{hk~X9?r?<R<llj.`[sgkamUgcz3?,b]svlkXn`ldSywe<726}15$jU{~biPftno[qwm4:'oRcjmnpz[qwm48'q?k4fhdl[}jipV;=t9>P2bnh[coagVmnbh|ntnp\r1Y4WqyS<:4ftno3>oi|Vigg55agb`vmib?3f|n~kb`w`9svjaXmdzu<:4psmd[`kw|pUdk|h)2*51=wzfmTi`~{y^vkv`uo 8#:86~}of]fiur~W}byi~f'2(37?uthoVof|ywPtipfwm.4!8<0|ah_dosp|Ys`{oxd1=50?3a?uthoVof|ywPtipfwmYf{zoyx%>&1c9svjaXmdzuRzgrdqk[dutm{~#=$?m;qplcZcjx}sTxe|jsi]bwvcu|!8"=o5rne\ahvsqV~c~h}g_`qpawr/; ;o7}|`g^gntqX|axneQnsrgqp95=87;i7}|`g^gntqX|axneQaefcwa-6.9k1{~biPelrw}ZrozlycSckhaug+5,7e3yxdkRkbpu{\pmtb{aUeijo{e)0*5g=wzfmTi`~{y^vkv`uoWgolmyk'3(3g?uthoVof|ywPtipfwmYimnki1=50?;8twi`Wog`<=4psmd[cskdV~c~h}g(1+27>vugnUmyabPtipfwm.6!890|ah_gwohZrozlyc$?'>3:rqkbYa}efTxe|jsi*0-43<x{elSk{cl^vkv`uo4:0;2<o4psmd[cskdV~c~h}g_`qpawr/8 ;j7}|`g^dvhiYs`{oxdRo|sdpw,4/6i2zycjQiumn\pmtb{aUj~k}t)0*5d=wzfmTjxbc_ujqavnXizyn~y&<)0a8twi`Wog`Rzgrdqk[dutm{~7?7>11`9svjaXn|fgSyf}erj\j`af|l";%<o4psmd[cskdV~c~h}g_ogdeqc/9 ;j7}|`g^dvhiYs`{oxdR`jg`vf,7/6i2zycjQiumn\pmtb{aUeijo{e)1*5f=wzfmTjxbc_ujqavnXflmjxh2<:1<5?wbXkea:<6|k_ecweZeh}g~#<$??;sf\`drfWje~by&>)028vaYci}kTob{at)0*55=ulVnjxlQlotlw,6/682xoSio{a^alqkr;87;97jPd`vb[firf}686=0:;sf\ak0<zmUyy=4rrv4?vdn|lxy86}}su68pwsb12ehh|ilnu6?sgkam<0{Qncj48swYddb;;7z|Pd`vb[firf}";%<>4ws]geqgXkfex%?&119tvZbf|hUhcx`{(3+24>quWmkmRm`uov+7,753~xThlzn_bmvjq:4294>7z|Peo48swYu{}wKL}7l3:BC|4<A2=0:w^=?:223>0<6;;h>5k4<16dek4293;0b?;=:59'61`=:=h0q^<j:223>0<6;;h>5k4<16de?V2>2::26=4>33`6=c<491::7^<j:22:>5<6;;h>5k4<1922?a57;3:1=7?tS229756==3;8>o;6f;123c`<~]h?6=4>:08250}T;908<=4::011f0?a2:;<jk5+25:90d=Q:<:1>v{:0;38q07=82w/mh46;c137?6==>08689tH365?_4?2;qh6o4r$c49755<,;>n6>>=;h106?6=3`9?=7>5;n133?6=3f9;=7>5;h10f?6=3`9887>5;n0g4?6=,k:1>k94n`d94>=h:jl1<7*m0;0e3>hfn3;07b<le;29 g6=:o=0blh52:9l6fb=83.i<7<i7:lbb?5<3f8ho7>5$c296c1<fhl1865`2b`94?"e838m;6`nf;78?j4di3:1(o>52g58jd`=>21d>n750;&a4?4a?2djj794;n0`<?6=,k:1>k94n`d9<>=h:j=1<7*m0;0e3>hfn3307b<l5;29 g6=:o=0blh5a:9l6f2=83.i<7<i7:lbb?d<3f8h?7>5$c296c1<fhl1o65`2b094?"e838m;6`nf;f8?j4d93:1(o>52g58jd`=m21d>n>50;&a4?4a?2djj7h4;n0ab?6=,k:1>k94n`d955=<g;hn6=4+b181b2=iio0:=65`2cf94?"e838m;6`nf;31?>i5jj0;6)l?:3d4?kga28907b<ma;29 g6=:o=0blh51598k7d>290/n=4=f69mec<6=21d>o650;&a4?4a?2djj7?9;:m1f2<72-h;6?h8;oce>41<3f8i:7>5$c296c1<fhl1=554o3`6>5<#j909j:5aag82=>=h:k>1<7*m0;0e3>hfn3;j76a=b283>!d72;l<7coi:0`8?j4e:3:1(o>52g58jd`=9j10c?l>:18'f5<5n>1emk4>d:9l6a0=83.i<7<i7:lbb?7b32e9h84?:%`3>7`03gkm6<h4;n0g0?6=,k:1>k94n`d965=<g;n86=4+b181b2=iio09=65`2e094?"e838m;6`nf;01?>i5l80;6)l?:3d4?kga2;907b<l6;29 g6=:o=0blh52598k7de290/n=4=f69mec<5=21d>o>50;&a4?4a?2djj7<9;:m1ec<72-h;6?h8;oce>71<3`8<j7>5$c296d0<fhl1<65f26g94?"e838j:6`nf;38?l40l3:1(o>52`48jd`=:21b>:m50;&a4?4f>2djj7=4;h04f?6=,k:1>l84n`d90>=n:>k1<7*m0;0b2>hfn3?07d<89;29 g6=:h<0blh56:9j62>=83.i<7<n6:lbb?1<3`8<;7>5$c296d0<fhl1465f26494?"e838j:6`nf;;8?l40<3:1(o>52`48jd`=i21b>:=50;&a4?4f>2djj7l4;h046?6=,k:1>l84n`d9g>=n:>;1<7*m0;0b2>hfn3n07d<80;29 g6=:h<0blh5e:9j63`=83.i<7<n6:lbb?`<3`8=i7>5$c296d0<fhl1==54i34g>5<#j909m;5aag825>=n:?i1<7*m0;0b2>hfn3;976g=6c83>!d72;k=7coi:018?l4113:1(o>52`48jd`=9=10e?87:18'f5<5i?1emk4>5:9j631=83.i<7<n6:lbb?7132c9:;4?:%`3>7g13gkm6<94;h051?6=,k:1>l84n`d95==<a;<?6=4+b181e3=iio0:565f27194?"e838j:6`nf;3b?>o5>;0;6)l?:3c5?kga28h07d<91;29 g6=:h<0blh51b98m707290/n=4=a79mec<6l21b>5;50;&a4?4f>2djj7?j;:k1<1<72-h;6?o9;oce>4`<3`83?7>5$c296d0<fhl1>=54i3:1>5<#j909m;5aag815>=n:1;1<7*m0;0b2>hfn38976g=8183>!d72;k=7coi:318?l40=3:1(o>52`48jd`=:=10e?8n:18'f5<5i?1emk4=5:9j60`=83.i<7<n6:lbb?4132c99h4?:%`3>7g13gkm6?94;h11f?6=3k8?;7>51;294~N5<?1/n;4=469lea<722wi?k4?:083>5}O:=<0(o853g9l7`<722wi>:4?:9a9a=<69<qC>984Z3:953}b28?1=94>2;30>46=k3n1n7?>:g827?722j0:87k5b;31>47=990m6i4r$c49750<,==1?i5+2b8041=#:o08<85+a88bg>o4;:0;66a<1c83>>o4;?0;66a=5283>>i4;00;66g=5783>>o49=0;6)l?:236?kga2910e>?<:18'f5<49<1emk4>;:k057<72-h;6>?:;oce>7=<a:;:6=4+b18050=iio0876g<3383>>i48h0;66a<3g83>!d72:>;7coi:198k65b290/n=4<419mec<632e8?i4?:%`3>6273gkm6?54o21`>5<#j9088=5aag80?>i4:o0;6)l?:212?kga2910c><j:18'f5<4;81emk4>;:m06a<72-h;6>=>;oce>7=<g:8h6=4+b18074=iio0876g<2883>!d72:8j7coi:198m64?290/n=4<2`9mec<632c8>:4?:%`3>64f3gkm6?54i205>5<#j908>l5aag80?>o4<80;66a=5c83>!d72;?h7coi:198k73f290/n=4=5b9mec<632e9944?:%`3>73d3gkm6?54o37;>5<#j9099n5aag80?>i48>0;66a<0083>>o49o0;6)l?:203?kga2910e>?j:18'f5<4:91emk4>;:k05a<72-h;6><?;oce>7=<a:;h6=4+b18065=iio0876g<3c83>>o4810;66g=5683>>o4<;0;66a<3483>>i4;h0;66a=5583>>i4;10;66g<3583>>i5l90;6)l?:3d4?kga2910c?mi:18'f5<5n>1emk4>;:m1g`<72-h;6?h8;oce>7=<g;io6=4+b181b2=iio0876a=cb83>!d72;l<7coi:598k7ee290/n=4=f69mec<232e9ol4?:%`3>7`03gkm6;54o3a:>5<#j909j:5aag84?>i5k10;6)l?:3d4?kga2110c?m8:18'f5<5n>1emk46;:m1g0<72-h;6?h8;oce>d=<g;i?6=4+b181b2=iio0i76a=c283>!d72;l<7coi:b98k7e5290/n=4=f69mec<c32e9o<4?:%`3>7`03gkm6h54o3a3>5<#j909j:5aag8e?>i5jo0;6)l?:3d4?kga28:07b<me;29 g6=:o=0blh51098k7dc290/n=4=f69mec<6:21d>om50;&a4?4a?2djj7?<;:m1fd<72-h;6?h8;oce>42<3f8i57>5$c296c1<fhl1=854o3`;>5<#j909j:5aag822>=h:k=1<7*m0;0e3>hfn3;<76a=b783>!d72;l<7coi:0:8?j4e=3:1(o>52g58jd`=9010c?l;:18'f5<5n>1emk4>a:9l6g5=83.i<7<i7:lbb?7e32e9n?4?:%`3>7`03gkm6<m4;n0a5?6=,k:1>k94n`d95a=<g;n=6=4+b181b2=iio0:i65`2e794?"e838m;6`nf;3e?>i5l=0;6)l?:3d4?kga2;:07b<k3;29 g6=:o=0blh52098k7b5290/n=4=f69mec<5:21d>i?50;&a4?4a?2djj7<<;:m1g3<72-h;6?h8;oce>72<3f8in7>5$c296c1<fhl1>854o3`3>5<#j909j:5aag812>=h:hl1<7*m0;0e3>hfn38<76g<0g83>!d72:;;7coi:198m66b290/n=4<119mec<632c8<i4?:%`3>6773gkm6?54i22`>5<#j908==5aag80?>o5?o0;6)l?:3c5?kga2910e?9j:18'f5<5i?1emk4>;:k13a<72-h;6?o9;oce>7=<a;=h6=4+b181e3=iio0876g=7c83>!d72;k=7coi:598m71f290/n=4=a79mec<232c9;44?:%`3>7g13gkm6;54i35;>5<#j909m;5aag84?>o5?>0;6)l?:3c5?kga2110e?99:18'f5<5i?1emk46;:k131<72-h;6?o9;oce>d=<a;=86=4+b181e3=iio0i76g=7383>!d72;k=7coi:b98m716290/n=4=a79mec<c32c9;=4?:%`3>7g13gkm6h54i34e>5<#j909m;5aag8e?>o5>l0;6)l?:3c5?kga28:07d<9d;29 g6=:h<0blh51098m70d290/n=4=a79mec<6:21b>;l50;&a4?4f>2djj7?<;:k12<<72-h;6?o9;oce>42<3`8=47>5$c296d0<fhl1=854i344>5<#j909m;5aag822>=n:?<1<7*m0;0b2>hfn3;<76g=6483>!d72;k=7coi:0:8?l41<3:1(o>52`48jd`=9010e?8<:18'f5<5i?1emk4>a:9j634=83.i<7<n6:lbb?7e32c9:<4?:%`3>7g13gkm6<m4;h054?6=,k:1>l84n`d95a=<a;2>6=4+b181e3=iio0:i65f29694?"e838j:6`nf;3e?>o50:0;6)l?:3c5?kga2;:07d<72;29 g6=:h<0blh52098m7>6290/n=4=a79mec<5:21b>5>50;&a4?4f>2djj7<<;:k130<72-h;6?o9;oce>72<3`8=m7>5$c296d0<fhl1>854i37e>5<#j909m;5aag812>=n:<o1<7*m0;0b2>hfn38<76g=5483>>o4:=0;6)l?:206?kga2910e><<:18'f5<4:<1emk4>;:k067<72-h;6><:;oce>7=<a:8:6=4+b18060=iio0876g<1883>!d72:;j7coi:198m67?290/n=4<1`9mec<632c8=:4?:%`3>67f3gkm6?54i235>5<#j908=l5aag80?>i48k0;66a=5e83>>o4:k0;66l=4e83>4<729q/n;4<f:J10f=O:=<0c>k50;9~f75429086=4?{%`5>6><@;>h7E<;6:J12>"3n398;6*;5;08m7?=831b?<4?::ma6?6=3th9?h4?:283>5}#j?0846F=4b9K610<@;<0(9h53258 13=:2c957>5;h12>5<<gk81<75rb311>5<4290;w)l9:2:8L72d3A8?:6F=6:&7b?54?2.?97<4i3;94?=n;80;66am2;29?xd5;j0;684?:1y'f3<4k2B98n5G2548L70<,=l1?>94$5796>o513:17d<m:188m67=831bn<4?::ma6?6=3th9?i4?:283>5}#j?0846F=4b9K610<@;<0(9h53258 13=:2c957>5;h12>5<<gk81<75rb312>5<2290;w)l9:2a8L72d3A8?:6F=6:&7b?54?2.?97<4i3;94?=n:k0;66g<1;29?ld62900co<50;9~f75e290?6=4?{%`5>6d<@;>h7E<;6:&71?4<a;31<75f3083>>oe93:17bl=:188yg44i3:187>50z&a2?5e3A8?o6F=479'00<53`826=44i2394?=nj80;66am2;29?xd5;00;694?:1y'f3<4j2B98n5G2548 13=:2c957>5;h12>5<<ak;1<75`b383>>{e:=>1<7:50;2x g0=;k1C>9m4H365?!222;1b>44?::k05?6=3`h:6=44oc094?=zj;>86=4;:183!d12:h0D?:l;I072>"3=380e?750;9j74<722ci=7>5;n`1>5<<uk;:o7>54;294~"e>39i7E<;c:J103=#<<0?7d<6:188m67=831bn<4?::ma6?6=3th:?54?:483>5}#j?08m6F=4b9K610<,=?1>6g=9;29?l4e2900e?j50;9j74<722ei>7>5;|`27<<72<0;6=u+b780e>N5<j1C>984$5796>o513:17d<m:188m7b=831b?<4?::ma6?6=3th:?l4?:483>5}#j?08m6F=4b9K610<,=?1>6g=9;29?l4e2900e?j50;9j74<722ei>7>5;|`27g<72<0;6=u+b780e>N5<j1C>984$5796>o513:17d<m:188m7b=831b?<4?::ma6?6=3th:?h4?:583>5}#j?08n6F=4b9K610<,=?1>6g=9;29?l562900eo?50;9lf7<722wi=>j50;694?6|,k<1?o5G25a8L7213->>6?5f2883>>o493:17dl>:188kg4=831vn<8<:186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f403290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vn<8::186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f401290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vn<;j:186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f43c290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vn<;l:186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f43e290>6=4?{%`5>6e<@;>h7E<;6:&71?2<a;31<75f2c83>>o493:17dl>:188kg4=831vn<;::186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f434290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vn<;;:186>5<7s-h=6>m4H36`?M43>2.?97:4i3;94?=n:k0;66g<1;29?ld62900co<50;9~f431290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vn<=>:186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f457290>6=4?{%`5>6e<@;>h7E<;6:&71?2<a;31<75f2c83>>o493:17dl>:188kg4=831vn<==:186>5<7s-h=6>o4H36`?M43>2.?97<4i3;94?=n:k0;66g=d;29?l562900co<50;9~f454290>6=4?{%`5>6g<@;>h7E<;6:&71?4<a;31<75f2c83>>o5l3:17d=>:188kg4=831vnno50;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnn750;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnn650;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnn950;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnk>50;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnhh50;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnhk50;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vnhj50;694?6|,k<1?45G25a8L7213->>6?5f2883>>o5l3:17d=>:188kg4=831vn<>m:187>5<7s-h=6>74H36`?M43>2.?97<4i3;94?=n:m0;66g<1;29?jd52900qo??a;290?6=8r.i:7=6;I07g>N5<?1/884=;h0:>5<<a;n1<75f3083>>ie:3:17pl>0883>1<729q/n;4<9:J10f=O:=<0(9;52:k1=?6=3`8o6=44i2394?=hj;0;66sm11:94?2=83:p(o85389K61e<@;>=7):::39j6<<722c9h7>5;h12>5<<gk81<75rbd794?2=83:p(o85389K61e<@;>=7):::39j6<<722c9h7>5;h12>5<<gk81<75rbd694?2=83:p(o85389K61e<@;>=7):::39j6<<722c9h7>5;h12>5<<gk81<75rbd194?2=83:p(o85389K61e<@;>=7):::39j6<<722c9h7>5;h12>5<<gk81<75rbd094?2=83:p(o85389K61e<@;>=7):::39j6<<722c9h7>5;h12>5<<gk81<75rb020>5<3290;w)l9:2;8L72d3A8?:6F=6:&7b?54?2.?97<4i3;94?=n:m0;66g<1;29?jd52900qo??2;290?6=8r.i:7=6;I07g>N5<?1C>;5+4g8072=#<<097d<6:188m7b=831b?<4?::ma6?6=3th:<<4?:583>5}#j?0856F=4b9K610<@;<0(9h53258 13=:2c957>5;h0g>5<<a:;1<75`b383>>{e99:1<7:50;2x g0=;01C>9m4H365?M413->m6>=8;%66>7=n:00;66g=d;29?l562900co<50;9~fab=83>1<7>t$c497<=O:=i0D?:9;I05?!2a2:9<7):::39j6<<722c9h7>5;h12>5<<gk81<75rbea94?2=83:p(o85389K61e<@;>=7E<9;%6e>6503->>6?5f2883>>o5l3:17d=>:188kg4=831vnil50;694?6|,k<1?45G25a8L7213A8=7):i:214?!222;1b>44?::k1`?6=3`9:6=44oc094?=zjmk1<7:50;2x g0=;01C>9m4H365?M413->m6>=8;%66>7=n:00;66g=d;29?l562900co<50;9~fa3=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fa2=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fa5=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fa4=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fcd=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fcg=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fc?=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~fc>=83>1<7>t$c497<=O:=i0D?:9;%66>7=n:00;66g=d;29?l562900co<50;9~f472290?6=4?{%`5>6?<@;>h7E<;6:&71?4<a;31<75f2e83>>o493:17bl=:188yg76:3:187>50z&a2?5>3A8?o6F=479'00<53`826=44i3f94?=n;80;66am2;29?xd6900;694?:1y'f3<4j2B98n5G2548 13=<2c957>5;h12>5<<ak;1<75`b383>>{e9821<7:50;2x g0=;k1C>9m4H365?!222=1b>44?::k05?6=3`h:6=44oc094?=zj;:36=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb32:>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;?6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb33e>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8j6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb30a>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8h6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb30g>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8n6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb30e>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;:j6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb32a>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;:h6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb32g>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;:n6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb32e>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;;6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb332>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;96=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb330>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;>6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb335>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;<6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb33;>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;26=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb33b>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;i6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb33`>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;;o6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb33f>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8;6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb302>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;896=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb300>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8?6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb306>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;8=6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb304>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;836=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb30:>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8k=6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4?7290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0;a>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<l>:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8h86=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4d1290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0`7>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<l::18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8h<6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4?6290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0;7>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<7=:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8386=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4?2290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0;5>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<76:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj83<6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4??290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0;b>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<7l:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj83m6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4?c290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0;f>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<o?:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8k:6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4g3290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0c1>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<o<:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8k>6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4g0290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0cb>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<o7:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8k26=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4ge290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0c`>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<oi:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8ko6=4k:183!d12k90D?:l;I072>o5:3:17d<<:188m72=831b>84?::k05?6=3`986=44i2694?=n;<0;66g<6;29?l4313:17d<;a;29?jd22900c><50;9~f4gb290o6=4?{%`5>g5<@;>h7E<;6:k16?6=3`886=44i3694?=n:<0;66g<1;29?l542900e>:50;9j70<722c8:7>5;h07=?6=3`8?m7>5;n`6>5<<g:81<75rb0`3>5<c290;w)l9:c18L72d3A8?:6g=2;29?l442900e?:50;9j60<722c8=7>5;h10>5<<a:>1<75f3483>>o4>3:17d<;9;29?l43i3:17bl::188k64=831vn<l=:18g>5<7s-h=6o=4H36`?M43>2c9>7>5;h00>5<<a;>1<75f2483>>o493:17d=<:188m62=831b?84?::k02?6=3`8?57>5;h07e?6=3fh>6=44o2094?=zj8226=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:;>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82<6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:5>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82>6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:7>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8286=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:1>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82:6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:3>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=n6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb05g>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=h6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb05a>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=j6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb05:>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=36=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb054>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8==6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb056>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=86=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb051>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=:6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb053>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8<m6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb04f>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8<o6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb04`>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8<i6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb04b>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82m6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:f>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82o6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:`>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj82i6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb0:b>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8=m6=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb057>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj8<26=4::183!d12:k0D?:l;I072>"3=380e?750;9j6g<722c9h7>5;h12>5<<gk81<75rb04;>5<2290;w)l9:2c8L72d3A8?:6*;5;08m7?=831b>o4?::k1`?6=3`9:6=44oc094?=zj;>;6=4<:183!d12=h0D?:l;I072>"3=3k0e9?50;9j07<722ejn7>5;|`170<72:0;6=u+b787f>N5<j1C>984$579e>o393:17d:=:188kdd=831vn<:l:180>5<7s-h=69l4H36`?M43>2.?97?9;h62>5<<a=81<75`ac83>>{e9;31<7=50;2x g0=<k1C>9m4H365?!2228<0e9?50;9j07<722ejn7>5;|``6?6=;3:1<v*m6;6a?M43k2B98;5+44822>o393:17d:=:188kdd=831vnn?50;194?6|,k<18o5G25a8L7213->>6<84i5394?=n<;0;66anb;29?xdd83:1?7>50z&a2?2e3A8?o6F=479'00<6>2c?=7>5;h61>5<<ghh1<75rbca94?5=83:p(o854c9K61e<@;>=7):::048m17=831b8?4?::mbf?6=3thin7>53;294~"e>3>i7E<;c:J103=#<<0::6g;1;29?l252900cll50;9~fgg=8391<7>t$c490g=O:=i0D?:9;%66>40<a=;1<75f4383>>ifj3:17pl>1583>1<729q/n;4;c:J10f=O:=<0(9;51c9j04<722c?>7>5;h60>5<<ghh1<75rb06g>5<3290;w)l9:5a8L72d3A8?:6*;5;3:?l262900e9<50;9j06<722ejn7>5;|`26d<72=0;6=u+b787g>N5<j1C>984$5795<=n<80;66g;2;29?l242900cll50;9~f47e290>6=4?{%`5>1b<@;>h7E<;6:&71?4f3`>:6=44i5094?=n<:0;66g;4;29?jge2900qo?;e;291?6=8r.i:7:k;I07g>N5<?1/884>a:k75?6=3`>96=44i5194?=n<=0;66anb;29?xd6:k0;684?:1y'f3<3l2B98n5G2548 13=9h1b8<4?::k76?6=3`>86=44i5694?=hik0;66sm10594?3=83:p(o854e9K61e<@;>=7):::0:8m17=831b8?4?::k77?6=3`>?6=44o``94?=zj8;:6=4;:183!d12=i0D?:l;I072>"3=320e9?50;9j07<722c??7>5;nca>5<<uk;?:7>53;294~"e>3>i7E<;c:J103=#<<0=7d:>:188m14=831dmo4?::a55`=83?1<7>t$c490a=O:=i0D?:9;%66>2=n<80;66g;2;29?l242900e9:50;9leg<722wini4?:283>5}#j?0?n6F=4b9K610<,=?1=;5f4083>>o3:3:17bom:188ygd029086=4?{%`5>1d<@;>h7E<;6:&71?713`>:6=44i5094?=hik0;66sm15194?3=83:p(o854e9K61e<@;>=7):::328m17=831b8?4?::k77?6=3`>?6=44o``94?=zj8>?6=4::183!d12=n0D?:l;I072>"3=38;7d:>:188m14=831b8>4?::k70?6=3fki6=44}c371?6==3:1<v*m6;6g?M43k2B98;5+44814>o393:17d:=:188m15=831b894?::mbf?6=3th:8?4?:483>5}#j?0?h6F=4b9K610<,=?1?:5f4083>>o3:3:17d:<:188m12=831dmo4?::a577=83?1<7>t$c490a=O:=i0D?:9;%66>4b<a=;1<75f4383>>o3;3:17d:;:188kdd=831vn<<=:186>5<7s-h=69j4H36`?M43>2.?97?k;h62>5<<a=81<75f4283>>o3<3:17bom:188yg75;3:197>50z&a2?2c3A8?o6F=479'00<582c?=7>5;h61>5<<a=91<75f4583>>ifj3:17pl>1d83>6<729q/n;4;b:J10f=O:=<0(9;51d9j04<722c?>7>5;nca>5<<uk;9<7>55;294~"e>3>o7E<;c:J103=#<<08;6g;1;29?l252900e9=50;9j01<722ejn7>5;|`aa?6=<3:1<v*m6;6`?M43k2B98;5+44815>o393:17d:=:188m15=831dmo4?::af=<72=0;6=u+b787g>N5<j1C>984$57964=n<80;66g;2;29?l242900cll50;9~f426290?6=4?{%`5>1e<@;>h7E<;6:&71?7d3`>:6=44i5094?=n<:0;66anb;29?xden3:197>50z&a2?2c3A8?o6F=479'00<6?2c?=7>5;h61>5<<a=91<75f4583>>ifj3:17plm9;291?6=8r.i:7:k;I07g>N5<?1/884>7:k75?6=3`>96=44i5194?=n<=0;66anb;29?xd6990;684?:1y'f3<3l2B98n5G2548 13=?2c?=7>5;h61>5<<a=91<75f4583>>ifj3:17pl>4c83>7<729q/n;4;6:J10f=O:=<0e9>50;9leg<722wi=?650;094?6|,k<18;5G25a8L7213`>;6=44o``94?=zj8;m6=4::183!d12=o0D?:l;I072>"3=3;m7d:>:188m14=831b8>4?::k70?6=3f>36=44}c374?6==3:1<v*m6;6f?M43k2B98;5+4480?l262900e9<50;9j06<722c?87>5;n6;>5<<uz98>7>57z\077=:98>18>5210`901=:98=18952103904=:99l18<52102904=z{:9;6=4>ez\11a=Y:<>0R>=n;_10<>X5=:1U?>;4^22b?[5412T8<o5Q30`8Z73e3W8>m6P=589]60><V:9m7S=<e:\07a=Y;:i0R><i;_11a>X4:m1U??m4=36g>6c<5;9h6>?4=312>67<5;9i6>?4=31b>67<5;926>?4=367>67<5;>86>?4}r100?6=;rT8?95222a9f4=:::;1n<5rs222>5<5sW9;=63>188a6>{t;=;1<7=t^262?873>3>:70?;1;62?xu4:k0;6::t^20a?844;38270<<2;0:?844938270<<b;0:?844i38270<<9;0:?876k38270?<8;0:?874138270?<a;0:?874j38270?<1;0:?874838270?<2;0:?874;38270h?:3;89``=:016ih4=9:?f`?4>34;;n7<6;<33e?4>34;;57<6;<33<?4>34;;?7<6;<336?4>34;;=7<6;<334?4>34n>6?74=e696<=:l:09563k2;0:?876=38270?>2;0:?876138270?>8;0:?847038270<?9;0:?846<38270<>f;0:?845i38270<=b;0:?845k38270<=d;0:?845m38270<=f;0:?847i38270<?b;0:?847k38270<?d;0:?847m38270<?f;0:?846838270<>1;0:?846:38270<>3;0:?846=38270<>6;0:?846?38270<>8;0:?846138270<>a;0:?846j38270<>c;0:?846l38270<>e;0:?845838270<=1;0:?845:38270<=3;0:?845<38270<=5;0:?845>38270<=7;0:?845038270<=9;0:?87?138270?78;0:?87??38270?76;0:?87?=38270?74;0:?87?;38270?72;0:?87?938270?70;0:?870m38270?8d;0:?870k38270?8b;0:?870i38270?89;0:?870038270?87;0:?870>38270?85;0:?870;38270?82;0:?870938270?80;0:?871n38270?9e;0:?871l38270?9c;0:?871j38270?9a;0:?87?n38270?7e;0:?87?l38270?7c;0:?87?j38270?7a;0:?870n38270?84;0:?871138270?98;0:?xu48>0;6?uQ3158945b2k80q~=<b;290f}Y;:h01?=j:3;8975d2;301?=k:3;897232;301?:<:3;8945b2;301<=k:3;894042;301<8;:3;894022;301<89:3;8943b2;301<;k:3;8943d2;301<;m:3;894322;301<;<:3;894332;301<;9:3;89fg=:016o44=9:?`<?4>34i<6?74=d796<=:m=09563j3;0:?8c52;301ij5289>`f<5127on7<6;<fb>7?<5oh1>452f`81=>;a138270h7:3;894g12;>270?60;07=>;61k0984521c3961?<58h86?:6;<3a2?43127:n94=489>5g3=:=301<l8:36:?87>938?563>95810<=:9081>974=0;0>72>34;297<;9:?2=3<5<016=47525;894?02;>270?68;07=>;61h09845218a961?<583m6?:6;<3:`?43127:5h4=489>5d6=:=301<o>:36:?87f<38?563>a3810<=:9h91>974=0c6>72>34;j;7<;9:?2ed<5<016=l6525;894g>2;>270?nb;07=>;6ij0984521`d961?<58ko6?:6;<3ba?43127:n=4=489>5g4=:=30q~<i8;296~X5l916=575b39~w7`12909wS<lf:?2<=<e:2wx>k;50;0xZ7eb34;3;7l=;|q1b1<72;qU>nj4=0:5>g4<uz8m?7>52z\1gf=:91?1n?5rs3d1>5<5sW8hn63>858a6>{t:o;1<7<t^3ab?87?;3h97p}=f183>7}Y:j301<6=:c08yv4bn3:1>vP=c99>5=7=j;1v?kj:181[4d?27:4=4m2:p6`e=838pR?m:;<34a?d53ty9io4?:3y]6f2<58=o6o<4}r0fe?6=:rT9o>5216a9f7=z{;o26=4={_0`6>;6?k0i>6s|2d:94?4|V;i:70?8a;`1?xu5m>0;6?uQ2b28941>2k80q~<j6;296~X5jo16=:65b39~w7c22909wS<me:?232<e:2wx>h:50;0xZ7dc34;<:7l=;|q1a6<72;qU>om4=056>g4<uz8n=7>52z\1fd=:9>91n?5rs3g3>5<5sW8i563>738a6>{t:ml1<7<t^3`;?87093h97p}=dd83>7}Y:k=01<9?:c08yv4cl3:1>vP=b79>53`=j;1v?jl:181[4e=27::h4m2:p6ad=838pR?l;;<35`?d53ty9hl4?:3y]6g5<58<h6o<4}r0g=?6=:rT9n?5217`9f7=z{;n36=4={_0a5>;6>h0i>6s|2gd94?4|V;n=70?7f;`1?xu5nl0;6?uQ2e7894>b2k80q~<id;296~X5l=16=5j5b39~w7`d2909wS<k3:?2<f<e:2wx>kl50;0xZ7b534;3n7l=;|q1bd<72;qU>i?4=0:b>g4<uz8m57>52z\1g3=:9>l1n?5rs3gg>5<5sW8in63>758a6>{t:l81<7<t^3`3?87113h97p}=d683>7}Y:hl01<87:c08yv4f?3:1>vP=7g9>5g4=;81v?o::181[40m27:n=4<1:p6d2=838pR?9k;<3bb?563ty9m>4?:3y]62e<58kn6>?4}r0b6?6=:rT9;o521`f974=z{;k:6=4={_04e>;6ij08=6s|2`294?4|V;=270?nb;12?xu51o0;6?uQ26:894gf2:;0q~<6e;296~X5?>16=l75309~w7?c2909wS<86:?2e=<492wx>4l50;0xZ71334;j;7=>;|q1=d<72;qU>:=4=0c6>67<uz8257>52z\137=:9h>1?<5rs3;;>5<5sW8<=63>a2805>{t:0=1<7<t^353?87f:39:7p}=9783>7}Y:?l01<o>:238yv4>=3:1>vP=6d9>5d6=;81v?7;:181[41l27:5k4<1:p6<5=838pR?8l;<3:a?563ty95?4?:3y]63d<583o6>?4}r0:4?6=:rT9:45218a974=z{;2m6=4={_05<>;61h08=6s|29g94?4|V;<<70?69;12?xu50m0;6?uQ274894??2:;0q~<7c;296~X5><16=495309~w7>e2909wS<94:?2=3<492wx>5o50;0xZ70434;297=>;|q1<<<72;qU>;<4=0;7>67<uz8347>52z\124=:9091?<5rs3:4>5<5sW8=<63>93805>{t:ho1<7<t^3:6?87>939:7p}=ae83>7}Y:1>01<l8:238yv4fk3:1>vP=829>5g0=;81v?om:181[4?:27:n84<1:p6dg=838pR?6>;<3a0?563ty9m44?:3y]6=6<58h86>?4}r0b<?6=:rT9;8521c3974=z{;3h6=4={_05e>;6i?08=6s|28394?4|V;?m70?6b;12?xu50?0;6?uQ24g894?72:;0q~<<2;297~;5;:08=63=338a6>;5;809n6s|22194?4|5;986o<4=316>17<uz88h7>53z?17`<49279?n4=b:?17a<e:2wx>>k50;0x975b2k801?:?:538yv4493:1?v3=33805>;5;80i>63=34876>{t::i1<7=t=31`>g4<5;9o6>?4=363>14<uz8887>54z?17g<e9279?l4m1:?17<<e9279?84nb:p66>=83op1?=m:c08947d2k;01<=7:3f8945>2;n01<=n:3f8945e2;n01<=>:3f894572k;01<==:3f894542;n01<?::3f894752;n01<?6:c38947?2k;0q~<<7;2954}:::k1n?52f181`>;bn38o70kj:3f89`b=:m16==l52e9>55g=:m16==752e9>55>=:m16===52e9>554=:m16==?52e9>556=:m16h84=d:?g0?4c34n86?j4=e096a=z{;9=6=4:1z?17<<e:279<54=d:?14<<5l279=94=d:?15c<5l279>l4=d:?16g<5l279>n4=d:?16a<5l279>h4=d:?16c<5l279<l4=d:?14g<5l279<n4=d:?14a<5l279<h4=d:?14c<5l279==4=d:?154<5l279=?4=d:?156<5l279=84=d:?153<5l279=:4=d:?15=<5l279=44=d:?15d<5l279=o4=d:?15f<5l279=i4=d:?15`<5l279>=4=d:?164<5l279>?4=d:?166<5l279>94=d:?160<5l279>;4=d:?162<5l279>54=d:?16<<5l27:444=d:?2<=<5l27:4:4=d:?2<3<5l27:484=d:?2<1<5l27:4>4=d:?2<7<5l27:4<4=d:?2<5<5l27:;h4=d:?23a<5l27:;n4=d:?23g<5l27:;l4=d:?23<<5l27:;54=d:?232<5l27:;;4=d:?230<5l27:;>4=d:?237<5l27:;<4=d:?235<5l27::k4=d:?22`<5l27::i4=d:?22f<5l27::o4=d:?22d<5l27:4k4=d:?2<`<5l27:4i4=d:?2<f<5l27:4o4=d:?2<d<5l27:;k4=d:?231<5l27::44=d:?22=<5l2wx>>h50;1x97232k;01?:<:c3897272hh0q~<;2;29b~;5<=0i>63>3d8a5>;6;m0i=63>6281`>;6>=09h63>6481`>;6>?09h63>5d81`>;6=m09h63>5b81`>;6=k0i=63>5481`>;6=:09h63>558a5>;6=?09h6s|25394?76s48??7l=;<ab>7b<5j31>i52c981`>;d?38o70k::3f89`2=:m16i>4=d:?f6?4c34no6?j4=ea96a=:lk09h63ka;0g?8`e2;n01ko52e9>b<<5l27m47<k;|q25a<72;q6=<m5309>576=ik1v<?l:187876k3h970?>7;62?877n3>970?>0;61?xu68o0;6>?t=01;>7d<58926?l4=01b>7d<589i6?l4=012>7d<589;6?l4=011>7d<58986?l4=32;>7d<5;:26?l4=337>7d<5;;m6?l4=30b>7d<5;8i6?l4=30`>7d<5;8o6?l4=30f>7d<5;8m6?l4=32b>7d<5;:i6?l4=32`>7d<5;:o6?l4=32f>7d<5;:m6?l4=333>7d<5;;:6?l4=331>7d<5;;86?l4=336>7d<5;;=6?l4=334>7d<5;;36?l4=33:>7d<5;;j6?l4=33a>7d<5;;h6?l4=33g>7d<5;;n6?l4=303>7d<5;8:6?l4=301>7d<5;886?l4=307>7d<5;8>6?l4=305>7d<5;8<6?l4=30;>7d<5;826?l4=033>dd<uz;9o7>57z?27=<4927:?=4m2:?26<<3:27:>l4;3:?26g<3927:>54;0:?25c<3:2wx=>:50;0a87403h970?n6;10?87>839870?6b;10?87e939870?m3;10?87e>39870?m4;10?87e=39870?m7;10?87>939870?64;10?87>:39870?63;10?87>=39870?66;10?87>139870?67;10?87>039870?6a;10?87>k39870?6f;10?87>l39870?6e;10?87f839870?n1;10?87f<39870?n2;10?87f;39870?n5;10?87f?39870?na;10?87f039870?n9;10?87fj39870?nc;10?87fn39870?nd;10?87fm39870?m0;10?87e:39870ll:50894462=90q~?=d;292~;6;008=63>308a6>;6:00?=63>2`875>;6:k0??63>22875>{t9:?1<7<l{<30=?d534;j:7=;;<3:4?5334;2n7=;;<3a5?5334;i?7=;;<3a2?5334;i87=;;<3a1?5334;i;7=;;<3:5?5334;287=;;<3:6?5334;2?7=;;<3:1?5334;2:7=;;<3:=?5334;2;7=;;<3:<?5334;2m7=;;<3:g?5334;2j7=;;<3:`?5334;2i7=;;<3b4?5334;j=7=;;<3b0?5334;j>7=;;<3b7?5334;j97=;;<3b3?5334;jm7=;;<3b<?5334;j57=;;<3bf?5334;jo7=;;<3bb?5334;jh7=;;<3ba?5334;i<7=;;<3a6?5334hh69?4=c`907=:9;;1895rs00f>5<2s4;8m7=>;<306?d534;9m7:=;<31f?2334;9?7:<;|q273<72;ip1<=n:c0894g12:?01<7?:27894?e2:?01<l>:27894d42:?01<l9:27894d32:?01<l::27894d02:?01<7>:27894?32:?01<7=:27894?42:?01<7::27894?12:?01<76:27894?02:?01<77:27894?f2:?01<7l:27894?a2:?01<7k:27894?b2:?01<o?:27894g62:?01<o;:27894g52:?01<o<:27894g22:?01<o8:27894gf2:?01<o7:27894g>2:?01<om:27894gd2:?01<oi:27894gc2:?01<oj:27894d72:?01<l=:2789gd=<816nl4;2:?267<3;2wx=?h50;6x945e2:;01<=<:c08944e2=801<?j:508yv74?3:1>nu212`9f7=:l<08=63>a7802>;61908:63>9c802>;6j808:63>b2802>;6j?08:63>b5802>;6j<08:63>b6802>;61808:63>95802>;61;08:63>92802>;61<08:63>97802>;61008:63>96802>;61108:63>9`802>;61j08:63>9g802>;61m08:63>9d802>;6i908:63>a0802>;6i=08:63>a3802>;6i:08:63>a4802>;6i>08:63>a`802>;6i108:63>a8802>;6ik08:63>ab802>;6io08:63>ae802>;6il08:63>b1802>;6j;08:63ma;62?875:3>?7p}>3g83>6}:9:o1?<5212f974=:9=81mo5rs01g>5<4s4;8h7l=;<372?2534;?<7:=;|q222<72:?p1<8<:3`894032;h01<8::3`894012;h01<;j:3`8943c2;h01<;l:3`8943e2;h01<;::3`894342;h01<;;:3`894312;h01<o9:36b?87>838?m63>9c810d=:9k;1>9o4=0`0>72f34;i:7<;a:?2f1<5<h16=o;525c894d02;>j70?61;07e>;61=098l52180961g<58386?:n;<3:1?43i27:5;4=4`9>5<?=:=k01<78:36b?87>038?m63>9`810d=:90i1>9o4=0;e>72f34;2h7<;a:?2=`<5<h16=l>525c894g62;>j70?n4;07e>;6i;098l521`1961g<58k>6?:n;<3b3?43i27:ml4=4`9>5d>=:=k01<o6:36b?87fj38?m63>ab810d=:9hl1>9o4=0cg>72f34;ji7<;a:?2f5<5<h16=o<525c894212hh0q~?:7;297~;6>:08=63>5c8a6>;6<:0??6s|14d94?4fs4;=?7l=;<3b2?4534;2<7<=;<3:f?4534;i=7<=;<3a7?4534;i:7<=;<3a0?4534;i97<=;<3a3?4534;2=7<=;<3:0?4534;2>7<=;<3:7?4534;297<=;<3:2?4534;257<=;<3:3?4534;247<=;<3:e?4534;2o7<=;<3:b?4534;2h7<=;<3:a?4534;j<7<=;<3b5?4534;j87<=;<3b6?4534;j?7<=;<3b1?4534;j;7<=;<3be?4534;j47<=;<3b=?4534;jn7<=;<3bg?4534;jj7<=;<3b`?4534;ji7<=;<3a4?4534;i>7<=;<a1>14<uz;>47>53z?221<4927:9n4m2:?206<392wx=;>50;0a871<3h970?n6;00?87>838870?6b;00?87e938870?m3;00?87e>38870?m4;00?87e=38870?m7;00?87>938870?64;00?87>:38870?63;00?87>=38870?66;00?87>138870?67;00?87>038870?6a;00?87>k38870?6f;00?87>l38870?6e;00?87f838870?n1;00?87f<38870?n2;00?87f;38870?n5;00?87f?38870?na;00?87f038870?n9;00?87fj38870?nc;00?87fn38870?nd;00?87fm38870?m0;00?87e:38870m=:5389f7=<;1v<;6:180871=39:70?:d;`1?873<3>87p}>6083>7d|58<>6o<4=0c5>72<583;6?:4=0;a>72<58h:6?:4=0`0>72<58h=6?:4=0`7>72<58h>6?:4=0`4>72<583:6?:4=0;7>72<58396?:4=0;0>72<583>6?:4=0;5>72<58326?:4=0;4>72<58336?:4=0;b>72<583h6?:4=0;e>72<583o6?:4=0;f>72<58k;6?:4=0c2>72<58k?6?:4=0c1>72<58k86?:4=0c6>72<58k<6?:4=0cb>72<58k36?:4=0c:>72<58ki6?:4=0c`>72<58km6?:4=0cg>72<58kn6?:4=0`3>72<58h96?:4=b3904=:k90?>6s|14c94?5|58<=6>?4=07f>g4<58>?69?4}r356?6=:kq6=;85b39>bg<4927:m;4=5:?2=5<5=27:5o4=5:?2f4<5=27:n>4=5:?2f3<5=27:n94=5:?2f0<5=27:n:4=5:?2=4<5=27:594=5:?2=7<5=27:5>4=5:?2=0<5=27:5;4=5:?2=<<5=27:5:4=5:?2==<5=27:5l4=5:?2=f<5=27:5k4=5:?2=a<5=27:5h4=5:?2e5<5=27:m<4=5:?2e1<5=27:m?4=5:?2e6<5=27:m84=5:?2e2<5=27:ml4=5:?2e=<5=27:m44=5:?2eg<5=27:mn4=5:?2ec<5=27:mi4=5:?2e`<5=27:n=4=5:?2f7<5=27h<7:>;|q217<72=q6=8k5309>500=j;16=9k5439>513=<81v<;>:186872l39:70?:5;`1?873l3>970?;e;67?87383>:7p}>5183>3}:9<i1?<521469f7=:9=i18<5215f904=:9=o18>52157906=z{8>m6=48{<36f?5634;>?7l=;<37g?2534;?h7:<;<37a?2634;?=7:<;<37f?273ty:844?:3y>503=;816=9j5ac9~w4202909w0?:3;12?873j3ki7p}>4983>7}:9<>1?<5215a9eg=z{8>j6=4={<362?5634;?i7om;|q260<72;q6=>?5309>57?=ik1v<<;:181874839:70?=8;ca?xu6:?0;6?u2120974=:9;k1mo5rs004>5<5s4;8?7=>;<31f?ge3tyn=7>55z?`e?5634o>6o<4=c5907=:j10?>63m9;61?xud>3:1?v3la;`1?873<3>970?;5;61?xudj3:1>v3l9;12?8d02hh0q~m::1808e>2k801<:;:56894272=90q~ml:1818e?2:;01o65ac9~wf2=839p1n65b39>515=<;16=9;5459~wfb=838p1n95309>f<<fj2wxo>4?:2y>g2<e:27:8>4;4:?204<3:2wx==950;7x9c6=;816==l5b39>fa<3:27ii7:=;<`e>14<uzoh6=4<{<d3>g4<588969<4=03f>17<uzl:6=4={<ge>67<5kn1mo5rsd`94?5|5ll1n?52130904=:9;91895rsg094?4|5lo1?<52bd8bf>{tmh0;6>u2ed8a6>;6:80?>63>22876>{tn:0;6?u2ee805>;en3ki7p}j9;297~;bl3h970?=1;62?876n3>:7p}if;296~;68k08=63>028a6>{tnl0;6?u211c974=:9981n?5rs025>5<3s4;;m7l=;<`g>17<5ko18<52bg875>{tnm0;6?u211;974=:99;1n?5rs026>5<4s4;;57l=;<`f>15<5kl18>5rsga94?4|58:36>?4=023>g4<uz;;87>52z?24=<e:27ij7:;;|qg=?6=:r7n97=>;<fg>g4<uzn36=4={<g7>67<5mi1n?5rsd294?2|5l>1n?52b6875>;e03>:70l6:538yvb02909w0k<:2389ad=j;1vih50;1x9`5=j;16n54;3:?a=?243tyo:7>52z?f6?5634nj6o<4}rff>5<5s4o96o<4=c;901=z{o=1<7<t=020>67<5oh1n?5rsg494?4|58:96>?4=gc9f7=z{o?1<7<t=022>67<5o31n?5rsg694?4|58:;6>?4=g:9f7=z{m;1<7<t=ef974=:l<0i>6s|d183>7}:lj08=63k4;`1?xudn3:1>v3kb;12?8b42k80q~mj:1818bf2:;01i<5b39~w`0=838p1i:5309>fd<fj2wxi:4?:3y>`6<4927in7om;|qf<?6=:r7o>7=>;<``>dd<uz;;o7>52z?ee?5634i;6ll4}r33`?6=:r7m57=>;<a2>dd<uz;;i7>52z?e<?5634i96ll4}r322?6=:r7:=84<1:?252<fj2wx=<;50;5x94722k801<?;:508947e2=901<?8:51894762=901<>i:56894772=>0q~?>3;296~;69;08=63>158bf>{t9881<79t=031>g4<58;?69?4=03a>14<58;<69<4=032>14<58:m69=4=033>15<uz;:m7>53z?25<<4927:=54<1:?25g<fj2wx=<650;0x947?2k801<?m:538yv7e03:1>v3=09805>;61908>6s|1d294?4|5;:36o<4=04;>67<uz;h?7>52z?14<<4927:5o4<2:p5`d=838p1?>6:c08940>2:;0q~?le;296~;59=08=63>a7806>{t9o<1<7<t=337>g4<58=?6>?4}r3g=?6=:r79=k4<1:?2f4<4:2wx>=?50;0x977a2k801<9i:238yv7ci3:1>v3=2`805>;6j:08>6s|21094?4|5;8j6o<4=0:b>67<uz;on7>52z?16g<4927:n94<2:p655=838p1?<m:c0894>e2:;0q~?kc;296~;5:j08=63>b4806>{t:9>1<7<t=30`>g4<582h6>?4}r3g`?6=:r79>i4<1:?2f3<4:2wx>=;50;0x974c2k801<6k:238yv7cm3:1>v3=2d805>;6j>08>6s|21494?4|5;8n6o<4=0:f>67<uz;oj7>52z?16c<4927:5<4<2:p651=838p1?<i:c0894>a2:;0q~?m9;296~;58h08=63>93806>{t9l;1<7<t=32b>g4<58<j6>?4}r3ae?6=:r79<o4<1:?2=6<4:2wx=h<50;0x976e2k801<8m:238yv7ej3:1>v3=0b805>;61=08>6s|1d194?4|5;:h6o<4=04`>67<uz;io7>52z?14a<4927:584<2:p5`2=838p1?>k:c08940c2:;0q~?md;296~;58l08=63>97806>{t9l?1<7<t=32f>g4<58<n6>?4}r3aa?6=:r79<k4<1:?2=2<4:2wx=h850;0x976a2k801<8i:238yv7en3:1>v3=11805>;61108>6s|1d594?4|5;;;6o<4=053>67<uz;h<7>52z?154<4927:544<2:p5`>=838p1??>:c0894162:;0q~?l1;296~;59;08=63>9`806>{t9l31<7<t=331>g4<58=96>?4}r3`6?6=:r79=>4<1:?2=f<4:2wx=ho50;0x97742k801<9<:238yv7d<3:1>v3=14805>;61m08>6s|1da94?4|5;;>6o<4=056>67<uz;h97>52z?153<4927:5h4<2:p5`b=838p1??9:c0894112:;0q~?l6;296~;59>08=63>9g806>{t9lo1<7<t=334>g4<58=<6>?4}r3`3?6=:r79=54<1:?2e5<4:2wx=hh50;0x977?2k801<97:238yv7d03:1>v3=18805>;6i808>6s|1g294?4|5;;26o<4=05:>67<uz;h57>52z?15d<4927:m?4<2:p5c7=838p1??n:c08941f2:;0q~?la;296~;59k08=63>a2806>{t9o81<7<t=33a>g4<58=i6>?4}r3`f?6=:r79=n4<1:?2e1<4:2wx=k=50;0x977d2k801<9l:238yv7dk3:1>v3=1e805>;6i<08>6s|1g694?4|5;;o6o<4=05g>67<uz;hh7>52z?15`<4927:m:4<2:p5c3=838p1??j:c08941b2:;0q~?lf;296~;5:908=63>a9806>{t9o=1<7<t=303>g4<582;6>?4}r3g4?6=:r79><4<1:?2e<<4:2wx=k650;0x97462k801<6>:238yv7c93:1>v3=23805>;6ih08>6s|1g;94?4|5;896o<4=0:1>67<uz;o>7>52z?166<4927:mo4<2:p5cg=838p1?<<:c0894>42:;0q~?k3;296~;5:=08=63>ab806>{t9oh1<7<t=307>g4<582?6>?4}r3g0?6=:r79>84<1:?2ea<4:2wx=km50;0x97422k801<6::238yv7c=3:1>v3=27805>;6il08>6s|1gf94?4|5;8=6o<4=0:5>67<uz;o:7>52z?162<4927:mk4<2:p5cc=838p1?<8:c0894>02:;0q~?k7;296~;5:108=63>b1806>{t9ol1<7<t=30;>g4<58236>?4}r3g<?6=:r79>44<1:?2f7<4:2wx>=>50;0x974>2k801<66:238yv4483:1>4u219;96g=:9121>o5219596g=:91<1>o5219796g=:91>1>o5219196g=:9181>o5219396g=:91:1>o5216g96g=:9>n1>o5216a96g=:9>h1>o5216c96g=:9>31>o5216:96g=:9>=1>o5216496g=:9>?1>o5216196g=:9>81>o5216396g=:9>:1>o5217d96g=:9?o1>o5217f96g=:9?i1>o5217`96g=:9?k1>o5219d96g=:91o1>o5219f96g=:91i1>o5219`96g=:91k1>o5216d96g=:9>>1>o5217;96g=:9?21>o521039eg=z{89h6=4={<33b?ge34;:j7:<;|q206<72;q6=9=5ac9>514=<81v<:;:181873<3ki70?;2;61?xu6<<0;6?u21579eg=:9=818>5rs063>5<5s4;?>7:;;<374?2?3ty:><4?:3y>577=ik16=?>5409~w4452909w0?=2;ca?87583>97p}>2283>7}:9;91mo52132906=z{8;n6=4={<32a?ge34;:j7:;;|q25c<72;q6=?>5459>54`=<11v:850;0x94262hh01<:?:568yxu5i>0;6?uQ26d8971=:>l0(?:::828yv4f=3:1>vP=7d9>62<5?l1/>9;5909~w7g32909wS<8d:?13?40l2.988467:p6d5=838pR?9l;<04>71d3-8?977j;|q1e7<72;qU>:l4=35962d<,;>>68<4}r0b5?6=:rT9;l5226813d=#:=?19i5rs3c3>5<5sW8<563=7;04=>"5<<0=46s|28d94?4|V;=370<8:35;?!43=3<m7p}=9d83>7}Y:>=01?952658 7222>:0q~<6d;296~X5??16>:4=779'613=?81v?7m:181[40<279;7<84:&100<0:2wx>4o50;0xZ714348<6?9<;%071?143ty9544?:3y]624<5;=1>:<4$366>22<uz8247>52z\134=::>09;<5+257930=z{;3<6=4={_044>;5?38<<6*=44842>{t:0<1<7<t^34e?8402;<m7)<;5;54?xu51<0;6?uQ27g8971=:?o0(?:::6:8yv4><3:1>vP=6e9>62<5>m1/>9;5789~w7?42909wS<9c:?13?41k2.98848a:p6<4=838pR?8m;<04>70e3-8?979m;|q1=5<72;qU>;74=35963?<,;>>6:m4}r0;b?6=:rT9:55226812==#:=?1;i5rs3:f>5<5sW8=;63=7;053>"5<<0<i6s|29f94?4|V;<=70<8:345?!43=3=m7p}=8b83>7}Y:??01?952778 72221:0q~<7b;296~X5>=16>:4=659'613=081v?6n:181[41;279;7<93:&100<?:2wx>5750;0xZ705348<6?8=;%071?>43ty9454?:3y]637<5;=1>;?4$366>=2<uz83;7>52z\125=::>09:=5+2579<0=z{;kn6=4={_0;1>;5?38396*=448;2>{t:hn1<7<t^3:7?8402;2?7)<;5;:4?xu5ij0;6?uQ2918971=:190(?:::9:8yv4fj3:1>vP=839>62<50;1/>9;5889~w7gf2909wS<71:?13?4?92.98847a:p6d?=838pR?6?;<04>7>73-8?976m;|q1e=<72;qU>:;4=359623<,;>>65m4}r0:g?6=:rT9:l5226812d=#:=?14i5rs3;2>5<5sW8>j63=7;06b>"5<<03i6s|29494?4|V;?n70<8:37f?!43=32m7p}<2c83>7}Y;;h01?9533`8 7222080q~=<2;296~X4;;16>:4<339'613=1:1v>=;:181[54<279;7=<4:&100<><2wx?>l50;0xZ65e348<6>=m;%071??23ty88<4?:3y]717<5;=1?9?4$366><0<uz8m47>52z\1`5=::>09h=5+2579===z{;l=6=4={_0`b>;5?38hj6*=448:=>{t:o?1<7<t^3af?8402;in7)<;5;;b?xu5n=0;6?uQ2bf8971=:jn0(?:::8`8yv4a;3:1>vP=cb9>62<5kj1/>9;59b9~w7`52909wS<lb:?13?4dj2.98846d:p6c7=838pR?mn;<04>7ef3-8?977i;|q1b5<72;qU>n74=3596f?<,;>>6l>4}r0fb?6=:rT9o5522681g==#:=?1m<5rs3gf>5<5sW8h;63=7;0`3>"5<<0j>6s|2da94?4|V;i>70<8:3a6?!43=3k87p}=ec83>7}Y:j>01?952b68 7222h>0q~<ja;296~X5k:16>:4=c29'613=i<1v?k6:181[4d:279;7<l2:&100<f>2wx>h650;0xZ7e6348<6?m>;%071?g03ty9i:4?:3y]6f6<5;=1>n>4$366>d><uz8n:7>52z\1fc=::>09nk5+257916=z{;o>6=4={_0aa>;5?38ii6*=44860>{t:l>1<7<t^3`g?8402;ho7)<;5;76?xu5m:0;6?uQ2ca8971=:ki0(?:::448yv4b93:1>vP=b`9>62<5jh1/>9;5569~w7c72909wS<m9:?13?4e12.9884:8:p6a`=838pR?l7;<04>7d?3-8?97;6;|q1``<72;qU>o94=3596g1<,;>>68o4}r0g`?6=:rT9n;522681f3=#:=?19o5rs3f`>5<5sW8i963=7;0a1>"5<<0>o6s|2e`94?4|V;h?70<8:3`7?!43=3?n7p}=d`83>7}Y:k901?952c18 7222<l0q~<k9;296~X5j;16>:4=b39'613=>91v?j7:181[4e9279;7<m1:&100<192wx>kh50;0xZ7b1348<6?j9;%071?053ty9jh4?:3y]6a3<5;=1>i;4$366>35<uz8mh7>52z\1`1=::>09h95+257921=z{;lh6=4={_0g7>;5?38o?6*=44851>{t:oh1<7<t^3f1?8402;n97)<;5;45?xu5nh0;6?uQ2e38971=:m;0(?:::758yv4a13:1>vP=c79>62<5k?1/>9;5689~w7cc2909wS<mb:?13?4ej2.98849a:p6`4=838pR?l?;<04>7d73-8?978m;|q1`2<72;qU>lh4=3596d`<,;>>6;m4}r135?6=:rT8<<52268044=#:=?1:i5rs224>5<5sW9;;63=7;133>"5<<0=i6srn974>5<5sA8?:6sa84:94?4|@;>=7p`75883>7}O:=<0qc6:a;296~N5<?1vb5;m:181M43>2we48m50;0xL7213td39i4?:3yK610<ug2>i7>52zJ103=zf1?m6=4={I072>{i0?:1<7<tH365?xh?>80;6?uG2548yk>1:3:1>vF=479~j=042909wE<;6:m<32=838pD?:9;|l;20<72;qC>984}o:52?6=:rB98;5rn944>5<5sA8?:6sa87:94?4|@;>=7p`76883>7}O:=<0qc69a;296~N5<?1vb58m:181M43>2we4;m50;0xL7213td3:i4?:3yK610<ug2=i7>52zJ103=zf1<m6=4={I072>{i0>:1<7<tH365?xh??80;6?uG2548yk>0:3:1>vF=479~j=142909wE<;6:m<22=838pD?:9;|l;30<72;qC>984}o:42?6=:rB98;5rn954>5<5sA8?:6sa86:94?4|@;>=7p`77883>7}O:=<0qc68a;296~N5<?1vb59m:181M43>2we4:m50;0xL7213td3;i4?:3yK610<ug2<i7>52zJ103=zf1=m6=4={I072>{i01:1<7<tH365?xh?080;6?uG2548yk>?:3:1>vF=479~j=>42909wE<;6:m<=2=838pD?:9;|l;<0<72;qC>984}o:;2?6=:rB98;5rn9:4>5<5sA8?:6sa89:94?4|@;>=7p`78883>7}O:=<0qc67a;296~N5<?1vb56m:181M43>2we45m50;0xL7213td34i4?:3yK610<ug23i7>52zJ103=zf12m6=4={I072>{i00:1<7<tH365?xh?180;6?uG2548yk>>:3:1>vF=479~j=?42909wE<;6:m<<2=838pD?:9;|l;=0<72;qC>984}o::2?6=:rB98;5rn9;4>5<5sA8?:6sa88:94?4|@;>=7p`79883>7}O:=<0qc66a;296~N5<?1vb57m:181M43>2we44m50;0xL7213td35i4?:3yK610<ug22i7>52zJ103=zf13m6=4={I072>{i0h:1<7<tH365?xh?i80;6?uG2548yk>f:3:1>vF=479~j=g42909wE<;6:m<d2=838pD?:9;|l;e0<72;qC>984}o:b2?6=:rB98;5rn9c4>5<5sA8?:6sa8`:94?4|@;>=7p`7a883>7}O:=<0qc6na;296~N5<?1vb5om:181M43>2we4lm50;0xL7213td3mi4?:3yK610<ug=??7>51zJ103=zf>3j6=4>{I072>{i?0h1<7?tH365?xh01j0;6<uG2548yk1>l3:1=vF=479~j2?b290:wE<;6:m3<`=83;pD?:9;|l4e5<728qC>984}o5b5?6=9rB98;5rn6c1>5<6sA8?:6sa7`194?7|@;>=7p`8a583>4}O:=<0qc9n5;295~N5<?1vb:o9:182M43>2we;l950;3xL7213td<m54?:0yK610<ug=j57>51zJ103=zf>kj6=4>{I072>{i?hh1<7?tH365?xh0ij0;6<uG2548yk1fl3:1=vF=479~j2gb290:wE<;6:m3d`=83;pD?:9;|l4f5<728qC>984}o5a5?6=9rB98;5rn6`1>5<6sA8?:6sa7c194?7|@;>=7p`8b583>4}O:=<0qc9m5;295~N5<?1vb:l9:182M43>2we;o950;3xL7213td<n54?:0yK610<ug=i57>51zJ103=zf>hj6=4>{I072>{i?kh1<7?tH365?xh0jj0;6<uG2548yk1el3:1=vF=479~j2db290:wE<;6:m3g`=83;pD?:9;|l4g5<728qC>984}o5`5?6=9rB98;5rn6a1>5<6sA8?:6sa7b194?7|@;>=7p`8c583>4}O:=<0qc9l5;295~N5<?1vb:m9:182M43>2we;n950;3xL7213td<o54?:0yK610<ug=h57>51zJ103=zf>ij6=4>{I072>{i?jh1<7?tH365?xh0kj0;6<uG2548yk1dl3:1=vF=479~j2eb290:wE<;6:m3f`=83;pD?:9;|l4`5<728qC>984}o5g5?6=9rB98;5rn6f1>5<6sA8?:6sa7e194?7|@;>=7p`8d583>4}O:=<0qc9k5;295~N5<?1vb:j9:182M43>2we;i950;3xL7213td<h54?:0yK610<ug=o57>51zJ103=zf>nj6=4>{I072>{i?mh1<7?tH365?xh0lj0;6<uG2548yk1cl3:1=vF=479~j2bb290:wE<;6:m3a`=83;pD?:9;|l4a5<728qC>984}o5f5?6=9rB98;5rn6g1>5<6sA8?:6sa7d194?7|@;>=7p`8e583>4}O:=<0qc9j5;295~N5<?1vb:k9:182M43>2we;h950;3xL7213td<i54?:0yK610<ug=n57>51zJ103=zf>oj6=4>{I072>{i?lh1<7?tH365?xh0mj0;6<uG2548yk1bl3:1=vF=479~j2cb290:wE<;6:m3``=83;pD?:9;|l4b5<728qC>984}o5e5?6=9rB98;5rn6d1>5<6sA8?:6sa7g194?7|@;>=7p`8f583>4}O:=<0qc9i5;295~N5<?1vb:h9:182M43>2we;k950;3xL7213td<j54?:0yK610<ug=m57>51zJ103=zf>lj6=4>{I072>{i?oh1<7?tH365?xh0nj0;6<uG2548yk1al3:1=vF=479~j2`b290:wE<;6:m3c`=83;pD?:9;|l;45<728qC>984}o:35?6=9rB98;5rn921>5<6sA8?:6sa81194?7|@;>=7p`70583>4}O:=<0qc6?5;295~N5<?1vb5>9:182M43>2we4=950;3xL7213td3<54?:0yK610<ug2;57>51zJ103=zf1:j6=4>{I072>{i09h1<7?tH365?xh?8j0;6<uG2548yk>7l3:1=vF=479~j=6b290:wE<;6:m<5`=83;pD?:9;|l;55<728qC>984}o:25?6=9rB98;5rn931>5<6sA8?:6sa80194?7|@;>=7p`71583>4}O:=<0qc6>5;295~N5<?1vb5?9:182M43>2we4<950;3xL7213td3=54?:0yK610<ug2:57>51zJ103=zf1;j6=4>{I072>{i08h1<7?tH365?xh?9j0;6<uG2548yk>6l3:1=vF=479~j=7b290:wE<;6:m<4`=83;pD?:9;|l;65<728qC>984}o:15?6=9rB98;5rn901>5<6sA8?:6sa83194?7|@;>=7p`72583>4}O:=<0qc6=5;295~N5<?1vb5<9:182M43>2we4?950;3xL7213td3>54?:0yK610<ug2957>51zJ103=zf18j6=4>{I072>{i0;h1<7?tH365?xh?:j0;6<uG2548yk>5l3:1=vF=479~j=4b290:wE<;6:m<7`=83;pD?:9;|l;75<728qC>984}o:05?6=9rB98;5rn911>5<6sA8?:6sa82194?7|@;>=7p`73583>4}O:=<0qc6<5;295~N5<?1vb5=9:182M43>2we4>950;3xL7213td3?54?:0yK610<ug2857>51zJ103=zf19j6=4>{I072>{i0:h1<7?tH365?xh?;j0;6<uG2548yk>4l3:1=vF=479~j=5b290:wE<;6:m<6`=83;pD?:9;|l;05<728qC>984}o:75?6=9rB98;5rn961>5<6sA8?:6sa85194?7|@;>=7p`74583>4}O:=<0qc6;5;295~N5<?1vb5:9:182M43>2we49950;3xL7213td3854?:0yK610<ug2?57>51zJ103=zf1>j6=4>{I072>{i0=h1<7?tH365?xh?<j0;6<uG2548yk>3l3:1=vF=479~j=2b290:wE<;6:m<1`=83;pD?:9;|l;15<728qC>984}o:65?6=9rB98;5rn971>5<6sA8?:6sa84194?7|@;>=7p`75583>4}O:=<0qc6:5;295~N5<?1vb5;9:182M43>2wvqpNOCz;`7?1fm?:m4pNOBz2~DEV|uIJ
\ No newline at end of file diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.v b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.v new file mode 100644 index 000000000..8a08330d5 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.v @@ -0,0 +1,165 @@ +/******************************************************************************* +*     This file is owned and controlled by Xilinx and must be used             * +*     solely for design, simulation, implementation and creation of            * +*     design files limited to Xilinx devices or technologies. Use              * +*     with non-Xilinx devices or technologies is expressly prohibited          * +*     and immediately terminates your license.                                 * +*                                                                              * +*     XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"            * +*     SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR                  * +*     XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION          * +*     AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION              * +*     OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS                * +*     IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,                  * +*     AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE         * +*     FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY                 * +*     WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE                  * +*     IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR           * +*     REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF          * +*     INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS          * +*     FOR A PARTICULAR PURPOSE.                                                * +*                                                                              * +*     Xilinx products are not intended for use in life support                 * +*     appliances, devices, or systems. Use in such applications are            * +*     expressly prohibited.                                                    * +*                                                                              * +*     (c) Copyright 1995-2007 Xilinx, Inc.                                     * +*     All rights reserved.                                                     * +*******************************************************************************/ +// The synthesis directives "translate_off/translate_on" specified below are +// supported by Xilinx, Mentor Graphics and Synplicity synthesis +// tools. Ensure they are correct for your synthesis tool(s). + +// You must compile the wrapper file fifo_xlnx_16x40_2clk.v when simulating +// the core, fifo_xlnx_16x40_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + +`timescale 1ns/1ps + +module fifo_xlnx_16x40_2clk( +	din, +	rd_clk, +	rd_en, +	rst, +	wr_clk, +	wr_en, +	dout, +	empty, +	full); + + +input [39 : 0] din; +input rd_clk; +input rd_en; +input rst; +input wr_clk; +input wr_en; +output [39 : 0] dout; +output empty; +output full; + +// synthesis translate_off + +      FIFO_GENERATOR_V4_3 #( +		.C_COMMON_CLOCK(0), +		.C_COUNT_TYPE(0), +		.C_DATA_COUNT_WIDTH(4), +		.C_DEFAULT_VALUE("BlankString"), +		.C_DIN_WIDTH(40), +		.C_DOUT_RST_VAL("0"), +		.C_DOUT_WIDTH(40), +		.C_ENABLE_RLOCS(0), +		.C_FAMILY("spartan3"), +		.C_FULL_FLAGS_RST_VAL(1), +		.C_HAS_ALMOST_EMPTY(0), +		.C_HAS_ALMOST_FULL(0), +		.C_HAS_BACKUP(0), +		.C_HAS_DATA_COUNT(0), +		.C_HAS_INT_CLK(0), +		.C_HAS_MEMINIT_FILE(0), +		.C_HAS_OVERFLOW(0), +		.C_HAS_RD_DATA_COUNT(0), +		.C_HAS_RD_RST(0), +		.C_HAS_RST(1), +		.C_HAS_SRST(0), +		.C_HAS_UNDERFLOW(0), +		.C_HAS_VALID(0), +		.C_HAS_WR_ACK(0), +		.C_HAS_WR_DATA_COUNT(0), +		.C_HAS_WR_RST(0), +		.C_IMPLEMENTATION_TYPE(2), +		.C_INIT_WR_PNTR_VAL(0), +		.C_MEMORY_TYPE(2), +		.C_MIF_FILE_NAME("BlankString"), +		.C_MSGON_VAL(1), +		.C_OPTIMIZATION_MODE(0), +		.C_OVERFLOW_LOW(0), +		.C_PRELOAD_LATENCY(0), +		.C_PRELOAD_REGS(1), +		.C_PRIM_FIFO_TYPE("512x72"), +		.C_PROG_EMPTY_THRESH_ASSERT_VAL(4), +		.C_PROG_EMPTY_THRESH_NEGATE_VAL(5), +		.C_PROG_EMPTY_TYPE(0), +		.C_PROG_FULL_THRESH_ASSERT_VAL(15), +		.C_PROG_FULL_THRESH_NEGATE_VAL(14), +		.C_PROG_FULL_TYPE(0), +		.C_RD_DATA_COUNT_WIDTH(4), +		.C_RD_DEPTH(16), +		.C_RD_FREQ(1), +		.C_RD_PNTR_WIDTH(4), +		.C_UNDERFLOW_LOW(0), +		.C_USE_DOUT_RST(1), +		.C_USE_ECC(0), +		.C_USE_EMBEDDED_REG(0), +		.C_USE_FIFO16_FLAGS(0), +		.C_USE_FWFT_DATA_COUNT(0), +		.C_VALID_LOW(0), +		.C_WR_ACK_LOW(0), +		.C_WR_DATA_COUNT_WIDTH(4), +		.C_WR_DEPTH(16), +		.C_WR_FREQ(1), +		.C_WR_PNTR_WIDTH(4), +		.C_WR_RESPONSE_LATENCY(1)) +	inst ( +		.DIN(din), +		.RD_CLK(rd_clk), +		.RD_EN(rd_en), +		.RST(rst), +		.WR_CLK(wr_clk), +		.WR_EN(wr_en), +		.DOUT(dout), +		.EMPTY(empty), +		.FULL(full), +		.CLK(), +		.INT_CLK(), +		.BACKUP(), +		.BACKUP_MARKER(), +		.PROG_EMPTY_THRESH(), +		.PROG_EMPTY_THRESH_ASSERT(), +		.PROG_EMPTY_THRESH_NEGATE(), +		.PROG_FULL_THRESH(), +		.PROG_FULL_THRESH_ASSERT(), +		.PROG_FULL_THRESH_NEGATE(), +		.RD_RST(), +		.SRST(), +		.WR_RST(), +		.ALMOST_EMPTY(), +		.ALMOST_FULL(), +		.DATA_COUNT(), +		.OVERFLOW(), +		.PROG_EMPTY(), +		.PROG_FULL(), +		.VALID(), +		.RD_DATA_COUNT(), +		.UNDERFLOW(), +		.WR_ACK(), +		.WR_DATA_COUNT(), +		.SBITERR(), +		.DBITERR()); + + +// synthesis translate_on + +endmodule + diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.veo b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.veo new file mode 100644 index 000000000..684078e58 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.veo @@ -0,0 +1,51 @@ +/******************************************************************************* +*     This file is owned and controlled by Xilinx and must be used             * +*     solely for design, simulation, implementation and creation of            * +*     design files limited to Xilinx devices or technologies. Use              * +*     with non-Xilinx devices or technologies is expressly prohibited          * +*     and immediately terminates your license.                                 * +*                                                                              * +*     XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"            * +*     SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR                  * +*     XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION          * +*     AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION              * +*     OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS                * +*     IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,                  * +*     AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE         * +*     FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY                 * +*     WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE                  * +*     IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR           * +*     REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF          * +*     INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS          * +*     FOR A PARTICULAR PURPOSE.                                                * +*                                                                              * +*     Xilinx products are not intended for use in life support                 * +*     appliances, devices, or systems. Use in such applications are            * +*     expressly prohibited.                                                    * +*                                                                              * +*     (c) Copyright 1995-2007 Xilinx, Inc.                                     * +*     All rights reserved.                                                     * +*******************************************************************************/ +// The following must be inserted into your Verilog file for this +// core to be instantiated. Change the instance name and port connections +// (in parentheses) to your own signal names. + +//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG +fifo_xlnx_16x40_2clk YourInstanceName ( +	.din(din), // Bus [39 : 0]  +	.rd_clk(rd_clk), +	.rd_en(rd_en), +	.rst(rst), +	.wr_clk(wr_clk), +	.wr_en(wr_en), +	.dout(dout), // Bus [39 : 0]  +	.empty(empty), +	.full(full)); + +// INST_TAG_END ------ End INSTANTIATION Template --------- + +// You must compile the wrapper file fifo_xlnx_16x40_2clk.v when simulating +// the core, fifo_xlnx_16x40_2clk. When compiling the wrapper file, be sure to +// reference the XilinxCoreLib Verilog simulation library. For detailed +// instructions, please refer to the "CORE Generator Help". + diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.xco b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.xco new file mode 100644 index 000000000..d0da5a6e8 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk.xco @@ -0,0 +1,82 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Tue May 11 20:27:53 2010 +# +############################################################## +# +#  This file contains the customisation parameters for a +#  Xilinx CORE Generator IP GUI. It is strongly recommended +#  that you do not manually alter this file as it may cause +#  unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = Verilog +SET device = xc3s2000 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = fg456 +SET removerpms = False +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = True +SET vhdlsim = False +# END Project Options +# BEGIN Select +SELECT Fifo_Generator family Xilinx,_Inc. 4.3 +# END Select +# BEGIN Parameters +CSET almost_empty_flag=false +CSET almost_full_flag=false +CSET component_name=fifo_xlnx_16x40_2clk +CSET data_count=false +CSET data_count_width=4 +CSET disable_timing_violations=false +CSET dout_reset_value=0 +CSET empty_threshold_assert_value=4 +CSET empty_threshold_negate_value=5 +CSET enable_ecc=false +CSET enable_int_clk=false +CSET fifo_implementation=Independent_Clocks_Distributed_RAM +CSET full_flags_reset_value=1 +CSET full_threshold_assert_value=15 +CSET full_threshold_negate_value=14 +CSET input_data_width=40 +CSET input_depth=16 +CSET output_data_width=40 +CSET output_depth=16 +CSET overflow_flag=false +CSET overflow_sense=Active_High +CSET performance_options=First_Word_Fall_Through +CSET programmable_empty_type=No_Programmable_Empty_Threshold +CSET programmable_full_type=No_Programmable_Full_Threshold +CSET read_clock_frequency=1 +CSET read_data_count=false +CSET read_data_count_width=4 +CSET reset_pin=true +CSET reset_type=Asynchronous_Reset +CSET underflow_flag=false +CSET underflow_sense=Active_High +CSET use_dout_reset=true +CSET use_embedded_registers=false +CSET use_extra_logic=false +CSET valid_flag=false +CSET valid_sense=Active_High +CSET write_acknowledge_flag=false +CSET write_acknowledge_sense=Active_High +CSET write_clock_frequency=1 +CSET write_data_count=false +CSET write_data_count_width=4 +# END Parameters +GENERATE +# CRC: 6bcb05e1 + diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt new file mode 100644 index 000000000..544bda31d --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<document OS="lin64" product="ISE" version="10.1.03"> + +  <!--The data in this file is primarily intended for consumption by Xilinx tools. +    The structure and the elements are likely to change over the next few releases. +    This means code written to parse this file will need to be revisited each subsequent release.--> + +  <application stringID="Xst" timeStamp="Tue May 11 13:27:35 2010"> +    <section stringID="XST_HDL_SYNTHESIS_REPORT"> +      <item dataType="int" stringID="XST_RAMS" value="1"></item> +      <item dataType="int" stringID="XST_COUNTERS" value="2"> +        <item dataType="int" stringID="XST_4BIT_UP_COUNTER" value="2"/> +      </item> +      <item dataType="int" stringID="XST_REGISTERS" value="30"> +        <item dataType="int" stringID="XST_1BIT_REGISTER" value="15"/> +        <item dataType="int" stringID="XST_2BIT_REGISTER" value="1"/> +        <item dataType="int" stringID="XST_3BIT_REGISTER" value="1"/> +        <item dataType="int" stringID="XST_4BIT_REGISTER" value="11"/> +      </item> +      <item dataType="int" stringID="XST_XORS" value="28"> +        <item dataType="int" stringID="XST_1BIT_XOR2" value="28"/> +      </item> +    </section> +    <section stringID="XST_ADVANCED_HDL_SYNTHESIS_REPORT"> +      <item dataType="int" stringID="XST_FSMS" value="1"/> +      <item dataType="int" stringID="XST_RAMS" value="1"></item> +      <item dataType="int" stringID="XST_COUNTERS" value="2"> +        <item dataType="int" stringID="XST_4BIT_UP_COUNTER" value="2"/> +      </item> +      <item dataType="int" stringID="XST_REGISTERS" value="144"> +        <item dataType="int" stringID="XST_FLIPFLOPS" value="144"/> +      </item> +      <item dataType="int" stringID="XST_XORS" value="28"> +        <item dataType="int" stringID="XST_1BIT_XOR2" value="28"/> +      </item> +    </section> +    <section stringID="XST_FINAL_REGISTER_REPORT"> +      <item dataType="int" stringID="XST_REGISTERS" value="150"> +        <item dataType="int" stringID="XST_FLIPFLOPS" value="150"/> +      </item> +    </section> +    <section stringID="XST_PARTITION_REPORT"> +      <section stringID="XST_PARTITION_IMPLEMENTATION_STATUS"> +        <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> +      </section> +    </section> +    <section stringID="XST_FINAL_REPORT"> +      <section stringID="XST_FINAL_RESULTS"> +        <item stringID="XST_TOP_LEVEL_OUTPUT_FILE_NAME" value="/home/matt/coregen/tmp/_cg/fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc"/> +        <item stringID="XST_OUTPUT_FORMAT" value="NGC"/> +        <item stringID="XST_OPTIMIZATION_GOAL" value="SPEED"/> +        <item stringID="XST_KEEP_HIERARCHY" value="no"/> +      </section> +      <section stringID="XST_DESIGN_STATISTICS"> +        <item stringID="XST_IOS" value="140"/> +      </section> +      <section stringID="XST_CELL_USAGE"> +        <item dataType="int" stringID="XST_BELS" value="42"> +          <item dataType="int" stringID="XST_GND" value="1"/> +          <item dataType="int" stringID="XST_INV" value="2"/> +          <item dataType="int" stringID="XST_LUT2" value="14"/> +          <item dataType="int" stringID="XST_LUT3" value="7"/> +          <item dataType="int" stringID="XST_LUT4" value="16"/> +          <item dataType="int" stringID="XST_LUT4L" value="2"/> +        </item> +        <item dataType="int" stringID="XST_FLIPFLOPSLATCHES" value="150"> +          <item dataType="int" stringID="XST_FD" value="4"/> +          <item dataType="int" stringID="XST_FDC" value="34"/> +          <item dataType="int" stringID="XST_FDCE" value="97"/> +          <item dataType="int" stringID="XST_FDP" value="10"/> +          <item dataType="int" stringID="XST_FDPE" value="5"/> +        </item> +        <item dataType="int" stringID="XST_RAMS" value="40"> +          <item dataType="int" stringID="XST_RAM16X1D" value="40"/> +        </item> +      </section> +    </section> +    <section stringID="XST_DEVICE_UTILIZATION_SUMMARY"> +      <item stringID="XST_SELECTED_DEVICE" value="3s2000fg456-5"/> +      <item AVAILABLE="20480" dataType="int" stringID="XST_NUMBER_OF_SLICES" value="127"/> +      <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_SLICE_FLIP_FLOPS" value="150"/> +      <item AVAILABLE="40960" dataType="int" stringID="XST_NUMBER_OF_4_INPUT_LUTS" value="121"/> +      <item dataType="int" stringID="XST_NUMBER_USED_AS_LOGIC" value="41"/> +      <item dataType="int" stringID="XST_NUMBER_USED_AS_RAMS" value="80"/> +      <item dataType="int" stringID="XST_NUMBER_OF_IOS" value="140"/> +      <item AVAILABLE="333" dataType="int" stringID="XST_NUMBER_OF_BONDED_IOBS" value="0"/> +    </section> +    <section stringID="XST_PARTITION_RESOURCE_SUMMARY"> +      <section stringID="XST_NO_PARTITIONS_WERE_FOUND_IN_THIS_DESIGN"/> +    </section> +    <section stringID="XST_ERRORS_STATISTICS"> +      <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_ERRORS" value="0"/> +      <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_WARNINGS" value="74"/> +      <item dataType="int" filtered="0" stringID="XST_NUMBER_OF_INFOS" value="9"/> +    </section> +  </application> + +</document> diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_flist.txt b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_flist.txt new file mode 100644 index 000000000..c38f4e991 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_flist.txt @@ -0,0 +1,8 @@ +# Output products list for <fifo_xlnx_16x40_2clk> +fifo_xlnx_16x40_2clk.ngc +fifo_xlnx_16x40_2clk.v +fifo_xlnx_16x40_2clk.veo +fifo_xlnx_16x40_2clk.xco +fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +fifo_xlnx_16x40_2clk_flist.txt +fifo_xlnx_16x40_2clk_xmdf.tcl diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_readme.txt b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_readme.txt new file mode 100644 index 000000000..bbcd4af79 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_readme.txt @@ -0,0 +1,39 @@ +The following files were generated for 'fifo_xlnx_16x40_2clk' in directory  +/home/matt/sourcerepo/fpga/usrp2/coregen/: + +fifo_xlnx_16x40_2clk.ngc: +   Binary Xilinx implementation netlist file containing the information +   required to implement the module in a Xilinx (R) FPGA. + +fifo_xlnx_16x40_2clk.v: +   Verilog wrapper file provided to support functional simulation. +   This file contains simulation model customization data that is +   passed to a parameterized simulation model for the core. + +fifo_xlnx_16x40_2clk.veo: +   VEO template file containing code that can be used as a model for +   instantiating a CORE Generator module in a Verilog design. + +fifo_xlnx_16x40_2clk.xco: +   CORE Generator input file containing the parameters used to +   regenerate a core. + +fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt: +   Please see the core data sheet. + +fifo_xlnx_16x40_2clk_flist.txt: +   Text file listing all of the output files produced when a customized +   core was generated in the CORE Generator. + +fifo_xlnx_16x40_2clk_readme.txt: +   Text file indicating the files generated and how they are used. + +fifo_xlnx_16x40_2clk_xmdf.tcl: +   ISE Project Navigator interface file. ISE uses this file to determine +   how the files output by CORE Generator for the core can be integrated +   into your ISE project. + + +Please see the Xilinx CORE Generator online help for further details on +generated files and how to use them. + diff --git a/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_xmdf.tcl b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_xmdf.tcl new file mode 100644 index 000000000..2b4824831 --- /dev/null +++ b/fpga/usrp2/coregen/fifo_xlnx_16x40_2clk_xmdf.tcl @@ -0,0 +1,68 @@ +# The package naming convention is <core_name>_xmdf +package provide fifo_xlnx_16x40_2clk_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is <core_name>_xmdf +namespace eval ::fifo_xlnx_16x40_2clk_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::fifo_xlnx_16x40_2clk_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: <module_name> +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name fifo_xlnx_16x40_2clk +} +# ::fifo_xlnx_16x40_2clk_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::fifo_xlnx_16x40_2clk_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk.v +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk.veo +utilities_xmdf::xmdfSetData $instance FileSet $fcount type verilog_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk_fifo_generator_v4_3_xst_1.ngc_xst.xrpt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path fifo_xlnx_16x40_2clk_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module fifo_xlnx_16x40_2clk +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/fpga/usrp2/top/u2_core/u2_core.v b/fpga/usrp2/top/u2_core/u2_core.v index cd0199005..b57e4f127 100644 --- a/fpga/usrp2/top/u2_core/u2_core.v +++ b/fpga/usrp2/top/u2_core/u2_core.v @@ -154,9 +154,9 @@ module u2_core     localparam SERDES_TX_FIFOSIZE = 9;     localparam SERDES_RX_FIFOSIZE = 9;  // RX currently doesn't use a fifo? -   wire [7:0] 	set_addr; -   wire [31:0] 	set_data; -   wire 	set_stb; +   wire [7:0] 	set_addr, set_addr_dsp; +   wire [31:0] 	set_data, set_data_dsp; +   wire 	set_stb, set_stb_dsp;     wire 	ram_loader_done;     wire 	ram_loader_rst, wb_rst, dsp_rst; @@ -359,7 +359,7 @@ module u2_core        .wb_dat_o(s1_dat_i),.wb_ack_o(s1_ack),.wb_err_o(),.wb_rty_o(),        .stream_clk(dsp_clk), .stream_rst(dsp_rst), -      .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), +      .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp),        .status(status),.sys_int_o(buffer_int),        .s0(status_b0),.s1(status_b1),.s2(status_b2),.s3(status_b3), @@ -454,7 +454,7 @@ module u2_core     udp_wrapper #(.BASE(SR_UDP_SM)) udp_wrapper       (.clk(dsp_clk), .reset(dsp_rst), .clear(0), -      .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), +      .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp),        .rx_f19_data(rx_f19_data), .rx_f19_src_rdy_i(rx_f19_src_rdy), .rx_f19_dst_rdy_o(rx_f19_dst_rdy),        .tx_f19_data(tx_f19_data), .tx_f19_src_rdy_o(tx_f19_src_rdy), .tx_f19_dst_rdy_i(tx_f19_dst_rdy),        .rx_f36_data(udp_rx_data), .rx_f36_src_rdy_o(udp_rx_src_rdy), .rx_f36_dst_rdy_i(udp_rx_dst_rdy), @@ -476,10 +476,14 @@ module u2_core     settings_bus settings_bus       (.wb_clk(wb_clk),.wb_rst(wb_rst),.wb_adr_i(s7_adr),.wb_dat_i(s7_dat_o),        .wb_stb_i(s7_stb),.wb_we_i(s7_we),.wb_ack_o(s7_ack), -      .sys_clk(dsp_clk),.strobe(set_stb),.addr(set_addr),.data(set_data)); +      .strobe(set_stb),.addr(set_addr),.data(set_data));     assign 	 s7_dat_i = 32'd0; +   settings_bus_crossclock settings_bus_crossclock +     (.clk_i(wb_clk), .rst_i(wb_rst), .set_stb_i(set_stb), .set_addr_i(set_addr), .set_data_i(set_data), +      .clk_o(dsp_clk), .rst_o(dsp_rst), .set_stb_o(set_stb_dsp), .set_addr_o(set_addr_dsp), .set_data_o(set_data_dsp)); +           // Output control lines     wire [7:0] 	 clock_outs, serdes_outs, adc_outs;     assign 	 {clock_ready, clk_en[1:0], clk_sel[1:0]} = clock_outs[4:0]; @@ -600,7 +604,7 @@ module u2_core     dsp_core_rx #(.BASE(SR_RX_DSP)) dsp_core_rx       (.clk(dsp_clk),.rst(dsp_rst), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .adc_a(adc_a),.adc_ovf_a(adc_ovf_a),.adc_b(adc_b),.adc_ovf_b(adc_ovf_b),        .sample(sample_rx), .run(run_rx_d1), .strobe(strobe_rx),        .debug(debug_rx_dsp) ); @@ -609,7 +613,7 @@ module u2_core     vita_rx_control #(.BASE(SR_RX_CTRL), .WIDTH(32)) vita_rx_control       (.clk(dsp_clk), .reset(dsp_rst), .clear(0), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .vita_time(vita_time), .overrun(overrun),        .sample(sample_rx), .run(run_rx), .strobe(strobe_rx),        .sample_fifo_o(rx_data), .sample_fifo_dst_rdy_i(rx_dst_rdy), .sample_fifo_src_rdy_o(rx_src_rdy), @@ -619,7 +623,7 @@ module u2_core     vita_rx_framer #(.BASE(SR_RX_CTRL), .MAXCHAN(1)) vita_rx_framer       (.clk(dsp_clk), .reset(dsp_rst), .clear(0), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .sample_fifo_i(rx_data), .sample_fifo_dst_rdy_o(rx_dst_rdy), .sample_fifo_src_rdy_i(rx_src_rdy),        .data_o(rx1_data), .dst_rdy_i(rx1_dst_rdy), .src_rdy_o(rx1_src_rdy),        .fifo_occupied(), .fifo_full(), .fifo_empty(), @@ -646,14 +650,14 @@ module u2_core     vita_tx_deframer #(.BASE(SR_TX_CTRL), .MAXCHAN(1)) vita_tx_deframer       (.clk(dsp_clk), .reset(dsp_rst), .clear(0), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .data_i(tx_data), .src_rdy_i(tx_src_rdy), .dst_rdy_o(tx_dst_rdy),        .sample_fifo_o(tx1_data), .sample_fifo_src_rdy_o(tx1_src_rdy), .sample_fifo_dst_rdy_i(tx1_dst_rdy),        .debug(debug_vtd) );     vita_tx_control #(.BASE(SR_TX_CTRL), .WIDTH(32)) vita_tx_control       (.clk(dsp_clk), .reset(dsp_rst), .clear(0), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .vita_time(vita_time),.underrun(underrun),        .sample_fifo_i(tx1_data), .sample_fifo_src_rdy_i(tx1_src_rdy), .sample_fifo_dst_rdy_o(tx1_dst_rdy),        .sample(sample_tx), .run(run_tx), .strobe(strobe_tx), @@ -663,7 +667,7 @@ module u2_core     dsp_core_tx #(.BASE(SR_TX_DSP)) dsp_core_tx       (.clk(dsp_clk),.rst(dsp_rst), -      .set_stb(set_stb),.set_addr(set_addr),.set_data(set_data), +      .set_stb(set_stb_dsp),.set_addr(set_addr_dsp),.set_data(set_data_dsp),        .sample(sample_tx), .run(run_tx), .strobe(strobe_tx),        .dac_a(dac_a),.dac_b(dac_b),        .debug(debug_tx_dsp) ); @@ -720,7 +724,7 @@ module u2_core     // VITA Timing     time_64bit #(.TICKS_PER_SEC(32'd100000000),.BASE(SR_TIME64)) time_64bit -     (.clk(dsp_clk), .rst(dsp_rst), .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data), +     (.clk(dsp_clk), .rst(dsp_rst), .set_stb(set_stb_dsp), .set_addr(set_addr_dsp), .set_data(set_data_dsp),        .pps(pps_in), .vita_time(vita_time), .pps_int(pps_int));     // ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/fpga/usrp2/top/u2_rev1/.gitignore b/fpga/usrp2/top/u2_rev1/.gitignore deleted file mode 100644 index de5b50277..000000000 --- a/fpga/usrp2/top/u2_rev1/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -/templates -/netgen -/_ngo -/_xmsgs -/_pace.ucf -/*.cmd -/*.ibs -/*.lfp -/*.mfp -/*.bit -/*.bin -/*.stx -/*.par -/*.unroutes -/*.ntrc_log -/*.ngr -/*.mrp -/*.html -/*.lso -/*.twr -/*.bld -/*.ncd -/*.txt -/*.cmd_log -/*.drc -/*.map -/*.twr -/*.xml -/*.syr -/*.ngm -/*.xst -/*.csv -/*.html -/*.lock -/*.ncd -/*.twx -/*.ise_ISE_Backup -/*.xml -/*.ut -/*.xpi -/*.ngd -/*.ncd -/*.pad -/*.bgn -/*.ngc -/*.pcf -/*.ngd -/xst -/*.log -/*.rpt -/*.cel -/*.restore diff --git a/fpga/usrp2/top/u2_rev1/Makefile b/fpga/usrp2/top/u2_rev1/Makefile deleted file mode 100644 index b3245d883..000000000 --- a/fpga/usrp2/top/u2_rev1/Makefile +++ /dev/null @@ -1,129 +0,0 @@ -FILENAME=u2_fpga_top -PARTNUM=xc3s1500-5fg456 - -all: project command xst ngd ncd ncd2 bit  - -xst:  -	xst -ifn ${FILENAME}.cmd -ofn xst.log - -ngd:  -	ngdbuild -nt timestamp -p ${PARTNUM} ${FILENAME} - -ncd:  -	rm -rf ${FILENAME}.ncd -	map -detail -cm speed -k 8 -retiming on -equivalent_register_removal on -timing -ol high -pr b -p ${PARTNUM} ${FILENAME}.ngd -o ${FILENAME}.ncd ${FILENAME}.pcf - -# Place and route ncd file into new ncd file -ncd2:	 -	par -ol high -xe n -w ${FILENAME}.ncd ${FILENAME} ${FILENAME}.pcf - -bit:	 -	bitgen -w ${FILENAME}.ncd -b ${FILENAME}.bit - -clean: -	@rm -rf ${FILENAME}.ngc *.lst *.bit *.lso *.xst *.stx *.syr \ -	*.ngr *.cmd_log _ngc _xmsgs xst *.html *.srp \ -	*.blc *.bld *.ise_ISE_Backup *~ \ -	*.pad *.ngm *.ngd *.par *.pcf *.unroutes     \ -	*.xpi *.bgn *.drc *.bin *.mrp *.csv *.txt    \ -	*.rbt *.ncd ${FILENAME} *_cg templates/ tmp/ \ -        output.dat coregen.log *.ngo *.log ${FILENAME}.map \ -	${FILENAME}_summary.xml ${FILENAME}_usage.xml ${FILENAME}.twr - -command: -	rm -rf ${FILENAME}.cmd -	@echo "identification"       >> ${FILENAME}.cmd -	@echo "status"               >> ${FILENAME}.cmd -	@echo "time short"           >> ${FILENAME}.cmd -	@echo "memory on"            >> ${FILENAME}.cmd -	@echo "run "	             >> ${FILENAME}.cmd -	@echo "-top ${FILENAME}"     >> ${FILENAME}.cmd -	@echo "-ifn ${FILENAME}.prj" >> ${FILENAME}.cmd -	@echo "-ifmt Verilog "       >> ${FILENAME}.cmd -	@echo "-ofn ${FILENAME} "    >> ${FILENAME}.cmd -	@echo "-p ${PARTNUM}"        >> ${FILENAME}.cmd -	@echo "-bufg 6"              >> ${FILENAME}.cmd -	@echo "-vlgincdir { ../../opencores/i2c/rtl/verilog ../../eth/rtl/verilog/ ../../opencores/spi/rtl/verilog}"  >> ${FILENAME}.cmd - -project: -	rm -f ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/TECH/duram.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/sign_extend.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cordic_stage.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cic_int_shifter.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cic_dec_shifter.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v" '   	>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_regfile.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_fetch.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_decode.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_control.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_aslu.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/miim/eth_shiftreg.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/miim/eth_outputcontrol.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/miim/eth_clockgen.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/TECH/eth_clk_switch.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/TECH/eth_clk_div2.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/Reg_int.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/RMON/RMON_dpram.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/RMON/RMON_ctrl.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/RMON/RMON_addr_gen.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/flow_ctrl.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/Ramdon_gen.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/MAC_tx_FF.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx/CRC_gen.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx/MAC_rx_FF.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx/CRC_chk.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx/Broadcast_filter.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../control_lib/ram_2port.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cordic.v" '   					>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cic_interp.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/cic_decim.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../opencores/spi/rtl/verilog/spi_shift.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/spi/rtl/verilog/spi_clgen.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v" '   	>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_core.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/eth_miim.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/RMON.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/Phy_int.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_tx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_rx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/Clk_ctrl.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/strobe_gen.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/ss_rcvr.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/shortfifo.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/setting_reg.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/mux8.v" '   					>> ${FILENAME}.prj -	@echo '`include "../../control_lib/mux4.v" '   					>> ${FILENAME}.prj -	@echo '`include "../../control_lib/longfifo.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/decoder_3_8.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/buffer_int.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/CRC16_D16.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/tx_control.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/rx_control.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/dsp_core_tx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../sdr_lib/dsp_core_rx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../opencores/spi/rtl/verilog/spi_top.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/simple_pic/rtl/simple_pic.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/i2c/rtl/verilog/i2c_master_top.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../opencores/aemb/rtl/verilog/aeMB_core_BE.v" '   		>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/MAC_top.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/mac_txfifo_int.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../eth/mac_rxfifo_int.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/wb_readback_mux.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../control_lib/wb_1master.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/timer.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/system_control.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../control_lib/settings_bus.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/serdes_tx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/serdes_rx.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/ram_wb_harvard.v" '   			>> ${FILENAME}.prj -	@echo '`include "../../control_lib/ram_loader.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/nsgpio.v" '   				>> ${FILENAME}.prj -	@echo '`include "../../control_lib/buffer_pool.v" '   				>> ${FILENAME}.prj -	@echo '`include "../u2_basic/u2_basic.v" '   					>> ${FILENAME}.prj -	@echo '`include "u2_fpga_top.v" '   						>> ${FILENAME}.prj -	@echo '`include "../../eth/rtl/verilog/elastic_buffer.v" '   			>> ${FILENAME}.prj diff --git a/fpga/usrp2/top/u2_rev1/u2_fpga.ise b/fpga/usrp2/top/u2_rev1/u2_fpga.ise Binary files differdeleted file mode 100644 index f90caf024..000000000 --- a/fpga/usrp2/top/u2_rev1/u2_fpga.ise +++ /dev/null diff --git a/fpga/usrp2/top/u2_rev1/u2_fpga.ucf b/fpga/usrp2/top/u2_rev1/u2_fpga.ucf deleted file mode 100755 index 5d2124819..000000000 --- a/fpga/usrp2/top/u2_rev1/u2_fpga.ucf +++ /dev/null @@ -1,341 +0,0 @@ -NET "adc_a[0]"  LOC = "A14"  ; -NET "adc_a[10]"  LOC = "D20"  ; -NET "adc_a[11]"  LOC = "D19"  ; -NET "adc_a[12]"  LOC = "D21"  ; -NET "adc_a[13]"  LOC = "E18"  ; -NET "adc_a[1]"  LOC = "B14"  ; -NET "adc_a[2]"  LOC = "C13"  ; -NET "adc_a[3]"  LOC = "D13"  ; -NET "adc_a[4]"  LOC = "A13"  ; -NET "adc_a[5]"  LOC = "B13"  ; -NET "adc_a[6]"  LOC = "E12"  ; -NET "adc_a[7]"  LOC = "C22"  ; -NET "adc_a[8]"  LOC = "C20"  ; -NET "adc_a[9]"  LOC = "C21"  ; -NET "adc_b[0]"  LOC = "A12"  ; -NET "adc_b[10]"  LOC = "D18"  ; -NET "adc_b[11]"  LOC = "B18"  ; -NET "adc_b[12]"  LOC = "D17"  ; -NET "adc_b[13]"  LOC = "E17"  ; -NET "adc_b[1]"  LOC = "E16"  ; -NET "adc_b[2]"  LOC = "F12"  ; -NET "adc_b[3]"  LOC = "F13"  ; -NET "adc_b[4]"  LOC = "F16"  ; -NET "adc_b[5]"  LOC = "F17"  ; -NET "adc_b[6]"  LOC = "C19"  ; -NET "adc_b[7]"  LOC = "B20"  ; -NET "adc_b[8]"  LOC = "B19"  ; -NET "adc_b[9]"  LOC = "C18"  ; -NET "clk_en[0]"  LOC = "C4"  ; -NET "clk_en[1]"  LOC = "D1"  ; -NET "clk_sel[0]"  LOC = "C3"  ; -NET "clk_sel[1]"  LOC = "C2"  ; -NET "dac_a[0]"  LOC = "A5"  ; -NET "dac_a[10]"  LOC = "L2"  ; -NET "dac_a[11]"  LOC = "L4"  ; -NET "dac_a[12]"  LOC = "L3"  ; -NET "dac_a[13]"  LOC = "L6"  ; -NET "dac_a[14]"  LOC = "L5"  ; -NET "dac_a[15]"  LOC = "K2"  ; -NET "dac_a[1]"  LOC = "B5"  ; -NET "dac_a[2]"  LOC = "C5"  ; -NET "dac_a[3]"  LOC = "D5"  ; -NET "dac_a[4]"  LOC = "A4"  ; -NET "dac_a[5]"  LOC = "B4"  ; -NET "dac_a[6]"  LOC = "F6"  ; -NET "dac_a[7]"  LOC = "D10"  ; -NET "dac_a[8]"  LOC = "D9"  ; -NET "dac_a[9]"  LOC = "A10"  ; -NET "dac_b[0]"  LOC = "D11"  ; -NET "dac_b[10]"  LOC = "F9"  ; -NET "dac_b[11]"  LOC = "A8"  ; -NET "dac_b[12]"  LOC = "B8"  ; -NET "dac_b[13]"  LOC = "D7"  ; -NET "dac_b[14]"  LOC = "E7"  ; -NET "dac_b[15]"  LOC = "B6"  ; -NET "dac_b[1]"  LOC = "E11"  ; -NET "dac_b[2]"  LOC = "F11"  ; -NET "dac_b[3]"  LOC = "B10"  ; -NET "dac_b[4]"  LOC = "C10"  ; -NET "dac_b[5]"  LOC = "E10"  ; -NET "dac_b[6]"  LOC = "F10"  ; -NET "dac_b[7]"  LOC = "A9"  ; -NET "dac_b[8]"  LOC = "B9"  ; -NET "dac_b[9]"  LOC = "E9"  ; -NET "debug[0]"  LOC = "N5"  ; -NET "debug[10]"  LOC = "R4"  ; -NET "debug[11]"  LOC = "T3"  ; -NET "debug[12]"  LOC = "U3"  ; -NET "debug[13]"  LOC = "M2"  ; -NET "debug[14]"  LOC = "M3"  ; -NET "debug[15]"  LOC = "M4"  ; -NET "debug[16]"  LOC = "M5"  ; -NET "debug[17]"  LOC = "M6"  ; -NET "debug[18]"  LOC = "N1"  ; -NET "debug[19]"  LOC = "N2"  ; -NET "debug[1]"  LOC = "N6"  ; -NET "debug[20]"  LOC = "N3"  ; -NET "debug[21]"  LOC = "T1"  ; -NET "debug[22]"  LOC = "T2"  ; -NET "debug[23]"  LOC = "U2"  ; -NET "debug[24]"  LOC = "T4"  ; -NET "debug[25]"  LOC = "U4"  ; -NET "debug[26]"  LOC = "T5"  ; -NET "debug[27]"  LOC = "T6"  ; -NET "debug[28]"  LOC = "U5"  ; -NET "debug[29]"  LOC = "V5"  ; -NET "debug[2]"  LOC = "P1"  ; -NET "debug[30]"  LOC = "W2"  ; -NET "debug[31]"  LOC = "W3"  ; -NET "debug[3]"  LOC = "P2"  ; -NET "debug[4]"  LOC = "P4"  ; -NET "debug[5]"  LOC = "P5"  ; -NET "debug[6]"  LOC = "R1"  ; -NET "debug[7]"  LOC = "R2"  ; -NET "debug[8]"  LOC = "P6"  ; -NET "debug[9]"  LOC = "R5"  ; -NET "debug_clk[0]"  LOC = "N4"  ; -NET "debug_clk[1]"  LOC = "M1"  ; -NET "GMII_RXD[0]"  LOC = "AA15"  ; -NET "GMII_RXD[1]"  LOC = "AB15"  ; -NET "GMII_RXD[2]"  LOC = "U14"  ; -NET "GMII_RXD[3]"  LOC = "V14"  ; -NET "GMII_RXD[4]"  LOC = "U13"  ; -NET "GMII_RXD[5]"  LOC = "V13"  ; -NET "GMII_RXD[6]"  LOC = "Y13"  ; -NET "GMII_RXD[7]"  LOC = "AA13"  ; -NET "GMII_TXD[0]"  LOC = "W14"  ; -NET "GMII_TXD[1]"  LOC = "AA20"  ; -NET "GMII_TXD[2]"  LOC = "AB20"  ; -NET "GMII_TXD[3]"  LOC = "Y18"  ; -NET "GMII_TXD[4]"  LOC = "AA18"  ; -NET "GMII_TXD[5]"  LOC = "AB18"  ; -NET "GMII_TXD[6]"  LOC = "V17"  ; -NET "GMII_TXD[7]"  LOC = "W17"  ; -NET "io_rx[0]"  LOC = "L21"  ; -NET "io_rx[10]"  LOC = "F21"  ; -NET "io_rx[11]"  LOC = "F20"  ; -NET "io_rx[12]"  LOC = "G19"  ; -NET "io_rx[13]"  LOC = "G18"  ; -NET "io_rx[14]"  LOC = "G17"  ; -NET "io_rx[15]"  LOC = "E22"  ; -NET "io_rx[1]"  LOC = "L20"  ; -NET "io_rx[2]"  LOC = "L19"  ; -NET "io_rx[3]"  LOC = "L18"  ; -NET "io_rx[4]"  LOC = "L17"  ; -NET "io_rx[5]"  LOC = "K22"  ; -NET "io_rx[6]"  LOC = "K21"  ; -NET "io_rx[7]"  LOC = "K20"  ; -NET "io_rx[8]"  LOC = "G22"  ; -NET "io_rx[9]"  LOC = "G21"  ; -NET "io_tx[0]"  LOC = "K4"  ; -NET "io_tx[10]"  LOC = "E1"  ; -NET "io_tx[11]"  LOC = "E3"  ; -NET "io_tx[12]"  LOC = "F4"  ; -NET "io_tx[13]"  LOC = "D2"  ; -NET "io_tx[14]"  LOC = "D4"  ; -NET "io_tx[15]"  LOC = "E4"  ; -NET "io_tx[1]"  LOC = "K3"  ; -NET "io_tx[2]"  LOC = "G1"  ; -NET "io_tx[3]"  LOC = "G5"  ; -NET "io_tx[4]"  LOC = "H5"  ; -NET "io_tx[5]"  LOC = "F3"  ; -NET "io_tx[6]"  LOC = "F2"  ; -NET "io_tx[7]"  LOC = "F5"  ; -NET "io_tx[8]"  LOC = "G6"  ; -NET "io_tx[9]"  LOC = "E2"  ; -NET "RAM_A[0]"  LOC = "N22"  ; -NET "RAM_A[10]"  LOC = "P18"  ; -NET "RAM_A[11]"  LOC = "R19"  ; -NET "RAM_A[12]"  LOC = "P19"  ; -NET "RAM_A[13]"  LOC = "R21"  ; -NET "RAM_A[14]"  LOC = "R22"  ; -NET "RAM_A[15]"  LOC = "T19"  ; -NET "RAM_A[16]"  LOC = "T20"  ; -NET "RAM_A[17]"  LOC = "U20"  ; -NET "RAM_A[18]"  LOC = "W19"  ; -NET "RAM_A[1]"  LOC = "N20"  ; -NET "RAM_A[2]"  LOC = "T21"  ; -NET "RAM_A[3]"  LOC = "M22"  ; -NET "RAM_A[4]"  LOC = "N19"  ; -NET "RAM_A[5]"  LOC = "N17"  ; -NET "RAM_A[6]"  LOC = "N18"  ; -NET "RAM_A[7]"  LOC = "P21"  ; -NET "RAM_A[8]"  LOC = "P22"  ; -NET "RAM_A[9]"  LOC = "P17"  ; -NET "RAM_D[0]"  LOC = "Y21"  ; -NET "RAM_D[10]"  LOC = "V22"  ; -NET "RAM_D[11]"  LOC = "V21"  ; -NET "RAM_D[12]"  LOC = "T17"  ; -NET "RAM_D[13]"  LOC = "U18"  ; -NET "RAM_D[14]"  LOC = "U21"  ; -NET "RAM_D[15]"  LOC = "R18"  ; -NET "RAM_D[16]"  LOC = "T18"  ; -NET "RAM_D[17]"  LOC = "T22"  ; -NET "RAM_D[1]"  LOC = "Y20"  ; -NET "RAM_D[2]"  LOC = "Y19"  ; -NET "RAM_D[3]"  LOC = "W22"  ; -NET "RAM_D[4]"  LOC = "Y22"  ; -NET "RAM_D[5]"  LOC = "V19"  ; -NET "RAM_D[6]"  LOC = "W21"  ; -NET "RAM_D[7]"  LOC = "W20"  ; -NET "RAM_D[8]"  LOC = "U19"  ; -NET "RAM_D[9]"  LOC = "V20"  ; -NET "ser_r[0]"  LOC = "AB10"  ; -NET "ser_r[10]"  LOC = "W10"  ; -NET "ser_r[11]"  LOC = "Y1"  ; -NET "ser_r[12]"  LOC = "Y3"  ; -NET "ser_r[13]"  LOC = "Y2"  ; -NET "ser_r[14]"  LOC = "W4"  ; -NET "ser_r[15]"  LOC = "W1"  ; -NET "ser_r[1]"  LOC = "AA10"  ; -NET "ser_r[2]"  LOC = "U9"  ; -NET "ser_r[3]"  LOC = "U6"  ; -NET "ser_r[4]"  LOC = "AB11"  ; -NET "ser_r[5]"  LOC = "Y7"  ; -NET "ser_r[6]"  LOC = "W7"  ; -NET "ser_r[7]"  LOC = "AB7"  ; -NET "ser_r[8]"  LOC = "AA7"  ; -NET "ser_r[9]"  LOC = "W9"  ; -NET "ser_t[0]"  LOC = "V7"  ; -NET "ser_t[10]"  LOC = "AA6"  ; -NET "ser_t[11]"  LOC = "Y6"  ; -NET "ser_t[12]"  LOC = "W8"  ; -NET "ser_t[13]"  LOC = "V8"  ; -NET "ser_t[14]"  LOC = "AB8"  ; -NET "ser_t[15]"  LOC = "AA8"  ; -NET "ser_t[1]"  LOC = "V10"  ; -NET "ser_t[2]"  LOC = "AB4"  ; -NET "ser_t[3]"  LOC = "AA4"  ; -NET "ser_t[4]"  LOC = "Y5"  ; -NET "ser_t[5]"  LOC = "W5"  ; -NET "ser_t[6]"  LOC = "AB5"  ; -NET "ser_t[7]"  LOC = "AA5"  ; -NET "ser_t[8]"  LOC = "W6"  ; -NET "ser_t[9]"  LOC = "V6"  ; -NET "clk_muxed" TNM_NET = "clk_muxed"; -TIMESPEC "TS_clk_muxed" = PERIOD "clk_muxed" 10 ns HIGH 50 %; -NET "clk_to_mac" TNM_NET = "clk_to_mac"; -TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; -NET "cpld_clk" TNM_NET = "cpld_clk"; -TIMESPEC "TS_cpld_clk" = PERIOD "cpld_clk" 40 ns HIGH 50 %; -NET "GMII_RX_CLK" TNM_NET = "GMII_RX_CLK"; -TIMESPEC "TS_GMII_RX_CLK" = PERIOD "GMII_RX_CLK" 8 ns HIGH 50 %; -NET "ser_rx_clk" TNM_NET = "ser_rx_clk"; -TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; -#PACE: Start of Constraints generated by PACE - -#PACE: Start of PACE I/O Pin Assignments -NET "adc_oen_a"  LOC = "E19"  ;  -NET "adc_oen_b"  LOC = "C17"  ;  -NET "adc_ovf_a"  LOC = "F18"  ;  -NET "adc_ovf_b"  LOC = "B17"  ;  -NET "adc_pdn_a"  LOC = "E20"  ;  -NET "adc_pdn_b"  LOC = "D15"  ;  -NET "clk_fpga_n"  LOC = "B11"  ;  -NET "clk_fpga_p"  LOC = "A11"  ;  -NET "clk_func"  LOC = "C12"  ;  -NET "clk_status"  LOC = "B12"  ;  -NET "clk_to_mac"  LOC = "AB12"  ;  -NET "cpld_clk"  LOC = "AB14"  ;  -NET "cpld_din"  LOC = "AA14"  ;  -NET "cpld_done"  LOC = "V12"  ;  -NET "cpld_mode"  LOC = "U12"  ;  -NET "cpld_start"  LOC = "AA9"  ;  -NET "exp_pps_in_n"  LOC = "V4"  ;  -NET "exp_pps_in_p"  LOC = "V3"  ;  -NET "exp_pps_out_n"  LOC = "V2"  ;  -NET "exp_pps_out_p"  LOC = "V1"  ;  -NET "GMII_COL"  LOC = "U16"  ;  -NET "GMII_CRS"  LOC = "U17"  ;  -NET "GMII_GTX_CLK"  LOC = "AA17" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "GMII_RX_CLK"  LOC = "W16"  ;  -NET "GMII_RX_DV"  LOC = "AB16"  ;  -NET "GMII_RX_ER"  LOC = "AA16"  ;  -NET "GMII_TX_CLK"  LOC = "W13"  ;  -NET "GMII_TX_EN"  LOC = "Y17" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "GMII_TX_ER"  LOC = "V16" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "GMII_TXD<0>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<1>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<2>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<3>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<4>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<5>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<6>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "GMII_TXD<7>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "led1"  LOC = "V11"  ;  -NET "led2"  LOC = "Y12"  ;  -NET "MDC"  LOC = "V18"  ;  -NET "MDIO"  LOC = "Y16" | PULLUP ;  -NET "PHY_CLK"  LOC = "V15"  ;  -NET "PHY_INTn"  LOC = "AB13"  ;  -NET "PHY_RESETn"  LOC = "AA19"  ;  -NET "pps_in"  LOC = "Y11"  ;  -NET "RAM_CE1n"  LOC = "N21"  ;  -NET "RAM_CENn"  LOC = "M18"  ;  -NET "RAM_CLK"  LOC = "M17"  ;  -NET "RAM_LDn"  LOC = "M21"  ;  -NET "RAM_OEn"  LOC = "M19"  ;  -NET "RAM_WEn"  LOC = "M20"  ;  -NET "SCL"  LOC = "A7"  ;  -NET "SCL_force"  LOC = "E8"  ;  -NET "sclk"  LOC = "K5"  ;  -NET "sclk_rx_adc"  LOC = "J17"  ;  -NET "sclk_rx_dac"  LOC = "J19"  ;  -NET "sclk_rx_db"  LOC = "F19"  ;  -NET "sclk_tx_adc"  LOC = "H1"  ;  -NET "sclk_tx_dac"  LOC = "J5"  ;  -NET "sclk_tx_db"  LOC = "D3"  ;  -NET "SDA"  LOC = "D8"  ;  -NET "SDA_force"  LOC = "C11"  ;  -NET "sdi"  LOC = "J1"  ;  -NET "sdi_rx_adc"  LOC = "H22"  ;  -NET "sdi_rx_dac"  LOC = "J21"  ;  -NET "sdi_rx_db"  LOC = "H19"  ;  -NET "sdi_tx_adc"  LOC = "J4"  ;  -NET "sdi_tx_dac"  LOC = "J6"  ;  -NET "sdi_tx_db"  LOC = "G4"  ;  -NET "sdo"  LOC = "J2"  ;  -NET "sdo_rx_adc"  LOC = "H21"  ;  -NET "sdo_rx_db"  LOC = "G20"  ;  -NET "sdo_tx_adc"  LOC = "H2"  ;  -NET "sdo_tx_db"  LOC = "G3"  ;  -NET "sen_clk"  LOC = "K6"  ;  -NET "sen_dac"  LOC = "L1"  ;  -NET "sen_rx_adc"  LOC = "H18"  ;  -NET "sen_rx_dac"  LOC = "J18"  ;  -NET "sen_rx_db"  LOC = "D22"  ;  -NET "sen_tx_adc"  LOC = "G2"  ;  -NET "sen_tx_dac"  LOC = "H4"  ;  -NET "sen_tx_db"  LOC = "C1"  ;  -NET "ser_enable"  LOC = "W11"  ;  -NET "ser_loopen"  LOC = "Y4"  ;  -NET "ser_prbsen"  LOC = "AA3"  ;  -NET "ser_rklsb"  LOC = "V9"  ;  -NET "ser_rkmsb"  LOC = "Y10"  ;  -NET "ser_rx_clk"  LOC = "AA11"  ;  -NET "ser_rx_en"  LOC = "AB9"  ;  -NET "ser_tklsb"  LOC = "U10" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "ser_tkmsb"  LOC = "U11" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "ser_tx_clk"  LOC = "U7" | IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ;  -NET "ser_t<0>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<1>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<2>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<3>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<4>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<5>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<6>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<7>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<8>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<9>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<10>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<11>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<12>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<13>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<14>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -NET "ser_t<15>" IOSTANDARD = LVCMOS25  | DRIVE = 12  | SLEW = FAST ; -#PACE: Start of PACE Area Constraints - -#PACE: Start of PACE Prohibit Constraints - -#PACE: End of Constraints generated by PACE diff --git a/fpga/usrp2/top/u2_rev1/u2_fpga_top.prj b/fpga/usrp2/top/u2_rev1/u2_fpga_top.prj deleted file mode 100644 index 544415f4d..000000000 --- a/fpga/usrp2/top/u2_rev1/u2_fpga_top.prj +++ /dev/null @@ -1,102 +0,0 @@ -verilog work "../../opencores/uart16550/rtl/verilog/raminfr.v" -verilog work "../../control_lib/ram_2port.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_tfifo.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_rfifo.v" -verilog work "../../coregen/fifo_generator_v4_1.v" -verilog work "../../control_lib/shortfifo.v" -verilog work "../../control_lib/longfifo.v" -verilog work "../../sdr_lib/sign_extend.v" -verilog work "../../sdr_lib/cordic_stage.v" -verilog work "../../sdr_lib/cic_int_shifter.v" -verilog work "../../sdr_lib/cic_dec_shifter.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_transmitter.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_sync_flops.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_receiver.v" -verilog work "../../opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_xecu.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_regf.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_ibuf.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_ctrl.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_bpcu.v" -verilog work "../../opencores/8b10b/encode_8b10b.v" -verilog work "../../opencores/8b10b/decode_8b10b.v" -verilog work "../../eth/rtl/verilog/miim/eth_shiftreg.v" -verilog work "../../eth/rtl/verilog/miim/eth_outputcontrol.v" -verilog work "../../eth/rtl/verilog/miim/eth_clockgen.v" -verilog work "../../eth/rtl/verilog/Reg_int.v" -verilog work "../../eth/rtl/verilog/RMON/RMON_ctrl.v" -verilog work "../../eth/rtl/verilog/RMON/RMON_addr_gen.v" -verilog work "../../eth/rtl/verilog/MAC_tx/Random_gen.v" -verilog work "../../eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v" -verilog work "../../eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v" -verilog work "../../eth/rtl/verilog/MAC_tx/MAC_tx_FF.v" -verilog work "../../eth/rtl/verilog/MAC_tx/CRC_gen.v" -verilog work "../../eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v" -verilog work "../../eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v" -verilog work "../../eth/rtl/verilog/MAC_rx/MAC_rx_FF.v" -verilog work "../../eth/rtl/verilog/MAC_rx/CRC_chk.v" -verilog work "../../eth/rtl/verilog/MAC_rx/Broadcast_filter.v" -verilog work "../../control_lib/ss_rcvr.v" -verilog work "../../control_lib/cascadefifo2.v" -verilog work "../../control_lib/CRC16_D16.v" -verilog work "../../timing/time_sender.v" -verilog work "../../timing/time_receiver.v" -verilog work "../../serdes/serdes_tx.v" -verilog work "../../serdes/serdes_rx.v" -verilog work "../../serdes/serdes_fc_tx.v" -verilog work "../../serdes/serdes_fc_rx.v" -verilog work "../../sdr_lib/round.v" -verilog work "../../sdr_lib/cordic.v" -verilog work "../../sdr_lib/cic_interp.v" -verilog work "../../sdr_lib/cic_decim.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_wb.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_regs.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_debug_if.v" -verilog work "../../opencores/spi/rtl/verilog/spi_shift.v" -verilog work "../../opencores/spi/rtl/verilog/spi_clgen.v" -verilog work "../../opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_edk32.v" -verilog work "../../eth/rtl/verilog/flow_ctrl_tx.v" -verilog work "../../eth/rtl/verilog/flow_ctrl_rx.v" -verilog work "../../eth/rtl/verilog/eth_miim.v" -verilog work "../../eth/rtl/verilog/RMON.v" -verilog work "../../eth/rtl/verilog/Phy_int.v" -verilog work "../../eth/rtl/verilog/MAC_tx.v" -verilog work "../../eth/rtl/verilog/MAC_rx.v" -verilog work "../../eth/rtl/verilog/Clk_ctrl.v" -verilog work "../../control_lib/strobe_gen.v" -verilog work "../../control_lib/setting_reg.v" -verilog work "../../control_lib/mux8.v" -verilog work "../../control_lib/mux4.v" -verilog work "../../control_lib/icache.v" -verilog work "../../control_lib/dpram32.v" -verilog work "../../control_lib/decoder_3_8.v" -verilog work "../../control_lib/dcache.v" -verilog work "../../control_lib/buffer_int.v" -verilog work "../../timing/timer.v" -verilog work "../../timing/time_sync.v" -verilog work "../../serdes/serdes.v" -verilog work "../../sdr_lib/tx_control.v" -verilog work "../../sdr_lib/rx_control.v" -verilog work "../../sdr_lib/dsp_core_tx.v" -verilog work "../../sdr_lib/dsp_core_rx.v" -verilog work "../../opencores/uart16550/rtl/verilog/uart_top.v" -verilog work "../../opencores/spi/rtl/verilog/spi_top.v" -verilog work "../../opencores/simple_pic/rtl/simple_pic.v" -verilog work "../../opencores/i2c/rtl/verilog/i2c_master_top.v" -verilog work "../../opencores/aemb/rtl/verilog/aeMB_core_BE.v" -verilog work "../../eth/rtl/verilog/MAC_top.v" -verilog work "../../eth/mac_txfifo_int.v" -verilog work "../../eth/mac_rxfifo_int.v" -verilog work "../../control_lib/wb_readback_mux.v" -verilog work "../../control_lib/wb_1master.v" -verilog work "../../control_lib/system_control.v" -verilog work "../../control_lib/settings_bus.v" -verilog work "../../control_lib/ram_loader.v" -verilog work "../../control_lib/ram_harv_cache.v" -verilog work "../../control_lib/nsgpio.v" -verilog work "../../control_lib/extram_interface.v" -verilog work "../../control_lib/buffer_pool.v" -verilog work "../../control_lib/atr_controller.v" -verilog work "../u2_basic/u2_basic.v" -verilog work "u2_fpga_top.v" diff --git a/fpga/usrp2/top/u2_rev1/u2_fpga_top.v b/fpga/usrp2/top/u2_rev1/u2_fpga_top.v deleted file mode 100644 index 63798a0c8..000000000 --- a/fpga/usrp2/top/u2_rev1/u2_fpga_top.v +++ /dev/null @@ -1,393 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// - -module u2_fpga_top -  ( -   // Misc, debug -   output led1, -   output led2, -   output [31:0] debug, -   output [1:0] debug_clk, - -   // Expansion -   input exp_pps_in_p, // Diff -   input exp_pps_in_n, // Diff -   output exp_pps_out_p, // Diff  -   output exp_pps_out_n, // Diff  -    -   // GMII -   //   GMII-CTRL -   input GMII_COL, -   input GMII_CRS, - -   //   GMII-TX -   output reg [7:0] GMII_TXD, -   output reg GMII_TX_EN, -   output reg GMII_TX_ER, -   output GMII_GTX_CLK, -   input GMII_TX_CLK,  // 100mbps clk - -   //   GMII-RX -   input [7:0] GMII_RXD, -   input GMII_RX_CLK, -   input GMII_RX_DV, -   input GMII_RX_ER, - -   //   GMII-Management -   inout MDIO, -   output MDC, -   input PHY_INTn,   // open drain -   output PHY_RESETn, -   input PHY_CLK,   // possibly use on-board osc - -   // RAM -   inout [17:0] RAM_D, -   output [18:0] RAM_A, -   output RAM_CE1n, -   output RAM_CENn, -   output RAM_CLK, -   output RAM_WEn, -   output RAM_OEn, -   output RAM_LDn, -    -   // SERDES -   output ser_enable, -   output ser_prbsen, -   output ser_loopen, -   output ser_rx_en, -    -   output ser_tx_clk, -   output reg [15:0] ser_t, -   output reg ser_tklsb, -   output reg ser_tkmsb, - -   input ser_rx_clk, -   input [15:0] ser_r, -   input ser_rklsb, -   input ser_rkmsb, -    -   // CPLD interface -   output cpld_start,  // AA9 -   output cpld_mode,   // U12 -   output cpld_done,   // V12 -   input cpld_din,     // AA14 Now shared with CFG_Din -   input cpld_clk,     // AB14 serial clock - -   // ADC -   input [13:0] adc_a, -   input adc_ovf_a, -   output adc_oen_a, -   output adc_pdn_a, -    -   input [13:0] adc_b, -   input adc_ovf_b, -   output adc_oen_b, -   output adc_pdn_b, -    -   // DAC -   output [15:0] dac_a, -   output [15:0] dac_b, - -   // I2C -   inout SCL, -   inout SDA, -   input SCL_force, -   input SDA_force, - -   // Clock Gen Control -   output [1:0] clk_en, -   output [1:0] clk_sel, -   input clk_func,        // FIXME is an input to control the 9510 -   input clk_status, - -   // Clocks -   input clk_fpga_p,  // Diff -   input clk_fpga_n,  // Diff -   input clk_to_mac, -   input pps_in, -    -   // Generic SPI -   output sclk, -   output sen_clk, -   output sen_dac, -   output sdi, -   input sdo, -    -   // TX DBoard -   output sen_tx_db, -   output sclk_tx_db, -   input sdo_tx_db, -   output sdi_tx_db, - -   output sen_tx_adc, -   output sclk_tx_adc, -   input sdo_tx_adc, -   output sdi_tx_adc, - -   output sen_tx_dac, -   output sclk_tx_dac, -   output sdi_tx_dac, - -   inout [15:0] io_tx, - -   // RX DBoard -   output sen_rx_db, -   output sclk_rx_db, -   input sdo_rx_db, -   output sdi_rx_db, - -   output sen_rx_adc, -   output sclk_rx_adc, -   input sdo_rx_adc, -   output sdi_rx_adc, - -   output sen_rx_dac, -   output sclk_rx_dac, -   output sdi_rx_dac, -    -   inout [15:0] io_rx -   ); - -   // FPGA-specific pins connections -   wire 	aux_clk = PHY_CLK; -   //wire 	cpld_detached = RAM_A[14]; // FIXME  Hacked on with Blue Wire -   wire 	cpld_detached = SDA_force; // FIXME  Hacked on with Blue Wire - -   wire 	clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; - -   IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(clk_fpga_p),.IB(clk_fpga_n)); -   defparam 	clk_fpga_pin.IOSTANDARD = "LVPECL_25"; -    -   wire 	exp_pps_in; -   IBUFDS exp_pps_in_pin (.O(exp_pps_in),.I(exp_pps_in_p),.IB(exp_pps_in_n)); -   defparam 	exp_pps_in_pin.IOSTANDARD = "LVDS_25"; -    -   wire 	exp_pps_out; -   OBUFDS exp_pps_out_pin (.O(exp_pps_out_p),.OB(exp_pps_out_n),.I(exp_pps_out)); -   defparam 	exp_pps_out_pin.IOSTANDARD = "LVDS_25"; - -   reg [5:0] 	clock_ready_d; -   always @(posedge aux_clk) -     clock_ready_d[5:0] <= {clock_ready_d[4:0],clock_ready}; - -   wire 	dcm_rst = ~&clock_ready_d & |clock_ready_d; -   wire 	clk_muxed = clock_ready ? clk_fpga : aux_clk; - -   wire 	adc_on_a, adc_on_b, adc_oe_a, adc_oe_b; -   assign 	adc_oen_a = ~adc_oe_a; -   assign 	adc_oen_b = ~adc_oe_b; -   assign 	adc_pdn_a = ~adc_on_a; 	 -   assign 	adc_pdn_b = ~adc_on_b; 	 - -   // Handle Clocks -   DCM DCM_INST (.CLKFB(dsp_clk),  -                 .CLKIN(clk_muxed),  -                 .DSSEN(0),  -                 .PSCLK(0),  -                 .PSEN(0),  -                 .PSINCDEC(0),  -                 .RST(dcm_rst),  -                 .CLKDV(clk_div),  -                 .CLKFX(),  -                 .CLKFX180(),  -                 .CLK0(dcm_out),  -                 .CLK2X(),  -                 .CLK2X180(),  -                 .CLK90(),  -                 .CLK180(),  -                 .CLK270(),  -                 .LOCKED(LOCKED_OUT),  -                 .PSDONE(),  -                 .STATUS()); -   defparam DCM_INST.CLK_FEEDBACK = "1X"; -   defparam DCM_INST.CLKDV_DIVIDE = 2.0; -   defparam DCM_INST.CLKFX_DIVIDE = 1; -   defparam DCM_INST.CLKFX_MULTIPLY = 4; -   defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; -   defparam DCM_INST.CLKIN_PERIOD = 10.000; -   defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; -   defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; -   defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; -   defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; -   defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; -   defparam DCM_INST.FACTORY_JF = 16'h8080; -   defparam DCM_INST.PHASE_SHIFT = 0; -   defparam DCM_INST.STARTUP_WAIT = "FALSE"; - -   BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); -   BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - -   // I2C -- Don't use external transistors for open drain, the FPGA implements this -   IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); -   IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); - -   // LEDs are active low outputs -   wire 	led1_int, led2_int; -   assign 	led1 = ~led1_int; -   assign 	led2 = ~led2_int; - -   // SPI -   wire 	miso, mosi, sclk_int; -   assign 	{sclk,sdi} = (~sen_clk | ~sen_dac) ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_db,sdi_tx_db} = ~sen_tx_db ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_dac,sdi_tx_dac} = ~sen_tx_dac ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_adc,sdi_tx_adc} = ~sen_tx_adc ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_db,sdi_rx_db} = ~sen_rx_db ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_dac,sdi_rx_dac} = ~sen_rx_dac ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_adc,sdi_rx_adc} = ~sen_rx_adc ? {sclk_int,mosi} : 2'b0; -    -   assign 	miso = (~sen_clk & sdo) | (~sen_dac & sdo) |  -		(~sen_tx_db & sdo_tx_db) | (~sen_tx_adc & sdo_tx_adc) | -		(~sen_rx_db & sdo_rx_db) | (~sen_rx_adc & sdo_rx_adc); - -   wire 	GMII_TX_EN_unreg, GMII_TX_ER_unreg; -   wire [7:0] 	GMII_TXD_unreg; -   wire 	GMII_GTX_CLK_int; -    -   always @(posedge GMII_GTX_CLK_int) -     begin -	GMII_TX_EN <= GMII_TX_EN_unreg; -	GMII_TX_ER <= GMII_TX_ER_unreg; -	GMII_TXD <= GMII_TXD_unreg; -     end - -   OFDDRRSE OFDDRRSE_gmii_inst  -     (.Q(GMII_GTX_CLK),      // Data output (connect directly to top-level port) -      .C0(GMII_GTX_CLK_int),    // 0 degree clock input -      .C1(~GMII_GTX_CLK_int),    // 180 degree clock input -      .CE(1),    // Clock enable input -      .D0(0),    // Posedge data input -      .D1(1),    // Negedge data input -      .R(0),      // Synchronous reset input -      .S(0)       // Synchronous preset input -      ); -    -   wire ser_tklsb_unreg, ser_tkmsb_unreg; -   wire [15:0] ser_t_unreg; -   wire        ser_tx_clk_int; -    -   always @(posedge ser_tx_clk_int) -     begin -	ser_tklsb <= ser_tklsb_unreg; -	ser_tkmsb <= ser_tkmsb_unreg; -	ser_t <= ser_t_unreg; -     end - -   assign ser_tx_clk = clk_fpga; - -   reg [15:0] ser_r_int; -   reg 	      ser_rklsb_int, ser_rkmsb_int; - -   always @(posedge ser_rx_clk) -     begin -	ser_r_int <= ser_r; -	ser_rklsb_int <= ser_rklsb; -	ser_rkmsb_int <= ser_rkmsb; -     end -    -   /* -   OFDDRRSE OFDDRRSE_serdes_inst  -     (.Q(ser_tx_clk),      // Data output (connect directly to top-level port) -      .C0(ser_tx_clk_int),    // 0 degree clock input -      .C1(~ser_tx_clk_int),    // 180 degree clock input -      .CE(1),    // Clock enable input -      .D0(0),    // Posedge data input -      .D1(1),    // Negedge data input -      .R(0),      // Synchronous reset input -      .S(0)       // Synchronous preset input -      ); -   */ -   u2_basic u2_basic(.dsp_clk           (dsp_clk), -		     .wb_clk            (wb_clk), -		     .clock_ready       (clock_ready), -		     .clk_to_mac	(clk_to_mac), -		     .pps_in		(pps_in), -		     .led1		(led1_int), -		     .led2		(led2_int), -		     .debug		(debug[31:0]), -		     .debug_clk		(debug_clk[1:0]), -		     .exp_pps_in	(exp_pps_in), -		     .exp_pps_out	(exp_pps_out), -		     .GMII_COL		(GMII_COL), -		     .GMII_CRS		(GMII_CRS), -		     .GMII_TXD		(GMII_TXD_unreg[7:0]), -		     .GMII_TX_EN	(GMII_TX_EN_unreg), -		     .GMII_TX_ER	(GMII_TX_ER_unreg), -		     .GMII_GTX_CLK	(GMII_GTX_CLK_int), -		     .GMII_TX_CLK	(GMII_TX_CLK), -		     .GMII_RXD		(GMII_RXD[7:0]), -		     .GMII_RX_CLK	(GMII_RX_CLK), -		     .GMII_RX_DV	(GMII_RX_DV), -		     .GMII_RX_ER	(GMII_RX_ER), -		     .MDIO		(MDIO), -		     .MDC		(MDC), -		     .PHY_INTn		(PHY_INTn), -		     .PHY_RESETn	(PHY_RESETn), -		     .PHY_CLK		(PHY_CLK), -		     .ser_enable	(ser_enable), -		     .ser_prbsen	(ser_prbsen), -		     .ser_loopen	(ser_loopen), -		     .ser_rx_en		(ser_rx_en), -		     .ser_tx_clk	(ser_tx_clk_int), -		     .ser_t		(ser_t_unreg[15:0]), -		     .ser_tklsb		(ser_tklsb_unreg), -		     .ser_tkmsb		(ser_tkmsb_unreg), -		     .ser_rx_clk	(ser_rx_clk), -		     .ser_r		(ser_r_int[15:0]), -		     .ser_rklsb		(ser_rklsb_int), -		     .ser_rkmsb		(ser_rkmsb_int), -		     .cpld_start        (cpld_start), -		     .cpld_mode         (cpld_mode), -		     .cpld_done         (cpld_done), -		     .cpld_din          (cpld_din), -		     .cpld_clk          (cpld_clk), -		     .cpld_detached     (cpld_detached), -		     .adc_a		(adc_a[13:0]), -		     .adc_ovf_a		(adc_ovf_a), -		     .adc_on_a		(adc_on_a), -		     .adc_oe_a		(adc_oe_a), -		     .adc_b		(adc_b[13:0]), -		     .adc_ovf_b		(adc_ovf_b), -		     .adc_on_b		(adc_on_b), -		     .adc_oe_b		(adc_oe_b), -		     .dac_a		(dac_a[15:0]), -		     .dac_b		(dac_b[15:0]), -		     .scl_pad_i		(scl_pad_i), -		     .scl_pad_o		(scl_pad_o), -		     .scl_pad_oen_o	(scl_pad_oen_o), -		     .sda_pad_i		(sda_pad_i), -		     .sda_pad_o		(sda_pad_o), -		     .sda_pad_oen_o	(sda_pad_oen_o), -		     .clk_en		(clk_en[1:0]), -		     .clk_sel		(clk_sel[1:0]), -		     .clk_func		(clk_func), -		     .clk_status	(clk_status), -		     .sclk		(sclk_int), -		     .mosi		(mosi), -		     .miso		(miso), -		     .sen_clk		(sen_clk), -		     .sen_dac		(sen_dac), -		     .sen_tx_db		(sen_tx_db), -		     .sen_tx_adc	(sen_tx_adc), -		     .sen_tx_dac	(sen_tx_dac), -		     .sen_rx_db		(sen_rx_db), -		     .sen_rx_adc	(sen_rx_adc), -		     .sen_rx_dac	(sen_rx_dac), -		     .io_tx		(io_tx[15:0]), -		     .io_rx		(io_rx[15:0]), -		     .RAM_D             (RAM_D), -		     .RAM_A             (RAM_A), -		     .RAM_CE1n          (RAM_CE1n), -		     .RAM_CENn          (RAM_CENn), -		     .RAM_CLK           (RAM_CLK), -		     .RAM_WEn           (RAM_WEn), -		     .RAM_OEn           (RAM_OEn), -		     .RAM_LDn           (RAM_LDn),  -		     .uart_tx_o         (), -		     .uart_rx_i         (), -		     .uart_baud_o       (), -		     .sim_mode          (1'b0), -		     .clock_divider     (2) -		     ); -    -endmodule // u2_fpga_top diff --git a/fpga/usrp2/top/u2_rev2/.gitignore b/fpga/usrp2/top/u2_rev2/.gitignore deleted file mode 100644 index 432f8fd58..000000000 --- a/fpga/usrp2/top/u2_rev2/.gitignore +++ /dev/null @@ -1,57 +0,0 @@ -/*.ptwx -/*.xrpt -/*.zip -/*_xdb -/templates -/netgen -/_ngo -/_xmsgs -/_pace.ucf -/*.cmd -/*.ibs -/*.lfp -/*.mfp -/*.bit -/*.bin -/*.stx -/*.par -/*.unroutes -/*.ntrc_log -/*.ngr -/*.mrp -/*.html -/*.lso -/*.twr -/*.bld -/*.ncd -/*.txt -/*.cmd_log -/*.drc -/*.map -/*.twr -/*.xml -/*.syr -/*.ngm -/*.xst -/*.csv -/*.html -/*.lock -/*.ncd -/*.twx -/*.ise_ISE_Backup -/*.xml -/*.ut -/*.xpi -/*.ngd -/*.ncd -/*.pad -/*.bgn -/*.ngc -/*.pcf -/*.ngd -/xst -/*.log -/*.rpt -/*.cel -/*.restore -/build diff --git a/fpga/usrp2/top/u2_rev2/Makefile b/fpga/usrp2/top/u2_rev2/Makefile deleted file mode 100644 index 275c24b02..000000000 --- a/fpga/usrp2/top/u2_rev2/Makefile +++ /dev/null @@ -1,248 +0,0 @@ -# -# Copyright 2008 Ettus Research LLC -#  -# This file is part of GNU Radio -#  -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -#  -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU General Public License for more details. -#  -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING.  If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -#  - -################################################## -# xtclsh Shell and tcl Script Path -################################################## -#XTCLSH := /opt/Xilinx/10.1/ISE/bin/lin/xtclsh -XTCLSH := xtclsh -ISE_HELPER := ../tcl/ise_helper.tcl - -################################################## -# Project Setup -################################################## -BUILD_DIR := build/ -export TOP_MODULE := u2_rev2 -export PROJ_FILE := $(BUILD_DIR)$(TOP_MODULE).ise - -################################################## -# Project Properties -################################################## -export PROJECT_PROPERTIES := \ -family Spartan3 \ -device xc3s2000 \ -package fg456 \ -speed -5 \ -top_level_module_type "HDL" \ -synthesis_tool "XST (VHDL/Verilog)" \ -simulator "ISE Simulator (VHDL/Verilog)" \ -"Preferred Language" "Verilog" \ -"Enable Message Filtering" FALSE \ -"Display Incremental Messages" FALSE  - -################################################## -# Sources -################################################## -export SOURCE_ROOT := ../../../ -export SOURCES := \ -control_lib/CRC16_D16.v \ -control_lib/atr_controller.v \ -control_lib/bin2gray.v \ -control_lib/buffer_int.v \ -control_lib/buffer_pool.v \ -control_lib/cascadefifo2.v \ -control_lib/dcache.v \ -control_lib/decoder_3_8.v \ -control_lib/dpram32.v \ -control_lib/fifo_2clock.v \ -control_lib/fifo_2clock_casc.v \ -control_lib/gray2bin.v \ -control_lib/gray_send.v \ -control_lib/icache.v \ -control_lib/longfifo.v \ -control_lib/mux4.v \ -control_lib/mux8.v \ -control_lib/nsgpio.v \ -control_lib/ram_2port.v \ -control_lib/ram_harv_cache.v \ -control_lib/ram_loader.v \ -control_lib/setting_reg.v \ -control_lib/settings_bus.v \ -control_lib/shortfifo.v \ -control_lib/medfifo.v \ -control_lib/srl.v \ -control_lib/system_control.v \ -control_lib/wb_1master.v \ -control_lib/wb_readback_mux.v \ -control_lib/simple_uart.v \ -control_lib/simple_uart_tx.v \ -control_lib/simple_uart_rx.v \ -control_lib/oneshot_2clk.v \ -control_lib/sd_spi.v \ -control_lib/sd_spi_wb.v \ -control_lib/wb_bridge_16_32.v \ -coregen/fifo_xlnx_2Kx36_2clk.v \ -coregen/fifo_xlnx_2Kx36_2clk.xco \ -coregen/fifo_xlnx_512x36_2clk.v \ -coregen/fifo_xlnx_512x36_2clk.xco \ -eth/mac_rxfifo_int.v \ -eth/mac_txfifo_int.v \ -eth/rtl/verilog/Clk_ctrl.v \ -eth/rtl/verilog/MAC_rx.v \ -eth/rtl/verilog/MAC_rx/Broadcast_filter.v \ -eth/rtl/verilog/MAC_rx/CRC_chk.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_FF.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_add_chk.v \ -eth/rtl/verilog/MAC_rx/MAC_rx_ctrl.v \ -eth/rtl/verilog/MAC_top.v \ -eth/rtl/verilog/MAC_tx.v \ -eth/rtl/verilog/MAC_tx/CRC_gen.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_FF.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_addr_add.v \ -eth/rtl/verilog/MAC_tx/MAC_tx_ctrl.v \ -eth/rtl/verilog/MAC_tx/Random_gen.v \ -eth/rtl/verilog/Phy_int.v \ -eth/rtl/verilog/RMON.v \ -eth/rtl/verilog/RMON/RMON_addr_gen.v \ -eth/rtl/verilog/RMON/RMON_ctrl.v \ -eth/rtl/verilog/Reg_int.v \ -eth/rtl/verilog/eth_miim.v \ -eth/rtl/verilog/flow_ctrl_rx.v \ -eth/rtl/verilog/flow_ctrl_tx.v \ -eth/rtl/verilog/miim/eth_clockgen.v \ -eth/rtl/verilog/miim/eth_outputcontrol.v \ -eth/rtl/verilog/miim/eth_shiftreg.v \ -extram/wb_zbt16_b.v \ -opencores/8b10b/decode_8b10b.v \ -opencores/8b10b/encode_8b10b.v \ -opencores/aemb/rtl/verilog/aeMB_bpcu.v \ -opencores/aemb/rtl/verilog/aeMB_core_BE.v \ -opencores/aemb/rtl/verilog/aeMB_ctrl.v \ -opencores/aemb/rtl/verilog/aeMB_edk32.v \ -opencores/aemb/rtl/verilog/aeMB_ibuf.v \ -opencores/aemb/rtl/verilog/aeMB_regf.v \ -opencores/aemb/rtl/verilog/aeMB_xecu.v \ -opencores/i2c/rtl/verilog/i2c_master_bit_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_byte_ctrl.v \ -opencores/i2c/rtl/verilog/i2c_master_defines.v \ -opencores/i2c/rtl/verilog/i2c_master_top.v \ -opencores/i2c/rtl/verilog/timescale.v \ -opencores/simple_pic/rtl/simple_pic.v \ -opencores/spi/rtl/verilog/spi_clgen.v \ -opencores/spi/rtl/verilog/spi_defines.v \ -opencores/spi/rtl/verilog/spi_shift.v \ -opencores/spi/rtl/verilog/spi_top.v \ -opencores/spi/rtl/verilog/timescale.v \ -sdr_lib/acc.v \ -sdr_lib/add2.v \ -sdr_lib/add2_and_round.v \ -sdr_lib/add2_and_round_reg.v \ -sdr_lib/add2_reg.v \ -sdr_lib/cic_dec_shifter.v \ -sdr_lib/cic_decim.v \ -sdr_lib/cic_int_shifter.v \ -sdr_lib/cic_interp.v \ -sdr_lib/cic_strober.v \ -sdr_lib/clip.v \ -sdr_lib/clip_reg.v \ -sdr_lib/cordic.v \ -sdr_lib/cordic_z24.v \ -sdr_lib/cordic_stage.v \ -sdr_lib/dsp_core_rx.v \ -sdr_lib/dsp_core_tx.v \ -sdr_lib/hb_dec.v \ -sdr_lib/hb_interp.v \ -sdr_lib/round.v \ -sdr_lib/round_reg.v \ -sdr_lib/rx_control.v \ -sdr_lib/rx_dcoffset.v \ -sdr_lib/sign_extend.v \ -sdr_lib/small_hb_dec.v \ -sdr_lib/small_hb_int.v \ -sdr_lib/tx_control.v \ -serdes/serdes.v \ -serdes/serdes_fc_rx.v \ -serdes/serdes_fc_tx.v \ -serdes/serdes_rx.v \ -serdes/serdes_tx.v \ -timing/time_receiver.v \ -timing/time_sender.v \ -timing/time_sync.v \ -timing/timer.v \ -top/u2_core/u2_core.v \ -top/u2_rev2/u2_rev2.ucf \ -top/u2_rev2/u2_rev2.v  - -################################################## -# Process Properties -################################################## -export SYNTHESIZE_PROPERTIES := \ -"Number of Clock Buffers" 6 \ -"Pack I/O Registers into IOBs" Yes \ -"Optimization Effort" High \ -"Optimize Instantiated Primitives" TRUE \ -"Register Balancing" Yes \ -"Use Clock Enable" Auto \ -"Use Synchronous Reset" Auto \ -"Use Synchronous Set" Auto - -export TRANSLATE_PROPERTIES := \ -"Macro Search Path" "$(shell pwd)/../../coregen/" - -export MAP_PROPERTIES := \ -"Allow Logic Optimization Across Hierarchy" TRUE \ -"Map to Input Functions" 4 \ -"Optimization Strategy (Cover Mode)" Speed \ -"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \ -"Perform Timing-Driven Packing and Placement" TRUE \ -"Map Effort Level" High \ -"Extra Effort" Normal \ -"Combinatorial Logic Optimization" TRUE \ -"Register Duplication" TRUE - -export PLACE_ROUTE_PROPERTIES := \ -"Place & Route Effort Level (Overall)" High  - -export STATIC_TIMING_PROPERTIES := \ -"Number of Paths in Error/Verbose Report" 10 \ -"Report Type" "Error Report" - -export GEN_PROG_FILE_PROPERTIES := \ -"Configuration Rate" 6 \ -"Create Binary Configuration File" TRUE \ -"Done (Output Events)" 5 \ -"Enable Bitstream Compression" TRUE \ -"Enable Outputs (Output Events)" 6  - -export SIM_MODEL_PROPERTIES := "" - -################################################## -# Make Options -################################################## -all: -	@echo make proj, check, synth, bin, or clean - -proj: -	PROCESS_RUN="" $(XTCLSH) $(ISE_HELPER)	 - -check: -	PROCESS_RUN="Check Syntax" $(XTCLSH) $(ISE_HELPER)	 - -synth: -	PROCESS_RUN="Synthesize - XST" $(XTCLSH) $(ISE_HELPER)	 - -bin: -	PROCESS_RUN="Generate Programming File" $(XTCLSH) $(ISE_HELPER)		 - -clean: -	rm -rf $(BUILD_DIR) - - diff --git a/fpga/usrp2/top/u2_rev2/u2_rev2.ucf b/fpga/usrp2/top/u2_rev2/u2_rev2.ucf deleted file mode 100644 index e18dc6f17..000000000 --- a/fpga/usrp2/top/u2_rev2/u2_rev2.ucf +++ /dev/null @@ -1,337 +0,0 @@ -NET "leds[0]"  LOC = "F7"  ;  -NET "leds[1]"  LOC = "E5"  ;  -NET "leds[2]"  LOC = "B7"  ;  -NET "leds[3]"  LOC = "C11"  ;  -NET "leds[4]"  LOC = "AB19"  ; -NET "debug[0]"  LOC = "N5"  ; -NET "debug[1]"  LOC = "N6"  ; -NET "debug[2]"  LOC = "P1"  ; -NET "debug[3]"  LOC = "P2"  ; -NET "debug[4]"  LOC = "P4"  ; -NET "debug[5]"  LOC = "P5"  ; -NET "debug[6]"  LOC = "R1"  ; -NET "debug[7]"  LOC = "R2"  ; -NET "debug[8]"  LOC = "P6"  ; -NET "debug[9]"  LOC = "R5"  ; -NET "debug[10]"  LOC = "R4"  ; -NET "debug[11]"  LOC = "T3"  ; -NET "debug[12]"  LOC = "U3"  ; -NET "debug[13]"  LOC = "M2"  ; -NET "debug[14]"  LOC = "M3"  ; -NET "debug[15]"  LOC = "M4"  ; -NET "debug[16]"  LOC = "M5"  ; -NET "debug[17]"  LOC = "M6"  ; -NET "debug[18]"  LOC = "N1"  ; -NET "debug[19]"  LOC = "N2"  ; -NET "debug[20]"  LOC = "N3"  ; -NET "debug[21]"  LOC = "T1"  ; -NET "debug[22]"  LOC = "T2"  ; -NET "debug[23]"  LOC = "U2"  ; -NET "debug[24]"  LOC = "T4"  ; -NET "debug[25]"  LOC = "U4"  ; -NET "debug[26]"  LOC = "T5"  ; -NET "debug[27]"  LOC = "T6"  ; -NET "debug[28]"  LOC = "U5"  ; -NET "debug[29]"  LOC = "V5"  ; -NET "debug[30]"  LOC = "W2"  ; -NET "debug[31]"  LOC = "W3"  ; -NET "debug_clk[0]"  LOC = "N4"  ; -NET "debug_clk[1]"  LOC = "M1"  ; -NET "uart_tx_o"  LOC = "C7"  ; -NET "uart_rx_i"  LOC = "A3"  ; -NET "exp_pps_in_p"  LOC = "V3"  ;  -NET "exp_pps_in_n"  LOC = "V4"  ;  -NET "exp_pps_out_p"  LOC = "V1"  ;  -NET "exp_pps_out_n"  LOC = "V2"  ;  -NET "GMII_COL"  LOC = "U16"  ;  -NET "GMII_CRS"  LOC = "U17"  ;  -NET "GMII_TXD[0]"  LOC = "W14"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[1]"  LOC = "AA20"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[2]"  LOC = "AB20"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[3]"  LOC = "Y18"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[4]"  LOC = "AA18"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[5]"  LOC = "AB18"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[6]"  LOC = "V17"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TXD[7]"  LOC = "W17"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "GMII_TX_EN"  LOC = "Y17" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "GMII_TX_ER"  LOC = "V16" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "GMII_GTX_CLK"  LOC = "AA17" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "GMII_TX_CLK"  LOC = "W13"  ;  -NET "GMII_RXD[0]"  LOC = "AA15"  ; -NET "GMII_RXD[1]"  LOC = "AB15"  ; -NET "GMII_RXD[2]"  LOC = "U14"  ; -NET "GMII_RXD[3]"  LOC = "V14"  ; -NET "GMII_RXD[4]"  LOC = "U13"  ; -NET "GMII_RXD[5]"  LOC = "V13"  ; -NET "GMII_RXD[6]"  LOC = "Y13"  ; -NET "GMII_RXD[7]"  LOC = "AA13"  ; -NET "GMII_RX_CLK"  LOC = "W16"  ;  -NET "GMII_RX_DV"  LOC = "AB16"  ;  -NET "GMII_RX_ER"  LOC = "AA16"  ;  -NET "MDIO"  LOC = "Y16" |PULLUP ;  -NET "MDC"  LOC = "V18"  ;  -NET "PHY_INTn"  LOC = "AB13"  ;  -NET "PHY_RESETn"  LOC = "AA19"  ;  -NET "PHY_CLK"  LOC = "V15"  ;  -NET "RAM_D[0]"  LOC = "N20"  ; -NET "RAM_D[1]"  LOC = "N21"  ; -NET "RAM_D[2]"  LOC = "N22"  ; -NET "RAM_D[3]"  LOC = "M17"  ; -NET "RAM_D[4]"  LOC = "M18"  ; -NET "RAM_D[5]"  LOC = "M19"  ; -NET "RAM_D[6]"  LOC = "M20"  ; -NET "RAM_D[7]"  LOC = "M21"  ; -NET "RAM_D[8]"  LOC = "M22"  ; -NET "RAM_D[9]"  LOC = "Y22"  ; -NET "RAM_D[10]"  LOC = "Y21"  ; -NET "RAM_D[11]"  LOC = "Y20"  ; -NET "RAM_D[12]"  LOC = "Y19"  ; -NET "RAM_D[13]"  LOC = "W22"  ; -NET "RAM_D[14]"  LOC = "W21"  ; -NET "RAM_D[15]"  LOC = "W20"  ; -NET "RAM_D[16]"  LOC = "W19"  ; -NET "RAM_D[17]"  LOC = "V22"  ; -NET "RAM_A[0]"  LOC = "U21"  ; -NET "RAM_A[1]"  LOC = "T19"  ; -NET "RAM_A[2]"  LOC = "V21"  ; -NET "RAM_A[3]"  LOC = "V20"  ; -NET "RAM_A[4]"  LOC = "T20"  ; -NET "RAM_A[5]"  LOC = "T21"  ; -NET "RAM_A[6]"  LOC = "T22"  ; -NET "RAM_A[7]"  LOC = "T18"  ; -NET "RAM_A[8]"  LOC = "R18"  ; -NET "RAM_A[9]"  LOC = "P19"  ; -NET "RAM_A[10]"  LOC = "P21"  ; -NET "RAM_A[11]"  LOC = "P22"  ; -NET "RAM_A[12]"  LOC = "N19"  ; -NET "RAM_A[13]"  LOC = "N17"  ; -NET "RAM_A[14]"  LOC = "N18"  ; -NET "RAM_A[15]"  LOC = "T17"  ; -NET "RAM_A[16]"  LOC = "U19"  ; -NET "RAM_A[17]"  LOC = "U18"  ; -NET "RAM_A[18]"  LOC = "V19"  ; -NET "RAM_CE1n"  LOC = "U20"  ;  -NET "RAM_CENn"  LOC = "P18"  ;  -NET "RAM_CLK"  LOC = "P17"  ;  -NET "RAM_WEn"  LOC = "R22"  ;  -NET "RAM_OEn"  LOC = "R21"  ;  -NET "RAM_LDn"  LOC = "R19"  ;  -NET "ser_enable"  LOC = "W11"  ;  -NET "ser_prbsen"  LOC = "AA3"  ;  -NET "ser_loopen"  LOC = "Y4"  ;  -NET "ser_rx_en"  LOC = "AB9"  ;  -NET "ser_tx_clk"  LOC = "U7" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "ser_t[0]"  LOC = "V7"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[1]"  LOC = "V10"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[2]"  LOC = "AB4"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[3]"  LOC = "AA4"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[4]"  LOC = "Y5"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[5]"  LOC = "W5"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[6]"  LOC = "AB5"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[7]"  LOC = "AA5"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[8]"  LOC = "W6"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[9]"  LOC = "V6"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[10]"  LOC = "AA6"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[11]"  LOC = "Y6"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[12]"  LOC = "W8"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[13]"  LOC = "V8"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[14]"  LOC = "AB8"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_t[15]"  LOC = "AA8"  |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ; -NET "ser_tklsb"  LOC = "U10" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "ser_tkmsb"  LOC = "U11" |IOSTANDARD = LVCMOS25  |DRIVE = 12  |SLEW = FAST ;  -NET "ser_rx_clk"  LOC = "AA11"  ;  -NET "ser_r[0]"  LOC = "AB10"  ; -NET "ser_r[1]"  LOC = "AA10"  ; -NET "ser_r[2]"  LOC = "U9"  ; -NET "ser_r[3]"  LOC = "U6"  ; -NET "ser_r[4]"  LOC = "AB11"  ; -NET "ser_r[5]"  LOC = "Y7"  ; -NET "ser_r[6]"  LOC = "W7"  ; -NET "ser_r[7]"  LOC = "AB7"  ; -NET "ser_r[8]"  LOC = "AA7"  ; -NET "ser_r[9]"  LOC = "W9"  ; -NET "ser_r[10]"  LOC = "W10"  ; -NET "ser_r[11]"  LOC = "Y1"  ; -NET "ser_r[12]"  LOC = "Y3"  ; -NET "ser_r[13]"  LOC = "Y2"  ; -NET "ser_r[14]"  LOC = "W4"  ; -NET "ser_r[15]"  LOC = "W1"  ; -NET "ser_rklsb"  LOC = "V9"  ; -NET "ser_rkmsb"  LOC = "Y10"  ;  -NET "cpld_start"  LOC = "AA9"  ;  -NET "cpld_mode"  LOC = "U12"  ;  -NET "cpld_done"  LOC = "V12"  ;  -NET "cpld_din"  LOC = "AA14"  ;  -NET "cpld_clk"  LOC = "AB14"  ;  -NET "cpld_detached"  LOC = "V11"  ; -NET "cpld_init_b"  LOC = "W12"  ; -NET "cpld_misc"  LOC = "Y12"  ; -NET "adc_a[0]"  LOC = "A14" | IOBDELAY= "NONE" ; -NET "adc_a[1]"  LOC = "B14" | IOBDELAY= "NONE" ; -NET "adc_a[2]"  LOC = "C13" | IOBDELAY= "NONE" ; -NET "adc_a[3]"  LOC = "D13" | IOBDELAY= "NONE" ; -NET "adc_a[4]"  LOC = "A13" | IOBDELAY= "NONE" ; -NET "adc_a[5]"  LOC = "B13" | IOBDELAY= "NONE" ; -NET "adc_a[6]"  LOC = "E12" | IOBDELAY= "NONE" ; -NET "adc_a[7]"  LOC = "C22" | IOBDELAY= "NONE" ; -NET "adc_a[8]"  LOC = "C20" | IOBDELAY= "NONE" ; -NET "adc_a[9]"  LOC = "C21" | IOBDELAY= "NONE" ; -NET "adc_a[10]"  LOC = "D20" | IOBDELAY= "NONE" ; -NET "adc_a[11]"  LOC = "D19" | IOBDELAY= "NONE" ; -NET "adc_a[12]"  LOC = "D21" | IOBDELAY= "NONE" ; -NET "adc_a[13]"  LOC = "E18" | IOBDELAY= "NONE" ; -NET "adc_ovf_a"  LOC = "F18"  ;  -NET "adc_oen_a"  LOC = "E19"  ;  -NET "adc_pdn_a"  LOC = "E20"  ;  -NET "adc_b[0]"  LOC = "A12" | IOBDELAY= "NONE"; -NET "adc_b[1]"  LOC = "E16" | IOBDELAY= "NONE" ; -NET "adc_b[2]"  LOC = "F12" | IOBDELAY= "NONE" ; -NET "adc_b[3]"  LOC = "F13" | IOBDELAY= "NONE" ; -NET "adc_b[4]"  LOC = "F16" | IOBDELAY= "NONE" ; -NET "adc_b[5]"  LOC = "F17" | IOBDELAY= "NONE" ; -NET "adc_b[6]"  LOC = "C19" | IOBDELAY= "NONE" ; -NET "adc_b[7]"  LOC = "B20" | IOBDELAY= "NONE" ; -NET "adc_b[8]"  LOC = "B19" | IOBDELAY= "NONE" ; -NET "adc_b[9]"  LOC = "C18" | IOBDELAY= "NONE" ; -NET "adc_b[10]"  LOC = "D18" | IOBDELAY= "NONE" ; -NET "adc_b[11]"  LOC = "B18" | IOBDELAY= "NONE" ; -NET "adc_b[12]"  LOC = "D17" | IOBDELAY= "NONE" ; -NET "adc_b[13]"  LOC = "E17" | IOBDELAY= "NONE" ; -NET "adc_ovf_b"  LOC = "B17"  ;  -NET "adc_oen_b"  LOC = "C17"  ;  -NET "adc_pdn_b"  LOC = "D15"  ;  -NET "dac_a[0]"  LOC = "A5"  ; -NET "dac_a[1]"  LOC = "B5"  ; -NET "dac_a[2]"  LOC = "C5"  ; -NET "dac_a[3]"  LOC = "D5"  ; -NET "dac_a[4]"  LOC = "A4"  ; -NET "dac_a[5]"  LOC = "B4"  ; -NET "dac_a[6]"  LOC = "F6"  ; -NET "dac_a[7]"  LOC = "D10"  ; -NET "dac_a[8]"  LOC = "D9"  ; -NET "dac_a[9]"  LOC = "A10"  ; -NET "dac_a[10]"  LOC = "L2"  ; -NET "dac_a[11]"  LOC = "L4"  ; -NET "dac_a[12]"  LOC = "L3"  ; -NET "dac_a[13]"  LOC = "L6"  ; -NET "dac_a[14]"  LOC = "L5"  ; -NET "dac_a[15]"  LOC = "K2"  ; -NET "dac_b[0]"  LOC = "D11"  ; -NET "dac_b[1]"  LOC = "E11"  ; -NET "dac_b[2]"  LOC = "F11"  ; -NET "dac_b[3]"  LOC = "B10"  ; -NET "dac_b[4]"  LOC = "C10"  ; -NET "dac_b[5]"  LOC = "E10"  ; -NET "dac_b[6]"  LOC = "F10"  ; -NET "dac_b[7]"  LOC = "A9"  ; -NET "dac_b[8]"  LOC = "B9"  ; -NET "dac_b[9]"  LOC = "E9"  ; -NET "dac_b[10]"  LOC = "F9"  ; -NET "dac_b[11]"  LOC = "A8"  ; -NET "dac_b[12]"  LOC = "B8"  ; -NET "dac_b[13]"  LOC = "D7"  ; -NET "dac_b[14]"  LOC = "E7"  ; -NET "dac_b[15]"  LOC = "B6"  ; -NET "dac_lock"  LOC = "D6"  ; -NET "SCL"  LOC = "A7"  ;  -NET "SDA"  LOC = "D8"  ;  -NET "clk_en[0]"  LOC = "C4"  ; -NET "clk_en[1]"  LOC = "D1"  ; -NET "clk_sel[0]"  LOC = "C3"  ; -NET "clk_sel[1]"  LOC = "C2"  ; -NET "clk_func"  LOC = "C12"  ;  -NET "clk_status"  LOC = "B12"  ;  -NET "clk_fpga_p"  LOC = "A11"  ;  -NET "clk_fpga_n"  LOC = "B11"  ;  -NET "clk_to_mac"  LOC = "AB12"  ;  -NET "pps_in"  LOC = "Y11"  ;  -NET "sclk"  LOC = "K5"  ;  -NET "sen_clk"  LOC = "K6"  ;  -NET "sen_dac"  LOC = "L1"  ;  -NET "sdi"  LOC = "J1"  ;  -NET "sdo"  LOC = "J2"  ;  -NET "sen_tx_db"  LOC = "C1"  ;  -NET "sclk_tx_db"  LOC = "D3"  ;  -NET "sdo_tx_db"  LOC = "G3"  ;  -NET "sdi_tx_db"  LOC = "G4"  ;  -NET "sen_tx_adc"  LOC = "G2"  ;  -NET "sclk_tx_adc"  LOC = "H1"  ;  -NET "sdo_tx_adc"  LOC = "H2"  ;  -NET "sdi_tx_adc"  LOC = "J4"  ;  -NET "sen_tx_dac"  LOC = "H4"  ;  -NET "sclk_tx_dac"  LOC = "J5"  ;  -NET "sdi_tx_dac"  LOC = "J6"  ;  -NET "io_tx[0]"  LOC = "K4"  ; -NET "io_tx[1]"  LOC = "K3"  ; -NET "io_tx[2]"  LOC = "G1"  ; -NET "io_tx[3]"  LOC = "G5"  ; -NET "io_tx[4]"  LOC = "H5"  ; -NET "io_tx[5]"  LOC = "F3"  ; -NET "io_tx[6]"  LOC = "F2"  ; -NET "io_tx[7]"  LOC = "F5"  ; -NET "io_tx[8]"  LOC = "G6"  ; -NET "io_tx[9]"  LOC = "E2"  ; -NET "io_tx[10]"  LOC = "E1"  ; -NET "io_tx[11]"  LOC = "E3"  ; -NET "io_tx[12]"  LOC = "F4"  ; -NET "io_tx[13]"  LOC = "D2"  ; -NET "io_tx[14]"  LOC = "D4"  ; -NET "io_tx[15]"  LOC = "E4"  ; -NET "sen_rx_db"  LOC = "D22"  ;  -NET "sclk_rx_db"  LOC = "F19"  ;  -NET "sdo_rx_db"  LOC = "G20"  ;  -NET "sdi_rx_db"  LOC = "H19"  ;  -NET "sen_rx_adc"  LOC = "H18"  ;  -NET "sclk_rx_adc"  LOC = "J17"  ;  -NET "sdo_rx_adc"  LOC = "H21"  ;  -NET "sdi_rx_adc"  LOC = "H22"  ;  -NET "sen_rx_dac"  LOC = "J18"  ;  -NET "sclk_rx_dac"  LOC = "J19"  ;  -NET "sdi_rx_dac"  LOC = "J21"  ;  -NET "io_rx[0]"  LOC = "L21"  ; -NET "io_rx[1]"  LOC = "L20"  ; -NET "io_rx[2]"  LOC = "L19"  ; -NET "io_rx[3]"  LOC = "L18"  ; -NET "io_rx[4]"  LOC = "L17"  ; -NET "io_rx[5]"  LOC = "K22"  ; -NET "io_rx[6]"  LOC = "K21"  ; -NET "io_rx[7]"  LOC = "K20"  ; -NET "io_rx[8]"  LOC = "G22"  ; -NET "io_rx[9]"  LOC = "G21"  ; -NET "io_rx[10]"  LOC = "F21"  ; -NET "io_rx[11]"  LOC = "F20"  ; -NET "io_rx[12]"  LOC = "G19"  ; -NET "io_rx[13]"  LOC = "G18"  ; -NET "io_rx[14]"  LOC = "G17"  ; -NET "io_rx[15]"  LOC = "E22"  ; - -NET "clk_to_mac" TNM_NET = "clk_to_mac"; -TIMESPEC "TS_clk_to_mac" = PERIOD "clk_to_mac" 8 ns HIGH 50 %; - -#NET "dsp_clk" TNM_NET = "dsp_clk"; -#TIMESPEC "TS_dsp_clk" = PERIOD "dsp_clk" 10 ns HIGH 50 %; - -NET "clk_fpga_p" TNM_NET = "clk_fpga_p"; -TIMESPEC "TS_clk_fpga_p" = PERIOD "clk_fpga_p" 10 ns HIGH 50 %; - -NET "cpld_clk" TNM_NET = "cpld_clk"; -TIMESPEC "TS_cpld_clk" = PERIOD "cpld_clk" 40 ns HIGH 50 %; - -NET "GMII_RX_CLK" TNM_NET = "GMII_RX_CLK"; -TIMESPEC "TS_GMII_RX_CLK" = PERIOD "GMII_RX_CLK" 8 ns HIGH 50 %; - -NET "ser_rx_clk" TNM_NET = "ser_rx_clk"; -TIMESPEC "TS_ser_rx_clk" = PERIOD "ser_rx_clk" 10 ns HIGH 50 %; - -#NET "wb_clk" TNM_NET = "wb_clk"; -#TIMESPEC "TS_wb_clk" = PERIOD "wb_clk" 20 ns HIGH 50 %; - -NET "GMII_RX_CLK" CLOCK_DEDICATED_ROUTE = FALSE;  -NET "cpld_clk" CLOCK_DEDICATED_ROUTE = FALSE; - -#NET "adc_a<*>" TNM_NET = ADC_DATA_GRP; -#NET "adc_b<*>" TNM_NET = ADC_DATA_GRP; -#TIMEGRP "ADC_DATA_GRP" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; - -#NET "adc_a<*>" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; -#NET "adc_b<*>" OFFSET = IN 1 ns VALID 5 ns BEFORE "clk_fpga_p" RISING; diff --git a/fpga/usrp2/top/u2_rev2/u2_rev2.v b/fpga/usrp2/top/u2_rev2/u2_rev2.v deleted file mode 100644 index 517285e52..000000000 --- a/fpga/usrp2/top/u2_rev2/u2_rev2.v +++ /dev/null @@ -1,417 +0,0 @@ -`timescale 1ns / 1ps -////////////////////////////////////////////////////////////////////////////////// - -module u2_rev2 -  ( -   // Misc, debug -   output [4:0] leds, -   output [31:0] debug, -   output [1:0] debug_clk, -   output uart_tx_o, -   input uart_rx_i, -    -   // Expansion -   input exp_pps_in_p, // Diff -   input exp_pps_in_n, // Diff -   output exp_pps_out_p, // Diff  -   output exp_pps_out_n, // Diff  -    -   // GMII -   //   GMII-CTRL -   input GMII_COL, -   input GMII_CRS, - -   //   GMII-TX -   output reg [7:0] GMII_TXD, -   output reg GMII_TX_EN, -   output reg GMII_TX_ER, -   output GMII_GTX_CLK, -   input GMII_TX_CLK,  // 100mbps clk - -   //   GMII-RX -   input [7:0] GMII_RXD, -   input GMII_RX_CLK, -   input GMII_RX_DV, -   input GMII_RX_ER, - -   //   GMII-Management -   inout MDIO, -   output MDC, -   input PHY_INTn,   // open drain -   output PHY_RESETn, -   input PHY_CLK,   // possibly use on-board osc - -   // RAM -   inout [17:0] RAM_D, -   output [18:0] RAM_A, -   output RAM_CE1n, -   output RAM_CENn, -   output RAM_CLK, -   output RAM_WEn, -   output RAM_OEn, -   output RAM_LDn, -    -   // SERDES -   output ser_enable, -   output ser_prbsen, -   output ser_loopen, -   output ser_rx_en, -    -   output ser_tx_clk, -   output reg [15:0] ser_t, -   output reg ser_tklsb, -   output reg ser_tkmsb, - -   input ser_rx_clk, -   input [15:0] ser_r, -   input ser_rklsb, -   input ser_rkmsb, -    -   // CPLD interface -   output cpld_start,  // AA9 -   output cpld_mode,   // U12 -   output cpld_done,   // V12 -   input cpld_din,     // AA14 Now shared with CFG_Din -   input cpld_clk,     // AB14 serial clock -   input cpld_detached,// V11 unused -   output cpld_init_b,  // W12 unused dual purpose -   output cpld_misc,  // Y12  -    -   // ADC -   input [13:0] adc_a, -   input adc_ovf_a, -   output adc_oen_a, -   output adc_pdn_a, -    -   input [13:0] adc_b, -   input adc_ovf_b, -   output adc_oen_b, -   output adc_pdn_b, -    -   // DAC -   output reg [15:0] dac_a, -   output reg [15:0] dac_b, -   input dac_lock,     // unused for now -    -   // I2C -   inout SCL, -   inout SDA, - -   // Clock Gen Control -   output [1:0] clk_en, -   output [1:0] clk_sel, -   input clk_func,        // FIXME is an input to control the 9510 -   input clk_status, - -   // Clocks -   input clk_fpga_p,  // Diff -   input clk_fpga_n,  // Diff -   input clk_to_mac, -   input pps_in, -    -   // Generic SPI -   output sclk, -   output sen_clk, -   output sen_dac, -   output sdi, -   input sdo, -    -   // TX DBoard -   output sen_tx_db, -   output sclk_tx_db, -   input sdo_tx_db, -   output sdi_tx_db, - -   output sen_tx_adc, -   output sclk_tx_adc, -   input sdo_tx_adc, -   output sdi_tx_adc, - -   output sen_tx_dac, -   output sclk_tx_dac, -   output sdi_tx_dac, - -   inout [15:0] io_tx, - -   // RX DBoard -   output sen_rx_db, -   output sclk_rx_db, -   input sdo_rx_db, -   output sdi_rx_db, - -   output sen_rx_adc, -   output sclk_rx_adc, -   input sdo_rx_adc, -   output sdi_rx_adc, - -   output sen_rx_dac, -   output sclk_rx_dac, -   output sdi_rx_dac, -    -   inout [15:0] io_rx    -   ); - -   assign 	cpld_init_b = 0; -   // FPGA-specific pins connections -   wire 	clk_fpga, dsp_clk, clk_div, dcm_out, wb_clk, clock_ready; -   wire 	clk90, clk180, clk270; - -   IBUFGDS clk_fpga_pin (.O(clk_fpga),.I(clk_fpga_p),.IB(clk_fpga_n)); -   defparam 	clk_fpga_pin.IOSTANDARD = "LVPECL_25"; -    -   wire 	exp_pps_in; -   IBUFDS exp_pps_in_pin (.O(exp_pps_in),.I(exp_pps_in_p),.IB(exp_pps_in_n)); -   defparam 	exp_pps_in_pin.IOSTANDARD = "LVDS_25"; -    -   wire 	exp_pps_out; -   OBUFDS exp_pps_out_pin (.O(exp_pps_out_p),.OB(exp_pps_out_n),.I(exp_pps_out)); -   defparam 	exp_pps_out_pin.IOSTANDARD = "LVDS_25"; - -   reg [5:0] 	clock_ready_d; -   always @(posedge clk_fpga) -     clock_ready_d[5:0] <= {clock_ready_d[4:0],clock_ready}; -   wire 	dcm_rst = ~&clock_ready_d & |clock_ready_d; -    -   wire 	adc_on_a, adc_on_b, adc_oe_a, adc_oe_b; -   assign 	adc_oen_a = ~adc_oe_a; -   assign 	adc_oen_b = ~adc_oe_b; -   assign 	adc_pdn_a = ~adc_on_a; 	 -   assign 	adc_pdn_b = ~adc_on_b; 	 - -   reg [13:0] 	 adc_a_reg1, adc_b_reg1, adc_a_reg2, adc_b_reg2; -   reg 		 adc_ovf_a_reg1, adc_ovf_a_reg2, adc_ovf_b_reg1, adc_ovf_b_reg2; - -   always @(posedge dsp_clk) -     begin -	adc_a_reg1 <= adc_a; -	adc_b_reg1 <= adc_b; -	adc_ovf_a_reg1 <= adc_ovf_a; -	adc_ovf_b_reg1 <= adc_ovf_b; -     end -    -   always @(posedge dsp_clk) -     begin -	adc_a_reg2 <= adc_a_reg1; -	adc_b_reg2 <= adc_b_reg1; -	adc_ovf_a_reg2 <= adc_ovf_a_reg1; -	adc_ovf_b_reg2 <= adc_ovf_b_reg1; -     end // always @ (posedge dsp_clk) - -   // Handle Clocks -   DCM DCM_INST (.CLKFB(dsp_clk),  -                 .CLKIN(clk_fpga),  -                 .DSSEN(0),  -                 .PSCLK(0),  -                 .PSEN(0),  -                 .PSINCDEC(0),  -                 .RST(dcm_rst),  -                 .CLKDV(clk_div),  -                 .CLKFX(),  -                 .CLKFX180(),  -                 .CLK0(dcm_out),  -                 .CLK2X(),  -                 .CLK2X180(),  -                 .CLK90(clk90),  -                 .CLK180(clk180),  -                 .CLK270(clk270),  -                 .LOCKED(LOCKED_OUT),  -                 .PSDONE(),  -                 .STATUS()); -   defparam DCM_INST.CLK_FEEDBACK = "1X"; -   defparam DCM_INST.CLKDV_DIVIDE = 2.0; -   defparam DCM_INST.CLKFX_DIVIDE = 1; -   defparam DCM_INST.CLKFX_MULTIPLY = 4; -   defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE"; -   defparam DCM_INST.CLKIN_PERIOD = 10.000; -   defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE"; -   defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; -   defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW"; -   defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW"; -   defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE"; -   defparam DCM_INST.FACTORY_JF = 16'h8080; -   defparam DCM_INST.PHASE_SHIFT = 0; -   defparam DCM_INST.STARTUP_WAIT = "FALSE"; - -   BUFG dspclk_BUFG (.I(dcm_out), .O(dsp_clk)); -   BUFG wbclk_BUFG (.I(clk_div), .O(wb_clk)); - -   // I2C -- Don't use external transistors for open drain, the FPGA implements this -   IOBUF scl_pin(.O(scl_pad_i), .IO(SCL), .I(scl_pad_o), .T(scl_pad_oen_o)); -   IOBUF sda_pin(.O(sda_pad_i), .IO(SDA), .I(sda_pad_o), .T(sda_pad_oen_o)); - -   // LEDs are active low outputs -   wire [4:0] leds_int; -   assign     leds = 5'b01111 ^ leds_int;  // all except eth are active-low -    -   // SPI -   wire 	miso, mosi, sclk_int; -   assign 	{sclk,sdi} = (~sen_clk | ~sen_dac) ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_db,sdi_tx_db} = ~sen_tx_db ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_dac,sdi_tx_dac} = ~sen_tx_dac ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_tx_adc,sdi_tx_adc} = ~sen_tx_adc ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_db,sdi_rx_db} = ~sen_rx_db ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_dac,sdi_rx_dac} = ~sen_rx_dac ? {sclk_int,mosi} : 2'b0; -   assign 	{sclk_rx_adc,sdi_rx_adc} = ~sen_rx_adc ? {sclk_int,mosi} : 2'b0; -    -   assign 	miso = (~sen_clk & sdo) | (~sen_dac & sdo) |  -		(~sen_tx_db & sdo_tx_db) | (~sen_tx_adc & sdo_tx_adc) | -		(~sen_rx_db & sdo_rx_db) | (~sen_rx_adc & sdo_rx_adc); - -   wire 	GMII_TX_EN_unreg, GMII_TX_ER_unreg; -   wire [7:0] 	GMII_TXD_unreg; -   wire 	GMII_GTX_CLK_int; -    -   always @(posedge GMII_GTX_CLK_int) -     begin -	GMII_TX_EN <= GMII_TX_EN_unreg; -	GMII_TX_ER <= GMII_TX_ER_unreg; -	GMII_TXD <= GMII_TXD_unreg; -     end - -   OFDDRRSE OFDDRRSE_gmii_inst  -     (.Q(GMII_GTX_CLK),      // Data output (connect directly to top-level port) -      .C0(GMII_GTX_CLK_int),    // 0 degree clock input -      .C1(~GMII_GTX_CLK_int),    // 180 degree clock input -      .CE(1),    // Clock enable input -      .D0(0),    // Posedge data input -      .D1(1),    // Negedge data input -      .R(0),      // Synchronous reset input -      .S(0)       // Synchronous preset input -      ); -    -   wire ser_tklsb_unreg, ser_tkmsb_unreg; -   wire [15:0] ser_t_unreg; -   wire        ser_tx_clk_int; -    -   always @(posedge ser_tx_clk_int) -     begin -	ser_tklsb <= ser_tklsb_unreg; -	ser_tkmsb <= ser_tkmsb_unreg; -	ser_t <= ser_t_unreg; -     end - -   assign ser_tx_clk = clk_fpga; - -   reg [15:0] ser_r_int; -   reg 	      ser_rklsb_int, ser_rkmsb_int; - -   always @(posedge ser_rx_clk) -     begin -	ser_r_int <= ser_r; -	ser_rklsb_int <= ser_rklsb; -	ser_rkmsb_int <= ser_rkmsb; -     end - -   wire [15:0] dac_a_int, dac_b_int; -   always @(negedge dsp_clk) dac_a <= dac_a_int; -   always @(negedge dsp_clk) dac_b <= dac_b_int; - -   /* -   OFDDRRSE OFDDRRSE_serdes_inst  -     (.Q(ser_tx_clk),      // Data output (connect directly to top-level port) -      .C0(ser_tx_clk_int),    // 0 degree clock input -      .C1(~ser_tx_clk_int),    // 180 degree clock input -      .CE(1),    // Clock enable input -      .D0(0),    // Posedge data input -      .D1(1),    // Negedge data input -      .R(0),      // Synchronous reset input -      .S(0)       // Synchronous preset input -      ); -   */ -   u2_core #(.RAM_SIZE(32768)) -	u2_core(.dsp_clk           (dsp_clk), -		     .wb_clk            (wb_clk), -		     .clock_ready       (clock_ready), -		     .clk_to_mac	(clk_to_mac), -		     .pps_in		(pps_in), -		     .leds		(leds_int), -		     .debug		(debug[31:0]), -		     .debug_clk		(debug_clk[1:0]), -		     .exp_pps_in	(exp_pps_in), -		     .exp_pps_out	(exp_pps_out), -		     .GMII_COL		(GMII_COL), -		     .GMII_CRS		(GMII_CRS), -		     .GMII_TXD		(GMII_TXD_unreg[7:0]), -		     .GMII_TX_EN	(GMII_TX_EN_unreg), -		     .GMII_TX_ER	(GMII_TX_ER_unreg), -		     .GMII_GTX_CLK	(GMII_GTX_CLK_int), -		     .GMII_TX_CLK	(GMII_TX_CLK), -		     .GMII_RXD		(GMII_RXD[7:0]), -		     .GMII_RX_CLK	(GMII_RX_CLK), -		     .GMII_RX_DV	(GMII_RX_DV), -		     .GMII_RX_ER	(GMII_RX_ER), -		     .MDIO		(MDIO), -		     .MDC		(MDC), -		     .PHY_INTn		(PHY_INTn), -		     .PHY_RESETn	(PHY_RESETn), -		     .ser_enable	(ser_enable), -		     .ser_prbsen	(ser_prbsen), -		     .ser_loopen	(ser_loopen), -		     .ser_rx_en		(ser_rx_en), -		     .ser_tx_clk	(ser_tx_clk_int), -		     .ser_t		(ser_t_unreg[15:0]), -		     .ser_tklsb		(ser_tklsb_unreg), -		     .ser_tkmsb		(ser_tkmsb_unreg), -		     .ser_rx_clk	(ser_rx_clk), -		     .ser_r		(ser_r_int[15:0]), -		     .ser_rklsb		(ser_rklsb_int), -		     .ser_rkmsb		(ser_rkmsb_int), -		     .cpld_start        (cpld_start), -		     .cpld_mode         (cpld_mode), -		     .cpld_done         (cpld_done), -		     .cpld_din          (cpld_din), -		     .cpld_clk          (cpld_clk), -		     .cpld_detached     (cpld_detached), -		     .cpld_misc         (cpld_misc), -		     .cpld_init_b       (cpld_init_b), -		     .por               (~POR), -		     .config_success    (config_success), -		     .adc_a		(adc_a_reg2), -		     .adc_ovf_a		(adc_ovf_a_reg2), -		     .adc_on_a		(adc_on_a), -		     .adc_oe_a		(adc_oe_a), -		     .adc_b		(adc_b_reg2), -		     .adc_ovf_b		(adc_ovf_b_reg2), -		     .adc_on_b		(adc_on_b), -		     .adc_oe_b		(adc_oe_b), -		     .dac_a		(dac_a_int), -		     .dac_b		(dac_b_int), -		     .scl_pad_i		(scl_pad_i), -		     .scl_pad_o		(scl_pad_o), -		     .scl_pad_oen_o	(scl_pad_oen_o), -		     .sda_pad_i		(sda_pad_i), -		     .sda_pad_o		(sda_pad_o), -		     .sda_pad_oen_o	(sda_pad_oen_o), -		     .clk_en		(clk_en[1:0]), -		     .clk_sel		(clk_sel[1:0]), -		     .clk_func		(clk_func), -		     .clk_status	(clk_status), -		     .sclk		(sclk_int), -		     .mosi		(mosi), -		     .miso		(miso), -		     .sen_clk		(sen_clk), -		     .sen_dac		(sen_dac), -		     .sen_tx_db		(sen_tx_db), -		     .sen_tx_adc	(sen_tx_adc), -		     .sen_tx_dac	(sen_tx_dac), -		     .sen_rx_db		(sen_rx_db), -		     .sen_rx_adc	(sen_rx_adc), -		     .sen_rx_dac	(sen_rx_dac), -		     .io_tx		(io_tx[15:0]), -		     .io_rx		(io_rx[15:0]), -		     .RAM_D             (RAM_D), -		     .RAM_A             (RAM_A), -		     .RAM_CE1n          (RAM_CE1n), -		     .RAM_CENn          (RAM_CENn), -		     .RAM_CLK           (RAM_CLK), -		     .RAM_WEn           (RAM_WEn), -		     .RAM_OEn           (RAM_OEn), -		     .RAM_LDn           (RAM_LDn),  -		     .uart_tx_o         (uart_tx_o), -		     .uart_rx_i         (uart_rx_i), -		     .uart_baud_o       (), -		     .sim_mode          (1'b0), -		     .clock_divider     (2) -		     ); -    -endmodule // u2_rev2 diff --git a/fpga/usrp2/top/u2_rev3/Makefile b/fpga/usrp2/top/u2_rev3/Makefile index 867fb5cab..af93700c5 100644 --- a/fpga/usrp2/top/u2_rev3/Makefile +++ b/fpga/usrp2/top/u2_rev3/Makefile @@ -70,6 +70,7 @@ control_lib/ram_harv_cache.v \  control_lib/ram_loader.v \  control_lib/setting_reg.v \  control_lib/settings_bus.v \ +control_lib/settings_bus_crossclock.v \  control_lib/srl.v \  control_lib/system_control.v \  control_lib/wb_1master.v \ @@ -134,6 +135,8 @@ coregen/fifo_xlnx_64x36_2clk.v \  coregen/fifo_xlnx_64x36_2clk.xco \  coregen/fifo_xlnx_16x19_2clk.v \  coregen/fifo_xlnx_16x19_2clk.xco \ +coregen/fifo_xlnx_16x40_2clk.v \ +coregen/fifo_xlnx_16x40_2clk.xco \  extram/wb_zbt16_b.v \  opencores/8b10b/decode_8b10b.v \  opencores/8b10b/encode_8b10b.v \  | 
