From 1c55b4203842e7b0c483b95cf954ef990023ad07 Mon Sep 17 00:00:00 2001 From: Erik Strand <erik.strand@cba.mit.edu> Date: Wed, 29 Sep 2021 23:30:08 -0400 Subject: [PATCH] Add iCE40 FPGA --- GPIO/iCE40/.gitignore | 6 ++++ GPIO/iCE40/Makefile | 29 +++++++++++++++ GPIO/iCE40/README.md | 41 ++++++++++++++++++++++ GPIO/iCE40/icebreaker.pcf | 54 ++++++++++++++++++++++++++++ GPIO/iCE40/img/ring_12mhz.png | Bin 0 -> 5643 bytes GPIO/iCE40/img/ring_55mhz.png | Bin 0 -> 5457 bytes GPIO/iCE40/img/ring_60mhz.png | Bin 0 -> 5578 bytes GPIO/iCE40/img/ring_64mhz.png | Bin 0 -> 5256 bytes GPIO/iCE40/ring.v | 64 ++++++++++++++++++++++++++++++++++ index.html | 7 ++++ 10 files changed, 201 insertions(+) create mode 100644 GPIO/iCE40/.gitignore create mode 100644 GPIO/iCE40/Makefile create mode 100644 GPIO/iCE40/README.md create mode 100644 GPIO/iCE40/icebreaker.pcf create mode 100644 GPIO/iCE40/img/ring_12mhz.png create mode 100644 GPIO/iCE40/img/ring_55mhz.png create mode 100644 GPIO/iCE40/img/ring_60mhz.png create mode 100644 GPIO/iCE40/img/ring_64mhz.png create mode 100644 GPIO/iCE40/ring.v diff --git a/GPIO/iCE40/.gitignore b/GPIO/iCE40/.gitignore new file mode 100644 index 0000000..9bc6787 --- /dev/null +++ b/GPIO/iCE40/.gitignore @@ -0,0 +1,6 @@ +/*.asc +/*.bin +/*.json +/*.rpt +/*.nplog +/*.yslog diff --git a/GPIO/iCE40/Makefile b/GPIO/iCE40/Makefile new file mode 100644 index 0000000..44aaad5 --- /dev/null +++ b/GPIO/iCE40/Makefile @@ -0,0 +1,29 @@ +PROJ = ring + +all: $(PROJ).rpt $(PROJ).bin + +$(PROJ).json: $(PROJ).v + yosys -ql $(PROJ).yslog -p 'synth_ice40 -top top -json $@' $< + +$(PROJ).asc: $(PROJ).json icebreaker.pcf + nextpnr-ice40 -ql $(PROJ).nplog --up5k --package sg48 --freq 111 --asc $@ --pcf icebreaker.pcf --json $< + +$(PROJ).bin: $(PROJ).asc + icepack $< $@ + +$(PROJ).rpt: $(PROJ).asc + icetime -d up5k -c 111 -mtr $@ $< + +prog: $(PROJ).bin + iceprog $< + +sudo-prog: $(PROJ).bin + @echo 'Executing prog as root!!!' + sudo iceprog $< + +clean: + rm -f $(PROJ).yslog $(PROJ).nplog $(PROJ).json $(PROJ).asc $(PROJ).rpt $(PROJ).bin + rm -f $(PROJ)_tb $(PROJ)_tb.vcd $(PROJ)_syn.v $(PROJ)_syntb $(PROJ)_syntb.vcd + +.SECONDARY: +.PHONY: all prog clean diff --git a/GPIO/iCE40/README.md b/GPIO/iCE40/README.md new file mode 100644 index 0000000..08bc585 --- /dev/null +++ b/GPIO/iCE40/README.md @@ -0,0 +1,41 @@ +# iCE40 Ring Test + +## Dependencies + +- [IceStorm tools](https://github.com/YosysHQ/icestorm) +- [yosys](http://www.clifford.at/yosys/download.html) +- [nextpnr](https://github.com/YosysHQ/nextpnr) + +Install instructions for all of the above tools can be found on the [IceStorm +website](http://bygone.clairexen.net/icestorm/). + +## Building + +The default `make` target synthesizes the design and runs a timing analysis. The target `prog` +programs an available iCEBreaker via USB. + +## Results + +When clocking the FPGA at 24MHz, the resulting ring oscillation is still identifiable as a square +wave. + + + +By 111MHz, it's more of a triangle wave. But still stable and nearly rail to rail. This is the +fastest clock speed that `icetime` approves. + + + +Despite not passing the timing analysis, when the FPGA is clocked at 120MHz no problems seems to +occur. + + + +Even at 129MHz, stable ring oscillation can occur. I (Erik) thought that the first time I ran it I +got a chaotic, aperiodic signal. But I haven't been able to reproduce this so I might have made a +mistake. Still, I'll hold off on declaring this result official. + + + +At faster clock speeds things start to go wrong. Usually there's still a periodic ring oscillation, +just much slower than one would hope. diff --git a/GPIO/iCE40/icebreaker.pcf b/GPIO/iCE40/icebreaker.pcf new file mode 100644 index 0000000..03088f2 --- /dev/null +++ b/GPIO/iCE40/icebreaker.pcf @@ -0,0 +1,54 @@ +# 12 MHz clock +set_io -nowarn CLK_12MHZ 35 + +# RS232 +set_io -nowarn RX 6 +set_io -nowarn TX 9 + +# LEDs and Button +set_io -nowarn BTN_N 10 +set_io -nowarn LEDR_N 11 +set_io -nowarn LEDG_N 37 + +# RGB LED Driver +set_io -nowarn LED_RED_N 39 +set_io -nowarn LED_GRN_N 40 +set_io -nowarn LED_BLU_N 41 + +# SPI Flash +set_io -nowarn FLASH_SCK 15 +set_io -nowarn FLASH_SSB 16 +set_io -nowarn FLASH_IO0 14 +set_io -nowarn FLASH_IO1 17 +set_io -nowarn FLASH_IO2 12 +set_io -nowarn FLASH_IO3 13 + +# PMOD 1A +set_io -nowarn P1A1 4 +set_io -nowarn P1A2 2 +set_io -nowarn P1A3 47 +set_io -nowarn P1A4 45 +set_io -nowarn P1A7 3 +set_io -nowarn P1A8 48 +set_io -nowarn P1A9 46 +set_io -nowarn P1A10 44 + +# PMOD 1B +set_io -nowarn P1B1 43 +set_io -nowarn P1B2 38 +set_io -nowarn P1B3 34 +set_io -nowarn P1B4 31 +set_io -nowarn P1B7 42 +set_io -nowarn P1B8 36 +set_io -nowarn P1B9 32 +set_io -nowarn P1B10 28 + +# LEDs and Buttons (PMOD 2) +set_io -nowarn LED1 26 +set_io -nowarn LED2 27 +set_io -nowarn LED3 25 +set_io -nowarn LED4 23 +set_io -nowarn LED5 21 +set_io -nowarn BTN1 20 +set_io -nowarn BTN2 19 +set_io -nowarn BTN3 18 diff --git a/GPIO/iCE40/img/ring_12mhz.png b/GPIO/iCE40/img/ring_12mhz.png new file mode 100644 index 0000000000000000000000000000000000000000..32bfb41babac05c30731b593a01f29e03533c659 GIT binary patch literal 5643 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 TakMfpFfe$!`njxgN@xNAemr*# literal 0 HcmV?d00001 diff --git a/GPIO/iCE40/img/ring_55mhz.png b/GPIO/iCE40/img/ring_55mhz.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6bed31b2ccb922130a8d2571b6d1d03940ce37 GIT binary patch literal 5457 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 TrGJ8ffq}u()z4*}Q$iB}MiwCI literal 0 HcmV?d00001 diff --git a/GPIO/iCE40/img/ring_60mhz.png b/GPIO/iCE40/img/ring_60mhz.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8e2b9d547b618a2279b6cfa5389df5b19faaac GIT binary patch literal 5578 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 literal 0 HcmV?d00001 diff --git a/GPIO/iCE40/img/ring_64mhz.png b/GPIO/iCE40/img/ring_64mhz.png new file mode 100644 index 0000000000000000000000000000000000000000..f91a302a7e93ff797e3b5ccdc0bc433dc69fd88d GIT binary patch literal 5256 zcmeAS@N?(olHy`uVBq!ia0y~yV0^&9!0?KLiGhLPYZRjZ1A~aar;B4q#hkZuAC^8| zBjy^~<n6&3	@X>dUEjaOskk@Fwp9&iCwcZ3+$^2cCM|tlqdON%=NAqkDMF$vC_H z@8-vUzn$wT7A`%_Nwn2zVSv@N?dPiw^PV+-en_I^e_q4AJ#z1h{(nCHpa1SmyYh9h zkN!p{@0)#l50l!qw_hi((E2`U*4ba>%sdK484`{rzLSEN70J17HvLnb^XR$BnXgN0 z&k5M}oiX2eN6__V_U37~#CNkKTo6AjZNl^D^LoW?{xdi2yuQ2U=hn-zne&ZZ`iq}M z|Ja`<?^=DzXkXuvHDA}vHwpXE>Dd3|-}Cc1oZ-)mlP{S1PkX#jqwm~av#R+^ezp|f zDT*sEXnXNdulbyA$rXu`P2O%(Ql3vujW|_Z&iv)s*XObC>i_-tztDQVw)$D$Er)!* z{9m7I`|{ICUbE-BKQ4LqnCIf-t%B>rEzQ<{sbHP*U6bwaJ2uI<^{c1s?|Y;4V!OM4 z_|=s!KI}Zc;P7+h?i0R;m$bL6|NEA0Z=J7%WB5A9<O|Yw8TNWgnUp*)PM!O-b6UyO zLnb~_U!JYz(%-qvar*y$n_oI?e`iKcKD0oe!CS^`O?q(RzUi_F>mAki{yW7M8+Z0b zO<J-1(_i@+H{Wbn(zB$H{|(y<UbbB4%6;wrZo;bsBwW|8s{H)v$=(jf|A&%Z9$K2$ z!05upt2_e~BRBR>(H57t_78VjD5Jp>bLuGfJ0HvZOsU=d|MzN$aJ62FYm+EREPVC) z^<=G8X`w&$J-E83IIUXoDd9rM-(9OVS!-)7>C!sR(!6cSoeJX#f{PTKpLe^7emmCG zGr!|Rgh7V%1VJSw=Yw;_XYOt65fGF-{ghWq;ZS^nxEO=4o8*`4*Owm(^l&`f)HDCg zR6)y6CC$r%ohAro{rL4urK#<H>nulRkpl}JmJ8}-Z#csEDB;3~-3JytbV<1I;dKX( zl!Mr$7BK~77socgH)}SSi>3T=ab)v!`f*ibhp~esj}(K02!enqm7cHUmF67*Q_R4S zX^_Fd5Qrc=grXXH1Xv|iIF&&jYF1HXXfTm5VQA1m5XqBUPTKe+GS1Ul#k1<r!I`%c z);X=JD-N}==v=_a;BpX^c<ATE4K~UekC7^zx(;p~O+1rY1W#}TPH>zgz~CT-a6Xs? z^#hydA&!(5jS~u<91IG)Y`hE#TnNGwYL`kPi;<H^$^;b_h6!xVYzzXda3VEllEKV& zO`QY5u2UUDEi8(q&xCqh&0ojGt}ck`Pq2^gcxEtyj4DvaZDgy;LRN^g4VWYqxr{u7 zm>4{o9hn(An&5=fqzg<CXG=6f0+^9u30hDoLhYKM(gO_*28K%s7Z?~8A&4GdA+^s2 zt*jNRRv4||Vo%R&-pRG{*V)jA4^)~^{0a7Pt2H!W-{CQGj*(}@Zr$y-i}vT|uiS8B zf5?df-CcLpPQUP2sLM6CNWt?*jo$tHp^Nj@PdfKLqF1`8|9Fa|qOQ@q@8y~E-MOkC zPw{kme!BnorwX0(&p%c0n42=&*-g8i{qx_y@N<2$zumuo`gLmI1Ie>*zscp~U5Q=L zzsGd9U6swW{{EY@Ztb`~{rc;>*5{w^o>TQ;@9!5eY=3L^?LO!`V{`f8x6=xq2cNIE zH;*Y?TU=XmDX-|=8{S(pXKAbFPRw_`5~(-EPPza1{={dyPyRgY`TIowMq|k>(#{Vp zpS}Gim!587`u^NSiK4!OV?XP6?>%f-p7!|5Z@Z$WF+arC{yrfa=HDLtj%~*A(wX0P z6hBOU9<WooPTjWe*Tqt)<}z*RZ2jUN##`ULZhl;#Hz#|dbo9<B-#=Ckn@&X^==_xt zdC%CsQ+mSlS^w857wK9hU#Z+b-EVPiLBS$1*XI|WdkF30SL=VnwoiRgu87$0=~H^H zXIJLR9-Xr|H}9I#V&%YqZO3*Veyw^@)710O*}3og7wguhY%~A!PyfV+k6(4%Z*Miv z60`ivb#<NCS*b;Kuj2itsFdv9q4vqEYKuai)Rp|79~a6o{aD)ITO+ep#%s6mlh|67 zeRm!PH_f)%+uzN<Gj*k}<L}RGA6+tDoRceU_UqEidBZ<r(~h4p_P_3alYRW+orswE zB<bG=+^;R}|2lD#yLIbS>pRt3KCQUDTk5fx^AuYvN#PaJTdZ5}+&*{6>2^s>Qi1r_ zk1K8K3~R4@|NH%ZuRM!w)q3mp^^?B7*lT=fzH`R0i^sS8)b2L%bX#<Zt+wKV_W5ba z&2`~ZvO2kazHtTHU0)f0r(;Eo^M>aU-Fw`*k6mn^JoB6wi>=jl_g$WcVqZ68$4rV< zl;6rCDUqIjJmdQd!Rp5cyjrJ!{J3#$l#Gj>=M4$7cTp2Rd-2spn3_&1GU_>hFYB9I zviweGznhDDYn3f?u1s$Ey7QonUiymW-Rzr=_DA(aC}&(RPB@sZ@m6<NoczkID?UEi zVfabf@gav+)`hq4_T<Edr}+Q=xt@QKYZ%*Zm0wHp=DpeUYSraAOD9XrUE(*rd)AUk zR!<kVu5&Cm44de>W&Qf|eY#eAE?oS6<ZVH>lH|XvM=!s~mQGbO`jWG2pKGdQTIct( zdoOC|N4`@&t=jiVu%yXRT<ZPxtjXF&$L|@KyYcUTxN+5;A9f$w+K-3bU-jw0t*>qS zT&K<5bnQWZ&D;5+cT;j~ZrriY4$rMT{KUp6FZ}+_7>NUEZ*SQ&^?~#LF=xf{59V^w zPpx<Gg*<J_m|eEh?$wVry;`fICuAO0dj6Jnb38VsY-fx64z{Zq7i14FOAg(+!zDfJ z-P&J2JVIKZt(0(7@6TCo_d`4=@%X(B0xr^9PM;4=J$`>pRDIR`^F{44*WH78s^%(Y zl>gB<oqKbgVDi4lm2Wq$Ix8x@)AYqY&anOQ&z|MF>1>eO;js2!&3>Q9=gyp*al^e? zPi^JSz7^riUEahRt(%y*L1=I0h1!#`Jq9a+m9pIK9_6*FxgBX<)sua3&5>IR&hL%u zzH{_PutbUa-#d0vg&!wXbU)##3Xm{;{ph&fb?#>~iqzj-xLa{j?B@OLW?Ni?^>#{M zUlh48I<<StJC!&0cmwYp`^Q~nc0KF%{XO?C?mCfS-y}8v*fWzKiofpHGuxMZzIRbD z`Ef)0wbK%}+;{#tvO{{-q=mB&3LQ`DUZ%=fyyN`^Nh|xe%`Yy>r|-$j-oX6!d=XDn zN==l3m4G4NBHn%5PFj?B|C<sdq}Xh><Mnlmj%|hhr+?-rTsX!a*c^EM6RQsUhMDfu zYEujjrADiyTrj(qc~jWzTBf9n^p}elKHoGon|%Mw;@rHSo9DQg%~!p;XhYc11!v19 zY;=r&+5BSh;Tc;qYKu?p;NN8VWQOe8vq7y-#a!ck7fw=<xx(woYqqfJX>UsG3La+Z z)Gx0VOGz$%zC?OH*TSmf8!v8Z+8%yvK|rl;vR8t2-l1vNFVD5MmW=XrI?bvuyWrR+ zSF`l3(@uY9yO#OKcRAbQcU8KRVx{bS7P{V>dsr#)!m+yv9}2&jAC1jfB~c?YUCAV= z;EdTkcea&HpCmYxGum4mZ^yTrR2AKd|78aX_h<69KbPOxYVyu``JHxCleF#m7hja* z`F20y`Bi29!*`Ei=7qw%Q}5^T$Vyz#zIZh6L$q40`RNPMV%qm(v^_0KR{8AA%>BEK z&0OuON^alD7j*`!ryG9Zdy{Owds}^8iNM=M3-|W(ot7{$dsgRqtfO(`c2^<KL!I`X z<{2zLf8M@z)SY$1y?N20*S))5Z_RiVF5MUL)S{-z`sRYS;q#r{&is%3eB|O@*Wi5z zRQ`PF{(5o8hJ+;f(*Iv}#`D>{sP^sO``o8_UWJ&kN5e<oz1h3Azo@D;+3R|@dD6@M zJ@;Y{+}V-)vR3ZSB>7pH7cTE!xVvrV=OY&l=WN`WUop9_Hl<+g?2T<Zms`X+AD_7X z!|WHe(N{j@U7plp)_CSwQoTE~R?GQmCs!QmyQ{j`?&Y58d#e{euIwy7_TjbLTTb`b z?zX;ncXnu3wa#h1&$;Ev>(`sF_u1ZYpFFumcygv->><h43ui8;=IoSTFk8;fdY8|w zm)?x?;ub&sxhJYy<WTzYzxSR;`|jI6`&UMv<Le!tKbg<Tl#G6-p!q1(yMMFrcRnlK zEc*}-S;y&hx|e3U?{%BY@ow2vJ>4wJCq4!*jya#=kV@~Kt!_1W|KBs=>SbkH{O>aF z-)KGM8*^L8l*bvF6Q#Fg)m|~`zjM<exqA)ouiw9G->o_J@TdIUS(;9#Zv+*myLW5N zUD`0=u<owAEz_8s_~hM}*GzZd?bXeCzj&kPAr1b=Nza|El9EE7Zf|z8FM4t3=JUC2 zT6aRH`h2{)=hW9g3HFy;w8a-pjsIGqv;KO2a;SyH<n>!Kr@vmnyuQkA`ug?fW7b%0 z-~VTo_uth{<<}&0;%--cxUxs9=y|Nsp@W&?j=N{tf3I3#w7c)&L~HJ%2P(IEwQkxK zH5Sx%*W@{DbFFU9xOwB|=5og1f>h<CaDlf>i~Dpp8Dx}O<~~l^$@qG4YUSyE{@C)e zH&W5Fp3hL+z3xx&={ssSzkbd9_3q6Id5>T3_PmLyD|BA>*hVVv!oMnpk9h@GSYqzY z^><7?p;>C{(0IyQ+$C@0%7vd?mU|yN+2(b-wD_%#?kdi^cO>KPU*5WrZEe}sYij>8 zW=fksFG_c>{I@-xGv&;(#h$STV-Kfw-`RB#)M7AW*)29#Nv$BK?O65o`&yDSR6<Ui zk=tQ^O8wNe!>>Oq4cz=LqPT+FPc8k;;u+ueKD1VP)qVSZJj?x(=R3=V+`Oj!xlmM_ zGGWilecD{lt?u8COb>W5ap{aJv8Uyx^hwQDd9zO}+4IH4bF8n@_v!4j<l8*cp5wag zy=D3r-0S|e>spn{?|l08_~ZF?^+n3__MF_v_ow!O%?j7WJW)TB8l>j9@80|VpH}>a zz|QP${fB2PmF<cOkIVf(U-_}`&1u$OCwR@So4)%Wd|tV{Ix(WnEPaaO{HhSk8j;6r z*GzZZpZ@!=?1`9V{dRVKlO1lW@XSAcH1*hy?$ATRJA#vMI)1L7EWp4p>CAuMLkl%B zA|`wkW|hqHJoFOWfjN>d#Khph2X5sf2qN11Ue^|sJ5Jib18Sf{8_hkvDi1duiN6)1 zaoWFMt%;2xBfZ^m{rr=aCTzS67yPC=R%<=Z;E`fjFgH)I<i$k^69xzCxxBY>pW*D( zxJ#D!@iH)k91>z@Xwb0bty1*lV7S1qx0#tiAoWVG)}3XdO`sP29ZyKh{<i0#svmlM z3=Qu-q<W&X-9OBR^w?lsm<Q&Z<aGijsBB??bTr&R0m$a*gxQljrp7tBa>gMho6r!+ zkk)47?FVC8L;gNnRZt)V@01|ACx_-jomMV{+el(MhvfF;&K~8Bdg!r3;j#J&4o5c* zBPD|j?g@fTJpw5$3d%{KHk7|;Xh@*zRQBd&U0SPF1g(iWCTRj1c)8_W-@Gh9L*&$s zCdXh6k*<tN=`X?$^e+m`)O8mxyP|24DgW2_#q-aR5qsP2A2XJ?+|$eSW<~IW-7jNm zpQPwN7veSBaq!@c8!fV>TroaY(MR*<omXe$<@_+$>qg-62TE*zt3s!GU5j?pkKZ31 z!o4}-_c`qs{nuZAjVks3<e41T|McsPicL=+&brd~%DOY|we0SlpHJ&c-u2!2P%u{@ zFYKCp?#!C!Ma<64_wIyS9z4D+^I^N=^R|nP52xNaWB(;z+BW`&d=F=By6yBu^+o<t zkLQ{c-S{wnTDzxG^E->qfBO>OY-au3yGHAIr1Ni$?=M*yQ~$nhKUu!c<i)AlP~!*Y z+cTffcNBL!|4@LT*-pQeW7n|-*X@jy_H`H-zc5(yuTtf;O=nTHPI|$`!#mkzZIkma zJXBa?@}lTW;C^3yFSb~_AN)oyN_Bk}-d!-6zdb4W!o<kwyt@j8u1c5qnxtPAKbib_ zlawy&K~w(8_0Eg@&r5EpPyCV+RPfhq?|}u1zU9qkA2N)a`Q-bIUmTLVE!yZdTT-H= zcg7*Jc3!LHi8ps1nOHqJ`Sz9uN9S4l*!Iq-*z!P#oo#MUR`Dc0n;84~ci5W!0?MAu zaa5nrnEZ-&SCN?R-sA6PE!oTGCDdp3;?urc*@;v0Z@11m?A)z<UAp84Pxb}QYhp5c z4Zhn+d?|UQzuEiPiIWCddtS+J%>Chi{PY_){X&sPXA5S3wcp9-wXZ<qq<_40l4HTc zhtI6r&;Jk)i%Xl{t^O_Va(CeLn+I=3N}H%i*3OhIQ8alW{PFOD>3<66HGaK)V1c&h z+$@96Cl(tWjrkQHoh)a#da%!m^?Y!B<fWJUTKU}$Z_fxj)Mv%2{#IH2$N%|1_buPj TZPv=bz`)??>gTe~DWM4fmqCb_ literal 0 HcmV?d00001 diff --git a/GPIO/iCE40/ring.v b/GPIO/iCE40/ring.v new file mode 100644 index 0000000..4e4c830 --- /dev/null +++ b/GPIO/iCE40/ring.v @@ -0,0 +1,64 @@ +// Cause yosys to throw an error when we implicitly declare nets +`default_nettype none + +module top ( + input CLK_12MHZ, // system clock + output P1A1, + input P1A2, +); + wire clk; + wire clk_lock; + SB_PLL40_PAD #( + .FEEDBACK_PATH("SIMPLE"), + .PLLOUT_SELECT("GENCLK"), + .FILTER_RANGE(3'b001), + // == 24 MHz == (boring slow) + //.DIVR(4'b0000), + //.DIVF(7'b0111111), + //.DIVQ(3'b101) + // == 48 MHz == (getting interesting) + //.DIVR(4'b0000), + //.DIVF(7'b0111111), + //.DIVQ(3'b100), + // == 96 MHz == (knocks the socks off MCUs) + //.DIVR(4'b0000), + //.DIVF(7'b0111111), + //.DIVQ(3'b011) + // == 111 MHz == (fastest I can go while still passing timing tests) + //.DIVR(4'b0000), + //.DIVF(7'b1001001), + //.DIVQ(3'b011) + // == 120 MHz == (overclocked -- doesn't pass the icetime analysis, but seems stable) + .DIVR(4'b0000), + .DIVF(7'b1001111), + .DIVQ(3'b011) + // == 129 == + // (possibly unreliable -- once saw unstable oscillation, though it's worked since then) + //.DIVR(4'b0000), + //.DIVF(7'b1010101), + //.DIVQ(3'b011) + // == 141 == (breakdown -- resulting oscillation is stable but only 35.25MHz) + //.DIVR(4'b0000), + //.DIVF(7'b0101110), + //.DIVQ(3'b010) + // == 165 MHz == (breakdown -- resulting oscillation is stable but only 41.25MHz) + //.DIVR(4'b0000), + //.DIVF(7'b0110110), + //.DIVQ(3'b010) + ) clk_pll ( + .PACKAGEPIN(CLK_12MHZ), + .PLLOUTGLOBAL(clk), + .LOCK(clk_lock), + .RESETB(1'b1), + .BYPASS(1'b0) + ); + + always @(posedge clk or negedge clk_lock) begin + if (!clk_lock) begin + P1A1 <= 1'b0; + end else begin + P1A1 <= !P1A2; + end + end + +endmodule diff --git a/index.html b/index.html index 8725abd..dc2fe4b 100644 --- a/index.html +++ b/index.html @@ -39,6 +39,13 @@ The GPIO test measures how quickly pins can communicate with a processor core; t <th>date</th> </tr> +<tr> +<td>60.00</td> +<td>iCE40UP5K</td> +<td>iCEBreaker V1.0e, 120 MHz, <a href=GPIO/iCE40/ring.v>Verilog</a> (<a href=GPIO/iCE40/README.md>notes</a>)</td> +<td>September, 2021</td> +</tr> + <tr> <td>23.08</td> <td>IMXRT1062</td> -- GitLab