From 8ca37f14c9e1012305d12e264a4108eaaa49c968 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Thu, 8 Sep 2022 13:08:39 -0700 Subject: [PATCH] Initial commit --- README.md | 15 + .../asteroids/ericlewis.Asteroids/.keep | 0 dist/Cores/ericlewis.Asteroids/audio.json | 5 + .../Cores/ericlewis.Asteroids/bitstream.rbf_r | Bin 0 -> 1603128 bytes dist/Cores/ericlewis.Asteroids/core.json | 34 + dist/Cores/ericlewis.Asteroids/data.json | 17 + dist/Cores/ericlewis.Asteroids/icon.bin | Bin 0 -> 2592 bytes dist/Cores/ericlewis.Asteroids/info.txt | 1 + dist/Cores/ericlewis.Asteroids/input.json | 32 + dist/Cores/ericlewis.Asteroids/interact.json | 7 + dist/Cores/ericlewis.Asteroids/variants.json | 6 + dist/Cores/ericlewis.Asteroids/video.json | 15 + dist/Platforms/asteroids.json | 8 + mra/Asteroids.mra | 18 + src/fpga/.gitignore | 28 + src/fpga/ap_core.qpf | 31 + src/fpga/ap_core.qsf | 763 +++++++ src/fpga/ap_core_assignment_defaults.qdf | 806 ++++++++ src/fpga/apf/apf.qip | 7 + src/fpga/apf/apf_constraints.sdc | 20 + src/fpga/apf/apf_top.v | 475 +++++ src/fpga/apf/build_id.mif | 16 + src/fpga/apf/build_id_gen.tcl | 171 ++ src/fpga/apf/common.v | 156 ++ src/fpga/apf/io_bridge_peripheral.v | 334 ++++ src/fpga/apf/io_pad_controller.v | 328 ++++ src/fpga/apf/mf_datatable.qip | 4 + src/fpga/apf/mf_datatable.v | 247 +++ src/fpga/apf/mf_ddio_bidir_12.ppf | 15 + src/fpga/apf/mf_ddio_bidir_12.qip | 5 + src/fpga/apf/mf_ddio_bidir_12.v | 133 ++ src/fpga/core/core_bridge_cmd.v | 445 +++++ src/fpga/core/core_constraints.sdc | 15 + src/fpga/core/core_top.v | 673 +++++++ src/fpga/core/data_loader_8.v | 174 ++ src/fpga/core/mf_pllbase.bsf | 126 ++ src/fpga/core/mf_pllbase.ppf | 17 + src/fpga/core/mf_pllbase.qip | 337 ++++ src/fpga/core/mf_pllbase.sip | 6 + src/fpga/core/mf_pllbase.spd | 6 + src/fpga/core/mf_pllbase.v | 261 +++ src/fpga/core/mf_pllbase/mf_pllbase_0002.qip | 4 + src/fpga/core/mf_pllbase/mf_pllbase_0002.v | 99 + src/fpga/core/mf_pllbase_sim.f | 1 + .../mf_pllbase_sim/aldec/rivierapro_setup.tcl | 278 +++ src/fpga/core/mf_pllbase_sim/cadence/cds.lib | 19 + src/fpga/core/mf_pllbase_sim/cadence/hdl.var | 2 + .../mf_pllbase_sim/cadence/ncsim_setup.sh | 195 ++ .../core/mf_pllbase_sim/mentor/msim_setup.tcl | 272 +++ src/fpga/core/mf_pllbase_sim/mf_pllbase.vo | 309 +++ .../mf_pllbase_sim/synopsys/vcs/vcs_setup.sh | 152 ++ .../synopsys/vcsmx/synopsys_sim.setup | 13 + .../synopsys/vcsmx/vcsmx_setup.sh | 195 ++ src/fpga/core/pin_ddio_clk.ppf | 11 + src/fpga/core/pin_ddio_clk.qip | 6 + src/fpga/core/pin_ddio_clk.v | 108 + src/fpga/core/rtl/T65.vhd | 551 ++++++ src/fpga/core/rtl/T65_ALU.vhd | 260 +++ src/fpga/core/rtl/T65_MCode.vhd | 1050 ++++++++++ src/fpga/core/rtl/T65_Pack.vhd | 117 ++ src/fpga/core/rtl/asteroids.vhd | 949 +++++++++ src/fpga/core/rtl/asteroids_dw.vhd | 442 +++++ src/fpga/core/rtl/asteroids_ram.vhd | 96 + src/fpga/core/rtl/asteroids_top.vhd | 200 ++ src/fpga/core/rtl/asteroids_vg.vhd | 738 +++++++ src/fpga/core/rtl/dpram.vhd | 75 + src/fpga/core/rtl/ram_1k.vhd | 181 ++ src/fpga/core/stp1.stp | 1745 +++++++++++++++++ src/fpga/output_files/.gitignore | 2 + src/fpga/output_files/ap_core.jdi | 8 + src/fpga/output_files/ap_core.rbf | Bin 0 -> 1603128 bytes src/fpga/output_files/ap_core.sof | Bin 0 -> 2455656 bytes src/fpga/output_files/bitstream.rbf_r | Bin 0 -> 1603128 bytes src/fpga/output_files/reverse_bits.exe | Bin 0 -> 86528 bytes src/fpga/output_files/run.bat | 3 + 75 files changed, 13838 insertions(+) create mode 100644 README.md create mode 100644 dist/Assets/asteroids/ericlewis.Asteroids/.keep create mode 100644 dist/Cores/ericlewis.Asteroids/audio.json create mode 100644 dist/Cores/ericlewis.Asteroids/bitstream.rbf_r create mode 100644 dist/Cores/ericlewis.Asteroids/core.json create mode 100644 dist/Cores/ericlewis.Asteroids/data.json create mode 100644 dist/Cores/ericlewis.Asteroids/icon.bin create mode 100644 dist/Cores/ericlewis.Asteroids/info.txt create mode 100644 dist/Cores/ericlewis.Asteroids/input.json create mode 100644 dist/Cores/ericlewis.Asteroids/interact.json create mode 100644 dist/Cores/ericlewis.Asteroids/variants.json create mode 100644 dist/Cores/ericlewis.Asteroids/video.json create mode 100644 dist/Platforms/asteroids.json create mode 100644 mra/Asteroids.mra create mode 100644 src/fpga/.gitignore create mode 100644 src/fpga/ap_core.qpf create mode 100644 src/fpga/ap_core.qsf create mode 100644 src/fpga/ap_core_assignment_defaults.qdf create mode 100644 src/fpga/apf/apf.qip create mode 100644 src/fpga/apf/apf_constraints.sdc create mode 100644 src/fpga/apf/apf_top.v create mode 100644 src/fpga/apf/build_id.mif create mode 100644 src/fpga/apf/build_id_gen.tcl create mode 100644 src/fpga/apf/common.v create mode 100644 src/fpga/apf/io_bridge_peripheral.v create mode 100644 src/fpga/apf/io_pad_controller.v create mode 100644 src/fpga/apf/mf_datatable.qip create mode 100644 src/fpga/apf/mf_datatable.v create mode 100644 src/fpga/apf/mf_ddio_bidir_12.ppf create mode 100644 src/fpga/apf/mf_ddio_bidir_12.qip create mode 100644 src/fpga/apf/mf_ddio_bidir_12.v create mode 100644 src/fpga/core/core_bridge_cmd.v create mode 100644 src/fpga/core/core_constraints.sdc create mode 100644 src/fpga/core/core_top.v create mode 100644 src/fpga/core/data_loader_8.v create mode 100644 src/fpga/core/mf_pllbase.bsf create mode 100644 src/fpga/core/mf_pllbase.ppf create mode 100644 src/fpga/core/mf_pllbase.qip create mode 100644 src/fpga/core/mf_pllbase.sip create mode 100644 src/fpga/core/mf_pllbase.spd create mode 100644 src/fpga/core/mf_pllbase.v create mode 100644 src/fpga/core/mf_pllbase/mf_pllbase_0002.qip create mode 100644 src/fpga/core/mf_pllbase/mf_pllbase_0002.v create mode 100644 src/fpga/core/mf_pllbase_sim.f create mode 100644 src/fpga/core/mf_pllbase_sim/aldec/rivierapro_setup.tcl create mode 100644 src/fpga/core/mf_pllbase_sim/cadence/cds.lib create mode 100644 src/fpga/core/mf_pllbase_sim/cadence/hdl.var create mode 100644 src/fpga/core/mf_pllbase_sim/cadence/ncsim_setup.sh create mode 100644 src/fpga/core/mf_pllbase_sim/mentor/msim_setup.tcl create mode 100644 src/fpga/core/mf_pllbase_sim/mf_pllbase.vo create mode 100644 src/fpga/core/mf_pllbase_sim/synopsys/vcs/vcs_setup.sh create mode 100644 src/fpga/core/mf_pllbase_sim/synopsys/vcsmx/synopsys_sim.setup create mode 100644 src/fpga/core/mf_pllbase_sim/synopsys/vcsmx/vcsmx_setup.sh create mode 100644 src/fpga/core/pin_ddio_clk.ppf create mode 100644 src/fpga/core/pin_ddio_clk.qip create mode 100644 src/fpga/core/pin_ddio_clk.v create mode 100644 src/fpga/core/rtl/T65.vhd create mode 100644 src/fpga/core/rtl/T65_ALU.vhd create mode 100644 src/fpga/core/rtl/T65_MCode.vhd create mode 100644 src/fpga/core/rtl/T65_Pack.vhd create mode 100644 src/fpga/core/rtl/asteroids.vhd create mode 100644 src/fpga/core/rtl/asteroids_dw.vhd create mode 100644 src/fpga/core/rtl/asteroids_ram.vhd create mode 100644 src/fpga/core/rtl/asteroids_top.vhd create mode 100644 src/fpga/core/rtl/asteroids_vg.vhd create mode 100644 src/fpga/core/rtl/dpram.vhd create mode 100644 src/fpga/core/rtl/ram_1k.vhd create mode 100644 src/fpga/core/stp1.stp create mode 100644 src/fpga/output_files/.gitignore create mode 100644 src/fpga/output_files/ap_core.jdi create mode 100644 src/fpga/output_files/ap_core.rbf create mode 100644 src/fpga/output_files/ap_core.sof create mode 100644 src/fpga/output_files/bitstream.rbf_r create mode 100644 src/fpga/output_files/reverse_bits.exe create mode 100644 src/fpga/output_files/run.bat diff --git a/README.md b/README.md new file mode 100644 index 0000000..9df5ee3 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Asteroids for Analogue Pocket + ++ FPGA implementation of Arcade _Asteroids_ (Atari, 1979) for Analogue Pocket. ++ Based on Rev.4 schematics. ++ Ported from the [original MiSTer implementation.](https://github.com/MiSTer-devel/Arcade-Asteroids_MiSTer) ++ Multiplayer support via dock. + +## Known Issues + ++ DIP switches are not implemented. ++ Might not compile / fit correctly due to timing? + +## ROM Instructions + +ROM files are not included, you must use [mra-tools-c](https://github.com/sebdel/mra-tools-c/) to convert to a singular `asteroid.rom` file, then place the ROM file in `/Assets/asteroids/ericlewis.Asteroids`. \ No newline at end of file diff --git a/dist/Assets/asteroids/ericlewis.Asteroids/.keep b/dist/Assets/asteroids/ericlewis.Asteroids/.keep new file mode 100644 index 0000000..e69de29 diff --git a/dist/Cores/ericlewis.Asteroids/audio.json b/dist/Cores/ericlewis.Asteroids/audio.json new file mode 100644 index 0000000..7c5daf9 --- /dev/null +++ b/dist/Cores/ericlewis.Asteroids/audio.json @@ -0,0 +1,5 @@ +{ + "audio": { + "magic": "APF_VER_1" + } +} \ No newline at end of file diff --git a/dist/Cores/ericlewis.Asteroids/bitstream.rbf_r b/dist/Cores/ericlewis.Asteroids/bitstream.rbf_r new file mode 100644 index 0000000000000000000000000000000000000000..2099cf5ef41bbf7760dad576d60bdbea3e7d7b88 GIT binary patch literal 1603128 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

Chpp> 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%0AM-xUS172f=;6xb+OYMz*5zt@x1;Zr%U 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 z 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

$0e;1h}0c$>8$Ik%p)W zfheP82r)4wZDb+w;8foOAev+#h9OA>p+kT52(Pk)m1K91(Y{)1)F!Y=r@rHt@^JN_ z`{uV?{5zjH{h!wB71u1%fl;%*F(}`{$1@wX>48+6BBEdjSPQgjSGm7jsJIaH^PjF8 zxte;JOdtVTJ;8>4X1FvqY(@2A4~%Z~Awa?BM&olIB!0{-VLDGCL3bL{C(Jlu1Zp-> z!5}U%Lw{81(;!?IIW;i9`)6Ny?*m76#6jlJ{!i-xcl`lN;!)7k(3uG0#r{=a8lXX% zaZuh98xiQ+q#Z>G9iNpQi5qtO15d6{Cv$293NR8@Hb)7zvs#gTbsm>*H@dI{&d3TMzg!wUq*!Hcz3}ls$Neo{A+*jvY2uIAercODMFtG`>;0YCl>mSA z>v{Y1`Tw68o2%K`-Pto|&YU?j^P4kEJoGFO#n_T?WCa6@WwV5RfmI%!#Z@~@H8n}J zfNnuFOi=~%FqMhyMHR?1$TB1iEd+&!Xktqlmex!f76WTRU!wpc0^+NJqBgoL6ymqO zJNVao-}})qx|8K2;Xqd=!s|0eag+6qKnX_lyR{{~>B(pM+_lqHd@O zN-my_4e3EbQi38Rg)n_E&ZPIyc&W&UA&LYVT_TS4NfmqNsc$EWaUUQeq*JRE4Qg|s z(iDWB|IM49Uhvl6yo_5E+VM}jCPJ*hPDA1Z<-&{<;$?6+Rlp*80ll!v{!)~cbLc9_ z^~x1kMHj5)QH6#iBav+%qB}^u^v5gG%i=$Lo*qCLl2gXQk*!iV>$KHAB1>B?% zlF}~3iUZ@HF)aKv$uo$9qA^1Ph}2Mdl3{R#Y$j=-g#zAYm8*vJ&59zbj4Jj3rdII` z_M{~p)Fg68YRIGOr+jDq-gTFQ$FBY*0*E)L#E?1^(WLURe8W$NZy-~mfI_IEnN$ZU zNE@d!0?jZ1c^EEuICP(6g{c^aSW1m?WWg_%U;p>Vh94l3(+*k!0I|rAM3^Q~SRuT$ zs|`Om)ZA#KI{X1q4TQ)<-KfE%NMKQR14--xe<@HcP)ld`n9w0Erd%Wm@yGNF-&Ehd zbpc&aK-&cQ*w9Li&&O6#=tZ=$w2MXv@UqZ`RIM$YTOfF}c?mlLq5Z&sd)nzkaBnIL zolttH`gUr`WVMuo^m31kH&QNCyNU->UnOk`TN*vD8dH%kY$No4G<^@-4S{s66~OjwvS;j zrFO{Kw4=G;`#lmm9q<}+sYN&^gqofQ21770(cogE7m6(nsL&Zu=^iv!ZB8>Rd{;9- zBp8wOv4$cV3#dmH4Ktg>`6Dpr64?qjM@Nx(^kK|Xz^L}gMM9<2vjo*U0UtW3t)*!I+W^FB}GLWl?>AZ z5=AmBGnPJ(IhX>Xitvn!P7Hfyb1LLS0CrAN%8`RF+z2l@9vb6# z%+B_?A~+@OO;WwJ6$s8)1*f$n;_Y=8W~+~_LTMLsOqYrgFJfch7R(0lEv6T z9yt2q@cbW8oiUCmlC>hz9|z z&zF9w=A}miST)0q@6ygq`_ex(A_>suc#DbGOTF>H4lHfoOI!}cl*4=s`0kH;asEUGu5wMz0CmDiRQ!#)WUlE?|G04s&LE7UuCS-<9B|;TF(fa-^=H<-G zOu_^l>Ctn&Tf>*t&bV@h(Xe+}5!K0{}E+^B8!ryk$jb?uoR z$AU9G25YnK8$&Sbi#9NDcl$frv_XFb5I1J?IQuLP<|x;f0RzC!^%z202j_a^wkM1I z!4PU)qP*VKGN5l#K4%wg?)JSobe0HC_F!P^46t|26MX_(v!gv)=xC2~+GM}2e`*R4 zy_+ZOP;1+?bJw7)hfnqh(bnVaqd3`PPk6G&lGHl8uV@%<{hafANd-vr)xaGT18Khh zUR%FTsnY%#JdmtY6IN@-H*3jw%@E-FV$BW8F#>+S8XWBrLd`GQf2cUi<~kLVjH>tN ze79r4o4;=c+!si>O7@!}(Oa$x3hPqd}qTUiNPsq?x5e)+#u63Z7(QRRh zhjraB_h>bM9*C&)i#WO-bQXA(sV$1e%xtVyjY-f#8aZGPMEpa*t9S-V$$9tm^B0Zy z`N=GqerVS|{i8T~gpQ)l*gb(?3L3LQ&pDXCg82-ZO!N*a9%JN{dvY65fgvP&m!^3; zVBkj4VL}eMjuUAQLxW@6fovsYgSvjwJ_c4|F>frW`0Dcn(JX z=n;;CY!smlK6@&Yh@St`-|ajbcV<#fEP#BNGmMJ#KvPZ|xTh1nD_+*H*p9x>V}-!> zedvF57}z3AIopcqVScw9r66YFC`_cX$?6X3X<0E)B;u}w|7s1G0zd(1MtXo1gZhu2 zv?CexDfAH9%SkvHQdztSy)!yqqU?_)Px`o;Ht%XnQ8^w2AY1R4b&dP ziy{i-!fHU#3`s3O%}_jTXw#J>PC)p|*QX4|SN$X?4hgmhD+yO*s{@S3M4A|nPFMqn zV3{O*SXU;@M9ZYNbYG~*Er4x=IQ7-Aq7X>zX;Q$%Hz27n6flq>>0$NJgVkD)3_=`j zFFDZ))A!=bu>GjYTnt-O>{(z#E1}SfdOh?4NH_7n5dYbC&es0xJF8VnBWlSq4d_M; zgFpo~1_qTxw~DbU3@np~f+>L_g*4WhY|(;}kwR}HP_q_QM5vPJ`^bjTg8{ID8<1O~ zZ!ZigjLKku$>LsO?*duehAYfB0YD_Wkbb-k>4~~SqnHa{cNj1$7?%_f${=mY{9R!^iPi7WGkQXe>!xSPXNSjsHv5I3l;5r z%b%;@sGuzv?w-SeK9BqBG9A}1LuSu?&NqNS+X7Tuc4mOMHVXCTi3f1ZkT^qY2M(-H z3esLdul0E|B=5U*MVjXy^#OJxF!lj$^^8~j`e%*8|E--$qBGk*8@REqoc4T5 zt9Z$6r&FW9<8u>+{8;Z zj`~T~Zc^sq^r865H@;YY{=&;)h2SV-Ge#{LA+IQ#9$3-|o1AGSf=TA6A(L8yFEVP# zZO~yf!w9kRq5Bu$F2%*%5-1i&rCiW<1vF#o5okIwrcq1vk`PS`U5tiiTn-sQJJZm3 z(>>)(zY0a7(eyIfJ~FrwP0$P*@itt?(1y`&y{HSdB<`gzI<-h=r6SytqXzAHK?fvS zRDn`JgQCLV+w@;Mo&@zRD4H7d4!}3H6}Hh$WT=Qe=q#Yg5`c1{d+Q_>t76MP8Z%Tj z@q>nVh2j~~u;qetuKm-0u=o8{DiSGRwhd|qY(xvAKAC2nXs!rK5}Fb%8@W&~f;Q{W zL)79~%SUv$gU+Il6IIqzsHBx>o|YOtC`T#+ttCM#hYDuF(0p8bOr-&z%DOc?#!7@g zP|hgZrMu=o@R|5y+bIJU*Z>A(F)d0OESNGQl86=z^4JGx*c5OZRs^D~a6@WW5P}kl zDn3I2@)1}OP$`8(IMVQmK)rz{rr5Ip&!Dsupu`BvD5@wISdG63Q5Rh|sa}jnqg&s8 z`>k(&@A5+n=ni;gir&1`Ovf51&M;s$R%M>kcl2lj=|?IoZ%k72ni8>;Qkg@agJTn= z8f8x|nMiMRGQt73Gt(yT$T$lGS@%Wrnc`F%n#5B^BC08lVm)VV$95cvFxg6fHfQCU zfxi=;@|NsWlLzL04!yd~K-sf&FS)BkZxck!$ZXIHkB@`Z;H9UN3m+xd;1((kJ=+aw zYAz)xO5bb;sG^yNQ#;gThJe}Mo;odCH`3K zGPk5n0;$nh;wR{`7&zPBoE>6j!(TB~R)B{QgVyW4pOg+|KL@`y|q-eCi1*J%NYScv% zQ~=BpFX|!-u_di09X$Do%eOuI^4sH=2rOI&ZH?a2!nu92j>F9C1+QrvLX0;0N`*k$ zqx>AO+XPYGiH$lyX&=BbY)9=QJG1L*fL#tS%GcKcrv0EjLGGKt?%3^wQJ(0lz-c2t z;FRf81k;}6*w_0dx$YbNxduK4m^OOJHhd?J8>z{D`$gNi32^9PoVGJ9gJaly^`foN zex(qmP2ln&n0Ao?%BAntC2BVypJAN#)E4tHaN2e9TmzlsJPmy#9jph!)InRCtSvLp zGXkhxs)RUo;|4u{qed8RAdBrJpyfw=Y?5Ut?NN3;fwY0e{)D!{u5_mO3|USvbqvt7 zo9gH|H~LD$GzB+}aoDg$R80nWoZdlJeK$O|;+M(zOIpBtScCw+z$j#cAu_ETEr@u2@&?XcMe^K_+Mjfo5ZNmceE&DUs~=;5O4>0s@QB ztT>s1>?ImgkPeJucmeZtFH4N;uUrJz^8?sK^^+s`w5Oh6qVHdbyzv zh#GXDiDMXW7#i9wy@E+Zv=>^d$C@+k(t^07(L%qWAnd>6R2te=c?NfYK1ttl;cZj} zy^Anh9FPMv2N@=4&qeqwHSX9_Wp@Ij3}%_2JTydt@@d1U1oRR87-h7R)q ze5^3EO)i{#tNWgdJMY2wSqN>D+5r`pR2s-rdZ3)uju=!8+~%Tiq;7Z8a;J#8DTlR% z=R^BssA_U62d-2N=u|~ehdDr$0M(CA(6o|Mc?!`qH7|qsv z+tG>mv8g^Ll3@ZIaM3B_j@-doRisjFkK#GhEqU0e(Lj$OU@{U(J886$GxwROs5*=` zFf}cz5Y}Qc1dgL_M&wXE8_?e&&xk3E4bj>+_yXYK)TdbJIACC)^T3iUY4n#Zwc{03J`Hmb(D8w5;2&ul zER!*kss9Rzr@zQj#{)!dP&QNmB2M^~J{LDoKQty}i#BBFUwEwXvp$U;P7}5r#Ma`L^1ZFZ>!Tq5umfJy)U8h~m%8%~smeo8>gr8yd|H zG%rB4k+iXnoIYn`v*;;Y=jxPNXR42vip1Q4?yN#1f@%y*T+Au8E4%E(~H#|xppmt$<;Ry?KJ^AFidXM!zJkSL@CY%3Mdw!pH zz&nhAPjWlDm+V-h$SFMTeOK|Qfjf6(vWipm^wzsS{mVa(cU=m2f|WC32pMDW4@c_c z>MN0{K?p@VW;`g4=CObjDm_KWf6_2~o7($wcFPIVm6%4b@^de*r7Oq9=MRe2% zMoBQlafe<3@G`sy=HWXGIZl&HRBQ(6-iyAEE@amM_#Fz0o^uq3atJ@`T-^Hp|NB^c z!k>g?`^Z0m^nc_nN*rpLh<>mUf9yNMH&_!4uHI8#`r6s}1%lCC2{dnn)=1qIOC(x` zHOX)*K;lqq3#g$h5&u{Sdl*#^Rl0_#nnNu}5>=$Iz)C5q&}i&3XmJ4J+npCRV4l?IEcBns4E_ZYj6kCb08!eb#Yfv;7*si zMs)It_?b=bb+~7hZFBxxQmAbMLY^Kk1&2+(ETXrSE2crkeVbOd{uE2<4O zdQM00gZgOqh5o%6OYkfKeIw9kSkl^29sl#2aLEFU4bjX)mKkI(WJQ&w5-bT(tWf(= zmpWfq)TjzlOJJENjG*xV#336^q~xfV!RR?=%41sO9V#SbY>LoFCcsU22NM%XWsHT1 zC|3~YSV9J`YA8f3aH}ee){`<5CQYyn7=9|AgEkSUD@S<~{VJk#C`il1-m*&@a*o*Q**UA%<=*#bHlT@3?u<7Gb~4ghNo2HMCrA-;@K5W6C*OD z#a8BE`BD_!lnFMflplSZeoregOQlALI7<=t;!RXpQdFZbM+OO$N1k5K89D!O1`byBM5pEfkY7CRYA|zzwGLMZ;5}KL%9MrS^=U zHZ1lKHD1)C8Aw#12pog_w0qoJLi4pi26)(VEU7|~Uv%9Yzq{ex_}7L?Km=jwi6Os{ z1qNZzaZI7mP#Jk*K85%PQp-ucQ4|nIGbF4iCQ3|C(WCT?O3$lQizo_q>4JGC*aQj1 zFJ1u)1Occ3D)$Q_zAy2S>ByaH|4$&Rq_&slui02(^fTFQ6FCZpQanb>aVCNU3L zk~*F$+W7A8J^y}1d=5Cnf|885#6?`xrqrm3J}K&?RVXIXCkUA0raus!h`U2Gsc6vC zl!OT{0Jl+ts+f}%6YMbn7B|UX2$Ttgv7KBFqG8Uik7*fVIE@=HTofXd0rE#xq=eBe z*g1eQkwDpwvj_Er-H`Zr)LVii9CtEW8JiPq@68`PKXHBh%da7kg>dKs{zo_4LJOeW z$AS?A3>E5k(Yr=e4ZVPnqLt2==VF&4-Xs*8sDcjkW_0RKa;K*X2%;)PU2*^|C^#L4 zCQd{%rFTRuQ;>H`CM|X`?Ihp<)Gq~Oj#diZj2D-n73Sq5_d3(2ya4w>OOxXdefjOr zm~Z`HuMh-kwJs?n86i96^xWT zs7>2J^##2GeH6*mo8YFl!zJoycD}rWQen?PDV3An&2{8p!;+eI1#k)UxKKVS zeG>aODNLNk%D1eXvnqCzx@?i^Z@BC5EBe=H1Da*zj0 zM!~3bSVhKy22)H@A)fvMT_9-mL(Q7iK3yiLm`H1|%PZ+a zwH|&U;CAp#P%MBK>7DogXhqGZJ1aw6L#crltx}ch15=xy!jxoWN=yV;g;hoTMMft5 zvI@Y5Mjd|g6b?9gjHNLNMJ%FV6c#M*k#0kWiI?%?qF^Xzm^Z5rsvM@=SO&xdXf#rI zDkad}z*<9uaVRJ4MWcj8EHI&ja$rvaAwwTv5{I^mdk(XrNyqec6r69}`?gX}IU-O| zSR{zM_+sqkP)OM6dra^kVDv%IGbA^7Yyl=GkUa?>Zqgq?hC>SzWl{wS!#PtI#>yFb z?Z75A_P~`V!1+Y{_^da_yMz5hl}aCF_9$M(-lMSR53^+xIl)KSm+%Ra4TPZOQUwvo zBnPNpMqTg-3Wpow5`3KK!hO-eB!bEK8%sRr2J|!VE^da;2txdR>*9~h-?k!+0_HAV z2s>(YKeF3^PKC}9A$ccD5X7|MA)0U6h>v&*jI0g-bu0jZYE#*EIKOrwPqQWFD>}g=O94Ut-CbdY&6@Ul8 z?jr|075^%Z?1Mx z9E9r^KeVg2yYyTuJTKo%ZngW=~yp^o?$$EPfbXw!5d) z2Y#tr>)@BV=89ixf`B6l;9vq8PZ`33*TJWDefRp)z&PiZG7ru}vDSKu!Mis6Ll4DD zfd!|uX^o|TfR~Y@ZGwQG?v;nZ;E07_@GCKLwY>=CX+1ks9&#Z5X!XwC$ETeQ$^*PJ z@a^5?Exhgt^0YmOa&$3I+Y}2tZNqPP5UWFspx`LdAVYu?D0~(`;gbmX{U*7mUXRFG zc-n@a>iJU}&cf4n7x3j%7q1CCZ4d4|NFeI<3kOdhB)s%+iG66xee(KhK}K>T!H|20-BtO>0DPkaTDj zpx`S?01AHyPPgkR&qM2h1g{2g9+6icM+zc$QA`83L0|nkm-osfW zq<>c@B3(p3Mc@H_@buP9;Ai_6KRDVJ-x5rl2*PV63L(I6f6%`Ie+DG(oR)HKPG$!~ z1bB(k{OO&g`gINPZ+(;GTIBZnc!&V6@irgzdkSifY#ws7ZCr1Uhda3brcCuP0DN85 zVAA^-{I`94qZZ)5M@xET^)USV6}Z~2B>1=dT!RC6#YMY5x76PGpuNan;#Y!{uOzeP zsjFOVw>ZCV%i8MD)Appf_Mqfy@C813*wuCybG7}bmh(4ya836UyB6T@%G*kquk9I{ z{}m%+R^o%sC$$~(3Hu!@wre}~!^t?l_v>qr-^zL*za_uY9uMHRt1wsFry7jw^#TA2 z$;Ws}S1vPGA>8+SKW}{T!T6sH@jPhFSN#TE6BNq7AE3ES_7t@1aMu&O7WSE89#EJ; zfPPL4#aVY3n_qVNtu5Prwm3{hbpwK-B(?EAfR@oAL}=iSw#ywwsZNU-_@WKbpqS1M z!H;n32kc3|hKhi@zdk7hK91Co`kDrjK;AcMF3=*ti}=|DrRD~#Ho#bba2W*v=n=og z9EsF{&-tMvUZdCsQS0njGW5gy39TKU?~_zY^}1Z(M}YlwMv%YVQ_3}Nc(s;{1xN45 zyI&*NCy0VKbpULZsUwlve-p5nL4n65f=Dgrd@h-@7ZEC zVDfcEaMO5Xvvj}RWv8-}{HDws*faHD)wqsRN)||>j%k%DIZyml_OiZdx^kFqB!)!Ku;0l?6pvZc>sx$W!hhXciRecEsAOfw)U2KF*yt9(}VW!XMajyqT;sMM|^LcJ#zM0AN2rV@n@_-WwR|0N?w`b?`yL?eO;gP zj-6x~<77RYv)(^2KKI`q-qrq1m;$*&U}UuOknVf013CCd$iSOD~gH zUYo76IY#+x?V_LRv=gh8yNPhXfQ%#kgeW>bzQ0tikh9~f)= zylRp$E(=E&y*exY+c)q81+uSTebSyCzzl|OxErV!7`VlI6L)-n4HNu_Tfh$`-wqKdJTDO?k1?1T^$h={{ri73TD z2|H_vM*P76ttdWbUft|_H?L@VBkunV9;AT#m=a>e&cbUuWuRf=o#k+aPNFxQna9_H zZxO*)vlFDzt_0#IY<>Jg`LE_D%-|*XXX1TU2z*(%ik$%^#C_PbLev{5yR-BB%$I-E ziCicUUkLSs;$kbLOJ&5m4O@r$5JPD(m2oqmafnj-;uVq+B?)3=(%*oOpiuoVmAH$6 zM9QVNqaK9T4XJcy{QSLdsILvp714|VRVuA0vHBGd=(9v3Jl7CiL7ig=&5FcEQj|!N z#%|LaxS)Y<5K!v@Gx3CrBv#2V#qm_I!hjD1Qo+82*FCCh8paICrjUK}^{orAv)%Z`d$*R2={XeG(G|!H7@)D0!l2#>=1#ewwO>mt-Uud@ zf)Y^62x5rf0>i?<#Q|$eAlO7YwRq9M7)_;Th}^h=VPe_e~4PVh(PU$SQp}`sN$)e3=wt{{RSAZTE+Q7A3lXMBQPF0o zq9E9Kku(YtDT}b?14W1%rU?E}6Ghhefygs?r598zITG1Sc_4wkOCxA}7&n6~*u*%a z8fxnF*Vom=TfZd)fiad*%4XqM9SrGw@Q10;P-5wG7$qZTreeV+`bbDE>Xh_5F%*`m zi705GyF-*BX5eMY#9;KYn<~ixm>OzS4D~T07ggMIV$&u~Dr<`0xE@bXpnckb2w>KY zDJpOk(;tBxg4H2etaZ_6K8jZ4gU>TsF>S$!#UF$#I+f9g!VzBscCcTnlVK5Hg${}w zC{<_1oexj{aXkCilo!G^#8w1a6%}bYDtk2)0q`Al$146RVwp5hJqDV9%7?fq5?4Sg z>!}bW&IUCPI*GOPAe&|gs$@tAQtpSTEt3a-{#5+l8-*YYX;)mep`DSqqOUR;2?EqB zQ+gkym9+ED%^N?EOd#V|jptM-*gDs1_gwN5dc!gCzh!%6mp9ujiu7`|8*_k9W zO&~DFB2NfSP$NV|z!&E#EgQYwSrK#4JW8A1OJe?c!e%_^A@O7xoGh>AiHkzmi& z^fDXBK|MHSH+}We-+u4=-xPvCe#MwPklLo#Bg!^>nh_2%u?X#knwAU$Hec@I+b-!_ zBtRUf<{<=l%F8VgRcb?+5Jd_p2w*x`oa6(%2!0V2Krg1VUB=@a8HTtbLx%QFsmPbj zya&0^2MDtau!NpTK`iCzJ6OE4$(fBU>E2&@) z=0T~!Q8x^pkUGNyL<-Ry1d!$tKO7aqgpZ|}q$5`L$s-pBkDdR61>vhS6&v&tG{Qi( zA3<`^p%I(msRO*Bf8Z)6sEIWW(m$5XL^1Vm^l#W2Wn~ahFgN(*wKNAxNdryl9 zy*#h%A0La4-x!h%6--SkK{Dd7hq`6?ZwI&zfqqQ zK=em*dWh<<{Rr9jzy0uEwZ#{mVy}^iZ3x5}rNUAkY6{X4vOKVJiTkYi;SGTGm}rng zH%2Da49(0FD~IJ7EiI6YoQVZFCK^nPf(nJLL-j-L!EK`o!__wAh8)onHZyUCxDubK zYX^0gr>;2kX#9si009&Nk|BE9RlNsml$1qaNHY3NlqoRoR1ytvmpwHsA5hB>6*OkI zBd{ii=yqua-ZPOGVIirDA(;;87SRypfbgih0rzrI_rsJ^v5K;n|KZEu*?W2VUc8Nf z@)NW1QFv|%h`|^whtGTz;U;A;%x=6JN(k|r+89I_rzr#$0?D$dBIB#*2A!f9cTL z`05R~K_Q@>S|z(AbDK%LOP3_q#D9{MpiMJ|Lue?K1cmx<`~hnrj6^l53{hoO0Nz9B zU8)Q;UeHOuR8jO6k?aOiEyO&Px(!D1hxE0WEBn-6zWe!?-}(AB1N_7XW#rz+21}MpE@+TH>AC(XD98=I1bT38StrNOyh;xn@XO;2cZW8HU;8M zZ9pZa;;k#veWhmyKR`Wu7W6{WhleR*s0WdR78URttHn%80(RpGkWrL<=a#aDo$=%# zJ&AzN4`~yqL9(eshMONp_rMjpsk*^Ks8`}QlLiPF9V^3{sA#ep0KcjAK@6!zQ1n2? zud-E{3I{O``kp|{;~Hqz8sQ1-22c33^TO@zW-N< z2Un>cKSE++2`1=6T0EfsV;PUS5t$lC9fgfl3?^ipvX`c;+Zo?oA5hO4OAv*MhFGB` z(JzYxf3Nus?;#CB@DYI|`Qrj;L2%e@7H6GI**|12PJiLe&Bs_e+6$U7SznOGz(QbR z0NqJV%4Jf=+7;;zj2+RLkhpk`$=*l3A`+`rW9~*0UFzz>z6e#%9zh!3r9eu|C2fr) zPbSsf??RuL;50r*$;SegB&a1u-T2qPc7E5kCx&?tyo~GwYB=;Q{9YB9yj^w8n1gbC zD9{b21%jLGIrb2=*0n)Yi4gi_MqI2cyX@W5@y|VeE1U_ z>m(0o#z}m>1Um)i8OamgbZ4|gkH{N~C`EZar}VoUk~ti>;&lDErKoS~cYk~FwHGe+ zK=%aP*h8615oj-^-&S@g+nuQ?^tuqB0~l50VkI(qjRY8x+mk~pA5g`tOP&^d=Qu&n zM`vg&T`X%r{Q6YDc?<>Ylh7f``vB~VVIN~MHM_KEi{zGS}=uUmI*DthUU2}4Z@P47xT$2c4?bRba=f~X=V)`-LDF|<2XxH=3y zIg}Q^;pqD%_q_9+1w#pfm%_pvY}S|>gRe(HM|61MjyzY7sRXejY|;v&Q)t=|HI}dm z)l#ImIjR$WGb4|TriikBqT0sLa}ABP(~Y= zfbmbku)u0y)Fq=xv?;fYkR6My;&W3MZf}0!oyq@-7g-ptyQmtbTw%y?!iOT)FqA2= z;1PyrzJ^Pp8onHpVGf7!;Xm;QmK zU6gFoootWJ$o(q#7coV%-mN#S4kwz3SjWxBGJ3>NagJOnnL<-mY5XW}0PIRdMP!7! zrfTS%^r-zz()2gmyBCxP_xhvWAoFvt95nDfi=#ChD_sfzdjQ%e|tp?fPFg z{^6&t|Iy2M8sQTKcFGm>kvim0PU?M{3D*iyd9tK5%cjz=S|f5%7b0VCUy{{4C+cTa zU5L6^rq!huwZ{~76OuW0dBiUA#H`X++8k{&26m|W?vzr6rQEv8v}I3CRa7oDgtYoi zw@)3cboCKRUP=*WnqK|XJrV7UI}%$Luv0(~n%t&saIa?x{XWpIwp|L&7wJv;JxgzN zsx=I^EFt3B%~eLTIi{z@a7XIkLw|?wj5VU!qKvlMswl0GjWgiD{wve<3^tdWt6zNo zC)+OlZ&e6F)NDr7PU$#=RnWnHTN5&o#7GG`3AJMGP{GtFtZF6dqD^By2Q{GJbS1V4 z^%M>^KxO!e-73cSXsxI(%f-=p8!DBwrn}gZhn9?zMASXLBMrFG%?_L&W1pBn0i}%D zDl~yD$dYh8Wh|8h3ujTpQsA*cvXFJMh9Jz8RKz1DF-Pa+~^C*)AOFoRf=!*BXntjU98;+>X?O&c@? z2?7a~ju#-layQQV%RuxfK|rRojh2ozHK9i#f|$+B($ol@hK?P_DhkKEwDh$lp?{*5 zq0s^4f~+}$=E$H%_`#{ax8o1}8S)AOnnP0YMKl&RfMJ?_NJF71iw2mCuY(_~XJLh* zEAq03CXTYBErGfmO#)CD>QRC#K~%#CL?2IrW){Th20lgpumlnR1knPg0L5PY(zkvb z@4p2p6lTuuyI%5cTc+Jpze98DmL*ftt;^Jz>ONhvRAZ#{s#Y;kPi)sVJSa36*~GfS zjrASgNY6HKpkY$3H|3-pDNf2KQ^HKg&PW(R*=SnPT$`O|i#J;8QCr?G4J6Ix1Wr#} zV&v(cHH8Y_-3Ks>YgjW?tM;DNZH~P;vw4i3H+3|0M>LU6R{1F$6uj4q)%9SDTd61a z`CDXfiF~{`J4((!AkOiAoe}i5RhlL!zv*x;ryylHb zDP!m5EW4qrYUZfpYAUHUTi$lf>M8H2bq6ngz4Oc0?I;gefzzELb&g!xq<58A*;)hb zWTzR)6)OX?jZA({!A2lK*kR?ogiv3PeW-PI!VnJVIlDB8rrIngJv*yPmUzGweO0V7 z_L%rE9sY;|jz^?$nlZ+UGp$r%+SaV-O>k_N$jddT$Wsywf3&lv%b6Fs+rbWk$Trk= z*6s6jUr%J3eJPVjS&razO-bdvjaZ(yEb&3x#Ur9@mro$Mz0R<5ZA#SgY)J)O-e}OO zOvtmxR#;G_#@Vkn7T)%W-~V1v(5UMq9X;Bm>s!#epoxq@&CNi#6ItiiK6ceboBg?Z z)I6o9WGN|CED>v)%n^P}?>?a0pSP=1RU2hb8t^jij~cdg;{W zrdgYf<@xAqw(r%f{fUwO4qcgycG;$ESD`j~OkcrK&Yw?;nasqEOJ4Ek9#%V?$kZL0 zHbzTNPsJwd%lu?<3SK~UXg62R+n$x1EI0C$GDm-IoE$OSEHqDpf6Q3th^0m>TV%jJ ziz6IA=8a8>(q^NsV|z-^OX=FElw^+bCq3|cKm5U{&znK{MNbtRC(@ow_NkPTsm!U( z2`6GgX^E;4)e<;IE=67p&Txs!onSf)PH6f?7FUT~})OKQk1=8i}TU6VCoAK=o04kKqADxaEcpP82tgn0tG zikPRO!*m1)M$`pEWxLzPh_=^)Z#LA!5Z1=TXMR|n_h3C7OsApuL#f_vU1Jq61aWPSt%ox}bny_M4 z5T!ns@5bH}?MgEJ&jO z6BEDCX5bg?sI!FzQ*idU5vX?2Gimx<%UIZeo+JIJt3pdt#>E?foeRy6chWBGPb-p- z9ut{P`69#oAbv$Ef=Ix~!!N|*^ z0ccANoLpt)q!Ehf+wfyI8|M%%o#!+cIhK($K4V$=^11^GgxIyeugL@QbUB(h(3TO7 zB=eG*WasSxi&B1MTt;)m8Xe83L~?3Vsdh}(FLQIXnK_b}(I+}dEBS@CWHzm4?oQcy zX>LqT%9D01L34;$-&gaTE*W-_Xj@v@&fkCcU(~-F8c9K3u(2~wX|@eBVn(gp=MC7M zU$PVZ#TmgfBI9$Jc~H&ypeEUu$jc6tM+*I@Pm4SVU3Rkx(M*x~hW~2OD+{BYu^PHQ zcn27Zk)@MoV8S2U=SN!FGHvI$LNpzH73MT-r6S>5p1drRi1ay-Ny)5qEH@@+;kZE; zmQB~{9djv$%l4eC9P<(pS2&QcNAHWmWP(kyO^YNyGg&Zt^qg1RqDLi9NqsNX<}8EL z{t{bGoqc>o)f4gNJBUhzD!*!(8=0aUtf-o{v{YN298r~WezwD@OqKY}zxG>hZ0WnP z*;5jA`W-c?%!tRNT+>7^F*!W}j-^tW(&Y57SgL;6>hy}0v7OgRbF`-YQkOhyhc?gX zpDj`&1z1nA+c$OUwOFfxNPqaGo<=Tchf7g>;aKBU4G{LJdJhvie&92Gp7?&GanKxISsmOY!TFd@8 zV=Nn=nkui(wwSMF8zyF6&pP9eB=5|h)O^F;f2Sl14=hND_B6S}sBE7r`gd4<#Z>F= z%r~A|b8B>8?UDh%WKSkKPmd)|H9L_%npu$jnUvb@-I{Z|vUlW4(o=d0XMW}(rR@G6 zo%^JE{za9sP8cmcXZ}pDxLtu)ket%2ea<^3L{uE*Y)9%k+DA;3P9(Rj_I^CME!yvG zwe{Kuon2Y6VDsGWDRmPv!s@2=nU-y^W@r1Ux|HHh9_!01`^MlWGZUA>r&auxyHzaZ|oj)vu4YvbWq>Z*P~2>ub$gAG@>l`OoZs|FieJ^R;^d#tA!3n4z$d z@ef8j+=tkvpNXoJkP~5x3PN+fgsYf$vy>FJyVyoKLiVChD{z+K3HEW{jd;4|UY9cK zRP5gG&^=L8)OvKsa6JMbD%9vm9~NzGBHCt)bESx><7jeZ8#T$|rH|SK!i~BZ<>xe5 zmJ-HJs;(K)T$O=J6hv%gk1i1`_)bwRO~B`F_~Igc+rF)Nt;ZJJuDM1<%D$B)gyKRXwfav6e3A< zt)glOVhV$o4BQQ6Fq~2`%t;9~5feO0%0h||L1Qga^B8Yu6vcCVdLCB>u~ZQDWcy7) z$fT&OQS@qxutCx7_?snfer>^}!$Y+|PhvAUl)9FImC%wjWnvK9@)a?ORV?UHte%WW zQG5jYJ9J^V6>)K*B03l`vp^FIE$T}3L_^XwgqezK3FI0Aj#?K)e9Koy8d(fcM{bU| z$VAc5Zfdh?q-*>t-*?4?AXu4H3Y8_KG$GdK_|{$|O3PF+m9UzSm(;RRw$6CiCNBx` zle6BceEIy@y&!{vC5S4%hUwW1SePmjDopUkPYDh7hAhm6JPlj-?^Gk3Wuc)QHG`g* zjZ08h+6adn%|xNjD^wdZ7*W)d6EPi8hE7dEKr)&DOV#+Mi|PhDQi2W<#gj2vl516z z1^0y!C@HqP`iV+B7BwAt1l*9yqis0BPz6ng@*m-Kse;fl83Z;wocVv=+Woz^Zv9uh z#Da%Rlm3R}$ead&Qi&OvihRY!jI1zoIyg-(67^zGAWKz{<5bj*Lh=n^U2`g83K`hV z=vh*N(*Z*$XI7{?I>=c82CJ~rj|qABD16zVDUHa$8h{G~6IEupFf|M*scI6O>Lfjk zB~3?&CUPyZ3V-A=x2bP#Mu>GRgM6S+Y8^}=VN6oOc-z7QZd7rvd*$nI{UE;bACWx; zw5Fw5H=Bv35>dsJ;mG%ZD`=yg)Brd}x1CSuU`HeoF=bt7O1UTy`zQ99h`@DE#OhL$ z8L%=V{1_b>tVCTw)gp+#JF-Ufa9n*0i1%*vO`%0kc_wZtU8*4X^`<7(Nv2_s$RXQY zR?W-SR~b}N@Fu#&K4zo*8PtT9RwW^F55)x7CIY;648Gkvcr<=u2%D&B7OdNZX2()K zRtexgLxRPCFO}9Gi<;0=hB*$kB7*OL(hN$hE09{Dw8^xf>E9+|=9JlSl>}~WZK^Qqzwq7k*zDw5kb!4CV)YLOM zr|;+&k}X9~)msOx8V6oUzgTE}vZ}sfqF<1jS(VG&`IT4YxqZn~XHvO}KghgNoGPAI zQPn&vIeuc*r_!ZTL)Ge)`}L(8$4gGbOkWwdVY_xyt}Snn}*682R`3-_C&4O>=w2z^+#6p-H}}8 zRZSk9TvS+EU(;MSO-_!JZ~yc3ou3)J(b{OYPDnQOYX0c1rL%S{yYZ?0#wo98=ib_a z6NkN@&Rgdw`VV)0v0$!Ubp0}UMz(WuNqBO){TsPdgKgGk zOdaD=xV2LBnUgnzFh#T^eYTXeGo>R0XG5((|R%=O4-@{z5S-{R!SryPo*e^#?*; z&ix>3wRfN{cpG^R!rVu`Mohqmzqs#lk5iTAq|f`q6B%$d_^>6ay}SqMg1v zT{vS$`y>y|AT`q%R}d+%o0F}ckgauRCzJc!2qtDS0$h@nL~d28{3du$$}KbGXBEtF zZcbI2MV^pZtwokxZzrlmONFAVkiGJenpJ#2jg9k1DiSs#9nb1G7f+3}eTd9V!q;c2 z*iCIWE7@{vIGQaJnOSEaqf@SJ!@3O!-Ash`MQzE&6!iSQKO6k@3zvWULMR9=a}D1S zi~WAX)#V)>wlFhQWMj6VO3Qdc-wj##P*<8!=f=LmY?nJish9o47^?-Y&dq_@IN&`y z+27$tr};Wu`7E0%XEWkByN{d-AqPP>`rt#Pp+vDAp=%@NYs5Lq&%mth8?6>I&$kC` zceJrAmDAMzVjDeffxX>~-e4!^X)vL(7!7}4>%u&rgd7Adg&c(XalVxi{w<=Vv0BBy zLG;h8N>dDoF1C$+_3}S9zW+@8AN-IVI~$$dM-IH!^GfZk`Bwh=%<3a2isV=FR~T{s5LKdpVIZY4UP7`!iuskXWi~s_qBHF-Kpk9{=FR&it~Hjf2~b1M~CsHTI?C z!4r-(zup-9M%n9`GrMNa-FPYayyiUnrPAV_i+Zn|ySMqd>Bg(2Yn)5Xy*q3ER6Xys zFFseZRjZZLH!Pm--}*}J9o5pUdT-{)#m`T#Z|N+ZZ}gnk8%s70xEFgC)s;2$oKJRb zkk0Fi>_1N)te>5KWX`#%XeYNiG!p>b=k3Mogc1#~U*}H4w12yj~o^pHH$)0-~-mQ7&MDOj>AHc)UobEkw zU`_M8g`K;%o<4kk>-pwqPWA5IjE7sR7nYssS=oYzt9lnsUo-7&%QN*)RvlQg^z~^g zm!H428mTjpy1cr9QuibE(D_Z(HNA@|^$=2Pu1b9#sWT|`rJDXV-LKEUvs}6Q@_qns#5orTQn1uIOG0P8U1`PPeWHr=K{|yKB>ZHJ2BE z8V?^rwbUFu(K~Azary~xdjFcbcMI__IKB9M-HWJ}EmSRw7M7hnbT4uG>E4Ai9w@!k z^5W^?7weuZ*s|uPGv8DP}h{akGi{*{CRzZeHESA@=BN>8N6p&cl^$3Z@5s1a6`Hw6n z8G=}BBC(itl~^=FEOwDtGl5JgCgSv`(OMxxL2I2s)dI0NL1Iz( z&`@iA5v`SE2x3uo>d;VYok6YjMYPuLHA^8DLlpqAC?K(DWnwYZTuFuwL56CW3?+n% z()R*s;i`qJ7Oq;jYT>GdTP@sb;Z{p9#^6>99}w{Y(fK+)AmRfeKG(wMTKHTGpKIZB zEqof6Pvi1wTt1D6N=+A-vd=C-dL&WzG@jXO*dm`VSSjV>~ z^6iP(P0Y6^@}19o=QH2=%y&L>rwZJu0(Yv=xr;kh;Qm^;zZUMVh5KuP&mZoug}Z`c zzPPw6DDDc1yMp3g=D3$R?q!a9nIo5Y+<_%`V96a=atD^&H!k;$%YEZ=-?)J%YwjDD zyWQq)x8Y!$yWQq)x4B3E7VfWwd-Pw-{k8DJLik}J{IC#ySO`BXgr7si&mjsC(nrsT#m-wx26tav5UlF@%g%EPWJ91vEYl(hxy_& zUwod%edBW9xZF1`_l?Va<8t4)+&AuhF^T#m-&Xk3oQ4S$?bT_X$b$K^O<8m}E#G;Y=#^t_oxo=$V z8<+dW<-T#bZ(MB4c@eP7Ewn9X(ZaHmhwg2GSUlakaK;0rms(yt-TQPmUwr0^&wTNj zFFy0dXTJEnVn!)neCCVKeDRqtKJ&$AzW6+eFFy0d=fmf_`QkHQeCCVKeDRqtKJ&$A zzWB@+pO5t1+wgYH!4ti+N*^e^)Nt^0?+L#6%om@Jv_LGX4t7H_w%om^e z;xk`-=8MmK@wwnq{S!x5@Wp4o_{aqx{F1u*e zg?pK6!+#<@U0ZJ@;~_3f!r} zdJgn|q>%&tInbX2{W;K|1N|>?pg&)HzPy+(K5yoW&wTNjFFy0dXTJE%7oYj!^R9D8 z?`myaTDR)Rg|fKZ_r6#>9dzJ~uX>f>>;+z7=Azmc(K?Uwr0X=GOAXXTJE% z7oYj!Ghck>i_d)VnJ+%`#pk+JCok{n!neTk&JD>T^XTI~9?|kMvpZO7I z-0e0$;*6tlIU1Lvaqr@2-1D0_8keJSIU1LvaXA{7yMn6WXxt|YI2yNrqj5PJm!okx z8keJSIU1LvaqEt(Tpj?6X2DnJ@LRj>hF@J|8;2rMl+%#r13HbfOlV zPQ=l;IMfm-v>9~PDb5Xln$8U`eW(EEhOee`!|R?b*g`x07A?GmtCs54FEzhd`f$tX z)rT*1-_`t5>F%{ysOGALA1BX`IJ=)8amJ50yRYz4!xKk)yY~ahSoqMctw$fZA8vG> zfOn-$$sOWzWB_&%yBPs+{+yIGRM8laW8Yh3E|w!9QQKE zz07eha~$Z;z07emE=S{XG%iQuax^YS<8m}EN8@rdE=S|e;AmXF^SJ?goX>YxH@{T4 zllD0C#b>_w{Q9(&OgTOej4ruPXn^~KHQjvinJ+%`#ph{!=QBB%nGT;rEzi_HS#@B| zQmBj26A>L8zq}fri1=I!pKIZBE&o5BYbhzcukd2SL3n`JM;;(Lhde-h*Ce@)%H*CRaha2~QJW2r%pT7JdQMtIA z4$f;`zi{x>!6PfS)ZABfdEpes=X&Dviu`H!T>(H{Dj=sUtu)W|#1S}Ux$gs;&GP>z zM5T~Kr8E$g_+PCIL`C2zh5w{pX`DeabQ&_$eU%I?9E7@oSa1N;NA^LaSpHLe5I1j0 zg$Jr-*43)z?SDtL{EzfPOtpl)P~5wLtCmU2VY0w?A$ptw>T&pdKcDaC^Zne@>BD@! zp9}#wz&$|@a0?&W&FB01eEKfHuRoUfB%)2u=C( zE%MwyJ4Y$-Y23xt3(HRS+)Ey0_!fD-Lc~{yu39*}ofZxov2b|e^6gV*Ogi+Di_e$; zoyF(>udWbjDeK$G+??6dwba}#oqjG;vspWXXnW3IR{Ce@iGF5N zQ+xJ6f!)(4ovCV=*3{u2C}{3!OApM+KCZOXSa%q0>7UsR)2w!1Yr5I5DDv@85SIq5 z;ytp~^hsOlpJVUaZWl;L?Xj8qo3!obN<=lke)5C{vuRSlt@!n2Qm)~irW^XTT$O!R zY4;*GoKO#px94lQ2044faTPSI%&lvR-0)PfeBe`dZD&V9`);~swtiOb{B}b7Kg7L% zeAUL8H#*W0L=ZPel7$h@Nf^m8$i@Vp!%6C<-M2dO0Th=2c3kSE*~JjrJ*9n{hNZi- z`*tho$VNC$_)*ik-Ru?<*frgx32CyM{`lNr$4Q+u?@dCv?TAEw1ybHZVN3sPyfX<#M*<^gZWoSHHb-3)fE=eZ$DV zG`Pjud{1dGo?2YGHu`wC)jZ`1DdKw3R|FhlSxhXsH z%*;+)&%$f1Gycc@zsj8rH?Pz-uiCfR|EpwG{$HH_O^fU^-)b&*tjd4l2IoVYzh7uB zZ;!Wq`1rlE?%GzqZBb9hs^*W{C-0d*-(FGJa)123YZslgU(*K)AK&fR+x8xPK-;)T zpIkn?!`?nom{_`Ok$%$dczWLlu5EnEntXL+^QxBry`^cQFmURZ)1O!ydE4$g6ICa^ z-M0RQwn6pinr*`sYe-waY-xPUBP+KJpFDMq*1Y-b=*qp{S-CCV%wHT|dA4!Y-uEB+ zn7z4pUBlpJJbm?V<1Mz0hplIGt9JeE$e(+YhpqKr_CFWz*!AObanX2pb7lMR=brvt z_)_^o`G(d3?fjOn__sQ%Ub=2zVdNb@)cw%<4{aNn+-c1B=i5tLS2X^<{N9!|LpvMO zXJ?@C%$D~$Yn+{p^e_NtzhM>hRKvfrAV|2KD! zeAYhYSlf4blk>yfhdy#!10Ir|8}c6scMmsg>pbh!AKX6eol>_hiyMl?#WydWK5$a~ z#Ij+%_(#^_#-;k6O%3}lbk~1q^Qy)NuiKMf`-9wtAMLqd{cdL1=w>n@s6C17U0fI5-tzXxm4Ck+?$YgQEoH%*rzd?@?CMFk>u-+Tj>>@U`w1itU#-k3;n+;p(mtS8c7 z%r9rO%}?oKI9L+rKQPe1j4kcvw&{`(?(|%9Tfz)u`@tx`*a`X+6in*u-($oQF2uc?*?pAxH%1meW!Lli? z3>^^2Dh}4}c0~*PvS-$RNn%B#SOlH8<GN zhMm4NnK?wRMSWevV8GFj zC*uKYo-^pZ9c(2sdf!hYnE&1&@1%ChLu%ZWlsM1-1LE*e>jfWL@d& ziVOE7crz;=?{r3a$o%xqY(KF^xe!#0$cYuXAsp45So7Lcluzs0+G~IH*y`+y|3*k7 zWvq#|d4d~X<=M6#x^c$xPO82xdjpYG=VyH(r%@IbFSplaR<6xfGMl}~&)e35dB z^x^P$Su~Zpa$l~9ySYN0bge$coG#&+51PFtqur|W=Gbz(CA+%Z&SF)U^9s1IY?y|E zCstJCO{!}bmC~Vbfz4D&QTJ(zDrw<@W>Zi~j=E2oRg$z|pOW+{r4HQ9vbSl_nPY+@ zX5+TW(#w2v5Lsqb(K4`Pvn`<0X<1O`CF>w( zx}>CekQ7-a)R&>`EmL*z(UmK#fcl;vKk?>s*)Mz#ZPb#?BheK+7f+JnONu_N4yz19 z5|#r2r5KFS^e+=#$yV6hC+ALTfVDS9H=G%jph8MKV2-HRqQ~(CkJ;QV@qiQnMibhG zNkK`rgF35Z$eh_Sm)s6-zVBfyY$k9G3hlTjxh$LwtI6gha&Ss>*t9l?VK<{PBO6mj zr9`sT;OY;4{qO%h`^=9}lah!=1Whra2N?537piesuZwk9Emn@oK9d3_x^^f9&xC;? z>6Xjzks9;`jMV`YftMpgG%N+*>);tp5fmdbfK8D2Lxv}tL(RNO2CGg6o`6&Dxv~XB&FbCbk*z6 zU-)FU`|TMZd|==wqCQlj0x9qXSI4+W!6rAB6cHoMpk_m+5~h+;Vm3xbXN3WKc5JZ{ zF{E5>FEN1&CDpa&67f-_mE4px7(K?WDaMYgsVq`KEU*D+1!Cp|&=Is|>?KuV8ZI5F-a-%KF(qX zuYH%rOtuo$-~e8ZTxNL2X1*^DY|;|wKgL&HsL|)CQ)X-Tmx9KqBrULMcm+pwFnoG! zjD@RhgQdt30>p7?5*7cNNJ(LBWVQkNrD&s7iHm%PHA}x*??=sS-;y(14!osOo>Iq( zX5k;5lA<1*;@4PTw%KM4&@x|-q-sON@YkFyb8kq7{u3308MZBWt|lK!cu8|4wKdU& z={Yk02*PkPjf}NT%E$<1-+ou|Aiy3|`U;8U(@T zq~$EZA)%UMi5yxrM0W#Ff0P6#Z*hiqtPDOZi3XnllcIh*#uF8V2#yKbll6o%c2$)d zP_6}JnOF{(h}K1yNkR6|`HP=xfAhX$td=H&$e29nn1c@U4#wPbyh?CTb$f%}s1%Sx zHOVLYVO`6TYP7$i3&Hrh3B^P&fhii*NZgg=4{Dkk1!7}T7mI;|o(h4~+$hbn_n9s< zPPuNq++USl5#UE+u#XcZ0^l&GESD4r*w&I#P#iH1CIY|DS3OOI92OkD$<5>rb?QPA z<&wFMc`&G~%U5*>%v9X=3C-K4?X%|DbINm_xlTdrRM}U9XTUL<(ZkjJ-fQ=&CA;3b z(E7!RUuAEB{H4htLLkZ92LSBgI+lT0mvxetpbGK{t5v*=z|G<1!67w_BqT1b&;=Z~ zv=#9Ha(Q}08?a9?vAz@_3;l@MKnG_Yx^mGNd{+!7gj6#jkS^Ev_wGb zp)R=04D-pnGPBTw4}4;FBmDHDPv%RTRc3J+5^lP}fsO!-19gNH*(}2JNNyLvKM~7O zV@3!$%9JBpG}=Q+f&U!9(VUK58E9*4GMEf}0SAm0ac5^a0zqO;beovi4hdnxG1QgTl~U-NG{IL))If?gd=4h- zD7jj5R!nXAp{y)(U76MC z?De7FzJEOX@q=iQk`c?LKn`8qgYCv==q95X!UP9(0U*%X+YIWOB8ImF(y)TdiisMC zfe&&tFu&IanF7Z420{R7X3zmdO%iFg51uI`UiAYu9k7WY(jp_$pgN4fTuHtWQ`8yodo0P(mYQvQdsIpg%?x?jLRf zsk}^1D3c{I;6j-E4f~6a7P3o!%xXz@bRhyvaE&bE*aVNwsYs99qR-KiN3c?JQQqef z6J05C!-`@i9dT0vnIsY`s8TLs?Ca^f_q#qxm14s zjytm_#;6M<&@FY-40rqp}zVvdL4@mhgr_ z^V=AJRN_*=@f|P`Ine@Fcq|Y^f$NzVRq;VARS9I|W?@Of;jl_j1GN$WteZkP^uvIi zd*X}Nedy{xX-CCcvS1biJCdyuWJXqW@Vf}zEN>brqfc;esAHgI9@?U-i@E}Vj)AG@ zuZ%|mAX2JvJ+LPik=mSPconb=bRZWLU1-FBFku}N!obLxL`g2`R1v1#a;u^enNY2{ zk^~Z<*w@%AaK0khboHxDz@!PCu(;D^nP)b~IxXB`jYmhQ3$VV=ofO6<3DFiSep`(<&*b8ZF0lW~Ed=48uD}sf`JdCJ0 z7Qk`{ddXiGgXd)>#OJndalB$;$uTX+s}t-E`5Z?IV75xK#tV)z4oxm_>e&!1wTv9I zGJ1(gq0wY!ztwc^XYFtP>;;rkf?Ey{kO7BbkZTOh$5gG*~1qC<}6#bjL25X$skT3&&NFq-=N^8~H5bWS8``)hvuRqeB z*1&}zN~=R0YJ`m821g1Jo6-0nVQ!#cJcWeHpf{+<#pN>YGXz3MDI&m#z9z(|Y1~t9 zfF7BE5yrPtKv{4fq&}dg@k~S(g8!}S!oC+S+*ktzAEyw+I*lFl2U49gLp=fkE^ZA{ zki-R0@S4cF*C3_l@I>I42k=q)Id$fsCwd^Vg$K2;QoIE|Q-(g^@E}p2DR*Y) z`zKz>-q%TmluS5YvZm+*1b&UjWEYYg2*=PCdeI}f_V!jFDB@7ZiL z!#&g4%3&nQvkcMpyAoc(&jmdO2+NwEM6Y4ODB(2{UdOWP;zl^t zY!q4-c#XO#^zC>9y@~!gv4aLb1|F*vINGauNuZu3- z0XZ-PzAheW2>=KjS+Ys6X=wtSH6YV*u9d+>;>dvsAbQATV3bp^F4wI|gUDb1+UsXt ze(RBAsFS9eg@ogjLPIH*wd|RCT_7Y?-Cu$iMWyVQGsUF%1TvE!_ z>eTu}p3I|*JERLdfeaA=9i^bjq@D%GBG`#?R}!f`funFn1;jxH1{|{kGp&-+8Xt(9 zVRb>vF8a-xUH#`y_NOm#0b^2=X*H6Vv|Mm)NU%$m9n#w`x>Tx*019vL37jhW0yL`P z1<0PZQ{u?eN+A?WT1GM<^fSy)AnR_eqne!5It0nUbtyNY1>#lAf4HEr{}APhUqsxm8L+qYkQCAdQEQ~?g=VI<7~`7Ylw zc#KH~%dd8FKwh@|NncGAGV1UrF)RQA!(d_g1`?)+#ba_)8C|T41#AN!9pelx1sfLv zeCAks_)7jjgU>J3xrN@Nzc_sM#6$bX&b6%F z+H|@KC-^sO}N7)IK-H6=$2iG3)(9`;{&-Y#$ zd1!y@`K=3Ekz2NZ{Cw-e*7d&}xwv6>&)C_+pMG#Hik2*F?fK=2H@kNC97O{U`WL#M z@7asoVgF*+^BeY_-M{Q`&^WVX?N+arBQ!3pr!vZ2SpU!oLTyRUg`S5_Ja{E{ z1T<;!F7`apd*t&c&I0-+zynAk*Fw2o${j&&>-t)*m2xMRjT|AAuH=^Voa(*M^;1Ib zhUT^UgXfPdMA7;)T^k9b8=CKIIEh5|Eq`ZJlu6=!@^o_>zS^F8}^?)bmzd<^IZ$O z_Md%p*BjE8+irZGgXyC~C){UDlW3(~F16VHE*xECL z+r}k5Ztz5ODv)b;sX^vI2 zukU*Ah{Zcrny0*zhIE~|J2oeV$28-#xx)*GJN$d&e>8%md#BehJlPX$ZivT*SL)>p zUY9XAU89bAyjI+jTx3;tzlmBhRHWxbH@dZlszNynaLY&TEGlX-iYr|s~n zQ>J^tyLrJr-d#06hmZocd47C@dT*DmT=W`^XZ4AJa7Wjq5f6p-(c#n0qrn+ZyQg_@ zrMN0?GgqF9%i7WSv^niBH}|bIo$Z#~E;ak1taq>ch? z1eqw9W76d0KcNnEF7!Dcw(XgPfr&(wTDmBDrCQE zg{Tg@=;9-?ytS0>%%m$oFg8CLIse_yoY~%9dqpsAHa7X6*-7(AlRJ(EiZ z!WO7tMGR%d}xhVA^yz+Cf7wJfW;QSgFAD873FSetrv3 zKp#L&3pEhzt+8d>AIZLT9esiXFWZ2<*{Q!n|B~PBuOozD8i5`D!oK1;#V)on1g1-$ z%6SX|94!@2nC1HOzL53HHE^ltuJRF~$xn=jC-rN_V| z7(ii01W}Sp@c!r(#(pY@;CsLy!?KD?z{7J&R~*q|q5@x?JW=YH1TW1ph%%voLKFc8 zM}->*G~hkxQDbNb4$1C+dZ-bbK1x(B15NlR7y*YCbX1o}K)uj2W3Lq!KDRqtxxD5C zeRgzY@>=!T&H0~JybE66_MyAF@9nwXGxl9;bjHVxqa%a*tMRh9`TIL#|1Nry8;N(s zI^HBtCrh?0_WrK2Dt0!l>6ve?8CmA(drPiX2Bj$DV z=0bCHaGrMBJZCz=(YWJQ^KK(lcjCo;#tuI;evTJyBXLKGUQD+*k9gb7Q}K>2;nUuH z^V38Sz2S$TVl=5XwE%4|%$+pz&yP@h_4bPZZ}RJ=GpFP2!Tx{QfYGOfiCI3mBR2@? z{tN_4!Q7@q`Zb1%!VHRpoBUP!lgAu`)Rf>aFB3;WiVT)nUDeY+)EMR%>0<0fn<<(EP-`$T6C^aW@68-7U+aUq=_kBm1 zDDi`eaj2y=me(C#gw={M9+uc(X=ehqnqClx`7UF0T8WKAvF{$LmUs60^(*(SSQ%o| z)?#|`xx!8U@|D$_K2^Xr%mQo;n0wdhLXQ@R^@jhxzz|0gR|?$`ZrCG!DKWdY^!R3% z-4OM-`4;TlV(M$|Yl1o7XMQTLRkhHZ&;v>J|2~Z7IDO6mHX6A?)V5{uAVz!A=TeDB zg15xvvf8SZ!nvBc zboSnF)d+zBG?To)$)7Rx(B%ns1VDz+#&lFPHj%C09G!qXn*N52 z28V{!B@__69epD7A#?s)H{ZEwP4w;*97n2FuroZA{)1%&M-s>&UVNJ(I z7st+R<_<5vCgvy2(G>L(R$9b@46Exn}2Y&BVLMtisA&6`L!) z9ey^p0mSsJu%+)YtFUoVu~oHpbcGi@W0Coa2V<%nH&BktSh6@CUl^N{RsDje-s`C= z3>eeZ=G6;epT~B3Uyk)lp7L|E_ZA1HbhSyAw7A6R1RyY|>LPQy9i21zWX?N!Xi{Bb zl;8;L{g5>;GPgJ5g)?$}N{OotYHpWV@#lLv=d}4u>6>1?ecTvniec^v@&lI%0sE^T zA3bN9t4$5I6jrqGmDmD^#z|BEgr0 z^QqK9Q=qX)4by5Nv{=ena4y0491;Wm1t(Ar?k;Q>d@>IGMebQTmjWBnyo%gP2MRcq z736u^6j-TrIgd6-ZBuJzjE+<14C}PCQV-kdLhEC?wfm_*I$>lxKLIc($&pdbK}cri zSzx@{Q_a!$SzV>BlA2Z}gcYB$ow5d4>eJ0;tWp_Os4Ivcx}j+X)Bp)TyjtjE4ha#s zyb0FBZGeP0^;lY)5q**n*hk2|>6;a^0!;zf^;AR}QjsV4ph7Tlaa1ma!;Uc-LQoon zO1++GpoRiNm{zCNO1({{)PMbR8#OE2a}gg>N;TWNy&N->i(y^YrCtspCvQri-k=W* z`a@n$EEjy$Y4T{CSTTWqN|6Hz1E2;pN&bz{gj#|I5DsWGrG)v{g?`NW5Q9j1jYAQZ#M-EV{sGO0W=0LO z8fYhtR5qrXa9W^}M9ej7qvl-JYc>QFJ_Tn26LV7-FS&Dj5J8CeRRn#(b&nFT z7^LY?00~174ja@$hzS!N9@bgJK4TOtu=s4!KC|CM zUQit>GauF`(J4%UiIq;+s51Gj*w*Gc8^bthh?WuItQb@|Cn~cOn(ve&FuNOCeQx&l zy>G4#e*YRcKTQM?5()f&od9bs{l{topLy~Baf5XPlxZT#2O4RfUHtpsv>bTrp<}hD zS|k=Zyc9RUqyQP{B2I6iyXb}tSOy8QN;fdTy42&Q?IpQ~bXTg-WYwu{lpy>Am0eT? z?A6rs$7Y9uSp=NVRL{YKrd`Lh6=E%TVySCN8W3Fp?zjJ8b#FnveYKyg>^jZS?JT;HZ*l#6puH~9m_@gBo4uy!zyO8#C=x|2?A zq8d>p9oi0ZJbp`8tdYu#@?AD|BI3rKJ>$0_5~|W3>2MjTWFS9&TSJs@%R?-ioOp*5 z=f}IpzobR^PjpyO!8b=cZ$VLg<3wje)vT(~zP=_W)9Pb4=Nnqy&HGkc$6fYhcqn|p zASJyQy+Jyh++?+NqS{&sQ5Nchy?#^MWVP+--CzH}#hcwXw;ij|OEmWS@PJas(KGh! zqHmcLCY^q4?lK`-*u)Pq5bbpdIrC5&fqa`slfsn7LelAhRHQrc(uDVkXK>S%M;GcO ztqdJdN=h7pj`a>serm~4oqEIz*E%nyU{de!sL%|Egb^@(i>r7J@{WcbA#|Zwz9Afd zW~2@+xL1vs+0^>uK6XOTC@e7nSBURE`&;AJ*`M7v!z=&AO%C4u;xYsNN7?>Q8di3)@I`>EGCT7Hk^hszVOb>BXe!t9RwVxpr zF^7mEOyK}hf}j_S{XYayNG_C!a7)ofUlyjf9%lRq5Hw=MDW&0K4%B$a4b+m&V}{Ub zV;R)-utLE!sB!2pg-xn~#%3j$Z&F|p6pZL%+pG+SB#KywEzdD99F#Z=TOd$8GiZUM z1qP0P!6IV5I!FK3C(hNsaQ>5*5qJkd^n@e@xKP5EWCY%wP;@y-$X*`enX-4OnsgY_ z;&&C!RQrQl_Se67`}6J3K3pq=;$(8SOB$3^t*nT?dbh*B#BursUWcncS%qJRWfm9X zPX42XfACbmNEp@ja2}w>lA#u3jss`Pbb)xNLQj(iVmh$3C5~X51goMj+Usm`OGE4_ z8X~uV8=6TcXh9B357eaT!-I0M28wuLS}7sE#EH7wbC;vBi!dg1duV(h}^3LDn7(8;ZceXp!7WQK_hJ;9RfgHj{_zGT34;4)#)A z0c(u4^-GEbOIcH(xhF!Xupwof85GjtAYy_<)s#En$EW4IOtX0K-L6 zAlL!cY_LWEqNt;dUpx1km;d>nQI%4jU~<5HIOHHvuDXu8 z@S2JuHg1Av(bpVD^O(e0ovBqNc)01Fb^|cLIk;F}fulLvNxx3lU`I3BbRgQnpzIFO zu=E8o;>Ho*Nlc}Uab}s~I{3{J0>QyrG@%$0m0dbiLS79f&4D&UGFP;T9E)YFWR_%i zkl9ZLliV-u<1@gWX?y67W!Zmzj9pG9p_6g^g3Ba}7XlMPCxrp_Hb_7*04{jgEHOhu zi7mQ%;=y%*nGq2LQA=f;{5T9+q{x#Tas@KSa)4OmSr{cGu*U#yX??6)6X8{csVt8e zPM&cgj%hq)+YVi+YD7|~6mu9Tl7A*})MnYcif?|EUwWdQ9w-5*7I73#pvb}OIHVL5 z1JDzJ4~WT}UKM}JnH_4;Y>4MIj$+PrJX$O>X`7|w>Tq>)@YO*{O$UyW7xA3bu=y@S zpKBQ@n6e9TvP-rwX?iBu8lI%&C{CHpE<+Z8s>^gl#Y>7a0z$W7DFiU(6UB7)242Ss zr$N_VjORwCWhE9y$_2;qsG@Ai8QnR%I|p?Gh=JC}7QVh@&#Pa07+)g^yF3JFr}{uh zJjIIYETRF$MW`^6h@OqbUN~UPuzC_+;bQ^B2BUvj&FE})$-&?-(JZ;rW)f5hcsE>ejzurxXRG*EQHL#b_$5uOdg2vSGH59TFF zI|3tWis!e9TNr_}bM6 zFaYqgCqqmc5Z=Ml9isrjf*2Xql}Ot_9V*O+31T_uDv%jtNTLI+3dac%pNP>QQ;BCI z(ZdC)Jr|Yp-+TUFzMS3u7pO@|Rzof-^Hq{21Oj_CxImQ83QDNhTe`S4P1c*7GfzHUa${r(OYc zgXjVii6dSHgUw8>MQZl81~@3RfX(uyU^P@LUoc0_EU`mFx2{Rdc~IW2sP;m~5Q3Y7 z$^oBfQ|{AEbwyi`JIj)lMt?Gp5)PyP=A-}G82sLR0hN)2kcUkocLa_(_Z$l)n9utb zAT0-&Z{xH`0$)UOO##}Bp_Zf*6F3~vG7cSMfCT`|9E7F~KIl>s2*L$6w5$lL4G>pU zyp(yQ)ffX~BAf~^T;NgEL4go{AhB%BepDar3us>mW<#%##thK46zFpdTq&lIJ4$pB3#OzQzx5qF*9dQ$!$r(Cv_rIV0#8T4sQ-2&f^5j$jfV zXp>`ggzK>La6E(vN*aU)&8ZP$7q}bYCKzN_wn3vDJ)>b9Pz%eUjgKLYs^VX${`R}&tCk(WYf8hk=kLNIu~^`VtR(0id;s+)1YmVJ^y|IU{fD?2 zV>BMA!ts?^Nz@0LnE@15zrb~P2vY&Y0OJ&wtm#3jgk`Li`x0kDdUk?T2Hd178lgju zxU11TyN~yADewW@9!x2Lq>&Ktu-O8c_zVsirKt+NmayM%yYt?o*^m9UR>qh-!LfqD z)3{t6i@^ALwAO-p`_Om;t$RcLk4$m0MsqHc%(!#EI95`06sV#OCg+1E`*RdLW{w- zhyN(}3;*;JZ?y6YeJ`VKEeVydAN_)5;lu`(z{&H+T6^uS5lR8&=+O{eT%`bPk2^$G zb=*)6;OIl4r@E7hsRdwojPmKw@H7`O%-}G_=>uIL+LR!wX#)2(2z%rbhjM?lW#K3P zEc>^oW?q2+!k$__jdg_DEwsBRKiR#p(BMHfT3Nf>ePx64T(qMG(1B} z@E-6|1Gp0bD1lg{M$j%c{9nKwj%Vr{Q5h`=gF9Y*@awG$vfKU~C27J81r23rsDoO` zWwfp|3-g6HQPJ`E%z)LpzXEcSBiW+#PEqZdxPqlHc@G8jwDMxCa z-d_6Y#_)#h?ZxyFLz4D{2h5P5S*rhpj>n{r`+3Rp2f*XgjP@%PYc)b9)fq#0lba3@2T zNXl^`oOH?|;x>gI&j222Mxhcj`kIgP*~Aw$8c^5Z?(FE#F0N4?`w^9=sm4kPs7L@} z=Z=Qk5_tNOLX9B1GoyiCXxj`VoCwgL986RlK%Nc)>foq6xCmB54bqR(ORaerP&a*~ zV>d`u{F_I3(J%{&HVEia`rr|#6VF#Z`nBMVZ?@wJ2?iC~#h`EKEyv85#s|78DY<9@ zQ!3J2geK8jT!%|dlu($qO4I~Tr3pNkCV{6QkxmpiDvF$Hp^XM048I)>PXt$h!js4` z=xBxd$dCk?6Pp#Y*ABsJkd1b%m;}`5O)Nqw!aoW9 z;)a%|0&2tsOdJM=D4j}`6o3!muEBh8^kD>yG5Xa9xFcvz3ft2*n84Y^6>opx7g_(O zs6Yu4v8ki#WUQDK47ERp z4uT)qn2wmMjZ|+H+Mu9AEiU-*l2k04N&$2Ywak5MIESfS#~rOS3e|!um)4=;g#$t_ z)((5q6djvd1Zus9~2DB5G$7gca*w?d)11=NA+;D%_Xo!v8sH zR116RnP69K!Dz=4wkmYgJ22j0U^(9ps(^fxyYIW_tuGuq*ZOb`LxJPx6pj@gMR=v# z(fIOXP_Ru*;8Jzl&cZP>(-!CL&@UzRg{MQeA+&@8`p&%HeL(k%iTa!&k0k|HzZ;gv zOwmbP!;}Zf)e%L(7`GF7_e!zYd*U|IHC(jvqqwzrVBP)+H4DKa*)a?|)_K z>Lq7;9_kIxEnR&Cnf2kh=39>}MrPnu${^hT@T<+AKC*TmP5^AQ)?YfYyO!%gPDj~C zZoJ{aRfzi^K#=@l3X;cR1%&AD)*qJL7)TRVhU z{pKzphX1}2nIH90w0|!hUr4s$zlTE6#lD>_Yg>DP$o`#2*0gSH-umzU=SNOGcDCo6 zCs43tV{_}9{`Z%zY1!DkPODEAV~hyi8Eba@7eoTi1pw8AWA6c|4i3U5sjY){UgF3_@HR(#tr*Fx8Zot zUmQMnWMRvOANFiReE-?~58k+#BL0_lz1Xwuv0p#|b`{lJk|1 z9L9N%Gr(rx^Sx*HF9z)Kw)Lm>pV{ztJv#}9c}ITke7@(@37p~RiE;2^#TWkC%ho?v z;~aL{-WQzooDbg{`yPe3r@{Sq8@GD4f3ubb_fv>__h8d479thBQ?=Os;W&I&MO=y= zAh3V1>u4em7`@ta&CWGmL!1V;Z?})egA~{Q$jVdNUU##$R*R>&wPlI1y6KrRBIB2u zBZ%q`kB*!$=crc4S_Jj`ky30nHY29LiWvLVhXVw~ytLXMEIKQjca-JMcyq(bGtSER zJ!b5!Zqg8zRq@+A-Q3=EbOZtY;rx*sOvS{>f|JI%vDIc)N2JYvis;`LY&V_beOp|d zWti0IC___>08YDl)C9T%9tHGorjrau9ye~L6$!7=*yM;*ytUQBSCr`7MuzO3BXPVKu z3?b%%6Z#ylL|=g}VB|NFI|z3I3AT$I3rc7W8LU~8(=U{RnV1!_hyq@qH3TXPFf?gT zX`#%~*vxCnz#K9)yYRcOuln7q&3o`ony{4SmkwxfA2^nEEYUHkr*OF*u&Jm6)9APX zx~lLgqfpUcr}1kOiRU-@QL%D=872q1u;|zO2+peaFcT-$s8sP6nl1n)ltniMC`_yp zadIBQx;~(eO*|{S9veM?3)aBInj|2guPiKVH9i$$vyYHL+`GWFOcR{nI;YOTdYLXb z>N+hX=Sb+s$`?H2>@R=yt50TM`ZbCu!R19f!1aPt;>z_* z#)0i73=tH61;r-IF91jI09eh(il3vt(qsWm5DP?Tj2jX4K@%%@Gp_JT$-!nVFDM1K zum@Y{VBB;Jt;s4DU=xfYF;#n^-vWkoxUPOt2Hh2uSKr7DzNh*-!jmMYnc}a;F`L6o z8;$236I`Xa1#BIJK#al~grpu$2Jl93Gk&hnkM+sO4=^|mi*6cMFz#@v@IXsJlof5P zN77%y4%nE-u)3^?@NcZAXl7#5FKkJy1{pw=Rs|2KS*J^VnZ}_xyt3?6d1oiX`IKAZeBh-#L%HZ2X);#=%p@ z6ODQ;gN-qu!I)f+WqS(`b{NQ=J|fxdM4t>G8(O9-#AcU*H7b0_vFZ&5rvb#m5wOE5 zEQSxEO9y}w0u0I_FAU=m0|M_vi8G1bGhJRs=X;Nj9{t|bkaZ4$^?&EDipSlb zn?0W%xxu?JZu;Tq(MJbQ)t`t8U#9~F1I2r-djFT+x#rd5kFWeOMbKYo#t4916p!tU zzo8ayz-N7b7vEwaSbw+a#D$%4Q-w|mR2xs?R6*Ow^lAgP<*YW`^@vk!a`4Iz!?8u? zzj-f}#HB4ewR^pVW^13h1Sb)ao8k0d@~(?-cM8p;h2L~7G_9$-y=6uW#eX!8bCR&&;RmX27+4;j9>+cp=Rjhnj$8|gd(oh=aXqH(o()PB^wZim-%YIIdMq6uFbRS+azg+0P`M$k z3Pj6~VG2&cXIeW1s$&X@5L0hAYzUhss>O+@!}|agK;4&dG#0vpBq9S{?=1I18!8@c zHbM~VIv|YTTWEPYG0dch7Y;xxkUBHBKmgnN3T;sOaW2YXs`D}_IB*h2BpI{>KET#o z;TZONXsa7Sld+@gz>z-1tJV93BB=~S;*piWYr%z#(V|xxh}Qto{C&gQr#_$E-c-XA zR}+Vhp`IwzuL+HTqj8Qm)lSQGU`1$>{%;7E`}ObO*$JbT5UP~}w5kR~p_iT10${c) zI4}U%a~C<51Z2vgby5l`njEK-p9l-I*M@A0#DbY4LZHU_qZ3@43ZdW;B40MZEs zhzW1OHA9P{^|7P|V^nkk`cm{2*fh!^ynr+zC7Q#N!opNq<`@%4nF?T}1XspxK9w_p z118)r`xi75r}Yvb1jV8U>4%qF!T023d~f5MAO6hwH}{|#5*8ow{(%@~+Xdg@5eui( zFVr7Y97Q^KKF%ub0@w+rzq04T6-)IU0lf}DO993Mq3H>tgdAE5!E%L+?-a}ixm*H% z6fppTz;ghct|64eaoRs6E-PVgPzoI-u>?P)rvZ9m^x&dJE+d8&VYySlq~!a{L8XZ!tZ?T^4?rpTSpLPZ$M~(^DkjKn9a7*gNETqtg<^x% z_Ifs~VHXLWBm&vOPZ`<(d6qbPk`rEr49PUen=svmj|D3YJCx*xbs&!z2)K_Bz~Onr zIWP!^bi##2MD^1Fgc(Z;df2Z{1z62Qlres-P!1LL`qOI{JeXCVcn9CykURz@!(JoXQB^GTh9^t(54vuPd$#mQZNl{i^**WI84#S z@mE9*;?%@D=&J9aDu17R>JAxE0Waz9Dqwlm0{{Us;Do ztbh6w#>8}K8t@`YBfPJoJ{>0Hlw*Nnd)S8`90tDEBW%1rnV&G#fBnaQ{k1)p9(cHh z@YTj@Gmm)wuf#3-H=3g{1mM?s>A{9W$BnBEZ<(JSQ%F$mPqmE{apIx*_$cD}A8~LP z0^$B$INDHIVZY)PZ}7CGEyLdE8gr??#PI*2cDCV~LrwnX1u;VX=?FuN!`(E$!g0ZC zVBChfr*CmiH}5)b&@sH|qef}B@6Cos5KfnI1mGE*ZRmnszk2kR77%iAoZK2Ko39^f zhWS;gc(pmwYDBR0FO_CaHuR_~M(MC$4rd2u$A6&w#&PSe4LDI7JJIoCkP7p}rN zh#uXC4G%9LYZ#^S@H?hIHgCl>o@yf!_;-O0f=8Fb51hCqi>Ae6R^WCbigia!uZ=qIqeFg}q?fd5H-K-yLtb$+Tn5S>DQssvs_hZpaV`hv(g^BU&b%PY`?DFuvCKR@27P(G0MyAF8!Sw3!U+Ye<%i4ds!6lB!acr93e(H1441c!k{)>u zdL(tpmcvh3?G*h3iG+?a@Qs}w%vJ%n83XTx@a}jQ-lYVBuj--FI4oaQBA+s(08UHI zGaJQp=K6?sodh~r2Fk%r(NermPER=9)7|8>uzB|`7{;PExn?+^MTidraoMaW;XJIY z&){9jC;1PI&IfGD*&jXe$Op1F{>3|ZC->_^jl#>AmS{>-rj1T19Fy~yj1~Ol#Tlm) z174{I)|D^a^h~sLS|hAcmf(N{Jkgo)W`y=Qp$!iupFnrg(XENlL6AslC~AW(0B2)Z zo*Cp z)Ji(mMk$BL0ij|#`TsFGAFJEh>%V`lxaarL%a<`mh&3#u4W|uG79F4P%^^5f+HB3w zW2L$Wlh`@2=-0PpFdH}xp2Tna`If6cjcF`NiUl;KCc<$HzLN@h7vVrMF$on33?0b^ zb~GwMJQooq5$oZwT6Mm_$&CXS_?&EXADkU$uWz={PeUa|IM?9=y>Q7C{8YT~c*zgO zI9xhON2JhGK_n>YDhq`8PykP~*9W#n$=Rc`x8A$>#TQ=vlYTTw2|gHTN7I7K4kaL9 za2Dz1f0cw_<_*50gqg#;5)5$di5${2rJc;=uhfPSs}-I5$`e&PyX;@DRFIoY8c#qa zAIO++5r=*G1qiduv3=~z0d|3;09iyv(ou^@3fNNt!{HH;%N%|tLpj*Kq{B9&b_9MP z3}X$VQGjHlKEu8@+XIo@u9Py-taFW9@oZ>EDN^w}=NkpMiu zkho|AzmXcr*fe`%CdhlYX(Dz>LcIT$?&aF>Xd+y0QKg=aKdr?^J6sDWHo~m{ouJ(jCI$zT7-3~X+ z&kYtI=qoPg02BAY1lPysIcKsVYGCgPiHW?oxPQBH4n}Eag-nSjj3?_w#KmGZtVvufPlfA z9!OBuJ-)Y+|HL?UWYD}{96`wgBl<4+=C9)XGX!`nOVYM!h%#n%pK z_h?^LQFMRvWO$<5^i=qrK5Z9%y#^;R#;{6od*$3umi^^VveoA<6OTmBZ!)oFM0#A? zWu}KPuqvj9NoUuUV;BXj@Kn2EsBqYj5T96f7*|QBYcmB{<{0+V$tYa51QZ1(Q)v;D zH2y=2DrUI`6~W{|Il%eDBaU%85Cn1u<*J>Qfb~jg71giWLutR4tLQ@o^b0^{3IM7V z!3gWMf?e`nzX`qQuuW)W+}$OImkTnju{IzFHMsD4q-xPr9)}oHNKOCzcb>R5$^P_# z8M=_x5b$4JK*09Ugb}P5Kt5Aut#Ln!FmEKif;$OY%J0~u#>!WkAbvGH0#Af;P^fq- zax_H~^O;&R>`(or2_j4hz11eMu$FktKECR8>%jNEn7+d$&nbuNjGuylw6q~KO6Rno zVCg+l#shd98C`U7t-+gSn84FJz{ZpmSpt@D5a=P@gvXuW0384+dY(hrAV)kNIl{g2HY~ff;FM#bE^qpZGvTSRNv#~oER(20h^2HLB=p+!wfml z@sqejF-P&RNv%2#b^`EV0)og%b*eE3hkHzyX$MQ3!H6JEglT(CjyNGr;B}~}@;=v~ zu#9~HFo*UnQ%uFa6i!PDUDmB&2U^4A9PvhbRLmEFl8XfqMblsV&9c6?vX|a*0&MpG zoCHqa{Fg~`{$F1HmtS3ZA#!Bj_~JwJzk1cm_FAbxMT{ahF&H6`)yzH=p=M#YB!{t@ zOY%AVoG5}jFvS(Io}CUUW{H?8;%DMbKG#FgL4o7*0SzY~iAN|_1eSwoSQr>{F`x$X zthmlAIO`@*PBA5*P3S8^lCEfj9|92u=gZhA2vBb6kZ15PwmfnIXI3qWaX{9VI>A1y zrv2|~CB zDInla{6-G1OXMf~92 zCa;4+a3QK`j4v~NJLA)@6o7p|G8j5DjWyBn>!nBn*Rq{YoL~C8bNgoo0`c}Pk)60_ z6gPmcKN;$!K0fIpUP#3B0im1t@)!l~FpL8sM&Qy@fK&d?u`-xPbZs0%%L6C8!oVgu ztwEjR32@r2zz~B4QlLs9$E#ZMg%FY5ESigOYr%zycd_}8@h~T`@B-yj1{rzS=Sl;x z^;Che$-6&v=S#O_M=#O?CBcH#XW{{zilW6S2o!0tDNva)dr%5MdjgaRaga7ai&VBq z(gd6@Ck%MT0q;Z*OZ>1Q6=NB&y>^i`7XeVd6fh~UXu-5EEQ6Egme4>-2Sm(B0bWOP zb19<>>Yv&sI&+;<`hLyAKYKyuJUJMLNG+j7E=Foy!h{`ve>8fA)Bd9wS z+|lRr=q5jUMHvZ%Hc!HoM2p1mKv^oU(DBn0cX$y3LMrBSMjB3tX;zP;;79wf*7?bD zvuAsA?7Ci~x3sH|;Xm6Lcj>>|DP2__@>hsm(;7?a5Nh;d(i?~IF~POU|2J`OA74jx z9{A6U#`Xmay7y`%kBxwt(a4OA!P2#$YD<5a8DE>RV}hkPsX|F&JMJ$EO%`xT*KL!{ z%-oSYe!*{;#%XA=j9Hw1N*pL@yWMnS3qci{mqOT-rs*b7vrF1!Q>*4Zzu3M_9q`r6nYZ&i=XpElJkNQ|x`XR4X^il4!pZSyS(&KpQ#v(&z_hV%^U7`#X?d%o zdem;ab}cNEKP+`7Q`^dGS6A%8r2f8TQ`uM)MsxDPgShrqXKJ5us`Gv{OJDS5?S!IS zWcW$p8W*T>1t&QP>4+@AEp@RMJ6a1LX4?~=t2(r}#f%ZF)4t*`BdUbT2-u>h$?K$C zFbcKlxvzDGGS>>J(d9m!;ncTSLP3zBqAV1WK{lw2zhsh9C}HxjNc~|8KPNVC?@{zv zsW2@%#>H)tKdEEhyZ_r?#&7(VMTL}x;%b%%5uCQsiZa!kD1=b-pXm4X7$SnuT+GSJ zp_8&8CPS4HxMNCQhYXM;1JV71ZC-AFJ#I6`6d2vY1@9z=1LPQ!5Xa{gQ>i($E@BrB z{GV9B@?pb>m0_Pfwi|}>7z6B`1AiV^*vF7MkGae<8wAx%$I2W7Pvg|wi3camk(E}L zN8q^mBg*TaxbGitYX8uGoT&b3vnsBqM8GyB#kTxM4Y1viS`4stC6!mX( z#=*<0iyztjEX~*sEM>IP4GLS-cjgEYyA!;2pN>wQuF!?JvHfv`U*ZRE-C%WUgI` z55>hqF{8c!DeDqP<2s7w#fnzym~JYWP?wYnkR@FjyL`;vy@ zWX!(qUWqw$U%`jcNG{Jajv~WxYL2zNWF53Eo%{ggXDgc_NKn+}{i|Po^aro)Kfwt_ zt=h2?Y%Zf+h@r>ni=Jg7BC7d%)r~bbnNIdWm_E1a4!?{PtLaAYP56$Bnz_L1MfQ~5 z>$RCtTgb*q@IwvrL~%}LSdy8=gF(H2U0!bsF$N-s?#LtsMO9g6ERqEyB%VZlp~cYR=C7Z@&O;3B=Xtr$~2#IFsjFj zYRQCwuhhO~loq6Mgtx6|$~WJ={O>-}{*{-wO^Sp9@TpNBiHwRM@fAI5&G9n&CGxY< z387*U9Rv9R5F;zSk;0G?t<7f@fQ9#ctW`{5drJommfe1AFNnq9t+rLFwrUaIDB_6a zZi9|jd7-kQ%x6?jLhvZO1~FABx(9V)3GeVtiXQI|3n-Jf_rH79?PqrN71hvw;5$7U zyAH~Ex;S6VFc(Ivr@kIj!Gg9sg7`x)k>kPQeyeTqWQ-x3+LJ*Y>17!GalgGPOAI|< zpV9(Xp`Yg0jq$nC4#H7+5^9R{Sj=g44Yja8jD|J4p4TdKlgaT!vw#`;759E}<5jrF zs|Ji2G&Z?_X-$79>8nN#n}qoabOC84XMW>dlZ!7pc9_o;1uc)T=ZzpiiX6%@pJfqz zB=B)CWreC9vPCcKZ%mSp5Q*Z`AiVkI)&fo-up69Si0BeoBs;7qrBy6DAb}A)zj&xr zwRksNFNhUFPaUnCu_`=iSTmwiMQBY`C$wt(`AROX= z%lDf9(SX6DJlhbfV}nH5tE}uSj`$&24|Qs{MDrT%5?yU@X5yPO;)G^cLsC z{^qE-AQvfP%|G-*(FxA%DXp@wt*I2BUeKy&&BmynMdMs5sIugjXQWF29rzVD=Sa0U zD!MaO0`^61|Ma(BPyNSzsVxdO2_gz*E9h$#UdTvTIu=b-QHXSk0T#C@s8o%4p@2YR zn$uMDva-1NxNJmvLJD`ApWixwJqESHQnqhagY}maF;^4ZUQZK z2wltvyo%q;dBj-O7tee{iv+ktS;#+HmefXK8E|QR)S~0~Z59SZj`VpE!3`?XA)gEQ z5SSK!`GyWt%QgX0WPY(#{`INP+;D08KR+~kPA5yzEWr>`h&Eyr3vT5tV4A2EFaY;5 zM8b8b=s@}jgz-{Zh*w?lc1HD0)L=Aii3N2GHr<%F&`8=Xua>Vc8R{!VG2{S}AmcGb z=s^w&0(t4VU-`E6<7=h9S)|*F#|1FWgE6o>(DO9lWZb+(^=XghLu~>+b_?f>=Y07D zwje!K1Z6}+G1{;w(rzx&LIGEGQ(sR6bj@4ATX-Lk^Da?fW$EOC7+NhSrU?fPEF`|9SuSJU*ZIo@5`0q&s(#&ZxW1CN?uI)w~8~ zCKI-dV5)h|3-T2%`ARpMf1UK{WNyH48Le6sW@E*%fx96`?h7>A*8)(yt-3t%2CXQ0MTElAr~QN7LOQhAyK-&WndyQ-&a`(C>3OHC-T z9k7DT#a^n3L;~AtamE4l-ez3n9R@JHs+5(W+yWSNe%y}$QXxu z_}^&jgsf`2Sst>Zm@jDz3~Tiysyqw-uP{3*O53Kaltzw4CgjM@@GxlDs@KztcbL6? zlkd){1rELqm_#rGQzU`(q;=kuR1N6pEJTtK;wST z(tP@OZV}|hL~Hwl@A>xq?f-d86H3KNLJc1#7xSQ2-WotH!w9~|<2F~cvl_v!E-tls z1^+PS&mto75X?3^i#ZJ>wjJRvlo)q8Ohxr3O#COM+GxCcG2_-+c_FO&mBAIho_LPe zZ;=&LjodQx?Vj4#txPuz)j~ewyjqWHrj=i*u17l!lxvnd8Mke2NE}FM1%wLIm{!{s z^m?N%xk8b|ywH*X(@uT6;iYAW8*daLZ8keqt)Ttg{ja|HgMaN<--NP##Q5!-zdL;9 z*7rmU?s@3T%ZHDi8vE^=|6W2mq6N=9bkA}!AS9n&`?U{~(Sg4|93i2@X!Vn=1F|^$ zaP8KEGhYKhG2k+nBTO1rGB4Weq z`z4^`=uGczUl{%*!5f4`y#7q9YWYLqol@09WXF{RbYwHvE`K1D^bOfe=kf1;j^8`A6N+pYwshTW4K7@V6XlA_exmG-rlv;T(xfP%m#p|KKjJ*UfO>8s&%){ zZ200m#G*_d@4c0ZCF_=cl2DG~@6sPfTMte?NEQd;HYWFuk?7!8uU_Z9O6bGUtw&I>3nG5&z638ZAR!x=T%$3eC8OT zC#Q!$d({VTm4ll!G$wy|0 zZOKrpfO{ZBvHthjpFgS3BQ=Gv=1 z^{x;7L;Gd_y~PwqD@1Y38F{gpr(o*iUcH8=Y2ZdR?@AIhI3#FTTs_r8o`SZ_-f~SP z4uBf~E*T;t3!D|dvCm}-|jy4pN-B$yXoiucbtbEISKfjmpggWn8;Y(dzO5WTU{ z9awIAt0yy}H=c3ojoLzYrn)`sJJ2JsDjy&ZMg1CrHztZ~45n%Kc)wE_nP5Njc6Z|8 zTpc4R#OOENG~V2q9xVXvoyhBJq7@yhU;qAnziYJr_q$q%RnYoA$04II{>VW~RSt`3 zqBbk#0z7WX-{w?FVW~yJ-B=Z5>~0HHpF?&_DA{NnF`N)xML|WznqSyl%?eHeF%>Zo z{h}sNiUTHs%CFw|;}5NW2F;s6XHfc`>aG9>h$$49}?+KZZG&DX`)tnxGp=_o?I}s)Nmr2Zmivu5A9i9`GlQ|BirUbN#|zmSM_1;PIYAIz;Z$WU(IO#b6GzuwkIsln0HMkvTbd4Wc!rYVQ-tXe-zd?n`7Ol zHi68G%o{h|FuoKYx7C-7FHY@g+{L=nZ;OjtPh;i7S+XshyYi{zlFT|~zZlGzyV+v5 zlHh)Rq(P+3XtsCCo@>82IrPoYywQ#yp8CCDsW~T`xM|#`)vGIeHXFUX>l2Q&di33c zSFY@mW?!<>2zb*Y=F}Btv(>dL@-Vv7o@b9wULrdIf6se(>MRCWAzly~@1fD=sZE3D zP*92Hh1aF0`lZqRH}>xi2BRL@JSUwOUSS4X%@@P=u+nbl&v>|3J-qwK*kn>$u-my} z%C2uN4}EjBxyA#2`=;~*Z+7q=2eUsxtbK#I`T#2 z4p*_R4du~aeg4|^AOBD8kkTB&$^Cp>hA7g`;*=wN4gAIYWwn9o0oj!vOWjPcsc90T zg(qaHB4<*L8}vBgKAFQIAeq{MjWnl?hB8{HaVt}5iNfY2(l)gKghPC&_?4nsA^v4gi;jVQMKd-Mazp1Ya96n))CNIVIfZqZKED*5f0#*8?$o2j-`SR zC1ZUj_$C3oC##(@4x2;x<7^p*OunfyIOT7P50mm)tsaf@# z%My6wU@jJeV?T&&)so&QR&^P3vg*`+`WODfY(F4fE5)GK1cRDS`&C~lrmJUB&xNx{ z*7&BNkSULfW^qv5Uvhj!rac)?V!%T<%z5g>`-IX|&@1gDh^9`O1$GBxu3b>eu!+$C z?~W{fH8+-Diyx(_PtIcbUw2)RJ=p%zAIc?)p?fj`i6Zh@7!qu6DSA~;sMM`e1u|ot zzfq56y01WVfl=_RSp}X|zrZsSM`!WO&Wy|g4AN>`KG1^XeFNh>KwAcw$(Clzu{2wZ z`JG4H7Kqc^u8=c@BKbA<4K4>XzgfTI*Ep+V? zedW`5_Wz61phYMUjUiZ1cnShhw0g` z@4Dq(?e7~CAnWs_&qi<`xfWMJT$2w_ z0fs<92f$(y315N%M2bSNVC<|ArL8U=EUBIfKU-ofK-5N)anF}OeUS(wA%5Z8g6M^4 z;ZBi%vF3|+Z>$vJO*vnFD$1X9zy8sGdGjki7b(zAf_q9+;)^0+3JSIrnN;vCEe_NWmbdzw@rI{6YJF{A+=NavmT}y&z3)DhBD7qTN}c8HA*oT!Lz7(HBMx zl8SZCf=!xTqobw;1o-(KT{Fulg`%!?=KutF1w=oi9FQ8K8)kWB3;r$~H#>(|o)m1M z9A;H@!7gV8KmA9CUuk@)fJuI|+(HxZ9Mms#2G19~QVQLeSp`dTV=;`hh?S-W!iG@* zWJcdO1dAq-e=^R{!xbMn4W&W-iN!Yd%upDKh3k5im4e)GRR)&9O0IBpfT z@^KXStWiplp|gM<7yiN)Og0>7XGutOnssiupmckOiJNkrb;9!}Kt*#3CV&>hz3`B+F z1(&m?!ZY*$qO|A^Vp7*rOr(P$J}So#Ay zP>%%~f{Qh}2Una{cf4`ww`z~J|I^b-tFTD}P|%x@R$uNwUqz3IJ^>DksehtxL7Y>_ zDiTK*JyI#uxO7OHJ3e1F1QvoWdPIl-!vpNn1^AAMO|pWe%d=eqaTziC6P+$XB$n4R zev>{q08O^~1fO$Spfrh#)(Z>KDd4DpX0}saI{&{tAOWZ@LL zJ@KJ#0^|f91dcNbOEi0iJr9DSYq&3Ob`67m#z#3DFu^P00ZrT;4v9?~E5&X75-BII zJI5@=fKIIR8XZ!YS2%6iJDR3p!7PxMbP3GTf~@GALffM<3u{aH>G$7t$Kb`|>*ZD{ zm>De^>&pv~EHow}SfWgUC_~jfhAaaFisd)iR!7tM> z>O8^R0+wn4%h~P`QWH@I=g-10OKN9(r|2p9AV7X4KmGOc_s))4n{6*RMxbetnsg4# z4<$6YA9HbWF-U3>TgfgY8BmMIn+P)0jLdFK$?)l&eS^m(a~%Dt4&%sFLBTlF1%*Lv zz_X&sMrTR@9Z7bLa~Al1+Uuw@rfT_+5XJmDXmgameOLKpM!_q ziBOGb%U1V5;Hk^X;jCna*v|D&i`dTfPdv*$0#G5)0EorG4!h`}7)c=3ev^NgL^(%n z|9%JQu}HdB2mO8b8z1p!PXC|@5EyXKGeTHZ2&<6K*Z*O0rg7@^QT4Y4wt zvaKW?m+46id89ooTFO`ow4Ie~1u(D<;bXKPVDJekN>i`_ zP4Qar)zX@?J@eD>n@0KjgXe$|F@0Xgh+#y>6yucwn)5pbM*F#bF+@Z_-sk!Siy0|R zE~VoicFLW2Bmx*2-(s z-+yRv`y%v2vy`gVU?iQBoKrhR@8}jUZ1oPr0J}I|AhSRPrNRG@8v9&;O_c@Tv#O_Q z44`^qZPpfO0oAY8lRR{j^MFEe*HxL>67p(wkZ2yx5N!cl5zYctkQ?LT)Qn{StH_8( zc&8+Tp7zfy-}aG<79F02sn9%UK`KTAO@b2~ozp$?-NjikIFn9lf;5$isV3T|G%Mf+ zTLKQ4=%{|Owu(T2>RQ?-bkE5HX?kI*RU3tkGs{BH2J}qU-aKJ_ss%T=$~3)c=o~R#Tcp3Kxbh>PzYT*qk$1O=?(y!rVcYapv~Jz zK)8tP^C0?p4OFmEscEtO8yaY~o0vQV=md!v2h^!#X3YZh zbG_7JB*ByD)LAWbuA89XpYJBI-_AD@L~biGK4=;VLVPi1j}-|mH-!Tu1iA@^I$sZ+ z$5DDbOMJA2euCg~JuZZGAs(7G&@Ay?`s35j#-|>g1q+61_5*^uAubwd)h&FO%CkKs z+Ncc$NLNXUk8|>_WtP%eEtWc8!D_-&z;(VpQhu(tepVe7BD_U@|8{SkWvX|;b#d3* zKYHxqZ}-i@m2lv+PBg1^(5fh=BU@F)pP#E}U1Z>NUMZet1WXCet5#qlPKAzU3k*MR z;a9hfUhLf7tkNwn9~AGZOc{<#)tI%3S{Xl|@UD;uW9$(JAxpqo4xd=gRIJdCr5MHw zVv_AZA?*0$%N!@UxKJ>;RQs~^mzR{yIi^M=%Ym{z-H<)OhT=er)?+x*D|QwT2*K(M zl8H&(sqqT)A9PGqVaBK2i{lJyJ3X$9ZNg}>Oq8*r`kO3XPI^M0D9b=MhwE|9P`GqB z3fd2R`CW%!dB|!4CBMX{$x={yt_Ej$xL(k&;7bLy5a3q?cyQY}d@@s^$f?Xm{$G~j zm92aASPrDdxTOE91HmO5)=LFw_sIIT>z79C_1ERWzJcA(Y>n<3jvCpnM_hHJ=QpMr zYvy=gu;by#j<#3V*KYC5v4vA<^o;j+*-nC5r+bLr9epmp?oc&45ZzN}o0|Kt9Da_`5Y znd9-BQC|~<`jSH|(4Inf*VsZ}V0S&-5$+g_mhho6yKF?6=}?m!=}?4KTseuBj5c^X za%#FI# zIAo|9GTohSa3?3G&ZEupbC+f>{9pW??c(!qZLb{t z=`XE6eb0$zr557@$#iP33Mx~=l`8X`xMps5+2I6}8Et_~w@Qy;##P{$!i8IJjDoX@ zFRvGOWHawU{6Cg@C#F(%Z_DBcrG;(AtRvot%z>fAN&&k}qlL;9HX;ekfRPo?W)_TPSU}iq`^+W)Wlz~xF=Q!}`)HYXLXAYQ^eFUM@V)p%?jB|Y=w#OY@sC$@} zE5(`8S!DiT9}R;wvDWypX?Iu30e8hLx+%BQ;E76 z#2hF>Tm#E0Rd>|ad^St)s!NYyJNLMxg^xuH)D4(uvF49j)jU!y!7{oX?5mc>W-LeI z>Gynn?_Ykb{X+|=Y?e||XA+9(#ime5ikQCUrEx{yUY7-73RtPfgzGqEn<+UuiZO35 z^kD<4qYCi&`ffH!~n{Rpb|Z% zMqw|ROe>EmrK+#{uC{m42Y>5_^Bz1bmnd|4>ZN%#?+6M<^}KXg^GoYB&zc9aqMbr; zN>*R9#exyK+8p+QP|d@+9qP_{9)}*ne10CPKCGYHOe2*Ehf@~P`C?t2kT91F^LITV zrvvdaHBWh+qu`Fe4AX^Z(*VWT{>J`vSrD{N1_|JDKszs-~ z`NU6d{Jr+SKh0O9EVP*jkVh2_5-$>yfPZ+v23aofKzVu`U>@N#UxWzIUdXH|)=$Po zmNza&$swQGCt`jC0$|F-rwGLJ>X@8m&`??Pe0h=y4bPIlE}UARiJJg}PioMB6xCXB z+pqmo`;)7RGoDCG4uUu{+UhuL1Ch8f>aiGmAYXHZ!O5};3=O5UDcXn+JW;pE4T-+j z({(0mITr5PBI8Mkw?)xm1)p}?*B?^)&3)LQ>K~gO(7S3uH9qqo{TAwk=V1Unv6y}D zX|M)Vos8?ycP`P3YGlb9*5!IE(7<$hYAMbR>G+heGFV?pPup+5&uiZ@%dWuSaO;>5 zt5~Mu=Z{IeQNp)sKJVbHoDrv5i)%hG>+xi)oJ=hei6Ll{N`w6)nQ><_fp8wTv>tnT zg2$@T1}KP~d7j1BUEL^r;+1Jui5>G&hCY0%18_PDr7E++C5tx~YlJD!N;gY@P0>H% z@o#BXPy5Rse))g&y>-l@nxa{%4bLcQmSkzXRP*UaA8>5`$E^x-!3jg5C!9d9TAE`y ziEe2@8l*l9o5i{jE5>Nq_SmeuciU0T8uV3b#Nq)VLG>_uU)sKI!GjDkKq8`1^NY}; zEv5l7Jd5QkSg{UpZB>`MQp zW{c)4dK@XLW0mSLw7`>8Hu85Dr>jiD`Wak$2WZ*COtPxfB(>8wx}1O9l?t=NaVq6@ z%9lZfmU{a`TH^D}2?hNoz{<5OfTV{Q)S60);1f>a*xm&m4r*8mK*0 z>V?cf21|%HSShG0+F)_Nuk81EY0XmR(tj5jZ-4Lp_CNltysBAHc$HWVX)_H*?<;yL zJ%#--CgKbQrEy+NMhy5SODYgcz)CQzF1(i2VkRwe)MshH@0m)hQpKw440z4t zzcV?*UTk)L4~?TqWj%)aBRw%Ul6+4rST#!h0X`g)a9Op89&$5K$)u2qYHhJEe7pC+ z(bxZ^eEOvmyhTbjU(&(FG=i6?Rsk(q&$A-NU|Lkxd?u?UxJinh`uq~Ht*91%W&80$ z8uj~V9Tu;9XdINy`p7~Vo+G65(k9=TblkC(sz;=cYO&*5hBN^FSa78$K2ilP1my{U zl)`$f6})wgnCMW)l$r`Dg~KCSNl947kF@_ zQnmPzV6OssZL_ph+S~E=cR$+xizm6-EMgcIO-F86MHMoniAV^x*|mibl6T9?G+!`O z4+JjGBiYfO;8jGD>^>-8rdHjk$8?}FTNo~|@W!|KbNf{bz1( zmW0qV`GjAb7JX1Ki5x}niU)$ktU>h&3M5%1idp9QQ-j(*>U3XBA_(uWFaZ;~Y=uHK z%NzUxzG}&zz>R?%EvWmPa>?e8bTsqYbbw%`(0h6+ZJYU{KYWk>)Bojjc(!OhZIRMe zmtTO_WBwLjX&pzxRU#Rri;F9O=5a{>iwtXi1_Q^JD%BE<$sg|LAvw@vr6{VGSk%U? z%etI#?v$POJH}70`lRpenbEx(kV`~za4O$stz$dSu>VgXgb z5z?=+-(p#{6iTy=j7hmm&MCYL1&EaKiwA&*ze0s_B)H+NKmGmV4}a>CPyayfZx$gU zHn;Hkc7=ovvTKJ(X6~1lqdNGJNL}@WU3^MnUwIK8V_;FUihg3~(Qo!~BWfx}atPjv zyX23ILrZ=10~-kGF^}>qy&_~qzF5desGuJ6x9EYAb;;?Uq|4h6eWa+7AJEU&LQ9VI z7=3{(;V7G&d^4 ztl>nD`QcGLu>_Fa^QRT2LJINs@-Kbszy62z-?>h1ppbK9D^!nA0(^#)EDXZUyf9N1 zMvj`Z_<)V9?7(P9z0DRTN-VBv45%3TGU#rwLy#L8X^DQGCSmpZo~eLo&ZM7ts=@Nk z9+{vwAMx()NSSQ6Ev1@us@oVRvx{g6Xet5_FXj2_vgxWaomxWc$(cX<*8iSq503~;MPV-yU-oli>~=ed>!zbi zRbTcX5X|pqR}@F{^|;N2jjW_U?}HH1(nh60u54n{U3JDk~UC zxB!Yp%#Otj;v95KE(4gPN2seh*nzfl5@#yy>&eeN`Sx|6YhU%dEtpCxdmDIY0n9jU zWzWKhFk9ap(__A{yUy5 z+~{KK%z&Y7rLCIJKh~90bI?^;ma&R$O(jwJB;mgs=X-h*O)Ps>>G!^*JeGLLx?@Uh znOXWro*9++ZB#_5;_m(72Tp%+Rmo|>;>;-f_kg3-MnXb zuk-%zK7G1482;|lFRi7fhlA5=zgZj%OLntlrt|6tmP?MdE9~Ldho$w$77)_wNNn$3 zTUy_Bl%QDS_?LSGpl|iA6@VT+bMyu>vjNaex7LYBzF7`d7Y8(dHKECb_1?5JY{vE8 zbXE9CQnTH#FQ^_nkfH8J^kj;M)H&e4iW~Hy(Q73q-VMjQ9(du{9XCHc(hTf< z=-R#2W?=8N_Z0^l9_qYr_{%^g2jQ3h_fZM;-EoFAZQ~3tbJzY;Bo*Oy<#oRCv2D_64e37eZvX;0c>(K^T2Ia zN3S)HmR}vcNtAE$yTfO$TfXMk=KTZwDdm#z1K!+_wBtq+vd^1n56wfQsTYKu);aBBC{BNH*rT{}Xywwtov ziG0hNsDDBB(U1P*sw3?`y0VF5(N@LOTA|X!UMeh&!g7+VDtXOEulNe8O|-ulD`Wgx z@-%ia!bd?Bmn!RAoEv2S1L_fkOm-DE2ZOq%PUKb0h68MUF`UGy-jr!2ud%4>NbZ(dOpY`A*9~G7{vl zf)hg7-EKFS{KCZ=yMZMFb_|Rv>(~R*O|2e<1-L$zmusw~p(0k`#UX>gv_oBH_V@Mo ziP>PJU6UwMQLO0N;8RgY*1-}*AC`%ec9H2u+Gn>(FbJCtx7AduuyC1t5ZEZleKy~+ zNNIN0@}GYGlI#7V77!eq-%9>i_gIPD5wH|l4v)%Nae`@uLK|l^U-N+q@MS7?F%IQb z3n!hdKeo3IMExfJk!dDodx`Q6c4teR$Z6}xnrq+#(I2gFNM9z9M+o+ zCF_YeD{bb2+qNYtreigxFs=hqfdt>#wmMl#?=btj2LXfqr{dB9bH8*TOKFDmARXEV zv^6(z8$D4!t~dA%^B=dLWaAO(bj$#2GP&OCC_rT{cpOO009;i2Y*qGiu1+SSwpWp4 zfIR{&ySmZd!8j-F9NoyW&1hpW1_RUMLisBk)}?4*`|eN9tUNJ;xzQ{d^vC4R7#g1b zbY)XIHr8XRQHx}I9NhTYqBh{x+?WSanVyM43*zxeceZ$}GMQpoF^jy9#T_zbn`O*2 z8$x9UKrpU1$kLKx!!!0)H*g}G`|)H|>-Hoq5%kHIhq{kdRkm!wOldPF1Fy1f82~gh z$!&yx(}G0Ok^90>2Rj7%?fiytfgx{L3y09Lk(;1+In}aKXRf`eKmyg zKe%MCy=3hp{f~yVUmm$(Y;@bAty_(M4qpw;753AI?zrmKEA0O7rL}iGn{6AuYa)N1 zz<(n8lV4ew{OQC@<=*Jg%A;I)fZYN7*TV(jhrCrcJe?cQPdvSF>aMUeYvpshsczRk zJQ{8o2|l#;GW*_}&)5Tv>VF~K-IJGA-+iR=;bY;3ZN1~qCqrMnnUrp`3GXfqs=tu+ zt~$9ri%21JdDwk0`}1tYjT5^rjh6O25^lKMyCJhK2^ZMc99$l{&t^3)En0W%`Rbu_ zTQa;BULN+3Q>{U$O@)198^hjaQo)h(KNEEtteBTL^Q!wCR@7 z1voY)*OTtLC&%T+-C0e$Bw3s(QWVi4+axBo=B0fyk;TTl9oI$k5A{s3)2yi84zw0I zF`?6!{&w%p-}R|4I56L|C-KT!}h~ZZE(scc4=qv%j92C-%_5j+4pl z_Ee)nJ}QK~k#?r2!mg60iRQ$BT;=-V;*aEJm!>clRS+JJ{^$R-y!|`>Z*fU}jJzf?9$1-&*vW{BAP=6U zAvxdU<0=Y#L)>Oh#Y_qr$_^UB$Q#pzh^nN*Y^_YsGhJ2;@DbU#!XX)n8pEVubcHF@ zgH*(t!eQKurST!n*xe&ftpRu}1LN5;XDJ{_;fG zp18DPmXk}&>S1TJI*@+J-t~*?{yb~2Iac0Z_WF;N+ssiwh{x(}&i>UQHb`&w^r|;M zx$)(1{Q!(nG)t*X-|y`%4Nb2{#=vhQA6YWqtxm6pB=J;?D&v(W=xZ@S?Y3T2b`6?R zPnhb+-S*c+prEr!(_fs=-@1B_0`@HS#McXo&{eEH*hUrF1a z{7wr66C}cZIFmfA$+6!2fy*=Rn$Wz5ZFdGQWAmA8;hBsKYa{uGGq;ubtONa<4X&}9 z7rfQs+018`k^Rk>sdlClIfj6+;5Jt-ThgHAlYH(_ zae=HT#;ajv+^)Uv(4*Bq&z@cwJ$x|V7Cx|@?U9Vv!^$;P<3_JY&bDw0!$9^ss*%9W zmB^$Mjk>rrxLUCB9VuJ4Zr%xaF!OO>QZvrO+ z!ex7E`E&Ulc}vnfyXnv-(ih?cT`<#Gj)Rfl3*owREQct1vN$iKO@H*8#`el%af|1$ zav=ErX#YCXXfkS}zpcN`*hO-lMhU*-{VS#${nM#=#5|lDZPeV^=$PjJS;j-`AgQl6 zJ5I(5=~j&K1yR=&j3zdP@Y!?Gb07CW0<6bI9Edkw1iMQj9+5o-^BqGW$@%F1j|=ZL zxv$E&Qbyx%{^a=Q?K!{M>S;t$E&s=5JCQd{`J*1%G$P1A|IH#};il5Y6q%9;CW=~g zT+Bw5)5$Hzikn3ItTY(qZ(TRY9Dod;8YYdso2O33O@nVmc?GR~#C({6BoFmOE4uR) z*XQ<5$vI@CwZV=nqv|XsPNau0`UV#WCJu=V!fD9<)aZi8MFxr2FX?~wfDF(6IGN}` zhD;5RG&3qUF=6#D16!rTP2;btt@<^jFcm&xNDvWW8@ana^3~t^O8aMDIu8|Spq<8c z1K~?Dl5*#GWt;@#BG&{=EI>%VKt)ppRXT+FyVVn&U?P`WG?QFRf{5P?8g4-p(pGi~ zGRr69lc|g8+aicv1wp_*D+VEn7CodwZtH1#KZrpMVH|cgx*kgg$$$Y4{P6{Um0Z6K zgs{pWuZ0-M#Mb}=j9y`nhOh)lMsa2?#CvKU#^Pc|p^6^{N<*Y@b(vXPW{PdN_v90= z{D;1o&r3Z84SZc}yr;Uo3jkCprBP^3EHmaK74+P)Rm;d}t7-*IlO(0X6{wxC znB)?+cb2>cKp0iAFG{=q(M^$F`FjG&1-T{ z6tOjZIg(i~PMW{1s^XfMiawXbuzp7o%Mft5EC-m+pqX#K`GKGOr-}AoyM?+|aqvrZ zNsfsXyOEFF44f8<9}Lm|{bGRsM1Kz3ceGP(<@-ev5nMN4|s?uZ<6(Ou?4HW3Z? zyC=6-M|ze_HAcw{TzYEy3mMa~weOJzF1l{#h`Xb7x1?bE$Ezm^SsFMrblFJgiB&}e z$7R`NQxo~{x{*pUfn~L`^U0N0r?qd6RauKp!Mgm>*^ z;-;IrlMUwuvO*1!Brn|n=!}6!U--wLe4+ieZ#U7VkcbUa7&o|uB*Y{Q8>b@1vhXgjMlT!`VpH^Ckr(Yf$4ja&UIl1~Qb4ih zQJ%8+dLmN|T3Pd|o)asDgF{xNi^GGu6|G??WJn?7XjvgyTt(4ioFgh~5UYcgGV}F% zU@jC}Weo>21{++ifN_$84*4Fs--#*d0i`C`aN=ZLvxZ0|E!%6GRz%mc;`*ui>fuDv` zndLmgRKo!u(F; zXGmguJ(~!C^5@)mw5->GHFg6IA~$Q!XT0A?)|EUa!A5 z4-?F!(uCtr+<58RKl)nx%)>31I~6VWLod=T7*s5_gJMaOhDX=4&xIq0Y4{h^*2L)`w{m=5IsW9#jb9rfYfmUA0( zM0m++A%q?4c@~$xL?>R__10(NSDrf21gOov)787G2kT|?V3IWQ7c%2H$(ZbK-WRI7 zy{+A;X>Ts~A8l0UWJk+$vMu|?_tRbBB^^$?#JP!k)2BfweWOR-IvF zdtlVd6(?}k==%`y*0!Y=c=HZe$~4Y`wsvV~VRn+psvZT;SGPD;u;r@gq`18*BW~5% zct`I=bp|@Y!b-)h8kM%CZJX3=zhP8Xb=H2}QN!MTro9X+m~gEdoN#P@NNBiIF8wB6 z8dc?p-4$-LCym{SGnMAq?y1p3hqaq4qf7G9mExHY9;?UmdaZ5gYa90bg7xz7#wI3a z)w(CA`5^rnvpZv~Oj*hi3wc`F=(vS2)GRu_t8j?Tbzdn8%u2C&(8RG&_X+%1=&@&% z6vv6wg3XzdRkXmz2v8AS3?u`&tYjPf!ZZ+(2Ng&^PR5FI(&tc*m5{N}yqV(<-8%0_ z|3Zxv2h!6Ru=u0Ct2aD7%W}&r`JSRD>+pq9)H?h(HZhrHxT9RB9Bix_iBDFH^m^M- zMIre*&K}093VFpe>yPca-)7+8<4^g!!!%@;M){icoTF9CT8FKA7QQ5`ot4;}JKtOO^zs>4!%x zvC$|)){q?^E4RP<7vAXlmlyXGb;VEN5GNXp9peRuh0k|!1!pAwtUj(Nbv=eq zj2K}n_*d#OKkJlYj8aWp{=~PbX>}=@v^>GcmvfzJjKng(5m5FO-jkeQSxa*%v@+Bz zIl4gFd;Ryn_~s=K6zAkIV$cy)HUyQrihdpw>zq%*4m?$TXMZpweIk? zT<#h5th+X}u1kwg4tLhuUH4AIjjBUg7O&j8yK>Tcq+Xd9M2qXu)}E;w#@R7$Ub?;- zOecTj8WZ6nyM2*u1ga6a@5^h6r7cZ5w%WILPIuM1Hcws|#_m!7@3QFmH5ZvdSn(_7 zhEC6@8qW=={(fwd#g+G7zU#`(Wcqx`h|Lk_#DSId=|+7tye#dg&J4tZz0RDS^E|8m z?Vv5x)8*A$Re$Zx`Ko2zb`A*|G=H>Q z)yKHf-)TCD8b3paGPJj**V}56Sy9M{cO?nlY~A$r%BtRHbGn$-bo#zzExkCg%k^Wy zh_B}FbCkivvlx+Pxowx9siO@NsC;O5-W8TCyUjzGU+4}s!VZ#~`Sv&fX{^OP^>84uv>1w?W;5I?>oJaQz>&Y-GbeMeoISYHnoY7TQC$?7K;T* z&!ig|W?4~=7E*jjx_FFH{l>g+bR7g?l%#Ld=(!Li;AbF&v6{i8|RbFBNq z&cUvLT|FbR5!Z+Ps(O2O9e2t4;-3C&ffrw343>k_sD0?y4SS_$?{~^x zsQLIqW~EiZpq;tl3AgfMYJh9Uyf{qrE6t($Wv=B6*~!|f?JiZ9*|lu%E5HBdpZ(3N zQ@0m5fmp)2!YW7fC>V|tXgTu-WBMy%%G^;mYUQZ+*k?7T=zqY&F{g zx;%)&s-f7b;}4dV;TT!@Sh+rI*!B34jPaPll&f}K61d(kS{GnhCG}XTtLY}c-cR37 z_{!#ijl{<2K8v4D|F{V6%9?5peQhc`hc=?fY~pDg%q>j*ShwIQOe>70DQiwevwhAk zHrUP5WSYz^E#G$2cb~ZETR-3}6n(9+&NX__0PawJ#B>*#PCXiSmoE#Qlh%ZPG@j#W z4qmP9s5NM(Sq>Hx!m2NF<6wS8U+mVM$@l}?({;|8P*1Gtrt+39dzvXV4BPqDQdeCE zf>b6jP1p2FPSrXx>700`TF;a%VIvGKNi0RR8%}tK`RCDvnQf?@l|UJ)oc#V;BGO{J zADe26Wx7Wk-<<1AWqD_oSC3jpSK0?2Hx4{euhiYJLv^yp>@B_$wS{e=?Oh*DSk(Y& z8WPqTKWz?fIbi9rxz#WSg7KdEX4ZD9@3TJrmv20_@%3Z-z(G+GHSyciQ9F#dSGO)1 zoFtoa*jBAsTBDkobM490x?}fbS+7{ZHsgqu+t)z{7rU$7iP&hrI}Z+6hZ5WV+Nffl znGTi?wz(G^*<9^$s~1MWq`h>qw7q_nBoel~x%S-6_QbG+p;xq(DRz2VJyITU;?NOU zG4we|CV0=v3KD;Gl`~McAh81zma)Ng(;m`*?o8@O{ga*VugtAgwg!&o>#4KK77aD?*_Bi~SY5VWDwQmHD@AfXm87y5Dh*rFH+GqK}7e z-P&~f!5gZ*2R01`?;fz~#{RnPk2FRH9eX^RXEailXx8nh=w@$+k_}Ydv4i1rRr{CH z%e}1D>x@{#>1rqX@AW8~W31ZJ6KKKM+AZY`$*x;hI%AtUx7c<4Fsj@z+`F=)-xzbE zcvE$8<_tB6m7^&InbW5^sl`$Cy8$PypwHrOUNV^B^e|SmvwdJ7&m3UK^y}x|A(rJIk z4ztdVD6CbiSC_g3Ue0{{zL$Qz{o}J(+rM^l!=BLDH8D1w_ODLOrJuTTdcQN4nU%*w zw`0kvO6WRX_;h{VjvENQtc<=dJrL9%SZZI^zv@UbGEBOz4dd>r;p%GR$qrAyGX{}w{&|$W9|hz7d_>=J1?sG2V(aUqki+s`9Xcj z+>xR3kh{RS{E)Hq$imUY+rAat=Uc8>8wYnTIl9tGD%Uo`uLa3U?_@AMR(<%`*4{_! z%KNY41=V4r{^9zO%Dd}>!FLYSc8_ccJEQ%^&N0ni+iMb|YJMRpZ(Taa zHD7;a??1oNK2~qhoI>*HF4Nre^U|2?N`~7S?=4#R4|U+F?b5 zrp3{qo^e4L=y8=}aXQDtyP&Qls+C7#-CmMfL0v~>;o@KQwZIqS%Ik4L3}Iet;M9g7 zuiI5`@nl6y&5hMLp4h+0SQ@AM7t~!=vt8AV+bZ?>1_OpgqOP^djzoF&&Eq%T+x}a# zxxy|q<`|=%Yg<)YGxmA);QzGuF7QztSH5s{Yk;v0o|$F@jf_oqYXpN32FW5JPB!jo zHDWA3gk%|HaubjuCkolbfnW#Y?7F9EiQ!@Mh;Y1F-`HTuKoT2c!zP>E4WN}{vYTDo zgv5ES10lOkHV-39SiH>lKh-^>kqx%@clXPF-~Ckyx~opTPMtb+>e1)apaf})<5^g6 z=rG1-m+xQ-zG2t~)3K6?9gD#NH=NiU3niQ_hRH(nhyW=dmTYvGVlYd=Ru;zJW@xq* zQ$x|@c>0ZQY(Ttua@s`Wj2NLAX9-zLq?loC)flNMY{A+og(&(<0sRgMO^CD zSfd6VzJ!TdbYmixQBEegYXOstxV~v^8X8=KKYt9F$aSJ8_mJXBjQ1bC9IH{GNc`5a}<4ql@0#NP9pT z{-GQ5L%9?4VcdnHtx)%)05Hokb~D3f495!$l*2{^@M4BjB)mZc7Edr6 z?2<&{xD_wKjRA2f;c19vO@?k}@R5!fhyzF$#>rwGwIzdaA~6c*DzG-Oag(qH=0d5O zWpBa659>e0Ng0#nT3FmBoc6~+5=^fl1KE;xEP?(3g3`3FK7KUf-iwUn!O0|%f_+e~yP3RzYePAUebd?HvQjv0EHaY={I0+W3 z9SssPtQoP21{-OzDQR(oHE5PJeS5rJyYl%zUQ-=u0g-)|gsScxj_hhSJh-h5tO>Gs zlJoFmM1Kuk&RB+UfX$?#kY+C_879W)7B=LvV@zOD)-aq$Y+GX%KFDE_ZQwIgNO#hb z1`=U6s@&XQ;uujjX)t0O+e|iJilO^PsVO~_)EItB&sM@_mxGBEyHQ)WP)`ykNKx6a zG}+=Tg>#2!i^ER7P+!~}={v=X!UN4s+coe=^D|EIhb#;=Y5ZZ?S`kz#wKRe(hxnWl7RuWWYJX@}N$<5Fem_^Q~x^yKBu zZS|hFa3b_&(|>-Kt6tWo{MbnU$Q#%CD`-^cU#w78DAk{6xo(28ytwr?YhG;G9QT-g zM^#gWT2s}rp}kmt#%*X@8~^7DXK$5y%xhVorzRguuZZuro1DhA>YbivZ=L3T&s$|w zceMX#YRi*^fSKoO3w|e4-@z{@*>pVSyn@v9JmSt9Dm1V`5 zZ1seHyz$|+c8!|emb%*hZv1ejUTqtb%9xF7zgv7w`|-Ba@8VW#*(cVFsg19`yVzK% z{BS}lwn81B>MZK`c(L-SnVI;V?iZ8CcePyIpm$8GtX0c)b=-1va#8w=SD%|?eb&uP zvD4|FC)$3W==@sqT05z2weI}wc(wEsr3rnGqPH3!E}ro4u~@uyTJl8>X5&=C)18?K<<4)pm5(n#xeN);pnJ z=3(!UP(P6{aXUFQdci!G#S8=UT$Js?hrro;Rdtuv935rPjW#7doUXOmaW!->(UjB; zue?^@rCY9saidI+k23V8gp-~;I#szoQ#C%Tq$=HL+f;jb)@EMna4McD$4_EMWAD@6 zr-iiMgf?a)exN)Wn_H?VQtY2f8x?bJ-{|qpSp%v~+cO*SWio4L(_Nk;gTq6evD&!B z^s&}BucgGDo3yNG^HN)>sjwQ9)Wp7+mL3&*I2u|Xi;q%`A5VJes>uDz13KWEunKt^ zet@e2o7dL3*OIzf54VJ8Q}eDPh7c#hc?K_ImiOw*Z#ZH{J_5^VZ9Lu^?KG;j3Alc* zRdr{N)14Zr5J`6p?zKs;vgCvKJ*}H{6<1ZsH!XkQ%+fcX*c`OH{l=u1mP)<8q+`Ul zc3P}DG1*G6Ew#FxVZB$mIOtPbp)r}85o`$C5;Tr6w+^ODHCo}^; zpl7kR>2cSV##_BAHvK4p8Oh!fmo=BER+?>JpUP&Wc~GHdi7o3>?Pif@9k!gyl5L5s zj@;Fn7uQh&OYPGWy;1t5zPNUUTcWyBrWn+el{ytC)2X?3+#Ky~&DxGK_hu`LMP9N^ zE3#63hIv`MH4c5y-tjmb*E{uQODpwioVQ~D?J;BR(@o_M7V5)&;GpicaM!srX8`Gj*v?kIUu_towAyt#uC;k8c`?E$W_s)8vLjx5gHg*WVN$Fq-X6<@V~1{<3;? z*TedzU5x`%m#ojWKE8f$aevt+E7tpzJ->KXys3Z7Eakbrbp1SQb*%rn`eboDiQk#r ze(Sm=mQiy3tnKMl4;|l8x1xMs)6hfHp165e>hAQ3;xqQ1n~F2Bmlm(K|Fif^nKj8c zWAE&^wrt+6s@>&7jnm2=+~w_DzqWW*+4}x1$?p1M<8JG;vh%rgs=g`N|D{>a*{^P^ zzH$9&Nrc=_Gw)2(~D>K@hx(;bTkV9(YNue@q;y?4{G zhCAm&k!z2=cjzM(P3aZg{qCm5vLlNRJ43q`HO^|@HK=S~7aKGdSzlFlHq{jGoi{Lj zqVlgz_M&+;(@$0`iGQ!7b?xqn#+3B7d&=Fpv&!QqQ;)Xp7_inDT}#pr?d?9X>sZ5_ z`c(01du8QwljFyVS9A~TU1F7W#ov*ZTP{M&Ekw(0@yKpvb^O(B1LgYT#+mrqb)PMt zy6e)kJX<`)XsVnr{ro>~KKaEL{azk3XV%{Kdz;VJ?(Eq!r~JN>)6F~g?djR^`Np#) zYqxFM_q8uBe!X$$OMAAh|BJeFi>KW_>!n@yHlMG1{<%H3SNsJMKYw)3bKQ5ho-bMZ z(59o`_~Np`*5{Axd1xaNFPpz`){$My+mX0-&%%nkXPj(*zUe@1_uU`=^^E188oX&f zpw)nWYTic%md$VcaN{?XN1OMpEFXM)e&d0XuGCfzq|*mC%(q@xTz&VLbXerDhspKM*y zdSpc1l+TztnymR}K4Rx#MotZPOY|8HDRZVA}+u5^ZW(g7>-PygQr*TCC5_i;pWAW;R z{V(m@e%Awat833JoK`k#cRLb)cP9+{%I}+i#QW~*X$3(itld_>Z`taFuQz^k?_Jw& zx(|up59)s^NBtQ@{cnQ$j}!I3oTL6XLH!Lx{r7|VyK~f^Nz{KC)bAnce>q3}mqGmp zi292_{oOh0&m`)<4C?pX{qeyW6DK^{v~T6I!H+L$JTPI~-5Um$En0j-U!>ed~imT4ZUs(RuQZsSVc$`Ayvc#BqkuSR@pO0tX0IaRxE494oK{P z#AaD+mc?dSoU4d)6>$W|4?x8coH(r&r?ui>UmWaox=Q$n z;)-K&#j&{JSX^=ZX!FsP72?aX__8d%EQ>G8VzVs1EQ>G8;>)u5vMjzVi!aOK%d+^g zEWRv@FU#V~viPzrzATF`%i_!O(9xaZiequbvAE(`TyZR}I2KnNiz|-B702R=V{yf? zxZ+q`aV)Ml7FQgLD~`n#$Kr}(amBH?;&^D^CwDA)ym5uN;#gd9EUq{fR~(Bgj>Q$n z;)-K&#qqCaEdSKtP2!4UamBH?;#gd9EUq{fR~(Bgj>Q$n;)-K&#j&{JSQw&~oNj(u z7@`V8RAGoJ3{iz4sxU+qhN!|2RT!cQLsVgiDhyGDA*wJ$6^5w75LFnW3PV(3h$;+G z_uO6~3{iz4sxU+qhN!|2RT!cQLsVgiDhyGDA*wJ$6^5w75LFnW3PV(3h$;+Gg(0di zMBTf5_uz*4b$f&%sxU+qhN!|2RT!cQLsVgiDhyG-x%aMZH{B-;QH3F@FhmuGsKO9c z7@`V8RAGoJ3{iz4sxU+qhNy#&&u;Ixo7@`V8 zRAGoJ3{iz4sxU+qhN!|2RT!cQLsVgiDhyHAZmZuX3{iz4sxU+qhN!|2RT!cQLsVgi zDhyGDA*wJ$6^5w75LFnW3PV(3h$;+Gg(0diL=}dpCwDIrhN!|2RT!cQLsVgiDhyGD zA*wJ$6^5w75LFnW3PV(3h$;+Gg(0diL=}dp!Vpy$qMmMk`RJbKdhQm6sKO9c7@`V8 zRAGoJ3{iz4sxU;|-Mp&l%yYsJRT!cQLsVgiDhyGDA*wJ$6^5w75LFnW3PV(3h}uo( zg=-($bX07X#b#M-mc?e7u`zRI?G>A4u~`F7eo5Zb6;?^c{Ym>OON!;2bZfz2`Hi=uC#H~%@)+TXl zleo1>+}hN?_mkq*CUI+%xV1^#+9Ymm61O&qTbsnKP2$!jach&fwMpFCByMdIw>F7e zo5Zb6;?^c{Ym>OO>GAoE2THnbKOk;x61O&qTbus>d23TBWjt6DZK<54);7gjH>T1p zI=pTA(t()g%|7XU!fIMNpmcgQSH#;=OOL9nYHNyW?Fq_JHC;2tYn$)3%xpozW^>h4 z<%fXT&8<^iXms`dzrh%8EvGkR{=}fp^CKCuFs71&5K)oeN%gtm*Q<@+-r=B zJ#UpwwobTKYm5?1w)*UZ_R?g#p|8RY8MjROu6;+}wYFv@?%min?-BKc6*A^M(pt7L zV(a6q35h#8jpl;`R>_{m%OM;pVfC zPdoC0eWY5QI^pEask4voY(ywLO(~gt%`?W`75k2)d#A>JQ_=jN#2&YyV)a zis{#V)-B%hp;F^_wI5wPsq(X17afgOUF+TX!)N0Yep9ym#;s*;+nrZGJE8j1#buM$ zH%+}~`OIgPs!!iuHpy)&uf6v(6ll8h;p3^5$~V5S^?TP>)*q?8W4+#XP4E1zzp1LM z|7q>L+2a-k-S1Vk-0roc`G_&3|Z(H}vt(JT?2xTNe18#aJdD zQncY`lwGOn&hLXq{8_!Y(3rBgfyf-@nVEZYeNEVbUY49lcFKKxAo>0^ejRz!% zAdeh1m?FDTmVV3gnj7|9{YGTj8GLnPjvjmRy<+M{B}M zStc~Q6NuG}UByOcLRD$gxH1{7NqDl>9<5Y+_$#cX+Di3wdvvQwo{;lQ zJT$?oiZTl8QE5^lRGf;j7=levxiode3l+C8qq^7|rNm-IdQ-8-Vyr3_-*o=x=MFpP zKeUv$n8{vZg2&plb|=+tjoPxUN*$RTqovuW0wOxy`1i(&1G=*SVil*ci&xwT; zx5bg-@u<{k0mcx=Qc|={V<|cJG@??p)M!hXqhj*xwu*Q{it3}Swo)5!d8&mVGujL@ z##oz?N<~pdn;Em1oG{0ErmQ4P$&{lut1{)d2fwX{%tSnC>j_(Ku{y0*HEvFgCsCzr z;u&v^uKM_y$F=@n1mc4FA5G8dXfS+?p0~QTA z7U!wZ77dVi6j@W0KNZS2I!lfA7-OYrI~6wLRUIw@YMO;K$)mjRj#4=wDmg3^Et-sc z@gkLl5(@EYittDw3yYL=zg}#fulO7QaB@7RMAMQLU%=9_xQ-<7195ocHuu}CHDy)D z6Q+z8NF$ldM#hlIvh-ka{s82%jWoUM_hIH3SjKl7cj z!!yG*H_GKnn|UguP|CSHABYDqlZ{HVCs3UnZAxj~DTl>VYJw%C8dt5>M%(eKn)UE_ zc2Q!kzQzjM2jjuJICvMisuK5ZPS6|CMJ@~5hcw9yH#u_3guqBNr?dH?)p{31QT?F30QDiW$;Fa#V!idwG9M#U(Af$TC!8V3Hukgz0Gi&-w9vDUgIy{sLMoQC+=v6*>N zygbRm2pmr*{g52>7*bT?1%B&xm>bubq;OJm08<6jqMI&a}m^~%@Av$l*uf`3OOuo z$(p6g(PvbKu`exXF%eCZmz*lGLoo;SBxU5~E|l=JkY~mjCY~+4xnU<8lcI4u4!My` zC8b2v4aJjsMcmr5>Hh75Z3j;s4`c|W9FT#NbpzC-HbI*4rlCQY*Fw>BoPo`32JCqg z48{z|HVglfEiscP4kvC*(A0`Hn1*Y|B@dNTK*r{_D*54M{KFEO=dtmsHBdYpHTr3d@P^Jb+FPUIO zM93i;6aNf5l?~3k(DAiMvNeEV4)DSzW22}kzEjZKDK<97Tfo4GvIe4YC!5*yF5OWL zN%J6nh(9wRES5DXtx}`5hoZ5@RLn%Fm}G{XoN`Spa@h{E*8voylQg`!v+#_g24EUP zQQ%n+oY}u$a!=D055DN9k)p&wA+wmVcC+2&iK{UYbAsil<^pftpR&n94kIUNs7uKx z41I*e9#dRqxGl3wnJ!0Bv4PqMPYL`-j%Ln~L;Mbx0!wNca3eSeLCMmB@{tMn5|*o% z41Pa4uw*Ghgd7Q7%Ds3{vtpc9Y_!)Kg~Z5WwgymPl7@ao+7kE})&(}r z&cuKrL*s3eFi!$8Bmtd@sA^OZqBLl3igPPg710nz9+Pd&uU}pocD1mBM3HarI(=mJ z+3!9EKX>R*bf1Y*l7TlJHsz!V^vF?+&o;*BPV|4?1?(ql96uk7b%4fwyt`GM6)8R` z0VG-k*kLt;UgimjxITd?T01>>*XO?x`RYwPj)20<|K{OH?YB@ccWGO4+$t@sYrOMR-tTQ@g8G%Q%dwWp z(BSEEJjqOyft=uY1BAx1SOYdH4XyTQdz+JOvnL(Y0V332y>U>&ybcPrnf_m zO=5*fMpRcY79hk!YYi(CjO9{*d8bY)1;F%xLClLPey56COj`o(Qp}zf>fLp5i^6v zKrJ3kqi9J(2^L6-*1}zmc+kcV$eN@;Y^hX*WJ+#v@{h;PzVDa6SjdyU^TRJ;I8BE6 z!_X$m^9PU1frk?o`rN|6+x!=9d$juY$Zhw(E#e}8x1y6zGCWJ70RSF#$>QDo=y^6XsV-crAGeaUe z6<+H_SEX1s?5S()haE{{)#%4iVjh=!qvE41LoswC#X4&G60vEj!;+E%YD$^ZI-7(^ z%u^h%F2)rWf%+ z5l0Xw2I&bpYt^J|RMIt~fj_-qM1#?mGIAK{808w9t04eRbbL9CeQQ8?pWHMSvyyYg z-1|Rx?22zaO-YehqrsqGPE8IQkA+->nWQ~jN@E%aXawfG#w-WMZ1A` z4#pDUFDpcTxg&$7gtAUnk&+oxHc<(P<0ci0QfaMGP$bf#oca7O|E3%e-%%W`T!4ax zb(sdrFjfRIL5^x6-K0qk`9K32#h?i?$Z<2N%L~vxk^&glpnAw~TDZJRCL|-KRdL+n z=&P)ysgnH|OXx+0q@e(`9vgj|OAXE&&1nZxW<{K3E#^uZXbP}~N+E_KJAZKYHs{P& zOys+`Ba}@%do*rbdG)+k3V_7$fJtT{j2Mt7^mM-5B7``b z=W_Ereh#1g3v(Cvxo`?=E(e`{;(-2Vk&k_;Af7K9(O%4|Ccs!5P$VY?uT!I@71WSx zs63memo!eRfOtOHAzog{`iYOsR$ATi>pF{5Np5H zT?DCI5>x@Nq~Vcsh1CJZgOseGlw4AF@`)S&c=_Rckn?Gtb9ftr_6{dOi5%uX{R#?; z_9+86fS6{Zeol_X2*}71k&G{zBVShEOddRKzvxG!rhIvT0JV@4h)o28xLh3sfy-6p zhc5C|@);_%g7i6XFsE^JD7V}Hf&0IEA#%$a3XE`mUwL^9bCmOYfb%UtK3j9az*ABx zg(szS$c_C?u2{(&_UB-DOBx;pF)sX(Ra?$XJ$ULihoTBy4vRc_IHM0kkrsIHupz5v zKC4%n^MdMNc|7wDm`Ykc#65YONi6%Wa!L8`#&mDa1uy!hdTBhNr9oHW?Yn}3p6g?z z9D%r>aJcGRR=gz*j{?`f<(2PljNI9f15u@5N)4^|+fKo^mCjQE5ep1Sj#Fw_sQZQZ zCGEva z-f#rzfpml+ib9!q0(oDa@D!{Px%t$jN4|9QLhI(&O9KvwEZ%Zv+mk(eCUg(%p0a!K z&laC7zqRfacs{~CPuBh9BPVA70?!@rEL-wq-Rb5>m9A4gvwG@IFAjXmPS?TL57@Hv zbzh!dKcn%?!aYZKujuOEKWl&aVEW5X0(7=~(KFi!)IPDNe)rg)Q>9DQ>C0cGDncfH@V`epW+rajx%ot%;P?XEAkfj(fn zZ!ND!i_(vlbRFM!rg6{F2Uf#_cEEG=c-Ps+15Mm>y79omj@3u|yEbi`KG?pbyor3f z$+yt=CCPVmQ`hdnz;~2TPx40j4>KWLz zWcT9N8}~H!415E$d%f`h_dQv662ATCo+~i2XACY|QrFbKZPT`4-|oTkC3Oo4 z2H&EdyJn`r1dTnb8__&8s(jJ@S*L#W=Dy8mUkVuPO6!j7mA3If*@K>$SY;hi`#zhr zQ!~_hOF5jr-g5hu2fW!^ORa{^(t9oA3bj`Mjde`*Qb*JwOP#!Zi~gWB(c7i|qqplC z@9V1baEID7VdIhJ?YUkk_)3H^x{Yu7c9dDgX-fC&1t-W6Fhq|m7 z>YQX9awjQ!y9RW1UCfwUud738CAtcAZf`$WzSrxk*x0i%9Y3P}cwV}*dV0Ebk!N<* zc-E`6CzEydIK3lv-0Q7O%(9gB^oOji=8*M4^+scq8oSr(k2$0D_FH2c>rxR<-@bAC z&1&;R?@2w|w?32DyYWQgVP~a2_m;BGT6w-VQ{Py793Kz&dINfex29@RqF-5S@zy_R zy&s1^d%f0cx~`37;#ccmwkE5+lN5D8pXjZNd2_8P-uAs4r4Dta-u^FTu5&_fuWRmW zvFp9Ez4##6wMJi6dos0T{*K6;)hzFP35Os&+>sdJE+0ctSo)HKFeK>#85ICHG>D=S zc<%g4&d{L-df#c`)VRB=H~IQv>FmPg4Xr64@+{${^uTsb4V7Bmlv2Y3+L< z!u>yjmqMJ=N}Yt`ToUU9gdnB-Oac%EK;ZKPtOx=WQk+l(e!z+&n}bPtRB46ir{jVg zONmocZdiRh^4H6dlRKj*0c3o1F%d~=LX##NdZmTN=>qMxMsNp(pp#Xn9@ z2?$eq!VdmC?=s&hH0M+E!#Y35Was|wkL&kEzVewM9;Xy0&G%G8fw#&eTscyFs~7md zHiV+z8X(Qt62)UpLXE`?j}r?MMG>a(@}%%fh$1AY3I5>neMkuiH2_Y^5t&lE_{Z3} zum0|p$l_TP3s*Hmt%FpFcbAq8c(b4zmF_N9Pv|G~>=ml@fWDz5U6bGueQUjR>Ot!o zYqHl}>KRAWz1^O>&w}ik?

  • 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 + Asteroids (rev 4) + 0220 + asteroid + 20200427161917 + 1979 + Atari + Space / Asteroids + Space / Fighter + asteroids + + + + + + + + \ No newline at end of file diff --git a/src/fpga/.gitignore b/src/fpga/.gitignore new file mode 100644 index 0000000..9d946bf --- /dev/null +++ b/src/fpga/.gitignore @@ -0,0 +1,28 @@ +*/db/ +*/incremental_db/ +*/simulation/ +*/greybox_tmp/ +incremental_db/ +db/ +PLLJ_PLLSPE_INFO.txt +c5_pin_model_dump.txt +cr_ie_info.json +*.pin +*.pof +*.ptf.* +*.qar +*.qarlog +*.qws +*.rpt +*.smsg +*.sof +*.sopc_builder +*.summary +*.txt +*.bak +*.cmp +*.done +*.xml +*.sld +*.cdf + diff --git a/src/fpga/ap_core.qpf b/src/fpga/ap_core.qpf new file mode 100644 index 0000000..dce59fc --- /dev/null +++ b/src/fpga/ap_core.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and any partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel FPGA IP License Agreement, or other applicable license +# agreement, including, without limitation, that your use is for +# the sole purpose of programming logic devices manufactured by +# Intel and sold by Intel or its authorized distributors. Please +# refer to the applicable agreement for further details, at +# https://fpgasoftware.intel.com/eula. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 18.1.1 Build 646 04/11/2019 SJ Lite Edition +# Date created = 21:31:36 January 22, 2020 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "18.1" +DATE = "21:31:36 January 22, 2020" + +# Revisions + +PROJECT_REVISION = "ap_core" diff --git a/src/fpga/ap_core.qsf b/src/fpga/ap_core.qsf new file mode 100644 index 0000000..e07c350 --- /dev/null +++ b/src/fpga/ap_core.qsf @@ -0,0 +1,763 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and any partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel FPGA IP License Agreement, or other applicable license +# agreement, including, without limitation, that your use is for +# the sole purpose of programming logic devices manufactured by +# Intel and sold by Intel or its authorized distributors. Please +# refer to the applicable agreement for further details, at +# https://fpgasoftware.intel.com/eula. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 18.1.1 Build 646 04/11/2019 SJ Lite Edition +# Date created = 19:22:02 April 19, 2022 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# ap_core_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus Prime software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.1 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "21:31:36 JANUARY 22, 2020" +set_global_assignment -name LAST_QUARTUS_VERSION "21.1.1 Lite Edition" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:apf/build_id_gen.tcl" +set_global_assignment -name SMART_RECOMPILE ON + +# Pin & Location Assignments +# ========================== +set_location_assignment PIN_T17 -to bridge_spiclk +set_location_assignment PIN_M21 -to bridge_spimiso +set_location_assignment PIN_M20 -to bridge_spimosi +set_location_assignment PIN_AA9 -to cart_tran_bank0[7] +set_location_assignment PIN_AB8 -to cart_tran_bank0[6] +set_location_assignment PIN_AA8 -to cart_tran_bank0[5] +set_location_assignment PIN_AB7 -to cart_tran_bank0[4] +set_location_assignment PIN_AB6 -to cart_tran_bank0_dir +set_location_assignment PIN_AA10 -to cart_tran_bank1[7] +set_location_assignment PIN_AB10 -to cart_tran_bank1[6] +set_location_assignment PIN_Y10 -to cart_tran_bank1[5] +set_location_assignment PIN_AB11 -to cart_tran_bank1[4] +set_location_assignment PIN_Y11 -to cart_tran_bank1[3] +set_location_assignment PIN_AB12 -to cart_tran_bank1[2] +set_location_assignment PIN_AA12 -to cart_tran_bank1[1] +set_location_assignment PIN_AB13 -to cart_tran_bank1[0] +set_location_assignment PIN_AA13 -to cart_tran_bank1_dir +set_location_assignment PIN_AB15 -to cart_tran_bank2[7] +set_location_assignment PIN_AA15 -to cart_tran_bank2[6] +set_location_assignment PIN_AB17 -to cart_tran_bank2[5] +set_location_assignment PIN_AA17 -to cart_tran_bank2[4] +set_location_assignment PIN_AB18 -to cart_tran_bank2[3] +set_location_assignment PIN_AB20 -to cart_tran_bank2[0] +set_location_assignment PIN_AA19 -to cart_tran_bank2[1] +set_location_assignment PIN_AA18 -to cart_tran_bank2[2] +set_location_assignment PIN_AA14 -to cart_tran_bank2_dir +set_location_assignment PIN_AA20 -to cart_tran_bank3[7] +set_location_assignment PIN_AB21 -to cart_tran_bank3[6] +set_location_assignment PIN_AB22 -to cart_tran_bank3[5] +set_location_assignment PIN_AA22 -to cart_tran_bank3[4] +set_location_assignment PIN_Y21 -to cart_tran_bank3[3] +set_location_assignment PIN_Y22 -to cart_tran_bank3[2] +set_location_assignment PIN_W21 -to cart_tran_bank3[1] +set_location_assignment PIN_W22 -to cart_tran_bank3[0] +set_location_assignment PIN_V21 -to cart_tran_bank3_dir +set_location_assignment PIN_AB5 -to cart_tran_pin30_dir +set_location_assignment PIN_L8 -to cart_tran_pin30 +set_location_assignment PIN_K9 -to cart_tran_pin31 +set_location_assignment PIN_V15 -to clk_74a +set_location_assignment PIN_H16 -to clk_74b +set_location_assignment PIN_H8 -to cram0_a[21] +set_location_assignment PIN_H9 -to cram0_a[20] +set_location_assignment PIN_B7 -to cram0_a[19] +set_location_assignment PIN_B6 -to cram0_a[18] +set_location_assignment PIN_C6 -to cram0_a[17] +set_location_assignment PIN_H6 -to cram0_a[16] +set_location_assignment PIN_J8 -to cram0_adv_n +set_location_assignment PIN_B5 -to cram0_ce0_n +set_location_assignment PIN_E10 -to cram0_ce1_n +set_location_assignment PIN_G10 -to cram0_clk +set_location_assignment PIN_F7 -to cram0_cre +set_location_assignment PIN_J9 -to cram0_dq[15] +set_location_assignment PIN_L7 -to cram0_dq[14] +set_location_assignment PIN_F9 -to cram0_dq[13] +set_location_assignment PIN_E7 -to cram0_dq[12] +set_location_assignment PIN_A8 -to cram0_dq[11] +set_location_assignment PIN_D9 -to cram0_dq[10] +set_location_assignment PIN_A10 -to cram0_dq[9] +set_location_assignment PIN_C9 -to cram0_dq[8] +set_location_assignment PIN_J7 -to cram0_dq[7] +set_location_assignment PIN_G6 -to cram0_dq[6] +set_location_assignment PIN_F10 -to cram0_dq[5] +set_location_assignment PIN_E9 -to cram0_dq[4] +set_location_assignment PIN_D7 -to cram0_dq[3] +set_location_assignment PIN_A9 -to cram0_dq[2] +set_location_assignment PIN_C8 -to cram0_dq[1] +set_location_assignment PIN_B10 -to cram0_dq[0] +set_location_assignment PIN_A5 -to cram0_lb_n +set_location_assignment PIN_D6 -to cram0_oe_n +set_location_assignment PIN_A7 -to cram0_ub_n +set_location_assignment PIN_K7 -to cram0_wait +set_location_assignment PIN_G8 -to cram0_we_n +set_location_assignment PIN_Y3 -to cram1_a[21] +set_location_assignment PIN_AA2 -to cram1_a[20] +set_location_assignment PIN_L2 -to cram1_a[19] +set_location_assignment PIN_N1 -to cram1_a[18] +set_location_assignment PIN_U1 -to cram1_a[17] +set_location_assignment PIN_U2 -to cram1_a[16] +set_location_assignment PIN_U8 -to cram1_adv_n +set_location_assignment PIN_N2 -to cram1_ce0_n +set_location_assignment PIN_T8 -to cram1_ce1_n +set_location_assignment PIN_W2 -to cram1_clk +set_location_assignment PIN_T7 -to cram1_cre +set_location_assignment PIN_W8 -to cram1_dq[15] +set_location_assignment PIN_U6 -to cram1_dq[14] +set_location_assignment PIN_R7 -to cram1_dq[13] +set_location_assignment PIN_R6 -to cram1_dq[12] +set_location_assignment PIN_P7 -to cram1_dq[11] +set_location_assignment PIN_N6 -to cram1_dq[10] +set_location_assignment PIN_C2 -to cram1_dq[9] +set_location_assignment PIN_D3 -to cram1_dq[8] +set_location_assignment PIN_V6 -to cram1_dq[7] +set_location_assignment PIN_U7 -to cram1_dq[6] +set_location_assignment PIN_M6 -to cram1_dq[5] +set_location_assignment PIN_R5 -to cram1_dq[4] +set_location_assignment PIN_P6 -to cram1_dq[3] +set_location_assignment PIN_E2 -to cram1_dq[2] +set_location_assignment PIN_G2 -to cram1_dq[1] +set_location_assignment PIN_C1 -to cram1_dq[0] +set_location_assignment PIN_L1 -to cram1_lb_n +set_location_assignment PIN_M7 -to cram1_oe_n +set_location_assignment PIN_G1 -to cram1_ub_n +set_location_assignment PIN_W9 -to cram1_wait +set_location_assignment PIN_AA1 -to cram1_we_n +set_location_assignment PIN_J17 -to dram_a[12] +set_location_assignment PIN_F15 -to dram_a[11] +set_location_assignment PIN_C13 -to dram_a[10] +set_location_assignment PIN_G17 -to dram_a[9] +set_location_assignment PIN_J18 -to dram_a[8] +set_location_assignment PIN_F14 -to dram_a[7] +set_location_assignment PIN_E15 -to dram_a[6] +set_location_assignment PIN_E16 -to dram_a[5] +set_location_assignment PIN_F13 -to dram_a[4] +set_location_assignment PIN_E14 -to dram_a[3] +set_location_assignment PIN_F12 -to dram_a[2] +set_location_assignment PIN_D12 -to dram_a[1] +set_location_assignment PIN_D17 -to dram_a[0] +set_location_assignment PIN_E12 -to dram_ba[1] +set_location_assignment PIN_C16 -to dram_ba[0] +set_location_assignment PIN_B16 -to dram_cas_n +set_location_assignment PIN_G18 -to dram_cke +set_location_assignment PIN_G12 -to dram_clk +set_location_assignment PIN_K20 -to dram_dq[15] +set_location_assignment PIN_G11 -to dram_dq[14] +set_location_assignment PIN_J19 -to dram_dq[13] +set_location_assignment PIN_H13 -to dram_dq[12] +set_location_assignment PIN_G13 -to dram_dq[11] +set_location_assignment PIN_G16 -to dram_dq[10] +set_location_assignment PIN_G15 -to dram_dq[9] +set_location_assignment PIN_J13 -to dram_dq[8] +set_location_assignment PIN_A12 -to dram_dq[7] +set_location_assignment PIN_A13 -to dram_dq[6] +set_location_assignment PIN_B12 -to dram_dq[5] +set_location_assignment PIN_A14 -to dram_dq[4] +set_location_assignment PIN_B13 -to dram_dq[3] +set_location_assignment PIN_A15 -to dram_dq[2] +set_location_assignment PIN_B15 -to dram_dq[1] +set_location_assignment PIN_C15 -to dram_dq[0] +set_location_assignment PIN_B11 -to dram_ras_n +set_location_assignment PIN_C11 -to dram_we_n +set_location_assignment PIN_H10 -to port_ir_rx +set_location_assignment PIN_H11 -to port_ir_tx +set_location_assignment PIN_AA7 -to port_tran_sck +set_location_assignment PIN_R9 -to port_tran_sd +set_location_assignment PIN_V10 -to port_tran_si +set_location_assignment PIN_T13 -to port_tran_so_dir +set_location_assignment PIN_V9 -to port_tran_si_dir +set_location_assignment PIN_T9 -to port_tran_sd_dir +set_location_assignment PIN_Y9 -to port_tran_sck_dir +set_location_assignment PIN_J11 -to port_tran_so +set_location_assignment PIN_H15 -to scal_audadc +set_location_assignment PIN_K19 -to scal_auddac +set_location_assignment PIN_K17 -to scal_audlrck +set_location_assignment PIN_K16 -to scal_audmclk +set_location_assignment PIN_R17 -to scal_clk +set_location_assignment PIN_N20 -to scal_de +set_location_assignment PIN_P17 -to scal_hs +set_location_assignment PIN_N21 -to scal_skip +set_location_assignment PIN_T15 -to scal_vs +set_location_assignment PIN_U10 -to bist +set_location_assignment PIN_V16 -to sram_a[16] +set_location_assignment PIN_U12 -to sram_a[15] +set_location_assignment PIN_U15 -to sram_a[14] +set_location_assignment PIN_R10 -to sram_a[13] +set_location_assignment PIN_V14 -to sram_a[12] +set_location_assignment PIN_T10 -to sram_a[11] +set_location_assignment PIN_U11 -to sram_a[10] +set_location_assignment PIN_Y14 -to sram_a[9] +set_location_assignment PIN_U13 -to sram_a[8] +set_location_assignment PIN_Y19 -to sram_a[7] +set_location_assignment PIN_P8 -to sram_a[6] +set_location_assignment PIN_V19 -to sram_a[5] +set_location_assignment PIN_N9 -to sram_a[4] +set_location_assignment PIN_U21 -to sram_a[3] +set_location_assignment PIN_M8 -to sram_a[2] +set_location_assignment PIN_M9 -to sram_a[1] +set_location_assignment PIN_T14 -to sram_a[0] +set_location_assignment PIN_Y15 -to sram_dq[15] +set_location_assignment PIN_W16 -to sram_dq[14] +set_location_assignment PIN_Y16 -to sram_dq[13] +set_location_assignment PIN_Y17 -to sram_dq[12] +set_location_assignment PIN_V20 -to sram_dq[11] +set_location_assignment PIN_V18 -to sram_dq[10] +set_location_assignment PIN_U20 -to sram_dq[9] +set_location_assignment PIN_U16 -to sram_dq[8] +set_location_assignment PIN_R12 -to sram_dq[7] +set_location_assignment PIN_V13 -to sram_dq[6] +set_location_assignment PIN_T12 -to sram_dq[5] +set_location_assignment PIN_W19 -to sram_dq[4] +set_location_assignment PIN_Y20 -to sram_dq[3] +set_location_assignment PIN_P14 -to sram_dq[2] +set_location_assignment PIN_P9 -to sram_dq[1] +set_location_assignment PIN_N8 -to sram_dq[0] +set_location_assignment PIN_U17 -to sram_ub_n +set_location_assignment PIN_R11 -to sram_we_n +set_location_assignment PIN_N19 -to vblank +set_location_assignment PIN_R14 -to sram_oe_n +set_location_assignment PIN_P12 -to sram_lb_n +set_location_assignment PIN_H14 -to bridge_spiss +set_location_assignment PIN_M22 -to user1 +set_location_assignment PIN_L22 -to user2 +set_location_assignment PIN_K21 -to dbg_tx +set_location_assignment PIN_K22 -to dbg_rx +set_location_assignment PIN_L19 -to bridge_1wire +set_location_assignment PIN_R16 -to scal_vid[11] +set_location_assignment PIN_R15 -to scal_vid[10] +set_location_assignment PIN_R22 -to scal_vid[9] +set_location_assignment PIN_T22 -to scal_vid[8] +set_location_assignment PIN_T18 -to scal_vid[7] +set_location_assignment PIN_T19 -to scal_vid[6] +set_location_assignment PIN_T20 -to scal_vid[5] +set_location_assignment PIN_P19 -to scal_vid[4] +set_location_assignment PIN_P18 -to scal_vid[3] +set_location_assignment PIN_N16 -to scal_vid[2] +set_location_assignment PIN_P22 -to scal_vid[1] +set_location_assignment PIN_R21 -to scal_vid[0] +set_location_assignment PIN_P16 -to vpll_feed +set_location_assignment PIN_L18 -to port_ir_rx_disable +set_location_assignment PIN_D13 -to dram_dqm[0] +set_location_assignment PIN_H18 -to dram_dqm[1] +set_location_assignment PIN_U22 -to cart_tran_pin31_dir +set_location_assignment PIN_L17 -to cart_pin30_pwroff_reset +set_location_assignment PIN_M16 -to aux_scl +set_location_assignment PIN_M18 -to aux_sda + +# Classic Timing Assignments +# ========================== +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON + +# Compiler Assignments +# ==================== +set_global_assignment -name OPTIMIZATION_MODE "HIGH PERFORMANCE EFFORT" + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone V" +set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 484 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 +set_global_assignment -name TOP_LEVEL_ENTITY apf_top +set_global_assignment -name SAFE_STATE_MACHINE ON +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP ON +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT ON +set_global_assignment -name PRE_MAPPING_RESYNTHESIS ON +set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name MUX_RESTRUCTURE OFF +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT LOW + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE 5CEBA4F23C8 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON +set_global_assignment -name ECO_OPTIMIZE_TIMING ON +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING ON +set_global_assignment -name FITTER_EFFORT "AUTO FIT" +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON + +# Assembler Assignments +# ===================== +set_global_assignment -name ENABLE_OCT_DONE OFF +set_global_assignment -name USE_CONFIGURATION_DEVICE ON +set_global_assignment -name GENERATE_RBF_FILE ON + +# Signal Tap Assignments +# ====================== +set_global_assignment -name ENABLE_SIGNALTAP ON +set_global_assignment -name USE_SIGNALTAP_FILE core/stp1.stp + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" + +# Advanced I/O Timing Assignments +# =============================== +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall + +# --------------------- +# start ENTITY(apf_top) + + # Fitter Assignments + # ================== +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank0[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_we_n +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_lb_n +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[10] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[11] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[13] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[15] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to bist +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_si_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_si +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_sd_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_sd +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_sck_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_sck +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_pin30_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank0_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank0[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank0[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank0[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to vblank +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_ub_n +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_oe_n +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[8] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[9] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[10] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[11] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[12] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[13] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[14] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_dq[15] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[8] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[9] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[12] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[14] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to sram_a[16] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to port_tran_so_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to clk_74a +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank3[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[1] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[2] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[3] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[5] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[6] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank2[7] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1_dir +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[0] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_bank1[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vs +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_skip +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_hs +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_de +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_clk +set_instance_assignment -name IO_STANDARD "1.8 V" -to bridge_spimosi +set_instance_assignment -name IO_STANDARD "1.8 V" -to bridge_spimiso +set_instance_assignment -name IO_STANDARD "1.8 V" -to bridge_spiclk +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_audmclk +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_audlrck +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_auddac +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_audadc +set_instance_assignment -name IO_STANDARD "1.8 V" -to port_tran_so +set_instance_assignment -name IO_STANDARD "1.8 V" -to port_ir_tx +set_instance_assignment -name IO_STANDARD "1.8 V" -to port_ir_rx +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_we_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_ras_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[3] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[4] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[5] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[7] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[8] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[9] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[10] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[11] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[12] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[13] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[14] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dq[15] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_clk +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_cke +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_cas_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_ba[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_ba[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[3] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[4] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[5] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[7] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[8] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[9] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[10] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[11] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_a[12] +set_instance_assignment -name IO_STANDARD "1.8 V" -to clk_74b +set_instance_assignment -name IO_STANDARD "1.8 V" -to cart_tran_pin31 +set_instance_assignment -name IO_STANDARD "1.8 V" -to cart_tran_pin30 +set_instance_assignment -name IO_STANDARD "1.8 V" -to bridge_spiss +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_we_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_wait +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_ub_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_oe_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_lb_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[3] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[4] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[5] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[7] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[8] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[9] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[10] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[11] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[12] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[13] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[14] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_dq[15] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_cre +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_clk +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_ce1_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_ce0_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_adv_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[16] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[17] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[18] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[19] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[20] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram0_a[21] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_we_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_ub_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_lb_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[8] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[9] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_clk +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_ce0_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[16] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[17] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[18] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[19] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[20] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_a[21] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_wait +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_oe_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[3] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[4] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[5] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[7] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[10] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[11] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[12] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[13] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[14] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_dq[15] +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_cre +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_ce1_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to cram1_adv_n +set_instance_assignment -name IO_STANDARD "1.8 V" -to user1 +set_instance_assignment -name IO_STANDARD "1.8 V" -to user2 +set_instance_assignment -name IO_STANDARD "1.8 V" -to dbg_rx +set_instance_assignment -name IO_STANDARD "1.8 V" -to dbg_tx +set_instance_assignment -name IO_STANDARD "1.8 V" -to bridge_1wire +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[11] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[10] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[9] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[8] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[7] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[6] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[5] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[4] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[3] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[2] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to scal_vid[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dqm[0] +set_instance_assignment -name IO_STANDARD "1.8 V" -to dram_dqm[1] +set_instance_assignment -name IO_STANDARD "1.8 V" -to aux_sda +set_instance_assignment -name IO_STANDARD "1.8 V" -to aux_scl +set_instance_assignment -name IO_STANDARD "1.8 V" -to cart_pin30_pwroff_reset +set_instance_assignment -name IO_STANDARD "1.8 V" -to port_ir_rx_disable +set_instance_assignment -name IO_STANDARD "1.8 V" -to vpll_feed +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to cart_tran_pin31_dir +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to cram0_clk +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to dram_clk +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_audmclk +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_auddac +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_audlrck +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to vpll_feed +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to cram1_clk +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_clk +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dqm[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dqm[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[13] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[14] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[15] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_we_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_cas_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_ras_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_dq[15] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_cke +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_ba[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_ba[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to dram_a[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to dbg_tx +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_we_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_wait +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_ub_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_oe_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_lb_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[13] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_dq[14] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_cre +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_ce1_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_ce0_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_adv_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[16] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[17] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[18] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[19] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[20] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram1_a[21] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_we_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_wait +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_ub_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_oe_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_lb_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[13] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[14] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_dq[15] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_cre +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_ce1_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_ce0_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_adv_n +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[16] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[17] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[18] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[19] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[20] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cram0_a[21] +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cart_tran_pin31 +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cart_tran_pin30 +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to cart_pin30_pwroff_reset +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to bridge_spimosi +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to bridge_spimiso +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to bridge_1wire +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to aux_sda +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to aux_scl +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to bridge_spiclk +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_de +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vs +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[0] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[1] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[2] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[3] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[4] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[5] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[6] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[7] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[8] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[9] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[10] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_vid[11] +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_hs +set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to scal_skip +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to port_tran_so +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to port_ir_tx +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to port_ir_rx_disable +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to port_ir_rx + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # Incremental Compilation Assignments + # =================================== +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top + + # end DESIGN_PARTITION(Top) + # ------------------------- + +# end ENTITY(apf_top) +# ------------------- + +# ------------------------ +# start ENTITY(mf_pllbase) + + # Project-Wide Assignments + # ======================== + +# end ENTITY(mf_pllbase) +# ---------------------- + +# ----------------------------- +# start ENTITY(mf_pllbase_0002) + + # Project-Wide Assignments + # ======================== + +# end ENTITY(mf_pllbase_0002) +# --------------------------- +set_global_assignment -name VERILOG_FILE core/data_loader_8.v +set_global_assignment -name VHDL_FILE core/rtl/T65_Pack.vhd +set_global_assignment -name VHDL_FILE core/rtl/T65_MCode.vhd +set_global_assignment -name VHDL_FILE core/rtl/T65_ALU.vhd +set_global_assignment -name VHDL_FILE core/rtl/T65.vhd +set_global_assignment -name VHDL_FILE core/rtl/ram_1k.vhd +set_global_assignment -name VHDL_FILE core/rtl/dpram.vhd +set_global_assignment -name VHDL_FILE core/rtl/asteroids_vg.vhd +set_global_assignment -name VHDL_FILE core/rtl/asteroids_top.vhd +set_global_assignment -name VHDL_FILE core/rtl/asteroids_ram.vhd +set_global_assignment -name VHDL_FILE core/rtl/asteroids_dw.vhd +set_global_assignment -name VHDL_FILE core/rtl/asteroids.vhd +set_global_assignment -name QIP_FILE apf/apf.qip +set_global_assignment -name QIP_FILE apf/mf_ddio_bidir_12.qip +set_global_assignment -name VERILOG_FILE core/core_top.v +set_global_assignment -name VERILOG_FILE core/core_bridge_cmd.v +set_global_assignment -name SDC_FILE core/core_constraints.sdc +set_global_assignment -name SIGNALTAP_FILE core/stp1.stp +set_global_assignment -name QIP_FILE core/mf_pllbase.qip +set_global_assignment -name SIP_FILE core/mf_pllbase.sip +set_global_assignment -name SOURCE_FILE db/ap_core.cmp.rdb +set_global_assignment -name SLD_FILE db/stp1_auto_stripped.stp +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/src/fpga/ap_core_assignment_defaults.qdf b/src/fpga/ap_core_assignment_defaults.qdf new file mode 100644 index 0000000..23caaa3 --- /dev/null +++ b/src/fpga/ap_core_assignment_defaults.qdf @@ -0,0 +1,806 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2022 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and any partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel FPGA IP License Agreement, or other applicable license +# agreement, including, without limitation, that your use is for +# the sole purpose of programming logic devices manufactured by +# Intel and sold by Intel or its authorized distributors. Please +# refer to the applicable agreement for further details, at +# https://fpgasoftware.intel.com/eula. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 21.1.1 Build 850 06/23/2022 SJ Lite Edition +# Date created = 13:10:25 September 08, 2022 +# +# -------------------------------------------------------------------------- # +# +# Note: +# +# 1) Do not modify this file. This file was generated +# automatically by the Quartus Prime software and is used +# to preserve global assignments across Quartus Prime versions. +# +# -------------------------------------------------------------------------- # + +set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off +set_global_assignment -name IP_COMPONENT_INTERNAL Off +set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On +set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off +set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off +set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db +set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off +set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off +set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off +set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off +set_global_assignment -name HC_OUTPUT_DIR hc_output +set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off +set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off +set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On +set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off +set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" +set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On +set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On +set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off +set_global_assignment -name REVISION_TYPE Base -family "Arria V" +set_global_assignment -name REVISION_TYPE Base -family "Stratix V" +set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" +set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" +set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" +set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On +set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On +set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On +set_global_assignment -name DO_COMBINED_ANALYSIS Off +set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off +set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off +set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off +set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off +set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On +set_global_assignment -name TIMING_ANALYZER_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_DO_REPORT_TIMING Off +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone V" +set_global_assignment -name OPTIMIZATION_MODE Balanced +set_global_assignment -name ALLOW_REGISTER_MERGING On +set_global_assignment -name ALLOW_REGISTER_DUPLICATION On +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Cyclone 10 LP" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix IV" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV E" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Arria 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX II" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone V" +set_global_assignment -name MUX_RESTRUCTURE Auto +set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off +set_global_assignment -name ENABLE_IP_DEBUG Off +set_global_assignment -name SAVE_DISK_SPACE On +set_global_assignment -name OCP_HW_EVAL Enable +set_global_assignment -name DEVICE_FILTER_PACKAGE Any +set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 +set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 +set_global_assignment -name FAMILY "Cyclone V" +set_global_assignment -name TRUE_WYSIWYG_FLOW Off +set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off +set_global_assignment -name STATE_MACHINE_PROCESSING Auto +set_global_assignment -name SAFE_STATE_MACHINE Off +set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On +set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On +set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 +set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 +set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On +set_global_assignment -name PARALLEL_SYNTHESIS On +set_global_assignment -name DSP_BLOCK_BALANCING Auto +set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" +set_global_assignment -name NOT_GATE_PUSH_BACK On +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off +set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On +set_global_assignment -name IGNORE_CARRY_BUFFERS Off +set_global_assignment -name IGNORE_CASCADE_BUFFERS Off +set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_LCELL_BUFFERS Off +set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO +set_global_assignment -name IGNORE_SOFT_BUFFERS On +set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off +set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off +set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On +set_global_assignment -name AUTO_GLOBAL_OE_MAX On +set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off +set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut +set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name ALLOW_XOR_GATE_USAGE On +set_global_assignment -name AUTO_LCELL_INSERTION On +set_global_assignment -name CARRY_CHAIN_LENGTH 48 +set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 +set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name CASCADE_CHAIN_LENGTH 2 +set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 +set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 +set_global_assignment -name AUTO_CARRY_CHAINS On +set_global_assignment -name AUTO_CASCADE_CHAINS On +set_global_assignment -name AUTO_PARALLEL_EXPANDERS On +set_global_assignment -name AUTO_OPEN_DRAIN_PINS On +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off +set_global_assignment -name AUTO_ROM_RECOGNITION On +set_global_assignment -name AUTO_RAM_RECOGNITION On +set_global_assignment -name AUTO_DSP_RECOGNITION On +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto +set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On +set_global_assignment -name STRICT_RAM_RECOGNITION Off +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On +set_global_assignment -name FORCE_SYNCH_CLEAR Off +set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off +set_global_assignment -name AUTO_RESOURCE_SHARING Off +set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off +set_global_assignment -name MAX7000_FANIN_PER_CELL 100 +set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On +set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" +set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off +set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" +set_global_assignment -name REPORT_PARAMETER_SETTINGS On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On +set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On +set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" +set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" +set_global_assignment -name HDL_MESSAGE_LEVEL Level2 +set_global_assignment -name USE_HIGH_SPEED_ADDER Auto +set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 +set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 +set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 +set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off +set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 +set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 +set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off +set_global_assignment -name BLOCK_DESIGN_NAMING Auto +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off +set_global_assignment -name SYNTHESIS_EFFORT Auto +set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On +set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off +set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium +set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" +set_global_assignment -name MAX_LABS "-1 (Unlimited)" +set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On +set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" +set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On +set_global_assignment -name PRPOF_ID Off +set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off +set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On +set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off +set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off +set_global_assignment -name AUTO_MERGE_PLLS On +set_global_assignment -name IGNORE_MODE_FOR_MERGE Off +set_global_assignment -name TXPMA_SLEW_RATE Low +set_global_assignment -name ADCE_ENABLED Auto +set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off +set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 +set_global_assignment -name PHYSICAL_SYNTHESIS Off +set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off +set_global_assignment -name DEVICE AUTO +set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off +set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off +set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On +set_global_assignment -name ENABLE_NCEO_OUTPUT Off +set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name STRATIXIII_UPDATE_MODE Standard +set_global_assignment -name STRATIX_UPDATE_MODE Standard +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" +set_global_assignment -name CVP_MODE Off +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" +set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" +set_global_assignment -name USE_CONF_DONE AUTO +set_global_assignment -name USE_PWRMGT_SCL AUTO +set_global_assignment -name USE_PWRMGT_SDA AUTO +set_global_assignment -name USE_PWRMGT_ALERT AUTO +set_global_assignment -name USE_INIT_DONE AUTO +set_global_assignment -name USE_CVP_CONFDONE AUTO +set_global_assignment -name USE_SEU_ERROR AUTO +set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name USER_START_UP_CLOCK Off +set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off +set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off +set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On +set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On +set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC +set_global_assignment -name ENABLE_VREFA_PIN Off +set_global_assignment -name ENABLE_VREFB_PIN Off +set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off +set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off +set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" +set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off +set_global_assignment -name INIT_DONE_OPEN_DRAIN On +set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name ENABLE_CONFIGURATION_PINS On +set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off +set_global_assignment -name ENABLE_NCE_PIN Off +set_global_assignment -name ENABLE_BOOT_SEL_PIN On +set_global_assignment -name CRC_ERROR_CHECKING Off +set_global_assignment -name INTERNAL_SCRUBBING Off +set_global_assignment -name PR_ERROR_OPEN_DRAIN On +set_global_assignment -name PR_READY_OPEN_DRAIN On +set_global_assignment -name ENABLE_CVP_CONFDONE Off +set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On +set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" +set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" +set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 +set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" +set_global_assignment -name OPTIMIZE_SSN Off +set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" +set_global_assignment -name ECO_OPTIMIZE_TIMING Off +set_global_assignment -name ECO_REGENERATE_REPORT Off +set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal +set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically +set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically +set_global_assignment -name SEED 1 +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF +set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off +set_global_assignment -name SLOW_SLEW_RATE Off +set_global_assignment -name PCI_IO Off +set_global_assignment -name TURBO_BIT On +set_global_assignment -name WEAK_PULL_UP_RESISTOR Off +set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off +set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off +set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On +set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto +set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto +set_global_assignment -name NORMAL_LCELL_INSERT On +set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF +set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off +set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off +set_global_assignment -name AUTO_TURBO_BIT ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off +set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On +set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off +set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off +set_global_assignment -name FITTER_EFFORT "Auto Fit" +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto +set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto +set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off +set_global_assignment -name AUTO_GLOBAL_CLOCK On +set_global_assignment -name AUTO_GLOBAL_OE On +set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic +set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off +set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" +set_global_assignment -name ENABLE_HOLD_BACK_OFF On +set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto +set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off +set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto +set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On +set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" +set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" +set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off +set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On +set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off +set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off +set_global_assignment -name PR_DONE_OPEN_DRAIN On +set_global_assignment -name NCEO_OPEN_DRAIN On +set_global_assignment -name ENABLE_CRC_ERROR_PIN Off +set_global_assignment -name ENABLE_PR_PINS Off +set_global_assignment -name RESERVE_PR_PINS Off +set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off +set_global_assignment -name PR_PINS_OPEN_DRAIN Off +set_global_assignment -name CLAMPING_DIODE Off +set_global_assignment -name TRI_STATE_SPI_PINS Off +set_global_assignment -name UNUSED_TSD_PINS_GND Off +set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off +set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" +set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 +set_global_assignment -name SEU_FIT_REPORT Off +set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On +set_global_assignment -name COMPRESSION_MODE Off +set_global_assignment -name CLOCK_SOURCE Internal +set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" +set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 +set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off +set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF +set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F +set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name USE_CHECKSUM_AS_USERCODE On +set_global_assignment -name SECURITY_BIT Off +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" +set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto +set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" +set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 +set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 +set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto +set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto +set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On +set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off +set_global_assignment -name GENERATE_TTF_FILE Off +set_global_assignment -name GENERATE_RBF_FILE Off +set_global_assignment -name GENERATE_HEX_FILE Off +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 +set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" +set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off +set_global_assignment -name AUTO_RESTART_CONFIGURATION On +set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off +set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off +set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" +set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" +set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF +set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off +set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off +set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off +set_global_assignment -name POR_SCHEME "Instant ON" +set_global_assignment -name EN_USER_IO_WEAK_PULLUP On +set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On +set_global_assignment -name POF_VERIFY_PROTECT Off +set_global_assignment -name ENABLE_SPI_MODE_CHECK Off +set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On +set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 +set_global_assignment -name GENERATE_PMSF_FILES On +set_global_assignment -name START_TIME 0ns +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On +set_global_assignment -name SETUP_HOLD_DETECTION Off +set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off +set_global_assignment -name CHECK_OUTPUTS Off +set_global_assignment -name SIMULATION_COVERAGE On +set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name GLITCH_DETECTION Off +set_global_assignment -name GLITCH_INTERVAL 1ns +set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off +set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On +set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off +set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE +set_global_assignment -name SIMULATION_NETLIST_VIEWER Off +set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off +set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO +set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO +set_global_assignment -name DRC_TOP_FANOUT 50 +set_global_assignment -name DRC_FANOUT_EXCEEDING 30 +set_global_assignment -name DRC_GATED_CLOCK_FEED 30 +set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY +set_global_assignment -name ENABLE_DRC_SETTINGS Off +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 +set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 +set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 +set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 +set_global_assignment -name MERGE_HEX_FILE Off +set_global_assignment -name GENERATE_SVF_FILE Off +set_global_assignment -name GENERATE_ISC_FILE Off +set_global_assignment -name GENERATE_JAM_FILE Off +set_global_assignment -name GENERATE_JBC_FILE Off +set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off +set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off +set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" +set_global_assignment -name HPS_EARLY_IO_RELEASE Off +set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off +set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off +set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_USE_PVA On +set_global_assignment -name POWER_USE_INPUT_FILE "No File" +set_global_assignment -name POWER_USE_INPUT_FILES Off +set_global_assignment -name POWER_VCD_FILTER_GLITCHES On +set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off +set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off +set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL +set_global_assignment -name POWER_AUTO_COMPUTE_TJ On +set_global_assignment -name POWER_TJ_VALUE 25 +set_global_assignment -name POWER_USE_TA_VALUE 25 +set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off +set_global_assignment -name POWER_BOARD_TEMPERATURE 25 +set_global_assignment -name POWER_HPS_ENABLE Off +set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 +set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off +set_global_assignment -name IGNORE_PARTITIONS Off +set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off +set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On +set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" +set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On +set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On +set_global_assignment -name RTLV_GROUP_RELATED_NODES On +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off +set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On +set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On +set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On +set_global_assignment -name EQC_BBOX_MERGE On +set_global_assignment -name EQC_LVDS_MERGE On +set_global_assignment -name EQC_RAM_UNMERGING On +set_global_assignment -name EQC_DFF_SS_EMULATION On +set_global_assignment -name EQC_RAM_REGISTER_UNPACK On +set_global_assignment -name EQC_MAC_REGISTER_UNPACK On +set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On +set_global_assignment -name EQC_STRUCTURE_MATCHING On +set_global_assignment -name EQC_AUTO_BREAK_CONE On +set_global_assignment -name EQC_POWER_UP_COMPARE Off +set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On +set_global_assignment -name EQC_AUTO_INVERSION On +set_global_assignment -name EQC_AUTO_TERMINATE On +set_global_assignment -name EQC_SUB_CONE_REPORT Off +set_global_assignment -name EQC_RENAMING_RULES On +set_global_assignment -name EQC_PARAMETER_CHECK On +set_global_assignment -name EQC_AUTO_PORTSWAP On +set_global_assignment -name EQC_DETECT_DONT_CARES On +set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off +set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? +set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? +set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? +set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? +set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? +set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? +set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? +set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? +set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? +set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? +set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? +set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? +set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? +set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? +set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? +set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? +set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? +set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? +set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? +set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? +set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? +set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? +set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? +set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST On -section_id ? +set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? +set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? +set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? +set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? +set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? +set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? +set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? +set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? +set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? +set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? +set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? +set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? +set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? +set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? +set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/src/fpga/apf/apf.qip b/src/fpga/apf/apf.qip new file mode 100644 index 0000000..f6786a8 --- /dev/null +++ b/src/fpga/apf/apf.qip @@ -0,0 +1,7 @@ +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "apf_top.v"] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "common.v"] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "io_bridge_peripheral.v"] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "io_pad_controller.v"] +set_global_assignment -name SDC_FILE [file join $::quartus(qip_path) "apf_constraints.sdc"] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) "mf_ddio_bidir_12.qip"] +set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) "mf_datatable.qip"] diff --git a/src/fpga/apf/apf_constraints.sdc b/src/fpga/apf/apf_constraints.sdc new file mode 100644 index 0000000..048ddcf --- /dev/null +++ b/src/fpga/apf/apf_constraints.sdc @@ -0,0 +1,20 @@ +# +# APF constraints +# Do not edit this file. +# +# Add your own constraints in the \core_constraints.sdc in the core directory, which will also be loaded. + +create_clock -name clk_74a -period 13.468 [get_ports clk_74a] +create_clock -name clk_74b -period 13.468 [get_ports clk_74b] +create_clock -name bridge_spiclk -period 13.468 [get_ports bridge_spiclk] + +# autogenerate PLL clock names for use down below +derive_pll_clocks + + +# io constraints go here +# + + +# load in user constraints +read_sdc "core/core_constraints.sdc" \ No newline at end of file diff --git a/src/fpga/apf/apf_top.v b/src/fpga/apf/apf_top.v new file mode 100644 index 0000000..e82f37b --- /dev/null +++ b/src/fpga/apf/apf_top.v @@ -0,0 +1,475 @@ +// Software License Agreement + +// The software supplied herewith by Analogue Enterprises Limited (the "Company”), +// the Analogue Pocket Framework (“APF”), is provided and licensed to you, the +// Company's customer, solely for use in designing, testing and creating +// applications for use with Company's Products or Services. The software is +// owned by the Company and/or its licensors, and is protected under applicable +// laws, including, but not limited to, U.S. copyright law. All rights are +// reserved. By using the APF code you are agreeing to the terms of the End User +// License Agreement (“EULA”) located at [https://www.analogue.link/pocket-eula] +// and incorporated herein by reference. To the extent any use of the APF requires +// application of the MIT License or the GNU General Public License and terms of +// this APF Software License Agreement and EULA are inconsistent with such license, +// the applicable terms of the MIT License or the GNU General Public License, as +// applicable, will prevail. + +// THE SOFTWARE IS PROVIDED "AS-IS" AND WE EXPRESSLY DISCLAIM ANY IMPLIED +// WARRANTIES TO THE FULLEST EXTENT PROVIDED BY LAW, INCLUDING BUT NOT LIMITED TO, +// ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR +// NON-INFRINGEMENT. TO THE EXTENT APPLICABLE LAWS PROHIBIT TERMS OF USE FROM +// DISCLAIMING ANY IMPLIED WARRANTY, SUCH IMPLIED WARRANTY SHALL BE LIMITED TO THE +// MINIMUM WARRANTY PERIOD REQUIRED BY LAW, AND IF NO SUCH PERIOD IS REQUIRED, +// THEN THIRTY (30) DAYS FROM FIRST USE OF THE SOFTWARE. WE CANNOT GUARANTEE AND +// DO NOT PROMISE ANY SPECIFIC RESULTS FROM USE OF THE SOFTWARE. WITHOUT LIMITING +// THE FOREGOING, WE DO NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR +// ERROR-FREE. IN NO EVENT WILL WE BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY +// INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL OR PUNITIVE DAMAGES, +// INCLUDING BUT NOT LIMITED TO, LOST PROFITS ARISING OUT OF YOUR USE, OR +// INABILITY TO USE, THE SOFTWARE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGES. UNDER NO CIRCUMSTANCES SHALL OUR LIABILITY TO YOU FOR ANY +// CLAIM OR CAUSE OF ACTION WHATSOEVER, AND REGARDLESS OF THE FORM OF THE ACTION, +// WHETHER ARISING IN CONTRACT, TORT OR OTHERWISE, EXCEED THE AMOUNT PAID BY YOU +// TO US, IF ANY, DURING THE 90 DAY PERIOD IMMEDIATELY PRECEDING THE DATE ON WHICH +// YOU FIRST ASSERT ANY SUCH CLAIM. THE FOREGOING LIMITATIONS SHALL APPLY TO THE +// FULLEST EXTENT PERMITTED BY APPLICABLE LAW. +// +// 6515C - Analogue Pocket main unit +// SOCRATES FPGA +// +// 2022-08-17 Analogue + +`default_nettype none + +module apf_top ( +/////////////////////////////////////////////////// +// clock inputs 74.25mhz. not phase aligned, so treat these domains as asynchronous + +input wire clk_74a, // mainclk1 +input wire clk_74b, // mainclk1 + +/////////////////////////////////////////////////// +// cartridge interface +// switches between 3.3v and 5v mechanically +// output enable for multibit translators controlled by PIC32 + +// GBA AD[15:8] +inout wire [7:0] cart_tran_bank2, +output wire cart_tran_bank2_dir, + +// GBA AD[7:0] +inout wire [7:0] cart_tran_bank3, +output wire cart_tran_bank3_dir, + +// GBA A[23:16] +inout wire [7:0] cart_tran_bank1, +output wire cart_tran_bank1_dir, + +// GBA [7] PHI# +// GBA [6] WR# +// GBA [5] RD# +// GBA [4] CS1#/CS# +// [3:0] unwired +inout wire [7:4] cart_tran_bank0, +output wire cart_tran_bank0_dir, + +// GBA CS2#/RES# +inout wire cart_tran_pin30, +output wire cart_tran_pin30_dir, +// when GBC cart is inserted, this signal when low or weak will pull GBC /RES low with a special circuit +// the goal is that when unconfigured, the FPGA weak pullups won't interfere. +// thus, if GBC cart is inserted, FPGA must drive this high in order to let the level translators +// and general IO drive this pin. +output wire cart_pin30_pwroff_reset, + +// GBA IRQ/DRQ +inout wire cart_tran_pin31, +output wire cart_tran_pin31_dir, + +// infrared +// avoid driving the TX LED with DC or leaving it stuck on. pulsed usage is fine +input wire port_ir_rx, +output wire port_ir_tx, +output wire port_ir_rx_disable, + +// GBA link port +inout wire port_tran_si, +output wire port_tran_si_dir, +inout wire port_tran_so, +output wire port_tran_so_dir, +inout wire port_tran_sck, +output wire port_tran_sck_dir, +inout wire port_tran_sd, +output wire port_tran_sd_dir, + +/////////////////////////////////////////////////// +// video output to the scaler + +inout wire [11:0] scal_vid, +inout wire scal_clk, +inout wire scal_de, +inout wire scal_skip, +inout wire scal_vs, +inout wire scal_hs, + +output wire scal_audmclk, +input wire scal_audadc, +output wire scal_auddac, +output wire scal_audlrck, + +/////////////////////////////////////////////////// +// communication between main and scaler (aristotle) fpga. +// spi bus with aristotle as controller. + +inout wire bridge_spimosi, +inout wire bridge_spimiso, +inout wire bridge_spiclk, +input wire bridge_spiss, +inout wire bridge_1wire, + +/////////////////////////////////////////////////// +// cellular psram 0 and 1, two chips (64mbit x2 dual die per chip) + +output wire [21:16] cram0_a, +inout wire [15:0] cram0_dq, +input wire cram0_wait, +output wire cram0_clk, +output wire cram0_adv_n, +output wire cram0_cre, +output wire cram0_ce0_n, +output wire cram0_ce1_n, +output wire cram0_oe_n, +output wire cram0_we_n, +output wire cram0_ub_n, +output wire cram0_lb_n, + +output wire [21:16] cram1_a, +inout wire [15:0] cram1_dq, +input wire cram1_wait, +output wire cram1_clk, +output wire cram1_adv_n, +output wire cram1_cre, +output wire cram1_ce0_n, +output wire cram1_ce1_n, +output wire cram1_oe_n, +output wire cram1_we_n, +output wire cram1_ub_n, +output wire cram1_lb_n, + +/////////////////////////////////////////////////// +// sdram, 512mbit x16 + +output wire [12:0] dram_a, +output wire [1:0] dram_ba, +inout wire [15:0] dram_dq, +output wire [1:0] dram_dqm, +output wire dram_clk, +output wire dram_cke, +output wire dram_ras_n, +output wire dram_cas_n, +output wire dram_we_n, + +/////////////////////////////////////////////////// +// sram, 1mbit x16 + +output wire [16:0] sram_a, +inout wire [15:0] sram_dq, +output wire sram_oe_n, +output wire sram_we_n, +output wire sram_ub_n, +output wire sram_lb_n, + +/////////////////////////////////////////////////// +// vblank output to scaler + +input wire vblank, + +/////////////////////////////////////////////////// +// i/o to 6515D breakout usb uart + +output wire dbg_tx, +input wire dbg_rx, + +/////////////////////////////////////////////////// +// i/o pads near jtag connector user can solder to + +output wire user1, +input wire user2, + +/////////////////////////////////////////////////// +// powerup self test, do not use + +inout wire bist, +output wire vpll_feed, + +/////////////////////////////////////////////////// +// RFU internal i2c bus (DNU) + +inout wire aux_sda, +output wire aux_scl + +); + +assign bist = 1'bZ; + +// reset generation + + reg [24:0] count; + reg reset_n; + +initial begin + count <= 0; + reset_n <= 0; +end +always @(posedge clk_74a) begin + count <= count + 1'b1; + + if(count[15]) begin + // exit reset + reset_n <= 1; + end + +end + + + + +// convert 24-bit rgb data to 12-bit DDR for ARISTOTLE + + wire [23:0] video_rgb; + wire video_rgb_clock; + wire video_rgb_clock_90; + wire video_de; + wire video_skip; + wire video_vs; + wire video_hs; + +mf_ddio_bidir_12 isco ( + .oe ( 1'b1 ), + .datain_h ( video_rgb[23:12] ), + .datain_l ( video_rgb[11: 0] ), + .outclock ( video_rgb_clock ), + .padio ( scal_ddio_12 ) +); + +wire [11:0] scal_ddio_12; +assign scal_vid = scal_ddio_12; + +mf_ddio_bidir_12 iscc ( + .oe ( 1'b1 ), + .datain_h ( {video_vs, video_hs, video_de, video_skip} ), + .datain_l ( {video_vs, video_hs, video_de, video_skip} ), + .outclock ( video_rgb_clock ), + .padio ( scal_ddio_ctrl ) +); + +wire [3:0] scal_ddio_ctrl; +assign scal_vs = scal_ddio_ctrl[3]; +assign scal_hs = scal_ddio_ctrl[2]; +assign scal_de = scal_ddio_ctrl[1]; +assign scal_skip = scal_ddio_ctrl[0]; + +mf_ddio_bidir_12 isclk( + .oe ( 1'b1 ), + .datain_h ( 1'b1 ), + .datain_l ( 1'b0 ), + .outclock ( video_rgb_clock_90 ), + .padio ( scal_clk ) +); + + + +// controller data (pad) controller. + wire [15:0] cont1_key; + wire [15:0] cont2_key; + wire [15:0] cont3_key; + wire [15:0] cont4_key; + wire [31:0] cont1_joy; + wire [31:0] cont2_joy; + wire [31:0] cont3_joy; + wire [31:0] cont4_joy; + wire [15:0] cont1_trig; + wire [15:0] cont2_trig; + wire [15:0] cont3_trig; + wire [15:0] cont4_trig; + +io_pad_controller ipm ( + .clk ( clk_74a ), + .reset_n ( reset_n ), + + .pad_1wire ( bridge_1wire ), + + .cont1_key ( cont1_key ), + .cont2_key ( cont2_key ), + .cont3_key ( cont3_key ), + .cont4_key ( cont4_key ), + .cont1_joy ( cont1_joy ), + .cont2_joy ( cont2_joy ), + .cont3_joy ( cont3_joy ), + .cont4_joy ( cont4_joy ), + .cont1_trig ( cont1_trig ), + .cont2_trig ( cont2_trig ), + .cont3_trig ( cont3_trig ), + .cont4_trig ( cont4_trig ) +); + + +// virtual pmp bridge + wire bridge_endian_little; + wire [31:0] bridge_addr; + wire bridge_rd; + wire [31:0] bridge_rd_data; + wire bridge_wr; + wire [31:0] bridge_wr_data; + +io_bridge_peripheral ibs ( + + .clk ( clk_74a ), + .reset_n ( reset_n ), + + .endian_little ( bridge_endian_little ), + + .pmp_addr ( bridge_addr ), + .pmp_rd ( bridge_rd ), + .pmp_rd_data ( bridge_rd_data ), + .pmp_wr ( bridge_wr ), + .pmp_wr_data ( bridge_wr_data ), + + .phy_spimosi ( bridge_spimosi ), + .phy_spimiso ( bridge_spimiso ), + .phy_spiclk ( bridge_spiclk ), + .phy_spiss ( bridge_spiss ) + +); + + +/////////////////////////////////////////////////// +// instantiate the user core top-level + +core_top ic ( + + // physical connections + // + .clk_74a ( clk_74a ), + .clk_74b ( clk_74b ), + + .cart_tran_bank2 ( cart_tran_bank2 ), + .cart_tran_bank2_dir ( cart_tran_bank2_dir ), + .cart_tran_bank3 ( cart_tran_bank3 ), + .cart_tran_bank3_dir ( cart_tran_bank3_dir ), + .cart_tran_bank1 ( cart_tran_bank1 ), + .cart_tran_bank1_dir ( cart_tran_bank1_dir ), + .cart_tran_bank0 ( cart_tran_bank0 ), + .cart_tran_bank0_dir ( cart_tran_bank0_dir ), + .cart_tran_pin30 ( cart_tran_pin30 ), + .cart_tran_pin30_dir ( cart_tran_pin30_dir ), + .cart_pin30_pwroff_reset ( cart_pin30_pwroff_reset ), + .cart_tran_pin31 ( cart_tran_pin31 ), + .cart_tran_pin31_dir ( cart_tran_pin31_dir ), + + .port_ir_rx ( port_ir_rx ), + .port_ir_tx ( port_ir_tx ), + .port_ir_rx_disable ( port_ir_rx_disable ), + + .port_tran_si ( port_tran_si ), + .port_tran_si_dir ( port_tran_si_dir ), + .port_tran_so ( port_tran_so ), + .port_tran_so_dir ( port_tran_so_dir ), + .port_tran_sck ( port_tran_sck ), + .port_tran_sck_dir ( port_tran_sck_dir ), + .port_tran_sd ( port_tran_sd ), + .port_tran_sd_dir ( port_tran_sd_dir ), + + .cram0_a ( cram0_a ), + .cram0_dq ( cram0_dq ), + .cram0_wait ( cram0_wait ), + .cram0_clk ( cram0_clk ), + .cram0_adv_n ( cram0_adv_n ), + .cram0_cre ( cram0_cre ), + .cram0_ce0_n ( cram0_ce0_n ), + .cram0_ce1_n ( cram0_ce1_n ), + .cram0_oe_n ( cram0_oe_n ), + .cram0_we_n ( cram0_we_n ), + .cram0_ub_n ( cram0_ub_n ), + .cram0_lb_n ( cram0_lb_n ), + .cram1_a ( cram1_a ), + .cram1_dq ( cram1_dq ), + .cram1_wait ( cram1_wait ), + .cram1_clk ( cram1_clk ), + .cram1_adv_n ( cram1_adv_n ), + .cram1_cre ( cram1_cre ), + .cram1_ce0_n ( cram1_ce0_n ), + .cram1_ce1_n ( cram1_ce1_n ), + .cram1_oe_n ( cram1_oe_n ), + .cram1_we_n ( cram1_we_n ), + .cram1_ub_n ( cram1_ub_n ), + .cram1_lb_n ( cram1_lb_n ), + + .dram_a ( dram_a ), + .dram_ba ( dram_ba ), + .dram_dq ( dram_dq ), + .dram_dqm ( dram_dqm ), + .dram_clk ( dram_clk ), + .dram_cke ( dram_cke ), + .dram_ras_n ( dram_ras_n ), + .dram_cas_n ( dram_cas_n ), + .dram_we_n ( dram_we_n ), + + .sram_a ( sram_a ), + .sram_dq ( sram_dq ), + .sram_oe_n ( sram_oe_n ), + .sram_we_n ( sram_we_n ), + .sram_ub_n ( sram_ub_n ), + .sram_lb_n ( sram_lb_n ), + + .vblank ( vblank ), + .vpll_feed ( vpll_feed ), + + .dbg_tx ( dbg_tx ), + .dbg_rx ( dbg_rx ), + .user1 ( user1 ), + .user2 ( user2 ), + + .aux_sda ( aux_sda ), + .aux_scl ( aux_scl ), + + + // logical connections with user core + // + .video_rgb ( video_rgb ), + .video_rgb_clock ( video_rgb_clock ), + .video_rgb_clock_90 ( video_rgb_clock_90 ), + .video_de ( video_de ), + .video_skip ( video_skip ), + .video_vs ( video_vs ), + .video_hs ( video_hs ), + + .audio_mclk ( scal_audmclk ), + .audio_adc ( scal_audadc ), + .audio_dac ( scal_auddac ), + .audio_lrck ( scal_audlrck ), + + .bridge_endian_little ( bridge_endian_little ), + .bridge_addr ( bridge_addr ), + .bridge_rd ( bridge_rd ), + .bridge_rd_data ( bridge_rd_data ), + .bridge_wr ( bridge_wr ), + .bridge_wr_data ( bridge_wr_data ), + + .cont1_key ( cont1_key ), + .cont2_key ( cont2_key ), + .cont3_key ( cont3_key ), + .cont4_key ( cont4_key ), + .cont1_joy ( cont1_joy ), + .cont2_joy ( cont2_joy ), + .cont3_joy ( cont3_joy ), + .cont4_joy ( cont4_joy ), + .cont1_trig ( cont1_trig ), + .cont2_trig ( cont2_trig ), + .cont3_trig ( cont3_trig ), + .cont4_trig ( cont4_trig ) + +); + +endmodule + diff --git a/src/fpga/apf/build_id.mif b/src/fpga/apf/build_id.mif new file mode 100644 index 0000000..ccddf99 --- /dev/null +++ b/src/fpga/apf/build_id.mif @@ -0,0 +1,16 @@ +-- Build ID Memory Initialization File +-- + +DEPTH = 256; +WIDTH = 32; +ADDRESS_RADIX = HEX; +DATA_RADIX = HEX; + +CONTENT +BEGIN + + 0E0 : 20220911; + 0E1 : 00191346; + 0E2 : 16885656; + +END; diff --git a/src/fpga/apf/build_id_gen.tcl b/src/fpga/apf/build_id_gen.tcl new file mode 100644 index 0000000..eb598fd --- /dev/null +++ b/src/fpga/apf/build_id_gen.tcl @@ -0,0 +1,171 @@ +# ================================================================================ +# (c) 2011 Altera Corporation. All rights reserved. +# Altera products are protected under numerous U.S. and foreign patents, maskwork +# rights, copyrights and other intellectual property laws. +# +# This reference design file, and your use thereof, is subject to and governed +# by the terms and conditions of the applicable Altera Reference Design License +# Agreement (either as signed by you, agreed by you upon download or as a +# "click-through" agreement upon installation andor found at www.altera.com). +# By using this reference design file, you indicate your acceptance of such terms +# and conditions between you and Altera Corporation. In the event that you do +# not agree with such terms and conditions, you may not use the reference design +# file and please promptly destroy any copies you have made. +# +# This reference design file is being provided on an "as-is" basis and as an +# accommodation and therefore all warranties, representations or guarantees of +# any kind (whether express, implied or statutory) including, without limitation, +# warranties of merchantability, non-infringement, or fitness for a particular +# purpose, are specifically disclaimed. By making this reference design file +# available, Altera expressly does not recommend, suggest or require that this +# reference design file be used in combination with any other product not +# provided by Altera. +# ================================================================================ +# +# Build ID Verilog Module Script +# Jeff Wiencrot - 8/1/2011 +# +# Generates a Verilog module that contains a timestamp, physical address, and host name +# from the current build. These values are available from the build_date, build_time, +# physical_address, and host_name output ports of the build_id module in the build_id.v +# Verilog source file. +# +# The format for each value is as follows: +# Date - 32-bit decimal number of the format mmddyyyy +# Time - 32-bit decimal number of the format hhmmss +# Phyiscal Address - 48-bit hexadecimal number +# Host name - 120-bit hexadecimal number with pairs of digits equal to the +# hexadecimal code for the first 15 ASCII characters of the host +# name. For added clarity, host names that have fewer than 30 +# hexadecimal digits (15 characters) are padded on the left with +# zeros. +# +# Usage: +# +# To manually execute this script, source this file using the following Tcl commands: +# source build_id_verilog.tcl +# +# To have this script automatically execute each time your project is built, use the +# following command (see: http://www.altera.com/support/examples/tcl/auto_processing.html): +# set_global_assignment -name PRE_FLOW_SCRIPT_FILE quartus_sh:build_id_verilog.tcl +# +# Comment out the last line to prevent the process from automatically executing when +# the file is sourced. The process can then be executed with the following command: +# generateBuildID_Verilog +# +# +# For more information, see "build_identification.pdf" +# +# ================================================================================ +# +# 2021-01-21 Analogue +# +# Only care about generating build date/time, so the rest was removed. +# The original can be downloaded from the Intel resource page +# + +proc generateBuildID_Verilog {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %Y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + + # Create a Verilog file for output + set outputFileName "apf/build_id.v" + set outputFile [open $outputFileName "w"] + + # Output the Verilog source + puts $outputFile "// Build ID Verilog Module" + puts $outputFile "//" + puts $outputFile "// Note - these are stored as binary coded decimal" + puts $outputFile "// Date: $buildDate" + puts $outputFile "// Time: $buildTime" + puts $outputFile "" + puts $outputFile "module build_id" + puts $outputFile "(" + puts $outputFile " output \[31:0\] build_date," + puts $outputFile " output \[31:0\] build_time" + puts $outputFile ");" + puts $outputFile "" + puts $outputFile " assign build_date = 32'h$buildDate;" + puts $outputFile " assign build_time = 32'h$buildTime;" + puts $outputFile "" + puts $outputFile "endmodule" + close $outputFile + + + + # Send confirmation message to the Messages window + #post_message "APF core build date/time generated: [pwd]/$outputFileName" + #post_message "Date: $buildDate" + #post_message "Time: $buildTime" +} + + +proc generateBuildID_MIF {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %Y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + set buildUnique [expr {int(rand()*(4294967295))}] + + set buildDateNoLeadingZeros [string trimleft $buildDate "0"] + set buildTimeNoLeadingZeros [string trimleft $buildTime "0"] + set buildDate4Byte [format "%08d" $buildDateNoLeadingZeros] + set buildTime4Byte [format "%08d" $buildTimeNoLeadingZeros] + set buildUnique4Byte [format "%08x" $buildUnique] + + #set buildDate4Byte \ + [concat [string range $buildDate 0 1] \ + [string range $buildDate 2 3] \ + [string range $buildDate 4 5] \ + [string range $buildDate 6 7] ] + + + set buildDateNumBytes 4 + set buildTimeNumBytes 4 + + # Calculate depth of the memory (8-bit) words + set memoryDepth [expr $buildDateNumBytes + $buildTimeNumBytes] + + # Create a Memory Initialization File for output + set outputFileName "apf/build_id.mif" + set outputFile [open $outputFileName "w"] + + # Output the MIF header (see: http://quartushelp.altera.com/current/mergedProjects/reference/glossary/def_mif.htm) + puts $outputFile "-- Build ID Memory Initialization File" + puts $outputFile "--" + puts $outputFile "" + puts $outputFile "DEPTH = 256;" + puts $outputFile "WIDTH = 32;" + puts $outputFile "ADDRESS_RADIX = HEX;" + puts $outputFile "DATA_RADIX = HEX;" + puts $outputFile "" + puts $outputFile "CONTENT" + puts $outputFile "BEGIN" + puts $outputFile "" + puts $outputFile " 0E0 : $buildDate4Byte;" + puts $outputFile " 0E1 : $buildTime4Byte;" + puts $outputFile " 0E2 : $buildUnique4Byte;" + puts $outputFile "" + puts $outputFile "END;" + + # Close file to complete write + close $outputFile + + # Send confirmation message to the Messages window + post_message "APF core build date/time generated: [pwd]/$outputFileName" +} + +generateBuildID_MIF + +# 2021-01-21 Analogue +# +# There are some circumstances where you want all parts of a FPGA flow to be deterministic, especially +# when trying to hash out timing issues. +# You should comment this line out and temporarily bypass buildid generation so that synthesis/par +# have consistent working input. MIF bram contents like above won't affect the random seed or trigger +# recompilation. +# Don't forget to re-enable before you release. +# +# generateBuildID_Verilog diff --git a/src/fpga/apf/common.v b/src/fpga/apf/common.v new file mode 100644 index 0000000..6481788 --- /dev/null +++ b/src/fpga/apf/common.v @@ -0,0 +1,156 @@ +// Software License Agreement + +// The software supplied herewith by Analogue Enterprises Limited (the "Company”), +// the Analogue Pocket Framework (“APF”), is provided and licensed to you, the +// Company's customer, solely for use in designing, testing and creating +// applications for use with Company's Products or Services. The software is +// owned by the Company and/or its licensors, and is protected under applicable +// laws, including, but not limited to, U.S. copyright law. All rights are +// reserved. By using the APF code you are agreeing to the terms of the End User +// License Agreement (“EULA”) located at [https://www.analogue.link/pocket-eula] +// and incorporated herein by reference. To the extent any use of the APF requires +// application of the MIT License or the GNU General Public License and terms of +// this APF Software License Agreement and EULA are inconsistent with such license, +// the applicable terms of the MIT License or the GNU General Public License, as +// applicable, will prevail. + +// THE SOFTWARE IS PROVIDED "AS-IS" AND WE EXPRESSLY DISCLAIM ANY IMPLIED +// WARRANTIES TO THE FULLEST EXTENT PROVIDED BY LAW, INCLUDING BUT NOT LIMITED TO, +// ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR +// NON-INFRINGEMENT. TO THE EXTENT APPLICABLE LAWS PROHIBIT TERMS OF USE FROM +// DISCLAIMING ANY IMPLIED WARRANTY, SUCH IMPLIED WARRANTY SHALL BE LIMITED TO THE +// MINIMUM WARRANTY PERIOD REQUIRED BY LAW, AND IF NO SUCH PERIOD IS REQUIRED, +// THEN THIRTY (30) DAYS FROM FIRST USE OF THE SOFTWARE. WE CANNOT GUARANTEE AND +// DO NOT PROMISE ANY SPECIFIC RESULTS FROM USE OF THE SOFTWARE. WITHOUT LIMITING +// THE FOREGOING, WE DO NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR +// ERROR-FREE. IN NO EVENT WILL WE BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY +// INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL OR PUNITIVE DAMAGES, +// INCLUDING BUT NOT LIMITED TO, LOST PROFITS ARISING OUT OF YOUR USE, OR +// INABILITY TO USE, THE SOFTWARE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGES. UNDER NO CIRCUMSTANCES SHALL OUR LIABILITY TO YOU FOR ANY +// CLAIM OR CAUSE OF ACTION WHATSOEVER, AND REGARDLESS OF THE FORM OF THE ACTION, +// WHETHER ARISING IN CONTRACT, TORT OR OTHERWISE, EXCEED THE AMOUNT PAID BY YOU +// TO US, IF ANY, DURING THE 90 DAY PERIOD IMMEDIATELY PRECEDING THE DATE ON WHICH +// YOU FIRST ASSERT ANY SUCH CLAIM. THE FOREGOING LIMITATIONS SHALL APPLY TO THE +// FULLEST EXTENT PERMITTED BY APPLICABLE LAW. +// +// 2-stage synchronizer +// +module synch_2 #(parameter WIDTH = 1) ( + input wire [WIDTH-1:0] i, // input signal + output reg [WIDTH-1:0] o, // synchronized output + input wire clk, // clock to synchronize on + output wire rise, // one-cycle rising edge pulse + output wire fall // one-cycle falling edge pulse +); + +reg [WIDTH-1:0] stage_1; +reg [WIDTH-1:0] stage_2; +reg [WIDTH-1:0] stage_3; + +assign rise = (WIDTH == 1) ? (o & ~stage_2) : 1'b0; +assign fall = (WIDTH == 1) ? (~o & stage_2) : 1'b0; +always @(posedge clk) + {stage_2, o, stage_1} <= {o, stage_1, i}; + +endmodule + + +// +// 3-stage synchronizer +// +module synch_3 #(parameter WIDTH = 1) ( + input wire [WIDTH-1:0] i, // input signal + output reg [WIDTH-1:0] o, // synchronized output + input wire clk, // clock to synchronize on + output wire rise, // one-cycle rising edge pulse + output wire fall // one-cycle falling edge pulse +); + +reg [WIDTH-1:0] stage_1; +reg [WIDTH-1:0] stage_2; +reg [WIDTH-1:0] stage_3; + +assign rise = (WIDTH == 1) ? (o & ~stage_3) : 1'b0; +assign fall = (WIDTH == 1) ? (~o & stage_3) : 1'b0; +always @(posedge clk) + {stage_3, o, stage_2, stage_1} <= {o, stage_2, stage_1, i}; + +endmodule + + +module bram_block_dp #( + parameter DATA = 32, + parameter ADDR = 7 +) ( + input wire a_clk, + input wire a_wr, + input wire [ADDR-1:0] a_addr, + input wire [DATA-1:0] a_din, + output reg [DATA-1:0] a_dout, + + input wire b_clk, + input wire b_wr, + input wire [ADDR-1:0] b_addr, + input wire [DATA-1:0] b_din, + output reg [DATA-1:0] b_dout +); + +reg [DATA-1:0] mem [(2**ADDR)-1:0]; + +always @(posedge a_clk) begin + if(a_wr) begin + a_dout <= a_din; + mem[a_addr] <= a_din; + end else + a_dout <= mem[a_addr]; +end + +always @(posedge b_clk) begin + if(b_wr) begin + b_dout <= b_din; + mem[b_addr] <= b_din; + end else + b_dout <= mem[b_addr]; +end + +endmodule + + +module bram_block_dp_nonstd #( + parameter DATA = 32, + parameter ADDR = 7, + parameter DEPTH = 128 +) ( + input wire a_clk, + input wire a_wr, + input wire [ADDR-1:0] a_addr, + input wire [DATA-1:0] a_din, + output reg [DATA-1:0] a_dout, + + input wire b_clk, + input wire b_wr, + input wire [ADDR-1:0] b_addr, + input wire [DATA-1:0] b_din, + output reg [DATA-1:0] b_dout +); + +reg [DATA-1:0] mem [DEPTH-1:0]; + +always @(posedge a_clk) begin + if(a_wr) begin + a_dout <= a_din; + mem[a_addr] <= a_din; + end else + a_dout <= mem[a_addr]; +end + +always @(posedge b_clk) begin + if(b_wr) begin + b_dout <= b_din; + mem[b_addr] <= b_din; + end else + b_dout <= mem[b_addr]; +end + +endmodule diff --git a/src/fpga/apf/io_bridge_peripheral.v b/src/fpga/apf/io_bridge_peripheral.v new file mode 100644 index 0000000..eda3bb0 --- /dev/null +++ b/src/fpga/apf/io_bridge_peripheral.v @@ -0,0 +1,334 @@ +// Software License Agreement + +// The software supplied herewith by Analogue Enterprises Limited (the "Company”), +// the Analogue Pocket Framework (“APF”), is provided and licensed to you, the +// Company's customer, solely for use in designing, testing and creating +// applications for use with Company's Products or Services. The software is +// owned by the Company and/or its licensors, and is protected under applicable +// laws, including, but not limited to, U.S. copyright law. All rights are +// reserved. By using the APF code you are agreeing to the terms of the End User +// License Agreement (“EULA”) located at [https://www.analogue.link/pocket-eula] +// and incorporated herein by reference. To the extent any use of the APF requires +// application of the MIT License or the GNU General Public License and terms of +// this APF Software License Agreement and EULA are inconsistent with such license, +// the applicable terms of the MIT License or the GNU General Public License, as +// applicable, will prevail. + +// THE SOFTWARE IS PROVIDED "AS-IS" AND WE EXPRESSLY DISCLAIM ANY IMPLIED +// WARRANTIES TO THE FULLEST EXTENT PROVIDED BY LAW, INCLUDING BUT NOT LIMITED TO, +// ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR +// NON-INFRINGEMENT. TO THE EXTENT APPLICABLE LAWS PROHIBIT TERMS OF USE FROM +// DISCLAIMING ANY IMPLIED WARRANTY, SUCH IMPLIED WARRANTY SHALL BE LIMITED TO THE +// MINIMUM WARRANTY PERIOD REQUIRED BY LAW, AND IF NO SUCH PERIOD IS REQUIRED, +// THEN THIRTY (30) DAYS FROM FIRST USE OF THE SOFTWARE. WE CANNOT GUARANTEE AND +// DO NOT PROMISE ANY SPECIFIC RESULTS FROM USE OF THE SOFTWARE. WITHOUT LIMITING +// THE FOREGOING, WE DO NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR +// ERROR-FREE. IN NO EVENT WILL WE BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY +// INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL OR PUNITIVE DAMAGES, +// INCLUDING BUT NOT LIMITED TO, LOST PROFITS ARISING OUT OF YOUR USE, OR +// INABILITY TO USE, THE SOFTWARE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGES. UNDER NO CIRCUMSTANCES SHALL OUR LIABILITY TO YOU FOR ANY +// CLAIM OR CAUSE OF ACTION WHATSOEVER, AND REGARDLESS OF THE FORM OF THE ACTION, +// WHETHER ARISING IN CONTRACT, TORT OR OTHERWISE, EXCEED THE AMOUNT PAID BY YOU +// TO US, IF ANY, DURING THE 90 DAY PERIOD IMMEDIATELY PRECEDING THE DATE ON WHICH +// YOU FIRST ASSERT ANY SUCH CLAIM. THE FOREGOING LIMITATIONS SHALL APPLY TO THE +// FULLEST EXTENT PERMITTED BY APPLICABLE LAW. +// +// bridge peripheral for socrates PMP bridge to heraclitus+aristotle +// 2020-2022 Analogue +// +// please note that while writes are immediate, +// reads are buffered by 1 word. this is necessary to maintain +// data throughput while reading from slower data sources like +// sdram. +// reads should always return the current bus value, and kickstart +// into the next read immediately. this way, you have the entire +// next word time to retrieve the data, instead of just a few +// cycles. +// +// the worst-case read/write timing is every 88 cycles @ 74.25mhz +// which is about 1180ns. + +module io_bridge_peripheral ( + +input wire clk, +input wire reset_n, + +input wire endian_little, + +output reg [31:0] pmp_addr, +output reg pmp_addr_valid, +output reg pmp_rd, +input wire [31:0] pmp_rd_data, +output reg pmp_wr, +output reg [31:0] pmp_wr_data, + +inout reg phy_spimosi, +inout reg phy_spimiso, +inout reg phy_spiclk, +input wire phy_spiss + +); + +// +// clock domain: clk (74.25mhz) rising edge +// + wire reset_n_s; +synch_3 s00(reset_n, reset_n_s, clk); + + wire endian_little_s; +synch_3 s01(endian_little, endian_little_s, clk); + + wire phy_spiss_s, phy_spiss_r, phy_spiss_f; +synch_3 s02(phy_spiss, phy_spiss_s, clk, phy_spiss_r, phy_spiss_f); + + + reg [4:0] state; + localparam ST_RESET = 'd0; + localparam ST_IDLE = 'd1; + localparam ST_READ_0 = 'd2; + localparam ST_READ_1 = 'd3; + localparam ST_READ_2 = 'd4; + localparam ST_READ_3 = 'd5; + localparam ST_WRITE_0 = 'd6; + localparam ST_WRITE_1 = 'd7; + localparam ST_WRITE_2 = 'd8; + localparam ST_ADDR_0 = 'd9; + + reg [1:0] addr_cnt; + reg [1:0] data_cnt; + reg [6:0] read_cnt; + + // synchronize rd byte flag's rising edge into clk + wire rx_byte_done_s, rx_byte_done_r; +synch_3 s03(rx_byte_done, rx_byte_done_s, clk, rx_byte_done_r); + + reg [4:0] spis; + localparam ST_SIDLE = 'd1; + localparam ST_SEND_N = 'd6; + localparam ST_SEND_0 = 'd2; + localparam ST_SEND_1 = 'd3; + localparam ST_SEND_2 = 'd4; + localparam ST_SEND_3 = 'd5; + reg spis_tx; + reg [31:0] spis_word_tx; + reg [31:0] spis_word; + reg [4:0] spis_count; + reg spis_done; + + reg rx_byte_done_r_1, rx_byte_done_r_2; + reg [7:0] rx_byte_1, rx_byte_2; + + // handle reversing endianness on both ports + reg [31:0] pmp_wr_data_latch; + reg [31:0] pmp_rd_data_e; // asynchronous + reg [31:0] pmp_rd_data_buf; // buffer the last word for immediate response +always @(*) begin + pmp_wr_data <= endian_little_s ? { pmp_wr_data_latch[7:0], + pmp_wr_data_latch[15:8], + pmp_wr_data_latch[23:16], + pmp_wr_data_latch[31:24] + } : pmp_wr_data_latch; + + pmp_rd_data_e <= endian_little_s ? {pmp_rd_data[7:0], + pmp_rd_data[15:8], + pmp_rd_data[23:16], + pmp_rd_data[31:24] + } : pmp_rd_data; +end + +always @(posedge clk) begin + + rx_byte_2 <= rx_byte_1; + rx_byte_1 <= rx_byte; + + rx_byte_done_r_1 <= rx_byte_done_r; + rx_byte_done_r_2 <= rx_byte_done_r_1; + + case(state) + ST_RESET: begin + addr_cnt <= 0; + data_cnt <= 0; + pmp_wr <= 0; + pmp_rd <= 0; + pmp_addr_valid <= 0; + spis_tx <= 0; + + state <= ST_ADDR_0; + end + ST_ADDR_0: begin + // transaction has started + + if(rx_byte_done_r_2) begin + case(addr_cnt) + 0: pmp_addr[31:24] <= rx_byte_2; + 1: pmp_addr[23:16] <= rx_byte_2; + 2: pmp_addr[15: 8] <= rx_byte_2; + 3: begin + pmp_addr[ 7: 0] <= {rx_byte_2[7:2], 2'b00}; + // address is latched + if( rx_byte_2[0] ) begin + data_cnt <= 0; + state <= ST_WRITE_0; + end else begin + data_cnt <= 0; + read_cnt <= 0; + state <= ST_READ_0; + end + end + endcase + + addr_cnt <= addr_cnt + 1'b1; + end + end + ST_WRITE_0: begin + // give notice, address has become valid + pmp_addr_valid <= 1; + + if(rx_byte_done_r_2) begin + case(data_cnt) + 0: pmp_wr_data_latch[31:24] <= rx_byte_2; + 1: pmp_wr_data_latch[23:16] <= rx_byte_2; + 2: pmp_wr_data_latch[15: 8] <= rx_byte_2; + 3: begin + pmp_wr_data_latch[ 7: 0] <= rx_byte_2; + state <= ST_WRITE_1; + end + endcase + data_cnt <= data_cnt + 1'b1; + end + end + ST_WRITE_1: begin + pmp_wr <= 1; + state <= ST_WRITE_2; + end + ST_WRITE_2: begin + // exited upon new transaction + pmp_wr <= 0; + end + ST_READ_0: begin + pmp_addr_valid <= 1; + + // delay a few cycles + read_cnt <= read_cnt + 1'b1; + if(read_cnt == 4-1) begin + // load the buffer with the current data + // and give the current buffer contents to bridge + spis_word_tx <= pmp_rd_data_e; + spis_tx <= 1; + + state <= ST_READ_1; + end + end + ST_READ_1: begin + pmp_rd <= 1; + state <= ST_READ_2; + end + ST_READ_2: begin + pmp_rd <= 0; + if(spis_done) begin + spis_tx <= 0; + state <= ST_READ_3; + end + end + ST_READ_3: begin + // exited upon new transaction + end + endcase + + + + + // + // word transmit + // + spis_done <= 0; + case(spis) + ST_SIDLE: begin + spis_count <= 0; + + phy_spiclk <= 1'bZ; + phy_spimosi <= 1'bZ; + phy_spimiso <= 1'bZ; + + if(spis_tx) begin + spis_word <= spis_word_tx; + spis <= ST_SEND_N; + end + end + // drive high first + ST_SEND_N: begin + phy_spiclk <= 1'b1; + phy_spimosi <= 1'b1; + phy_spimiso <= 1'b1; + spis <= ST_SEND_0; + end + // tx, shift out bits + ST_SEND_0: begin + phy_spiclk <= 0; + spis <= ST_SEND_1; + phy_spimosi <= spis_word[31]; + phy_spimiso <= spis_word[30]; + spis_word <= {spis_word[29:0], 2'b00}; + end + ST_SEND_1: begin + phy_spiclk <= 1; + spis <= ST_SEND_0; + spis_count <= spis_count + 1'b1; + if(spis_count == 15) spis <= ST_SEND_2; + end + ST_SEND_2: begin + phy_spiclk <= 1'b1; + phy_spimosi <= 1'b1; + phy_spimiso <= 1'b1; + spis <= ST_SEND_3; + spis_done <= 1; + end + ST_SEND_3: begin + spis <= ST_SIDLE; + end + endcase + + if(phy_spiss_s) begin + // select is high, go back to reset + state <= ST_RESET; + spis <= ST_SIDLE; + end + +end + + +// +// clock domain: phy_spiclk rising edge +// + reg [1:0] rx_latch_idx; + reg [7:0] rx_dat; + reg [7:0] rx_byte; // latched by clk, but upon a synchronized trigger + reg rx_byte_done; + +always @(posedge phy_spiclk or posedge phy_spiss) begin + + if(phy_spiss) begin + // reset + rx_byte_done <= 0; + rx_latch_idx <= 0; + + end else begin + // spiclk rising edge, latch data + rx_byte_done <= 0; + + case(rx_latch_idx) + 0: begin rx_dat[7:6] <= {phy_spimosi, phy_spimiso}; rx_latch_idx <= 1; end + 1: begin rx_dat[5:4] <= {phy_spimosi, phy_spimiso}; rx_latch_idx <= 2; end + 2: begin rx_dat[3:2] <= {phy_spimosi, phy_spimiso}; rx_latch_idx <= 3; end + 3: begin + // final 2 bits + rx_byte <= {rx_dat[7:2], phy_spimosi, phy_spimiso}; + rx_latch_idx <= 0; + rx_byte_done <= 1; + end + endcase + end +end + +endmodule diff --git a/src/fpga/apf/io_pad_controller.v b/src/fpga/apf/io_pad_controller.v new file mode 100644 index 0000000..c3886ac --- /dev/null +++ b/src/fpga/apf/io_pad_controller.v @@ -0,0 +1,328 @@ +// Software License Agreement + +// The software supplied herewith by Analogue Enterprises Limited (the "Company”), +// the Analogue Pocket Framework (“APF”), is provided and licensed to you, the +// Company's customer, solely for use in designing, testing and creating +// applications for use with Company's Products or Services. The software is +// owned by the Company and/or its licensors, and is protected under applicable +// laws, including, but not limited to, U.S. copyright law. All rights are +// reserved. By using the APF code you are agreeing to the terms of the End User +// License Agreement (“EULA”) located at [https://www.analogue.link/pocket-eula] +// and incorporated herein by reference. To the extent any use of the APF requires +// application of the MIT License or the GNU General Public License and terms of +// this APF Software License Agreement and EULA are inconsistent with such license, +// the applicable terms of the MIT License or the GNU General Public License, as +// applicable, will prevail. + +// THE SOFTWARE IS PROVIDED "AS-IS" AND WE EXPRESSLY DISCLAIM ANY IMPLIED +// WARRANTIES TO THE FULLEST EXTENT PROVIDED BY LAW, INCLUDING BUT NOT LIMITED TO, +// ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR +// NON-INFRINGEMENT. TO THE EXTENT APPLICABLE LAWS PROHIBIT TERMS OF USE FROM +// DISCLAIMING ANY IMPLIED WARRANTY, SUCH IMPLIED WARRANTY SHALL BE LIMITED TO THE +// MINIMUM WARRANTY PERIOD REQUIRED BY LAW, AND IF NO SUCH PERIOD IS REQUIRED, +// THEN THIRTY (30) DAYS FROM FIRST USE OF THE SOFTWARE. WE CANNOT GUARANTEE AND +// DO NOT PROMISE ANY SPECIFIC RESULTS FROM USE OF THE SOFTWARE. WITHOUT LIMITING +// THE FOREGOING, WE DO NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR +// ERROR-FREE. IN NO EVENT WILL WE BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY +// INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL OR PUNITIVE DAMAGES, +// INCLUDING BUT NOT LIMITED TO, LOST PROFITS ARISING OUT OF YOUR USE, OR +// INABILITY TO USE, THE SOFTWARE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY +// OF SUCH DAMAGES. UNDER NO CIRCUMSTANCES SHALL OUR LIABILITY TO YOU FOR ANY +// CLAIM OR CAUSE OF ACTION WHATSOEVER, AND REGARDLESS OF THE FORM OF THE ACTION, +// WHETHER ARISING IN CONTRACT, TORT OR OTHERWISE, EXCEED THE AMOUNT PAID BY YOU +// TO US, IF ANY, DURING THE 90 DAY PERIOD IMMEDIATELY PRECEDING THE DATE ON WHICH +// YOU FIRST ASSERT ANY SUCH CLAIM. THE FOREGOING LIMITATIONS SHALL APPLY TO THE +// FULLEST EXTENT PERMITTED BY APPLICABLE LAW. +// +// pad controller +// 2020-08-17 Analogue +// + +module io_pad_controller ( + +input wire clk, +input wire reset_n, + +inout reg pad_1wire, + +output reg [15:0] cont1_key, +output reg [15:0] cont2_key, +output reg [15:0] cont3_key, +output reg [15:0] cont4_key, +output reg [31:0] cont1_joy, +output reg [31:0] cont2_joy, +output reg [31:0] cont3_joy, +output reg [31:0] cont4_joy, +output reg [15:0] cont1_trig, +output reg [15:0] cont2_trig, +output reg [15:0] cont3_trig, +output reg [15:0] cont4_trig, + +output reg rx_timed_out +); + + wire reset_n_s; +synch_3 s00(reset_n, reset_n_s, clk); + + wire pad_1wire_s, pad_1wire_r, pad_1wire_f; +synch_3 s01(pad_1wire, pad_1wire_s, clk, pad_1wire_r, pad_1wire_f); + + +// +// protocol fsm +// + + reg [20:0] rx_timeout; // ~28ms + + reg [15:0] auto_poll_cnt; // 882us + reg auto_poll_queue; + + reg [18:0] heartbeat_cnt; // 7ms + reg heartbeat_queue; + + + localparam ST_RESET = 'd0; + localparam ST_IDLE = 'd1; + localparam ST_RX_BUTTON_1 = 'd2; + localparam ST_RX_BUTTON_2 = 'd3; + localparam ST_TX_SCALER = 'd4; + localparam ST_END_TX = 'd5; + + reg [3:0] state; + reg [3:0] cnt; + +always @(posedge clk) begin + tx_word_start <= 0; + + auto_poll_cnt <= auto_poll_cnt + 1'b1; + heartbeat_cnt <= heartbeat_cnt + 1'b1; + + // increment rx timeout, override and reset when idle below + rx_timeout <= rx_timeout + 1'b1; + + case(state) + ST_RESET: begin + reset_tr_n <= 0; + rx_timed_out <= 0; + + if(&rx_timeout[19:0]) begin + state <= ST_IDLE; + end + end + ST_IDLE: begin + // idle state + reset_tr_n <= 1; + rx_timeout <= 0; + cnt <= 0; + if(auto_poll_queue) begin + auto_poll_queue <= 0; + + tx_word_start <= 1; + tx_word <= 32'h4A10000C; + + state <= ST_RX_BUTTON_1; + end else if(heartbeat_queue) begin + heartbeat_queue <= 0; + + tx_word_start <= 1; + tx_word <= 32'h4AFE0000; + + state <= ST_END_TX; + end + end + // receive button words + ST_RX_BUTTON_1: begin + if(tx_word_done) begin + state <= ST_RX_BUTTON_2; + end + end + ST_RX_BUTTON_2: begin + if(rx_word_done) begin + cnt <= cnt + 1'b1; + case(cnt) + 0: cont1_key <= rx_word[15:0]; + 1: cont1_joy <= rx_word; + 2: cont1_trig <= rx_word[15:0]; + + 3: cont2_key <= rx_word[15:0]; + 4: cont2_joy <= rx_word; + 5: cont2_trig <= rx_word[15:0]; + + 6: cont3_key <= rx_word[15:0]; + 7: cont3_joy <= rx_word; + 8: cont3_trig <= rx_word[15:0]; + + 9: cont4_key <= rx_word[15:0]; + 10: cont4_joy <= rx_word; + 11: begin + cont4_trig <= rx_word[15:0]; + state <= ST_IDLE; + end + endcase + end + end + // do nothing + ST_END_TX: begin + // done sending, idle again + if(tx_word_done) begin + state <= ST_IDLE; + end + end + endcase + + + if(&auto_poll_cnt) begin + auto_poll_queue <= 1; + end + if(&heartbeat_cnt) begin + heartbeat_queue <= 1; + end + + if(&rx_timeout) begin + // reset protocol FSM which will also reset t/r engine + rx_timed_out <= 1; + rx_timeout <= 0; + state <= ST_RESET; + end + + if(~reset_n_s) begin + state <= ST_RESET; + end +end + + + + + +// +// word receive/transmit engine +// + reg reset_tr_n; + localparam BITLEN = 60; + + reg rx_word_done; + reg [31:0] rx_word_shift; + reg [31:0] rx_word; + + reg tx_word_start, tx_word_start_1; + reg tx_word_done; + reg [31:0] tx_word; + reg [31:0] tx_word_shift; + + reg [7:0] tr_cnt; + reg [5:0] tr_bit; + + localparam TR_IDLE = 'd1; + localparam TR_TX_START = 'd2; + localparam TR_TX_CONTINUE = 'd3; + localparam TR_TX_DONE = 'd4; + localparam TR_RX_START = 'd5; + localparam TR_RX_WAITEDGE = 'd6; + localparam TR_RX_DONE = 'd7; + + reg [3:0] tr_state; + +always @(posedge clk) begin + + rx_word_done <= 0; + tx_word_done <= 0; + + tx_word_start_1 <= tx_word_start; + + case(tr_state) + TR_IDLE: begin + tr_bit <= 0; + tr_cnt <= 0; + + pad_1wire <= 1'bZ; + + if(tx_word_start & ~tx_word_start_1) begin + // transmit word + tx_word_shift <= tx_word; + tr_state <= TR_TX_START; + end + + if(pad_1wire_f) begin + // receive word + tr_state <= TR_RX_START; + end + end + + // transmit 32bit + TR_TX_START: begin + // insert delay + tr_cnt <= tr_cnt + 1'b1; + if(&tr_cnt) begin + // drive from tristate(high) to explicitly high to prevent glitching + pad_1wire <= 1'b1; + tr_state <= TR_TX_CONTINUE; + end + end + TR_TX_CONTINUE: begin + tr_cnt <= tr_cnt + 1'b1; + case(tr_cnt) + 0: begin + pad_1wire <= 1'b0; + end + (BITLEN/3): begin + pad_1wire <= tx_word_shift[31]; + end + (BITLEN*2/3): begin + pad_1wire <= 1'b1; + end + (BITLEN-1): begin + tr_cnt <= 0; + tx_word_shift <= {tx_word_shift[30:0], 1'b1}; + + tr_bit <= tr_bit + 1'b1; + if(tr_bit == 31) begin + tr_state <= TR_TX_DONE; + end + end + endcase + end + TR_TX_DONE: begin + tx_word_done <= 1; + tr_state <= TR_IDLE; + end + + // receive 32bit + TR_RX_START: begin + tr_cnt <= tr_cnt + 1'b1; + case(tr_cnt) + (BITLEN/2-4): begin + rx_word_shift <= {rx_word_shift[30:0], pad_1wire_s}; + end + (BITLEN*5/6): begin + tr_cnt <= 0; + + // wait for next falling edge + tr_state <= TR_RX_WAITEDGE; + tr_bit <= tr_bit + 1'b1; + if(tr_bit == 31) begin + // if this is bit32, don't wait and finish + tr_state <= TR_RX_DONE; + end + end + endcase + end + TR_RX_WAITEDGE: begin + if(pad_1wire_f) begin + tr_state <= TR_RX_START; + end + end + TR_RX_DONE: begin + rx_word <= rx_word_shift; + rx_word_done <= 1; + tr_state <= TR_IDLE; + end + + default: begin + tr_state <= TR_IDLE; + end + endcase + + if(~reset_n_s | ~reset_tr_n) tr_state <= TR_IDLE; +end + +endmodule diff --git a/src/fpga/apf/mf_datatable.qip b/src/fpga/apf/mf_datatable.qip new file mode 100644 index 0000000..e7e597d --- /dev/null +++ b/src/fpga/apf/mf_datatable.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT" +set_global_assignment -name IP_TOOL_VERSION "21.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "mf_datatable.v"] diff --git a/src/fpga/apf/mf_datatable.v b/src/fpga/apf/mf_datatable.v new file mode 100644 index 0000000..dfdbe86 --- /dev/null +++ b/src/fpga/apf/mf_datatable.v @@ -0,0 +1,247 @@ +// megafunction wizard: %RAM: 2-PORT% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altsyncram + +// ============================================================ +// File Name: mf_datatable.v +// Megafunction Name(s): +// altsyncram +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 21.1.1 Build 850 06/23/2022 SJ Lite Edition +// ************************************************************ + + +//Copyright (C) 2022 Intel Corporation. All rights reserved. +//Your use of Intel Corporation's design tools, logic functions +//and other software and tools, and any partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Intel Program License +//Subscription Agreement, the Intel Quartus Prime License Agreement, +//the Intel FPGA IP License Agreement, or other applicable license +//agreement, including, without limitation, that your use is for +//the sole purpose of programming logic devices manufactured by +//Intel and sold by Intel or its authorized distributors. Please +//refer to the applicable agreement for further details, at +//https://fpgasoftware.intel.com/eula. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module mf_datatable ( + address_a, + address_b, + clock_a, + clock_b, + data_a, + data_b, + wren_a, + wren_b, + q_a, + q_b); + + input [7:0] address_a; + input [7:0] address_b; + input clock_a; + input clock_b; + input [31:0] data_a; + input [31:0] data_b; + input wren_a; + input wren_b; + output [31:0] q_a; + output [31:0] q_b; +`ifndef ALTERA_RESERVED_QIS +// synopsys translate_off +`endif + tri1 clock_a; + tri0 wren_a; + tri0 wren_b; +`ifndef ALTERA_RESERVED_QIS +// synopsys translate_on +`endif + + wire [31:0] sub_wire0; + wire [31:0] sub_wire1; + wire [31:0] q_a = sub_wire0[31:0]; + wire [31:0] q_b = sub_wire1[31:0]; + + altsyncram altsyncram_component ( + .address_a (address_a), + .address_b (address_b), + .clock0 (clock_a), + .clock1 (clock_b), + .data_a (data_a), + .data_b (data_b), + .wren_a (wren_a), + .wren_b (wren_b), + .q_a (sub_wire0), + .q_b (sub_wire1), + .aclr0 (1'b0), + .aclr1 (1'b0), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .eccstatus (), + .rden_a (1'b1), + .rden_b (1'b1)); + defparam + altsyncram_component.address_reg_b = "CLOCK1", + altsyncram_component.clock_enable_input_a = "BYPASS", + altsyncram_component.clock_enable_input_b = "BYPASS", + altsyncram_component.clock_enable_output_a = "BYPASS", + altsyncram_component.clock_enable_output_b = "BYPASS", + altsyncram_component.indata_reg_b = "CLOCK1", + altsyncram_component.init_file = "./apf/build_id.mif", + altsyncram_component.intended_device_family = "Cyclone V", + altsyncram_component.lpm_type = "altsyncram", + altsyncram_component.numwords_a = 256, + altsyncram_component.numwords_b = 256, + altsyncram_component.operation_mode = "BIDIR_DUAL_PORT", + altsyncram_component.outdata_aclr_a = "NONE", + altsyncram_component.outdata_aclr_b = "NONE", + altsyncram_component.outdata_reg_a = "CLOCK0", + altsyncram_component.outdata_reg_b = "CLOCK1", + altsyncram_component.power_up_uninitialized = "FALSE", + altsyncram_component.read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ", + altsyncram_component.read_during_write_mode_port_b = "NEW_DATA_NO_NBE_READ", + altsyncram_component.widthad_a = 8, + altsyncram_component.widthad_b = 8, + altsyncram_component.width_a = 32, + altsyncram_component.width_b = 32, + altsyncram_component.width_byteena_a = 1, + altsyncram_component.width_byteena_b = 1, + altsyncram_component.wrcontrol_wraddress_reg_b = "CLOCK1"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +// Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +// Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +// Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +// Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +// Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +// Retrieval info: PRIVATE: BlankMemory NUMERIC "0" +// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +// Retrieval info: PRIVATE: CLRdata NUMERIC "0" +// Retrieval info: PRIVATE: CLRq NUMERIC "0" +// Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +// Retrieval info: PRIVATE: CLRrren NUMERIC "0" +// Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +// Retrieval info: PRIVATE: CLRwren NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "5" +// Retrieval info: PRIVATE: Clock_A NUMERIC "0" +// Retrieval info: PRIVATE: Clock_B NUMERIC "0" +// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +// Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +// Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" +// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" +// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +// Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +// Retrieval info: PRIVATE: MEMSIZE NUMERIC "8192" +// Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +// Retrieval info: PRIVATE: MIFfilename STRING "./apf/build_id.mif" +// Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3" +// Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +// Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3" +// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3" +// Retrieval info: PRIVATE: REGdata NUMERIC "1" +// Retrieval info: PRIVATE: REGq NUMERIC "1" +// Retrieval info: PRIVATE: REGrdaddress NUMERIC "0" +// Retrieval info: PRIVATE: REGrren NUMERIC "0" +// Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +// Retrieval info: PRIVATE: REGwren NUMERIC "1" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +// Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +// Retrieval info: PRIVATE: VarWidth NUMERIC "0" +// Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "32" +// Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "32" +// Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "32" +// Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "32" +// Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +// Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1" +// Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +// Retrieval info: PRIVATE: enable NUMERIC "0" +// Retrieval info: PRIVATE: rden NUMERIC "0" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" +// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +// Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK1" +// Retrieval info: CONSTANT: INIT_FILE STRING "./apf/build_id.mif" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256" +// Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "256" +// Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT" +// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +// Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +// Retrieval info: CONSTANT: OUTDATA_REG_B STRING "CLOCK1" +// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ" +// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "NEW_DATA_NO_NBE_READ" +// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8" +// Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "8" +// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32" +// Retrieval info: CONSTANT: WIDTH_B NUMERIC "32" +// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +// Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1" +// Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK1" +// Retrieval info: USED_PORT: address_a 0 0 8 0 INPUT NODEFVAL "address_a[7..0]" +// Retrieval info: USED_PORT: address_b 0 0 8 0 INPUT NODEFVAL "address_b[7..0]" +// Retrieval info: USED_PORT: clock_a 0 0 0 0 INPUT VCC "clock_a" +// Retrieval info: USED_PORT: clock_b 0 0 0 0 INPUT NODEFVAL "clock_b" +// Retrieval info: USED_PORT: data_a 0 0 32 0 INPUT NODEFVAL "data_a[31..0]" +// Retrieval info: USED_PORT: data_b 0 0 32 0 INPUT NODEFVAL "data_b[31..0]" +// Retrieval info: USED_PORT: q_a 0 0 32 0 OUTPUT NODEFVAL "q_a[31..0]" +// Retrieval info: USED_PORT: q_b 0 0 32 0 OUTPUT NODEFVAL "q_b[31..0]" +// Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT GND "wren_a" +// Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT GND "wren_b" +// Retrieval info: CONNECT: @address_a 0 0 8 0 address_a 0 0 8 0 +// Retrieval info: CONNECT: @address_b 0 0 8 0 address_b 0 0 8 0 +// Retrieval info: CONNECT: @clock0 0 0 0 0 clock_a 0 0 0 0 +// Retrieval info: CONNECT: @clock1 0 0 0 0 clock_b 0 0 0 0 +// Retrieval info: CONNECT: @data_a 0 0 32 0 data_a 0 0 32 0 +// Retrieval info: CONNECT: @data_b 0 0 32 0 data_b 0 0 32 0 +// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren_a 0 0 0 0 +// Retrieval info: CONNECT: @wren_b 0 0 0 0 wren_b 0 0 0 0 +// Retrieval info: CONNECT: q_a 0 0 32 0 @q_a 0 0 32 0 +// Retrieval info: CONNECT: q_b 0 0 32 0 @q_b 0 0 32 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_datatable_bb.v FALSE +// Retrieval info: LIB_FILE: altera_mf diff --git a/src/fpga/apf/mf_ddio_bidir_12.ppf b/src/fpga/apf/mf_ddio_bidir_12.ppf new file mode 100644 index 0000000..1dac726 --- /dev/null +++ b/src/fpga/apf/mf_ddio_bidir_12.ppf @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/fpga/apf/mf_ddio_bidir_12.qip b/src/fpga/apf/mf_ddio_bidir_12.qip new file mode 100644 index 0000000..86120bf --- /dev/null +++ b/src/fpga/apf/mf_ddio_bidir_12.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_BIDIR" +set_global_assignment -name IP_TOOL_VERSION "21.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "mf_ddio_bidir_12.v"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "mf_ddio_bidir_12.ppf"] diff --git a/src/fpga/apf/mf_ddio_bidir_12.v b/src/fpga/apf/mf_ddio_bidir_12.v new file mode 100644 index 0000000..3b00634 --- /dev/null +++ b/src/fpga/apf/mf_ddio_bidir_12.v @@ -0,0 +1,133 @@ +// megafunction wizard: %ALTDDIO_BIDIR% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: ALTDDIO_BIDIR + +// ============================================================ +// File Name: mf_ddio_bidir_12.v +// Megafunction Name(s): +// ALTDDIO_BIDIR +// +// Simulation Library Files(s): +// +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 21.1.1 Build 850 06/23/2022 SJ Lite Edition +// ************************************************************ + + +//Copyright (C) 2022 Intel Corporation. All rights reserved. +//Your use of Intel Corporation's design tools, logic functions +//and other software and tools, and any partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Intel Program License +//Subscription Agreement, the Intel Quartus Prime License Agreement, +//the Intel FPGA IP License Agreement, or other applicable license +//agreement, including, without limitation, that your use is for +//the sole purpose of programming logic devices manufactured by +//Intel and sold by Intel or its authorized distributors. Please +//refer to the applicable agreement for further details, at +//https://fpgasoftware.intel.com/eula. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module mf_ddio_bidir_12 ( + datain_h, + datain_l, + inclock, + oe, + outclock, + dataout_h, + dataout_l, + padio); + + input [11:0] datain_h; + input [11:0] datain_l; + input inclock; + input oe; + input outclock; + output [11:0] dataout_h; + output [11:0] dataout_l; + inout [11:0] padio; + + wire [11:0] sub_wire0; + wire [11:0] sub_wire1; + wire [11:0] dataout_h = sub_wire0[11:0]; + wire [11:0] dataout_l = sub_wire1[11:0]; + + altddio_bidir ALTDDIO_BIDIR_component ( + .datain_h (datain_h), + .datain_l (datain_l), + .inclock (inclock), + .oe (oe), + .outclock (outclock), + .padio (padio), + .dataout_h (sub_wire0), + .dataout_l (sub_wire1), + .aclr (1'b0), + .aset (1'b0), + .combout (), + .dqsundelayedout (), + .inclocken (1'b1), + .oe_out (), + .outclocken (1'b1), + .sclr (1'b0), + .sset (1'b0)); + defparam + ALTDDIO_BIDIR_component.extend_oe_disable = "OFF", + ALTDDIO_BIDIR_component.implement_input_in_lcell = "OFF", + ALTDDIO_BIDIR_component.intended_device_family = "Cyclone V", + ALTDDIO_BIDIR_component.invert_output = "OFF", + ALTDDIO_BIDIR_component.lpm_hint = "UNUSED", + ALTDDIO_BIDIR_component.lpm_type = "altddio_bidir", + ALTDDIO_BIDIR_component.oe_reg = "UNREGISTERED", + ALTDDIO_BIDIR_component.power_up_high = "OFF", + ALTDDIO_BIDIR_component.width = 12; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone V" +// Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "OFF" +// Retrieval info: CONSTANT: IMPLEMENT_INPUT_IN_LCELL STRING "OFF" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V" +// Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +// Retrieval info: CONSTANT: LPM_HINT STRING "UNUSED" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_bidir" +// Retrieval info: CONSTANT: OE_REG STRING "UNREGISTERED" +// Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +// Retrieval info: CONSTANT: WIDTH NUMERIC "12" +// Retrieval info: USED_PORT: datain_h 0 0 12 0 INPUT NODEFVAL "datain_h[11..0]" +// Retrieval info: CONNECT: @datain_h 0 0 12 0 datain_h 0 0 12 0 +// Retrieval info: USED_PORT: datain_l 0 0 12 0 INPUT NODEFVAL "datain_l[11..0]" +// Retrieval info: CONNECT: @datain_l 0 0 12 0 datain_l 0 0 12 0 +// Retrieval info: USED_PORT: dataout_h 0 0 12 0 OUTPUT NODEFVAL "dataout_h[11..0]" +// Retrieval info: CONNECT: dataout_h 0 0 12 0 @dataout_h 0 0 12 0 +// Retrieval info: USED_PORT: dataout_l 0 0 12 0 OUTPUT NODEFVAL "dataout_l[11..0]" +// Retrieval info: CONNECT: dataout_l 0 0 12 0 @dataout_l 0 0 12 0 +// Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL "inclock" +// Retrieval info: CONNECT: @inclock 0 0 0 0 inclock 0 0 0 0 +// Retrieval info: USED_PORT: oe 0 0 0 0 INPUT NODEFVAL "oe" +// Retrieval info: CONNECT: @oe 0 0 0 0 oe 0 0 0 0 +// Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL "outclock" +// Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +// Retrieval info: USED_PORT: padio 0 0 12 0 BIDIR NODEFVAL "padio[11..0]" +// Retrieval info: CONNECT: padio 0 0 12 0 @padio 0 0 12 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.v TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.qip TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.bsf FALSE TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12_inst.v FALSE TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12_bb.v FALSE TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.inc FALSE TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.cmp FALSE TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL mf_ddio_bidir_12.ppf TRUE FALSE diff --git a/src/fpga/core/core_bridge_cmd.v b/src/fpga/core/core_bridge_cmd.v new file mode 100644 index 0000000..1039089 --- /dev/null +++ b/src/fpga/core/core_bridge_cmd.v @@ -0,0 +1,445 @@ +// +// bridge host/target command handler +// 2022 Analogue +// + +// mapped to 0xF8xxxxxx on bridge +// the spec is loose enough to allow implementation with either +// block rams and a soft CPU, or simply hard logic with some case statements. +// +// the implementation spec is documented, and depending on your application you +// may want to completely replace this module. this is only one of many +// possible ways to accomplish the host/target command system and data table. +// +// this module should always be clocked by a direct clock input and never a PLL, +// because it should report PLL lock status +// + +module core_bridge_cmd ( + +input wire clk, +output reg reset_n, + +input wire bridge_endian_little, +input wire [31:0] bridge_addr, +input wire bridge_rd, +output reg [31:0] bridge_rd_data, +input wire bridge_wr, +input wire [31:0] bridge_wr_data, + +// all these signals should be synchronous to clk +// add synchronizers if these need to be used in other clock domains +input wire status_boot_done, // assert when PLLs lock and logic is ready +input wire status_setup_done, // assert when core is happy with what's been loaded into it +input wire status_running, // assert when pocket's taken core out of reset and is running + +output reg dataslot_requestread, +output reg [15:0] dataslot_requestread_id, +input wire dataslot_requestread_ack, +input wire dataslot_requestread_ok, + +output reg dataslot_requestwrite, +output reg [15:0] dataslot_requestwrite_id, +input wire dataslot_requestwrite_ack, +input wire dataslot_requestwrite_ok, + +output reg dataslot_allcomplete, + +input wire savestate_supported, +input wire [31:0] savestate_addr, +input wire [31:0] savestate_size, +input wire [31:0] savestate_maxloadsize, + +output reg osnotify_inmenu, + +output reg savestate_start, // core should detect rising edge on this, +input wire savestate_start_ack, // and then assert ack for at least 1 cycle +input wire savestate_start_busy, // assert constantly while in progress after ack +input wire savestate_start_ok, // assert continuously when done, and clear when new process is started +input wire savestate_start_err, // assert continuously on error, and clear when new process is started + +output reg savestate_load, +input wire savestate_load_ack, +input wire savestate_load_busy, +input wire savestate_load_ok, +input wire savestate_load_err, + +input wire [9:0] datatable_addr, +input wire datatable_wren, +input wire [31:0] datatable_data, +output wire [31:0] datatable_q + +); + +// handle endianness + reg [31:0] bridge_wr_data_in; + reg [31:0] bridge_rd_data_out; + + wire endian_little_s; +synch_3 s01(bridge_endian_little, endian_little_s, clk); + +always @(*) begin + bridge_rd_data <= endian_little_s ? { + bridge_rd_data_out[7:0], + bridge_rd_data_out[15:8], + bridge_rd_data_out[23:16], + bridge_rd_data_out[31:24] + } : bridge_rd_data_out; + + bridge_wr_data_in <= endian_little_s ? { + bridge_wr_data[7:0], + bridge_wr_data[15:8], + bridge_wr_data[23:16], + bridge_wr_data[31:24] + } : bridge_wr_data; +end + + +// minimalistic approach here - +// keep the commonly used registers in logic, but data table in BRAM. +// implementation could be changed quite a bit for a more advanced use case + +// host + + reg [31:0] host_0; + reg [31:0] host_4 = 'h20; // host cmd parameter data at 0x20 + reg [31:0] host_8 = 'h40; // host cmd response data at 0x40 + + reg [31:0] host_20; // parameter data + reg [31:0] host_24; + reg [31:0] host_28; + reg [31:0] host_2C; + + reg [31:0] host_40; // response data + reg [31:0] host_44; + reg [31:0] host_48; + reg [31:0] host_4C; + + reg host_cmd_start; + reg [15:0] host_cmd_startval; + reg [15:0] host_cmd; + reg [15:0] host_resultcode; + +localparam [3:0] ST_IDLE = 'd0; +localparam [3:0] ST_PARSE = 'd1; +localparam [3:0] ST_WORK = 'd2; +localparam [3:0] ST_DONE_OK = 'd13; +localparam [3:0] ST_DONE_CODE = 'd14; +localparam [3:0] ST_DONE_ERR = 'd15; + reg [3:0] hstate; + +// target + + reg [31:0] target_0; + reg [31:0] target_4 = 'h20; + reg [31:0] target_8 = 'h40; + + reg [31:0] target_20; // parameter data + reg [31:0] target_24; + reg [31:0] target_28; + reg [31:0] target_2C; + + reg [31:0] target_40; // response data + reg [31:0] target_44; + reg [31:0] target_48; + reg [31:0] target_4C; + +localparam [3:0] TARG_ST_IDLE = 'd0; +localparam [3:0] TARG_ST_READYTORUN = 'd1; +localparam [3:0] TARG_ST_DISPMSG = 'd2; +localparam [3:0] TARG_ST_SLOTREAD = 'd3; +localparam [3:0] TARG_ST_SLOTRELOAD = 'd4; +localparam [3:0] TARG_ST_SLOTWRITE = 'd5; +localparam [3:0] TARG_ST_SLOTFLUSH = 'd6; +localparam [3:0] TARG_ST_WAITRESULT = 'd15; + reg [3:0] tstate; + + reg status_setup_done_1; + reg status_setup_done_queue; + + +initial begin + reset_n <= 0; + dataslot_requestread <= 0; + dataslot_requestwrite <= 0; + dataslot_allcomplete <= 0; + savestate_start <= 0; + savestate_load <= 0; + osnotify_inmenu <= 0; + status_setup_done_queue <= 0; +end + +always @(posedge clk) begin + + // detect a rising edge on the input signal + // and flag a queue that will be cleared later + status_setup_done_1 <= status_setup_done; + if(status_setup_done & ~status_setup_done_1) begin + status_setup_done_queue <= 1; + end + + b_datatable_wren <= 0; + b_datatable_addr <= bridge_addr >> 2; + + if(bridge_wr) begin + casex(bridge_addr) + 32'hF8xx00xx: begin + case(bridge_addr[7:0]) + 8'h0: begin + host_0 <= bridge_wr_data_in; // command/status + // check for command + if(bridge_wr_data_in[31:16] == 16'h434D) begin + // host wants us to do a command + host_cmd_startval <= bridge_wr_data_in[15:0]; + host_cmd_start <= 1; + end + end + 8'h20: host_20 <= bridge_wr_data_in; // parameter data regs + 8'h24: host_24 <= bridge_wr_data_in; + 8'h28: host_28 <= bridge_wr_data_in; + 8'h2C: host_2C <= bridge_wr_data_in; + endcase + end + 32'hF8xx10xx: begin + case(bridge_addr[7:0]) + 8'h0: target_0 <= bridge_wr_data_in; // command/status + 8'h4: target_4 <= bridge_wr_data_in; // parameter data pointer + 8'h8: target_8 <= bridge_wr_data_in; // response data pointer + 8'h40: target_40 <= bridge_wr_data_in; // response data regs + 8'h44: target_44 <= bridge_wr_data_in; + 8'h48: target_48 <= bridge_wr_data_in; + 8'h4C: target_4C <= bridge_wr_data_in; + endcase + end + 32'hF8xx2xxx: begin + b_datatable_wren <= 1; + end + endcase + end + if(bridge_rd) begin + casex(bridge_addr) + 32'hF8xx00xx: begin + case(bridge_addr[7:0]) + 8'h0: bridge_rd_data_out <= host_0; // command/status + 8'h4: bridge_rd_data_out <= host_4; // parameter data pointer + 8'h8: bridge_rd_data_out <= host_8; // response data pointer + 8'h40: bridge_rd_data_out <= host_40; // response data regs + 8'h44: bridge_rd_data_out <= host_44; + 8'h48: bridge_rd_data_out <= host_48; + 8'h4C: bridge_rd_data_out <= host_4C; + endcase + end + 32'hF8xx10xx: begin + case(bridge_addr[7:0]) + 8'h0: bridge_rd_data_out <= target_0; + 8'h4: bridge_rd_data_out <= target_4; + 8'h8: bridge_rd_data_out <= target_8; + 8'h20: bridge_rd_data_out <= target_20; // parameter data regs + 8'h24: bridge_rd_data_out <= target_24; + 8'h28: bridge_rd_data_out <= target_28; + 8'h2C: bridge_rd_data_out <= target_2C; + endcase + end + 32'hF8xx2xxx: begin + bridge_rd_data_out <= b_datatable_q; + + end + endcase + end + + + + + + // host > target command executer + case(hstate) + ST_IDLE: begin + + dataslot_requestread <= 0; + dataslot_requestwrite <= 0; + savestate_start <= 0; + savestate_load <= 0; + + // there is no queueing. pocket will always make sure any outstanding host + // commands are finished before starting another + if(host_cmd_start) begin + host_cmd_start <= 0; + // save the command in case it gets clobbered later + host_cmd <= host_cmd_startval; + hstate <= ST_PARSE; + end + + end + ST_PARSE: begin + // overwrite command semaphore with busy flag + host_0 <= {16'h4255, host_cmd}; + + case(host_cmd) + 16'h0000: begin + // Request Status + host_resultcode <= 1; // default: booting + if(status_boot_done) begin + host_resultcode <= 2; // setup + if(status_setup_done) begin + host_resultcode <= 3; // idle + end else if(status_running) begin + host_resultcode <= 4; // running + end + end + hstate <= ST_DONE_CODE; + end + 16'h0010: begin + // Reset Enter + reset_n <= 0; + hstate <= ST_DONE_OK; + end + 16'h0011: begin + // Reset Exit + reset_n <= 1; + hstate <= ST_DONE_OK; + end + 16'h0080: begin + // Data slot request read + dataslot_allcomplete <= 0; + dataslot_requestread <= 1; + dataslot_requestread_id <= host_20[15:0]; + if(dataslot_requestread_ack) begin + host_resultcode <= 0; + if(!dataslot_requestread_ok) host_resultcode <= 2; + hstate <= ST_DONE_CODE; + end + end + 16'h0082: begin + // Data slot request write + dataslot_allcomplete <= 0; + dataslot_requestwrite <= 1; + dataslot_requestwrite_id <= host_20[15:0]; + if(dataslot_requestwrite_ack) begin + host_resultcode <= 0; + if(!dataslot_requestwrite_ok) host_resultcode <= 2; + hstate <= ST_DONE_CODE; + end + end + 16'h008F: begin + // Data slot access all complete + dataslot_allcomplete <= 1; + hstate <= ST_DONE_OK; + end + 16'h00A0: begin + // Savestate: Start/Query + host_40 <= savestate_supported; + host_44 <= savestate_addr; + host_48 <= savestate_size; + + host_resultcode <= 0; + if(savestate_start_busy) host_resultcode <= 1; + if(savestate_start_ok) host_resultcode <= 2; + if(savestate_start_err) host_resultcode <= 3; + + if(host_20[0]) begin + // Request Start! + savestate_start <= 1; + // stay in this state until ack'd + if(savestate_start_ack) begin + hstate <= ST_DONE_CODE; + end + end else begin + hstate <= ST_DONE_CODE; + end + end + 16'h00A4: begin + // Savestate: Load/Query + host_40 <= savestate_supported; + host_44 <= savestate_addr; + host_48 <= savestate_maxloadsize; + + host_resultcode <= 0; + if(savestate_load_busy) host_resultcode <= 1; + if(savestate_load_ok) host_resultcode <= 2; + if(savestate_load_err) host_resultcode <= 3; + + if(host_20[0]) begin + // Request Load! + savestate_load <= 1; + // stay in this state until ack'd + if(savestate_load_ack) begin + hstate <= ST_DONE_CODE; + end + end else begin + hstate <= ST_DONE_CODE; + end + end + 16'h00B0: begin + // OS Notify: Menu State + osnotify_inmenu <= host_20[0]; + hstate <= ST_DONE_OK; + end + default: begin + hstate <= ST_DONE_ERR; + end + endcase + end + ST_WORK: begin + hstate <= ST_IDLE; + end + ST_DONE_OK: begin + host_0 <= 32'h4F4B0000; // result code 0 + hstate <= ST_IDLE; + end + ST_DONE_CODE: begin + host_0 <= {16'h4F4B, host_resultcode}; + hstate <= ST_IDLE; + end + ST_DONE_ERR: begin + host_0 <= 32'h4F4BFFFF; // result code FFFF = unknown command + hstate <= ST_IDLE; + end + endcase + + + + + // target > host command executer + case(tstate) + TARG_ST_IDLE: begin + if(status_setup_done_queue) begin + status_setup_done_queue <= 0; + tstate <= TARG_ST_READYTORUN; + end + + end + TARG_ST_READYTORUN: begin + target_0 <= 32'h636D_0140; + tstate <= TARG_ST_WAITRESULT; + end + TARG_ST_WAITRESULT: begin + if(target_0[31:16] == 16'h6F6B) begin + // done + tstate <= TARG_ST_IDLE; + end + + end + endcase + + +end + + wire [31:0] b_datatable_q; + reg [9:0] b_datatable_addr; + reg b_datatable_wren; + +mf_datatable idt ( + .address_a ( datatable_addr ), + .address_b ( b_datatable_addr ), + .clock_a ( clk ), + .clock_b ( clk ), + .data_a ( datatable_data ), + .data_b ( bridge_wr_data_in ), + .wren_a ( datatable_wren ), + .wren_b ( b_datatable_wren ), + .q_a ( datatable_q ), + .q_b ( b_datatable_q ) +); + + +endmodule diff --git a/src/fpga/core/core_constraints.sdc b/src/fpga/core/core_constraints.sdc new file mode 100644 index 0000000..733dd5c --- /dev/null +++ b/src/fpga/core/core_constraints.sdc @@ -0,0 +1,15 @@ +# +# user core constraints +# +# put your clock groups in here as well as any net assignments +# + +set_clock_groups -asynchronous \ + -group { bridge_spiclk } \ + -group { clk_74a } \ + -group { clk_74b } \ + -group { ic|mp1|mf_pllbase_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk } \ + -group { ic|mp1|mf_pllbase_inst|altera_pll_i|general[1].gpll~PLL_OUTPUT_COUNTER|divclk } \ + -group { ic|mp1|mf_pllbase_inst|altera_pll_i|general[2].gpll~PLL_OUTPUT_COUNTER|divclk } \ + -group { ic|mp1|mf_pllbase_inst|altera_pll_i|general[3].gpll~PLL_OUTPUT_COUNTER|divclk } \ + -group { ic|mp1|mf_pllbase_inst|altera_pll_i|general[4].gpll~PLL_OUTPUT_COUNTER|divclk } \ No newline at end of file diff --git a/src/fpga/core/core_top.v b/src/fpga/core/core_top.v new file mode 100644 index 0000000..6c08d83 --- /dev/null +++ b/src/fpga/core/core_top.v @@ -0,0 +1,673 @@ +// +// User core top-level +// +// Instantiated by the real top-level: apf_top +// + +`default_nettype none + +module core_top ( + +// +// physical connections +// + +/////////////////////////////////////////////////// +// clock inputs 74.25mhz. not phase aligned, so treat these domains as asynchronous + +input wire clk_74a, // mainclk1 +input wire clk_74b, // mainclk1 + +/////////////////////////////////////////////////// +// cartridge interface +// switches between 3.3v and 5v mechanically +// output enable for multibit translators controlled by pic32 + +// GBA AD[15:8] +inout wire [7:0] cart_tran_bank2, +output wire cart_tran_bank2_dir, + +// GBA AD[7:0] +inout wire [7:0] cart_tran_bank3, +output wire cart_tran_bank3_dir, + +// GBA A[23:16] +inout wire [7:0] cart_tran_bank1, +output wire cart_tran_bank1_dir, + +// GBA [7] PHI# +// GBA [6] WR# +// GBA [5] RD# +// GBA [4] CS1#/CS# +// [3:0] unwired +inout wire [7:4] cart_tran_bank0, +output wire cart_tran_bank0_dir, + +// GBA CS2#/RES# +inout wire cart_tran_pin30, +output wire cart_tran_pin30_dir, +// when GBC cart is inserted, this signal when low or weak will pull GBC /RES low with a special circuit +// the goal is that when unconfigured, the FPGA weak pullups won't interfere. +// thus, if GBC cart is inserted, FPGA must drive this high in order to let the level translators +// and general IO drive this pin. +output wire cart_pin30_pwroff_reset, + +// GBA IRQ/DRQ +inout wire cart_tran_pin31, +output wire cart_tran_pin31_dir, + +// infrared +input wire port_ir_rx, +output wire port_ir_tx, +output wire port_ir_rx_disable, + +// GBA link port +inout wire port_tran_si, +output wire port_tran_si_dir, +inout wire port_tran_so, +output wire port_tran_so_dir, +inout wire port_tran_sck, +output wire port_tran_sck_dir, +inout wire port_tran_sd, +output wire port_tran_sd_dir, + +/////////////////////////////////////////////////// +// cellular psram 0 and 1, two chips (64mbit x2 dual die per chip) + +output wire [21:16] cram0_a, +inout wire [15:0] cram0_dq, +input wire cram0_wait, +output wire cram0_clk, +output wire cram0_adv_n, +output wire cram0_cre, +output wire cram0_ce0_n, +output wire cram0_ce1_n, +output wire cram0_oe_n, +output wire cram0_we_n, +output wire cram0_ub_n, +output wire cram0_lb_n, + +output wire [21:16] cram1_a, +inout wire [15:0] cram1_dq, +input wire cram1_wait, +output wire cram1_clk, +output wire cram1_adv_n, +output wire cram1_cre, +output wire cram1_ce0_n, +output wire cram1_ce1_n, +output wire cram1_oe_n, +output wire cram1_we_n, +output wire cram1_ub_n, +output wire cram1_lb_n, + +/////////////////////////////////////////////////// +// sdram, 512mbit 16bit + +output wire [12:0] dram_a, +output wire [1:0] dram_ba, +inout wire [15:0] dram_dq, +output wire [1:0] dram_dqm, +output wire dram_clk, +output wire dram_cke, +output wire dram_ras_n, +output wire dram_cas_n, +output wire dram_we_n, + +/////////////////////////////////////////////////// +// sram, 1mbit 16bit + +output wire [16:0] sram_a, +inout wire [15:0] sram_dq, +output wire sram_oe_n, +output wire sram_we_n, +output wire sram_ub_n, +output wire sram_lb_n, + +/////////////////////////////////////////////////// +// vblank driven by dock for sync in a certain mode + +input wire vblank, + +/////////////////////////////////////////////////// +// i/o to 6515D breakout usb uart + +output wire dbg_tx, +input wire dbg_rx, + +/////////////////////////////////////////////////// +// i/o pads near jtag connector user can solder to + +output wire user1, +input wire user2, + +/////////////////////////////////////////////////// +// RFU internal i2c bus + +inout wire aux_sda, +output wire aux_scl, + +/////////////////////////////////////////////////// +// RFU, do not use +output wire vpll_feed, + + +// +// logical connections +// + +/////////////////////////////////////////////////// +// video, audio output to scaler +output wire [23:0] video_rgb, +output wire video_rgb_clock, +output wire video_rgb_clock_90, +output wire video_de, +output wire video_skip, +output wire video_vs, +output wire video_hs, + +output wire audio_mclk, +input wire audio_adc, +output wire audio_dac, +output wire audio_lrck, + +/////////////////////////////////////////////////// +// bridge bus connection +// synchronous to clk_74a +output wire bridge_endian_little, +input wire [31:0] bridge_addr, +input wire bridge_rd, +output reg [31:0] bridge_rd_data, +input wire bridge_wr, +input wire [31:0] bridge_wr_data, + +/////////////////////////////////////////////////// +// controller data +// +// key bitmap: +// [0] dpad_up +// [1] dpad_down +// [2] dpad_left +// [3] dpad_right +// [4] face_a +// [5] face_b +// [6] face_x +// [7] face_y +// [8] trig_l1 +// [9] trig_r1 +// [10] trig_l2 +// [11] trig_r2 +// [12] trig_l3 +// [13] trig_r3 +// [14] face_select +// [15] face_start +// joy values - unsigned +// [ 7: 0] lstick_x +// [15: 8] lstick_y +// [23:16] rstick_x +// [31:24] rstick_y +// trigger values - unsigned +// [ 7: 0] ltrig +// [15: 8] rtrig +// +input wire [15:0] cont1_key, +input wire [15:0] cont2_key, +input wire [15:0] cont3_key, +input wire [15:0] cont4_key, +input wire [31:0] cont1_joy, +input wire [31:0] cont2_joy, +input wire [31:0] cont3_joy, +input wire [31:0] cont4_joy, +input wire [15:0] cont1_trig, +input wire [15:0] cont2_trig, +input wire [15:0] cont3_trig, +input wire [15:0] cont4_trig + +); + +// not using the IR port, so turn off both the LED, and +// disable the receive circuit to save power +assign port_ir_tx = 0; +assign port_ir_rx_disable = 1; + +// bridge endianness +assign bridge_endian_little = 0; + +// cart is unused, so set all level translators accordingly +// directions are 0:IN, 1:OUT +assign cart_tran_bank3 = 8'hzz; +assign cart_tran_bank3_dir = 1'b0; +assign cart_tran_bank2 = 8'hzz; +assign cart_tran_bank2_dir = 1'b0; +assign cart_tran_bank1 = 8'hzz; +assign cart_tran_bank1_dir = 1'b0; +assign cart_tran_bank0 = 4'hf; +assign cart_tran_bank0_dir = 1'b1; +assign cart_tran_pin30 = 1'b0; // reset or cs2, we let the hw control it by itself +assign cart_tran_pin30_dir = 1'bz; +assign cart_pin30_pwroff_reset = 1'b0; // hardware can control this +assign cart_tran_pin31 = 1'bz; // input +assign cart_tran_pin31_dir = 1'b0; // input + +// link port is input only +assign port_tran_so = 1'bz; +assign port_tran_so_dir = 1'b0; // SO is output only +assign port_tran_si = 1'bz; +assign port_tran_si_dir = 1'b0; // SI is input only +assign port_tran_sck = 1'bz; +assign port_tran_sck_dir = 1'b0; // clock direction can change +assign port_tran_sd = 1'bz; +assign port_tran_sd_dir = 1'b0; // SD is input and not used + +// tie off the rest of the pins we are not using +assign cram0_a = 'h0; +assign cram0_dq = {16{1'bZ}}; +assign cram0_clk = 0; +assign cram0_adv_n = 1; +assign cram0_cre = 0; +assign cram0_ce0_n = 1; +assign cram0_ce1_n = 1; +assign cram0_oe_n = 1; +assign cram0_we_n = 1; +assign cram0_ub_n = 1; +assign cram0_lb_n = 1; + +assign cram1_a = 'h0; +assign cram1_dq = {16{1'bZ}}; +assign cram1_clk = 0; +assign cram1_adv_n = 1; +assign cram1_cre = 0; +assign cram1_ce0_n = 1; +assign cram1_ce1_n = 1; +assign cram1_oe_n = 1; +assign cram1_we_n = 1; +assign cram1_ub_n = 1; +assign cram1_lb_n = 1; + +assign dram_a = 'h0; +assign dram_ba = 'h0; +assign dram_dq = {16{1'bZ}}; +assign dram_dqm = 'h0; +assign dram_clk = 'h0; +assign dram_cke = 'h0; +assign dram_ras_n = 'h1; +assign dram_cas_n = 'h1; +assign dram_we_n = 'h1; + +assign sram_a = 'h0; +assign sram_dq = {16{1'bZ}}; +assign sram_oe_n = 1; +assign sram_we_n = 1; +assign sram_ub_n = 1; +assign sram_lb_n = 1; + +assign dbg_tx = 1'bZ; +assign user1 = 1'bZ; +assign aux_scl = 1'bZ; +assign vpll_feed = 1'bZ; + + +// for bridge write data, we just broadcast it to all bus devices +// for bridge read data, we have to mux it +// add your own devices here +always @(*) begin + casex(bridge_addr) + default: begin + bridge_rd_data <= 0; + end + 32'h10xxxxxx: begin + // example + // bridge_rd_data <= example_device_data; + bridge_rd_data <= 0; + end + 32'hF8xxxxxx: begin + bridge_rd_data <= cmd_bridge_rd_data; + end + endcase +end + + +// +// host/target command handler +// + wire reset_n; // driven by host commands, can be used as core-wide reset + wire [31:0] cmd_bridge_rd_data; + +// bridge host commands +// synchronous to clk_74a + wire status_boot_done = pll_core_locked; + wire status_setup_done = pll_core_locked; // rising edge triggers a target command + wire status_running = reset_n; // we are running as soon as reset_n goes high + + wire dataslot_requestread; + wire [15:0] dataslot_requestread_id; + wire dataslot_requestread_ack = 1; + wire dataslot_requestread_ok = 1; + + wire dataslot_requestwrite; + wire [15:0] dataslot_requestwrite_id; + wire dataslot_requestwrite_ack = 1; + wire dataslot_requestwrite_ok = 1; + + wire dataslot_allcomplete; + + wire savestate_supported; + wire [31:0] savestate_addr; + wire [31:0] savestate_size; + wire [31:0] savestate_maxloadsize; + + wire savestate_start; + wire savestate_start_ack; + wire savestate_start_busy; + wire savestate_start_ok; + wire savestate_start_err; + + wire savestate_load; + wire savestate_load_ack; + wire savestate_load_busy; + wire savestate_load_ok; + wire savestate_load_err; + + wire osnotify_inmenu; + +// bridge target commands +// synchronous to clk_74a + + +// bridge data slot access + + wire [9:0] datatable_addr; + wire datatable_wren; + wire [31:0] datatable_data; + wire [31:0] datatable_q; + +core_bridge_cmd icb ( + + .clk ( clk_74a ), + .reset_n ( reset_n ), + + .bridge_endian_little ( bridge_endian_little ), + .bridge_addr ( bridge_addr ), + .bridge_rd ( bridge_rd ), + .bridge_rd_data ( cmd_bridge_rd_data ), + .bridge_wr ( bridge_wr ), + .bridge_wr_data ( bridge_wr_data ), + + .status_boot_done ( status_boot_done ), + .status_setup_done ( status_setup_done ), + .status_running ( status_running ), + + .dataslot_requestread ( dataslot_requestread ), + .dataslot_requestread_id ( dataslot_requestread_id ), + .dataslot_requestread_ack ( dataslot_requestread_ack ), + .dataslot_requestread_ok ( dataslot_requestread_ok ), + + .dataslot_requestwrite ( dataslot_requestwrite ), + .dataslot_requestwrite_id ( dataslot_requestwrite_id ), + .dataslot_requestwrite_ack ( dataslot_requestwrite_ack ), + .dataslot_requestwrite_ok ( dataslot_requestwrite_ok ), + + .dataslot_allcomplete ( dataslot_allcomplete ), + + .savestate_supported ( savestate_supported ), + .savestate_addr ( savestate_addr ), + .savestate_size ( savestate_size ), + .savestate_maxloadsize ( savestate_maxloadsize ), + + .savestate_start ( savestate_start ), + .savestate_start_ack ( savestate_start_ack ), + .savestate_start_busy ( savestate_start_busy ), + .savestate_start_ok ( savestate_start_ok ), + .savestate_start_err ( savestate_start_err ), + + .savestate_load ( savestate_load ), + .savestate_load_ack ( savestate_load_ack ), + .savestate_load_busy ( savestate_load_busy ), + .savestate_load_ok ( savestate_load_ok ), + .savestate_load_err ( savestate_load_err ), + + .osnotify_inmenu ( osnotify_inmenu ), + + .datatable_addr ( datatable_addr ), + .datatable_wren ( datatable_wren ), + .datatable_data ( datatable_data ), + .datatable_q ( datatable_q ), + +); + + + +//////////////////////////////////////////////////////////////////////////////////////// + + wire clk_6, clk_25_175_90deg, clk_25, clk_50, clk_25_175; + + wire pll_core_locked; + +mf_pllbase mp1 ( + .refclk ( clk_74a ), + .rst ( 0 ), + + .outclk_0 ( clk_6 ), + .outclk_1 ( clk_25_175_90deg ), + .outclk_2 ( clk_50 ), + .outclk_3 ( clk_25 ), + .outclk_4 ( clk_25_175 ), + + .locked ( pll_core_locked ) +); + +/////////////////////////////////////////////// +// Core Audio +/////////////////////////////////////////////// + + + assign audio_mclk = audgen_mclk; + assign audio_dac = audgen_dac; + assign audio_lrck = audgen_lrck; + + reg audgen_nextsamp; + + // generate MCLK = 12.288mhz with fractional accumulator + reg [21:0] audgen_accum; + reg audgen_mclk; + parameter [20:0] CYCLE_48KHZ = 21'd122880 * 2; + always @(posedge clk_74a) + begin + audgen_accum <= audgen_accum + CYCLE_48KHZ; + if(audgen_accum >= 21'd742500) + begin + audgen_mclk <= ~audgen_mclk; + audgen_accum <= audgen_accum - 21'd742500 + CYCLE_48KHZ; + end + end + + // generate SCLK = 3.072mhz by dividing MCLK by 4 + reg [1:0] aud_mclk_divider; + wire audgen_sclk = aud_mclk_divider[1] /* synthesis keep*/; + always @(posedge audgen_mclk) + begin + aud_mclk_divider <= aud_mclk_divider + 1'b1; + end + + // shift out audio data as I2S + // 32 total bits per channel, but only 16 active bits at the start and then 16 dummy bits + // + // synchronize audio samples coming from the core + wire [31:0] audgen_sampdata_s; + synch_3 #(.WIDTH(32)) s5(({audio, audio}), audgen_sampdata_s, audgen_sclk); + reg [31:0] audgen_sampshift; + reg [4:0] audgen_lrck_cnt; + reg audgen_lrck; + reg audgen_dac; + always @(negedge audgen_sclk) + begin + // output the next bit + audgen_dac <= audgen_sampshift[31]; + + // 48khz * 64 + audgen_lrck_cnt <= audgen_lrck_cnt + 1'b1; + if(audgen_lrck_cnt == 31) + begin + // switch channels + audgen_lrck <= ~audgen_lrck; + + // Reload sample shifter + if(~audgen_lrck) + begin + audgen_sampshift <= audgen_sampdata_s; + end + end + else if(audgen_lrck_cnt < 16) + begin + // only shift for 16 clocks per channel + audgen_sampshift <= {audgen_sampshift[30:0], 1'b0}; + end + end + +/////////////////////////////////////////////// +// Core Video +/////////////////////////////////////////////// + + assign video_rgb_clock = clk_25_175; + assign video_rgb_clock_90 = clk_25_175_90deg; + + reg video_de_reg; + reg video_hs_reg; + reg video_vs_reg; + reg [23:0] video_rgb_reg; + reg video_skip_reg; + + assign video_de = video_de_reg; + assign video_hs = video_hs_reg; + assign video_vs = video_vs_reg; + assign video_rgb = video_rgb_reg; + assign video_skip = video_skip_reg; + + reg hs_prev; + reg vs_prev; + reg de_prev; + + always @(posedge clk_25_175) + begin + video_de_reg <= 0; + video_rgb_reg <= 24'h0; + + if (~(vblank_asteroids || hblank)) begin + video_de_reg <= 1; + + video_rgb_reg[23:16] <= {2{r2}}; + video_rgb_reg[15:8] <= {2{g2}}; + video_rgb_reg[7:0] <= {2{b2}}; + end + + video_hs_reg <= ~hs_prev && hs; + video_vs_reg <= ~vs_prev && vs; + hs_prev <= hs; + vs_prev <= vs; + end + +/////////////////////////////////////////////// +// Core Instance +/////////////////////////////////////////////// + +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; + +data_loader_8 #( + .ADDRESS_MASK_UPPER_4(0), + .WRITE_MEM_CLOCK_DELAY(1), + .WRITE_MEM_EN_CYCLE_LENGTH(1) +) rom_loader ( + .clk_74a(clk_74a), + .clk_memory(clk_25), + + .reset_n(status_setup_done), + + .bridge_wr(bridge_wr), + .bridge_endian_little(bridge_endian_little), + .bridge_addr(bridge_addr), + .bridge_wr_data(bridge_wr_data), + + .write_en(ioctl_wr), + .write_addr(ioctl_addr), + .write_data(ioctl_dout) +); + +// NOTE: this stuff might be really senstive to change... there are timing issues. +reg cont_key_0_reg = 1; +reg cont_key_1_reg = 1; +reg cont_key_2_reg = 1; +reg cont_key_3_reg = 1; +reg cont_key_4_reg = 1; +reg cont_key_5_reg = 1; +reg cont_key_6_reg = 1; +reg cont_key_7_reg = 1; + +always @(posedge clk_74a) begin + cont_key_0_reg <= ~(cont1_key[3] | cont2_key[3]); + cont_key_1_reg <= ~(cont1_key[2] | cont2_key[2]); + cont_key_2_reg <= ~cont1_key[15]; + cont_key_3_reg <= ~cont2_key[15]; + cont_key_4_reg <= ~(cont1_key[4] | cont2_key[4]); + cont_key_5_reg <= ~(cont1_key[7] | cont2_key[7]); + cont_key_6_reg <= ~(cont1_key[6] | cont2_key[6]); + cont_key_7_reg <= ~(cont1_key[5] | cont2_key[5]); +end + +wire [7:0] BUTTON = { + cont_key_0_reg, // right + cont_key_1_reg, // left + cont_key_2_reg, // P1 Start + cont_key_3_reg, // P2 Start + cont_key_4_reg, // fire + cont_key_5_reg, // ??? + cont_key_6_reg, // thrust + cont_key_7_reg // hyperspace +}; + +wire hblank, vblank_asteroids; +wire hs, vs; +wire [3:0] r,g,b; + +reg [3:0] r2; +reg [3:0] g2; +reg [3:0] b2; + +always @(posedge clk_50) begin + r2 <= r; + g2 <= g; + b2 <= b; +end + +wire [7:0] audio; + +wire [1:0] lang = 1'b0; +wire ships = 1'b1; + +wire vgade; + +ASTEROIDS_TOP ASTEROIDS_TOP +( + .BUTTON(BUTTON), + .SELF_TEST_SWITCH_L(1'b1), + .LANG(lang), + .SHIPS(ships), + .AUDIO_OUT(audio), + .dn_addr(ioctl_addr[15:0]), + .dn_data(ioctl_dout), + .dn_wr(ioctl_wr), + .VIDEO_R_OUT(r), + .VIDEO_G_OUT(g), + .VIDEO_B_OUT(b), + .HSYNC_OUT(hs), + .VSYNC_OUT(vs), + .VGA_DE(vgade), + .VID_HBLANK(hblank), + .VID_VBLANK(vblank_asteroids), + + .RESET_L (reset_n), + .clk_6(clk_6), + .clk_25(clk_25) +); + +endmodule diff --git a/src/fpga/core/data_loader_8.v b/src/fpga/core/data_loader_8.v new file mode 100644 index 0000000..d877d4a --- /dev/null +++ b/src/fpga/core/data_loader_8.v @@ -0,0 +1,174 @@ +// MIT License + +// Copyright (c) 2022 Adam Gastineau + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +//////////////////////////////////////////////////////////////////////////////// + +// A data loader for consuming APF bridge writes and directing them to some storage medium +// +// This takes the 32 bit words from APF, and splits it into four bytes. You can configure the cycle delay +// by setting WRITE_MEM_CLOCK_DELAY +module data_loader_8 #( + // Upper 4 bits of address + parameter ADDRESS_MASK_UPPER_4 = 0, + parameter ADDRESS_SIZE = 14, + + // Number of clk_memory cycles to delay each write output. + // Be aware that APF sends data every ~75 74MHz cycles, so you cannot send data slower than this + parameter WRITE_MEM_CLOCK_DELAY = 10, + + // Number of clk_memory cycles to hold the write_en signal high + parameter WRITE_MEM_EN_CYCLE_LENGTH = 1 +) ( + input wire clk_74a, + input wire clk_memory, + + // DO NOT USE THE CORE RESET SIGNAL + // That signal only goes high after data finishes loading, but you are using this to load data + input wire reset_n, + + input wire bridge_wr, + input wire bridge_endian_little, + input wire [31:0] bridge_addr, + input wire [31:0] bridge_wr_data, + + // These outputs are synced to the memory clock + output reg write_en, + output reg [ADDRESS_SIZE:0] write_addr, + output reg [7:0] write_data +); + + reg start_memory_write; + reg [1:0] start_memory_write_count; + reg [ADDRESS_SIZE:0] buffered_addr; + reg [31:0] buffered_data; + + wire start_memory_write_s; + wire [ADDRESS_SIZE:0] buffered_addr_s; + wire [31:0] buffered_data_s; + + synch_3 start_write_s ( + start_memory_write, + start_memory_write_s, + clk_memory + ); + + synch_3 #( + .WIDTH(ADDRESS_SIZE + 1) + ) addr_s ( + buffered_addr, + buffered_addr_s, + clk_memory + ); + + synch_3 #( + .WIDTH(32) + ) data_s ( + buffered_data, + buffered_data_s, + clk_memory + ); + + // Receive APF writes and buffer them into the memory clock domain + always @(posedge clk_74a) begin + if (~reset_n) begin + start_memory_write <= 0; + end else if (bridge_wr && bridge_addr[31:28] == ADDRESS_MASK_UPPER_4) begin + // Set up buffered writes + start_memory_write <= 1; + start_memory_write_count <= 3; + + buffered_addr <= bridge_addr[ADDRESS_SIZE:0]; + + if (bridge_endian_little) begin + buffered_data <= bridge_wr_data; + end else begin + buffered_data <= { + bridge_wr_data[7:0], bridge_wr_data[15:8], bridge_wr_data[23:16], bridge_wr_data[31:24] + }; + end + end else begin + start_memory_write_count <= start_memory_write_count - 1; + + if (start_memory_write_count == 0) begin + start_memory_write <= 0; + end + end + end + + reg prev_has_data; + reg needs_write_data; + reg [1:0] write_byte; + reg [7:0] write_delay_count; + reg [31:0] data_shift_buffer; + + // Consume buffered and synced data, sending out to memory + always @(posedge clk_memory) begin + if (~reset_n) begin + prev_has_data <= 0; + needs_write_data <= 0; + write_byte <= 0; + write_delay_count <= 0; + + write_addr <= 0; + write_data <= 0; + write_en <= 0; + end else begin + prev_has_data <= start_memory_write_s; + + if (~prev_has_data && start_memory_write_s) begin + // Newly received buffer data + needs_write_data <= 1; + write_byte <= 0; + write_delay_count <= 0; + // ack_memory_write <= 1; + + data_shift_buffer <= buffered_data_s; + end + + if (write_delay_count != 0) begin + write_delay_count <= write_delay_count - 1; + end + + if (write_delay_count <= WRITE_MEM_CLOCK_DELAY - WRITE_MEM_EN_CYCLE_LENGTH) begin + // Leave write_en on for WRITE_MEM_EN_CYCLE_LENGTH + write_en <= 0; + end + + if (needs_write_data && write_delay_count == 0) begin + write_delay_count <= WRITE_MEM_CLOCK_DELAY - 1; + write_en <= 1; + + if (write_byte == 3) begin + needs_write_data <= 0; + end + + write_addr <= buffered_addr_s + write_byte; + + write_data <= data_shift_buffer[7:0]; + + write_byte <= write_byte + 1; + data_shift_buffer <= data_shift_buffer[31:8]; + end + end + end + +endmodule \ No newline at end of file diff --git a/src/fpga/core/mf_pllbase.bsf b/src/fpga/core/mf_pllbase.bsf new file mode 100644 index 0000000..101956a --- /dev/null +++ b/src/fpga/core/mf_pllbase.bsf @@ -0,0 +1,126 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 2022 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and any partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details, at +https://fpgasoftware.intel.com/eula. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 304) + (text "mf_pllbase" (rect 48 -1 91 11)(font "Arial" (font_size 10))) + (text "inst" (rect 8 288 20 300)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "refclk" (rect 0 0 22 12)(font "Arial" (font_size 8))) + (text "refclk" (rect 4 61 40 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 0 112) + (input) + (text "rst" (rect 0 0 10 12)(font "Arial" (font_size 8))) + (text "rst" (rect 4 101 22 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 48 112)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "outclk_0" (rect 0 0 33 12)(font "Arial" (font_size 8))) + (text "outclk_0" (rect 117 61 165 72)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 112 72)(line_width 1)) + ) + (port + (pt 160 112) + (output) + (text "outclk_1" (rect 0 0 31 12)(font "Arial" (font_size 8))) + (text "outclk_1" (rect 119 101 167 112)(font "Arial" (font_size 8))) + (line (pt 160 112)(pt 112 112)(line_width 1)) + ) + (port + (pt 160 152) + (output) + (text "outclk_2" (rect 0 0 33 12)(font "Arial" (font_size 8))) + (text "outclk_2" (rect 117 141 165 152)(font "Arial" (font_size 8))) + (line (pt 160 152)(pt 112 152)(line_width 1)) + ) + (port + (pt 160 192) + (output) + (text "outclk_3" (rect 0 0 33 12)(font "Arial" (font_size 8))) + (text "outclk_3" (rect 117 181 165 192)(font "Arial" (font_size 8))) + (line (pt 160 192)(pt 112 192)(line_width 1)) + ) + (port + (pt 160 232) + (output) + (text "outclk_4" (rect 0 0 34 12)(font "Arial" (font_size 8))) + (text "outclk_4" (rect 117 221 165 232)(font "Arial" (font_size 8))) + (line (pt 160 232)(pt 112 232)(line_width 1)) + ) + (port + (pt 160 272) + (output) + (text "locked" (rect 0 0 24 12)(font "Arial" (font_size 8))) + (text "locked" (rect 127 261 163 272)(font "Arial" (font_size 8))) + (line (pt 160 272)(pt 112 272)(line_width 1)) + ) + (drawing + (text "refclk" (rect 16 43 68 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 53 67 124 144)(font "Arial" (color 0 0 0))) + (text "reset" (rect 19 83 68 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "reset" (rect 53 107 136 224)(font "Arial" (color 0 0 0))) + (text "outclk0" (rect 113 43 268 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 67 212 144)(font "Arial" (color 0 0 0))) + (text "outclk1" (rect 113 83 268 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 107 212 224)(font "Arial" (color 0 0 0))) + (text "outclk2" (rect 113 123 268 259)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 147 212 304)(font "Arial" (color 0 0 0))) + (text "outclk3" (rect 113 163 268 339)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 187 212 384)(font "Arial" (color 0 0 0))) + (text "outclk4" (rect 113 203 268 419)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 227 212 464)(font "Arial" (color 0 0 0))) + (text "locked" (rect 113 243 262 499)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 82 267 200 544)(font "Arial" (color 0 0 0))) + (text " altera_pll " (rect 118 288 308 586)(font "Arial" )) + (line (pt 48 32)(pt 112 32)(line_width 1)) + (line (pt 112 32)(pt 112 288)(line_width 1)) + (line (pt 48 288)(pt 112 288)(line_width 1)) + (line (pt 48 32)(pt 48 288)(line_width 1)) + (line (pt 49 52)(pt 49 76)(line_width 1)) + (line (pt 50 52)(pt 50 76)(line_width 1)) + (line (pt 49 92)(pt 49 116)(line_width 1)) + (line (pt 50 92)(pt 50 116)(line_width 1)) + (line (pt 111 52)(pt 111 76)(line_width 1)) + (line (pt 110 52)(pt 110 76)(line_width 1)) + (line (pt 111 92)(pt 111 116)(line_width 1)) + (line (pt 110 92)(pt 110 116)(line_width 1)) + (line (pt 111 132)(pt 111 156)(line_width 1)) + (line (pt 110 132)(pt 110 156)(line_width 1)) + (line (pt 111 172)(pt 111 196)(line_width 1)) + (line (pt 110 172)(pt 110 196)(line_width 1)) + (line (pt 111 212)(pt 111 236)(line_width 1)) + (line (pt 110 212)(pt 110 236)(line_width 1)) + (line (pt 111 252)(pt 111 276)(line_width 1)) + (line (pt 110 252)(pt 110 276)(line_width 1)) + (line (pt 0 0)(pt 160 0)(line_width 1)) + (line (pt 160 0)(pt 160 304)(line_width 1)) + (line (pt 0 304)(pt 160 304)(line_width 1)) + (line (pt 0 0)(pt 0 304)(line_width 1)) + ) +) diff --git a/src/fpga/core/mf_pllbase.ppf b/src/fpga/core/mf_pllbase.ppf new file mode 100644 index 0000000..8e1d7c2 --- /dev/null +++ b/src/fpga/core/mf_pllbase.ppf @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/src/fpga/core/mf_pllbase.qip b/src/fpga/core/mf_pllbase.qip new file mode 100644 index 0000000..5c016ed --- /dev/null +++ b/src/fpga/core/mf_pllbase.qip @@ -0,0 +1,337 @@ +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_TOOL_VERSION "21.1" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "mf_pllbase" -name MISC_FILE [file join $::quartus(qip_path) "mf_pllbase.cmp"] +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_NAME "bWZfcGxsYmFzZQ==" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_DISPLAY_NAME "UExMIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_VERSION "MjEuMQ==" +set_global_assignment -entity "mf_pllbase" -library "mf_pllbase" -name IP_COMPONENT_DESCRIPTION "SW50ZWwgUGhhc2UtTG9ja2VkIExvb3A=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_NAME "bWZfcGxsYmFzZV8wMDAy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_DISPLAY_NAME "UExMIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_VERSION "MjEuMQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_DESCRIPTION "SW50ZWwgUGhhc2UtTG9ja2VkIExvb3A=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZGVidWdfcHJpbnRfb3V0cHV0::ZmFsc2U=::ZGVidWdfcHJpbnRfb3V0cHV0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k::ZmFsc2U=::ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZGV2aWNl::NUNFQkEyRjE3QTc=::ZGV2aWNl" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9tb2Rl::RnJhY3Rpb25hbC1OIFBMTA==::UExMIE1vZGU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==::dHJ1ZQ==::ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmVyZW5jZV9jbG9ja19mcmVxdWVuY3k=::NzQuMjU=::UmVmZXJlbmNlIENsb2NrIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==::NzQuMjUgTUh6::cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2NoYW5uZWxfc3BhY2luZw==::MC4w::Q2hhbm5lbCBTcGFjaW5n" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX29wZXJhdGlvbl9tb2Rl::bm9ybWFs::T3BlcmF0aW9uIE1vZGU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2ZlZWRiYWNrX2Nsb2Nr::R2xvYmFsIENsb2Nr::RmVlZGJhY2sgQ2xvY2s=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWN0aW9uYWxfY291dA==::MzI=::RnJhY3Rpb25hbCBjYXJyeSBvdXQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::RFNNIE9yZGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::bm9ybWFs::b3BlcmF0aW9uX21vZGU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::dHJ1ZQ==::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::NQ==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::NQ==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::Ni4w::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::MTU=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MjU1OTYxODcwMw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::MTkz::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzA=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDA=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUw::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kx::MjUuMTc1::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Ix::MTU=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE=::MjU1OTYxODcwMw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMQ==::NDY=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MQ==::Mjc2Ljc0MDY0MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMQ==::ZGVncmVlcw==::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MQ==::MjAzNDU=::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE=::OTAuMA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUx::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjI=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3ky::NTAuMA==::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzI=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iy::MTU=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjI=::MjU1OTYxODcwMw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMg==::MjM=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mg==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mg==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzI=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDI=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUy::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjM=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kz::MjUuMA==::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzM=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iz::MTU=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjM=::MjU1OTYxODcwMw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMw==::NDY=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzM=::LTQ1LjA=::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDM=::MjI1LjAgZGVn::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUz::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjQ=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k0::MjUuMTc1::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzQ=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I0::MTU=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjQ=::MjU1OTYxODcwMw==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNA==::NDY=::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzQ=::MjcwLjA=::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDQ=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU0::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjU=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k1::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzU=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I1::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjU=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzU=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDU=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU1::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjY=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k2::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzY=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I2::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjY=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Ng==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Ng==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzY=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDY=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU2::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjc=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k3::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzc=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I3::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjc=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Nw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Nw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzc=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDc=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU3::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjg=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k4::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzg=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I4::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjg=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzg=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDg=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU4::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjk=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k5::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzk=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I5::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjk=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzk=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDk=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU5::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEw::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEw::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEw::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTA=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTA=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTA=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTA=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEw::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEw::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEx::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEx::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEx::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTE=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTE=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTE=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTE=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEx::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEx::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEy::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEy::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEy::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTI=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTI=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTI=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTI=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEy::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEy::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEz::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEz::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEz::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTM=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTM=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTM=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTM=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEz::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEz::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE0::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE0::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE0::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTQ=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTQ=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTQ=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTQ=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE0::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE0::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE1::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE1::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE1::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTU=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTU=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTU=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTU=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE1::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE1::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE2::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE2::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE2::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTY=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTY=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTY=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTY=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE2::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE2::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE3::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE3::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE3::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTc=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTc=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTc=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTc=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::NS45OTk5OTkgTUh6::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::MjUuMTczOTExIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::OTkzMSBwcw==::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::NTAuMzQ3ODIyIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTI=::NTA=::ZHV0eV9jeWNsZTI=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=::MjUuMTczOTEwIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQz::MCBwcw==::cGhhc2Vfc2hpZnQz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTM=::NTA=::ZHV0eV9jeWNsZTM=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=::MjUuMTczOTEwIE1Ieg==::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ0::MCBwcw==::cGhhc2Vfc2hpZnQ0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTQ=::NTA=::ZHV0eV9jeWNsZTQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ1::MCBwcw==::cGhhc2Vfc2hpZnQ1" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTU=::NTA=::ZHV0eV9jeWNsZTU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ2::MCBwcw==::cGhhc2Vfc2hpZnQ2" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTY=::NTA=::ZHV0eV9jeWNsZTY=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ3::MCBwcw==::cGhhc2Vfc2hpZnQ3" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTc=::NTA=::ZHV0eV9jeWNsZTc=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ4::MCBwcw==::cGhhc2Vfc2hpZnQ4" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTg=::NTA=::ZHV0eV9jeWNsZTg=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ5::MCBwcw==::cGhhc2Vfc2hpZnQ5" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTk=::NTA=::ZHV0eV9jeWNsZTk=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMA==::MCBwcw==::cGhhc2Vfc2hpZnQxMA==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEw::NTA=::ZHV0eV9jeWNsZTEw" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMQ==::MCBwcw==::cGhhc2Vfc2hpZnQxMQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEx::NTA=::ZHV0eV9jeWNsZTEx" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMg==::MCBwcw==::cGhhc2Vfc2hpZnQxMg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEy::NTA=::ZHV0eV9jeWNsZTEy" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMw==::MCBwcw==::cGhhc2Vfc2hpZnQxMw==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEz::NTA=::ZHV0eV9jeWNsZTEz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNA==::MCBwcw==::cGhhc2Vfc2hpZnQxNA==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE0::NTA=::ZHV0eV9jeWNsZTE0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNQ==::MCBwcw==::cGhhc2Vfc2hpZnQxNQ==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE1::NTA=::ZHV0eV9jeWNsZTE1" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNg==::MCBwcw==::cGhhc2Vfc2hpZnQxNg==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE2::NTA=::ZHV0eV9jeWNsZTE2" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNw==::MCBwcw==::cGhhc2Vfc2hpZnQxNw==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE3::NTA=::ZHV0eV9jeWNsZTE3" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9hdXRvX3Jlc2V0::T2Zm::UExMIEF1dG8gUmVzZXQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9iYW5kd2lkdGhfcHJlc2V0::QXV0bw==::UExMIEJhbmR3aWR0aCBQcmVzZXQ=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3JlY29uZg==::ZmFsc2U=::RW5hYmxlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIFBMTA==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Rwc19wb3J0cw==::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBkeW5hbWljIHBoYXNlIHNoaWZ0IHBvcnRz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTEgSGkgRGl2aWRlLEMtQ291bnRlci0xIExvdyBEaXZpZGUsQy1Db3VudGVyLTEgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0xIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTEgSW5wdXQgU291cmNlLEMtQ291bnRlci0xIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTEgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTIgSGkgRGl2aWRlLEMtQ291bnRlci0yIExvdyBEaXZpZGUsQy1Db3VudGVyLTIgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0yIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTIgSW5wdXQgU291cmNlLEMtQ291bnRlci0yIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTMgSGkgRGl2aWRlLEMtQ291bnRlci0zIExvdyBEaXZpZGUsQy1Db3VudGVyLTMgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0zIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTMgSW5wdXQgU291cmNlLEMtQ291bnRlci0zIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTMgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTQgSGkgRGl2aWRlLEMtQ291bnRlci00IExvdyBEaXZpZGUsQy1Db3VudGVyLTQgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci00IFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTQgSW5wdXQgU291cmNlLEMtQ291bnRlci00IEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTQgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::OCw3LDI1NiwyNTYsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLDk3LDk2LDEsMCxwaF9tdXhfY2xrLGZhbHNlLHRydWUsMjMsMjMsMTIsNCxwaF9tdXhfY2xrLGZhbHNlLGZhbHNlLDEyLDExLDEsMCxwaF9tdXhfY2xrLGZhbHNlLHRydWUsMjMsMjMsMSwwLHBoX211eF9jbGssZmFsc2UsZmFsc2UsMjMsMjMsMSwwLHBoX211eF9jbGssZmFsc2UsZmFsc2UsMSwyMCw0MDAwLDExNTcuOTk5ODU3IE1IeiwyNTU5NjE4NzAzLGdjbGssZ2xiLGZiXzEscGhfbXV4X2NsayxmYWxzZQ==::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19udW0=::MQ==::TnVtYmVyIG9mIER5bmFtaWMgUGhhc2UgU2hpZnRz" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19kaXI=::UG9zaXRpdmU=::RHluYW1pYyBQaGFzZSBTaGlmdCBEaXJlY3Rpb24=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmNsa19zd2l0Y2g=::ZmFsc2U=::Q3JlYXRlIGEgc2Vjb25kIGlucHV0IGNsayAncmVmY2xrMSc=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX291dA==::ZmFsc2U=::Q3JlYXRlIGEgJ2Nhc2NhZGVfb3V0JyBzaWduYWwgdG8gY29ubmVjdCB3aXRoIGEgZG93bnN0cmVhbSBQTEw=" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX2lu::ZmFsc2U=::Q3JlYXRlIGFuIGFkanBsbGluIG9yIGNjbGsgc2lnbmFsIHRvIGNvbm5lY3Qgd2l0aCBhbiB1cHN0cmVhbSBQTEw=" + +set_global_assignment -library "mf_pllbase" -name VERILOG_FILE [file join $::quartus(qip_path) "mf_pllbase.v"] +set_global_assignment -library "mf_pllbase" -name VERILOG_FILE [file join $::quartus(qip_path) "mf_pllbase/mf_pllbase_0002.v"] +set_global_assignment -library "mf_pllbase" -name QIP_FILE [file join $::quartus(qip_path) "mf_pllbase/mf_pllbase_0002.qip"] + +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_TOOL_VERSION "21.1" +set_global_assignment -entity "mf_pllbase_0002" -library "mf_pllbase" -name IP_TOOL_ENV "mwpim" diff --git a/src/fpga/core/mf_pllbase.sip b/src/fpga/core/mf_pllbase.sip new file mode 100644 index 0000000..dfd33b0 --- /dev/null +++ b/src/fpga/core/mf_pllbase.sip @@ -0,0 +1,6 @@ +set_global_assignment -entity "mf_pllbase" -library "lib_mf_pllbase" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "mf_pllbase" -library "lib_mf_pllbase" -name IP_TOOL_VERSION "21.1" +set_global_assignment -entity "mf_pllbase" -library "lib_mf_pllbase" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "lib_mf_pllbase" -name SPD_FILE [file join $::quartus(sip_path) "mf_pllbase.spd"] + +set_global_assignment -library "lib_mf_pllbase" -name MISC_FILE [file join $::quartus(sip_path) "mf_pllbase_sim/mf_pllbase.vo"] diff --git a/src/fpga/core/mf_pllbase.spd b/src/fpga/core/mf_pllbase.spd new file mode 100644 index 0000000..025504e --- /dev/null +++ b/src/fpga/core/mf_pllbase.spd @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/fpga/core/mf_pllbase.v b/src/fpga/core/mf_pllbase.v new file mode 100644 index 0000000..8e9ffce --- /dev/null +++ b/src/fpga/core/mf_pllbase.v @@ -0,0 +1,261 @@ +// megafunction wizard: %PLL Intel FPGA IP v21.1% +// GENERATION: XML +// mf_pllbase.v + +// Generated using ACDS version 21.1 850 + +`timescale 1 ps / 1 ps +module mf_pllbase ( + input wire refclk, // refclk.clk + input wire rst, // reset.reset + output wire outclk_0, // outclk0.clk + output wire outclk_1, // outclk1.clk + output wire outclk_2, // outclk2.clk + output wire outclk_3, // outclk3.clk + output wire outclk_4, // outclk4.clk + output wire locked // locked.export + ); + + mf_pllbase_0002 mf_pllbase_inst ( + .refclk (refclk), // refclk.clk + .rst (rst), // reset.reset + .outclk_0 (outclk_0), // outclk0.clk + .outclk_1 (outclk_1), // outclk1.clk + .outclk_2 (outclk_2), // outclk2.clk + .outclk_3 (outclk_3), // outclk3.clk + .outclk_4 (outclk_4), // outclk4.clk + .locked (locked) // locked.export + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : mf_pllbase.vo +// RELATED_FILES: mf_pllbase.v, mf_pllbase_0002.v diff --git a/src/fpga/core/mf_pllbase/mf_pllbase_0002.qip b/src/fpga/core/mf_pllbase/mf_pllbase_0002.qip new file mode 100644 index 0000000..5578caa --- /dev/null +++ b/src/fpga/core/mf_pllbase/mf_pllbase_0002.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE NORMAL -to "*mf_pllbase_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_CHANNEL_SPACING "0.0 KHz" -to "*mf_pllbase_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_AUTO_RESET OFF -to "*mf_pllbase_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*mf_pllbase_0002*|altera_pll:altera_pll_i*|*" diff --git a/src/fpga/core/mf_pllbase/mf_pllbase_0002.v b/src/fpga/core/mf_pllbase/mf_pllbase_0002.v new file mode 100644 index 0000000..deea40f --- /dev/null +++ b/src/fpga/core/mf_pllbase/mf_pllbase_0002.v @@ -0,0 +1,99 @@ +`timescale 1ns/10ps +module mf_pllbase_0002( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'outclk1' + output wire outclk_1, + + // interface 'outclk2' + output wire outclk_2, + + // interface 'outclk3' + output wire outclk_3, + + // interface 'outclk4' + output wire outclk_4, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("true"), + .reference_clock_frequency("74.25 MHz"), + .operation_mode("normal"), + .number_of_clocks(5), + .output_clock_frequency0("5.999999 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("25.173911 MHz"), + .phase_shift1("9931 ps"), + .duty_cycle1(50), + .output_clock_frequency2("50.347822 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("25.173910 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("25.173910 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_4, outclk_3, outclk_2, outclk_1, outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/src/fpga/core/mf_pllbase_sim.f b/src/fpga/core/mf_pllbase_sim.f new file mode 100644 index 0000000..a4f4055 --- /dev/null +++ b/src/fpga/core/mf_pllbase_sim.f @@ -0,0 +1 @@ +mf_pllbase_sim/mf_pllbase.vo diff --git a/src/fpga/core/mf_pllbase_sim/aldec/rivierapro_setup.tcl b/src/fpga/core/mf_pllbase_sim/aldec/rivierapro_setup.tcl new file mode 100644 index 0000000..3388317 --- /dev/null +++ b/src/fpga/core/mf_pllbase_sim/aldec/rivierapro_setup.tcl @@ -0,0 +1,278 @@ + +# (C) 2001-2022 Altera Corporation. All rights reserved. +# Your use of Altera Corporation's design tools, logic functions and +# other software and tools, and its AMPP partner logic functions, and +# any output files any of the foregoing (including device programming +# or simulation files), and any associated documentation or information +# are expressly subject to the terms and conditions of the Altera +# Program License Subscription Agreement, Altera MegaCore Function +# License Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by Altera +# or its authorized distributors. Please refer to the applicable +# agreement for further details. + +# ACDS 21.1 850 win32 2022.09.11.12:56:01 +# ---------------------------------------- +# Auto-generated simulation script rivierapro_setup.tcl +# ---------------------------------------- +# This script provides commands to simulate the following IP detected in +# your Quartus project: +# mf_pllbase +# +# Altera recommends that you source this Quartus-generated IP simulation +# script from your own customized top-level script, and avoid editing this +# generated script. +# +# To write a top-level script that compiles Altera simulation libraries and +# the Quartus-generated IP in your project, along with your design and +# testbench files, copy the text from the TOP-LEVEL TEMPLATE section below +# into a new file, e.g. named "aldec.do", and modify the text as directed. +# +# ---------------------------------------- +# # TOP-LEVEL TEMPLATE - BEGIN +# # +# # QSYS_SIMDIR is used in the Quartus-generated IP simulation script to +# # construct paths to the files required to simulate the IP in your Quartus +# # project. By default, the IP script assumes that you are launching the +# # simulator from the IP script location. If launching from another +# # location, set QSYS_SIMDIR to the output directory you specified when you +# # generated the IP script, relative to the directory from which you launch +# # the simulator. +# # +# set QSYS_SIMDIR