<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="http://blog.livedoor.jp/hardyboy/">
<title>まごころせいじつ堂 - DE0</title>
<link>http://blog.livedoor.jp/hardyboy/</link>
<description>浜町庄金　研究開発
　マイコンで遊んでばっかりで

</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6263333.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6252985.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6252752.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6250136.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6249500.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6246072.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/6244403.html" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6263333.html">
<title>DE0 QuartusIIのMegaWizardでPLLを使う</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6263333.html</link>
<description>DE0の基板上のクロックは50MHz。搭載されているSDRAMは100MHzか133MHz動作なのでこれなんか必要だよなあPLLがあるはずだがどうやって使うんだろうと悩んでいたが解決した。　これはメーカー/デバイスごと固有の設定であり、Verilog-HDLの記述でどうこうできる話ではない。 Qu...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-02-02T12:46:45+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[DE0の基板上のクロックは50MHz。搭載されているSDRAMは100MHzか133MHz動作なのでこれなんか必要だよなあPLLがあるはずだがどうやって使うんだろうと悩んでいたが解決した。<br />　これはメーカー/デバイスごと固有の設定であり、Verilog-HDLの記述でどうこうできる話ではない。 QuartusII(12.1sp1)では[Tools]→[MegaWizard Plug-in Manager]で呼び出す。<br /><a target="_blank" title="2013pll1" href="http://livedoor.blogimg.jp/hardyboy/imgs/6/4/6464ade9.png"><img class="pict" hspace="5" alt="2013pll1" border="0" height="340" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/6/4/6464ade9-s.png"></a><br />
新規作成を選んで次へ。<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/5/b/5bc66395.png" title="2013pll2" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/5/b/5bc66395-s.png" width="480" height="340" border="0" alt="2013pll2" hspace="5" class="pict"></a><br />ここでは出力する言語をverilog HDL、ファイル名はapll、使用するmegafunctionはI/O→ALTPLLを選択。<br />&nbsp;<a href="http://livedoor.blogimg.jp/hardyboy/imgs/7/d/7df435bb.png" title="2013pll3" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/7/d/7df435bb-s.png" width="480" height="392" border="0" alt="2013pll3" hspace="5" class="pict"><br /></a>ここからALTPLLの詳細設定画面。入力クロックは50MHzにする。<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/6/3/63e6daea.png" title="2013pll4" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/6/3/63e6daea-s.png" width="480" height="403" border="0" alt="2013pll4" hspace="5" class="pict"></a><br />resetやlock信号は今回使わないのでチェックを外す。後はいくつか飛ばして以下の画面へ。<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/b/5/b5ada0f5.png" title="2013pll5" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/b/5/b5ada0f5-s.png" width="480" height="403" border="0" alt="2013pll5" hspace="5" class="pict"></a><br />&nbsp;c0～c4まで出力を設定できるが、ここではc0だけ。100MHzに設定。あとは飛ばす。<br /><a href="http://livedoor.blogimg.jp/hardyboy/imgs/9/8/985d986f.png" title="2013pll6" target="_blank"><img src="http://livedoor.blogimg.jp/hardyboy/imgs/9/8/985d986f-s.png" width="480" height="403" border="0" alt="2013pll6" hspace="5" class="pict"></a><br />最終確認。[Finish]<br /><br />メインの画面に戻って[File]→[Open...]でapll.bb.vを開く。以下の内容のダミーモジュールができる。<br /><br />
<pre>module apll (
	inclk0,
	c0);

	input	  inclk0;
	output	  c0;

endmodule
</pre>
　これをつないでやれば良い。トップモジュールで定義したクロック入力をclk_50、PLLの出力をclkで分配すると<br />apll apll_0(clk_50,clk);<br />とすればよい。なおトップモジュールでクロック入力の名前を変えるとピンの対応付けが再度必要になるのでPinPlannerで定義する。これでチカチカ表示するのが二倍速になるのを確認した。<br /><br />参考：<br /><a href="http://www.emb4fun.de/fpga/nutos1/" target="_blank">http://www.emb4fun.de/fpga/nutos1/</a><br /><br />昔話：<br />昔はのう、クロック入力を分周してデューティ50%で使ってたんじゃ。例えば内部50MHz動作だと100MHzの発振器が必要で、当時CMOSでそんな出力のはなかったんでECLレベルの発振器を使っておったんじゃ……<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6252985.html">
<title>DE0 FPGAでFizzBuzz 任意の数値で判定</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6252985.html</link>
<description>続き。DE0 FPGAでFizzBuzz　前回は3進5進カウンターを使ってFizzBuzzを判定していたが、これはリセットと同期してカウントアップしなければならないという制限がある。では4桁の任意のBCD入力に対して簡単に判定することはできるか？　ソフトでは3の剰余を求めたりするがこれ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-28T07:20:17+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[続き。<a target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/6252752.html">DE0 FPGAでFizzBuzz</a><br />　前回は3進5進カウンターを使ってFizzBuzzを判定していたが、これはリセットと同期してカウントアップしなければならないという制限がある。では4桁の任意のBCD入力に対して簡単に判定することはできるか？<br />　ソフトでは3の剰余を求めたりするがこれは除算でありそんな大げさなものは動かしたくない。ではテーブル？buzzなら5の倍数なので、最後の桁が0または5で判断できる。<br />　では3の倍数であるfizzは？ちょっとこねくりまわしてみた。<br /><br />3の倍数だけ取り出す。<br />$ awk 'BEGIN{for(i=1;i&lt;10000;i++) printf("%04d\n",i)}' &gt; fizz.txt<br /><br />それぞれの桁をすべて足して3の剰余を求めると<br />$ awk '{print substr($1,1,1) substr($1,2,1) substr($1,3,1) substr($1,4,1)}' fizz.txt | gawk '{print $1%3}'&nbsp;<br /><br />なんかいけそう。<br /><br />組み合わせ回路で実現できる。<br />BCDの4桁それぞれに対して3の剰余を求める。それぞれの桁は0,1,2になる。これの総和は最大で8なので、これに対して3の剰余を求める。こうするとfizzが判定できる。<br />
<code>
<pre>module bcdmod3(BCD,BCDout);
	input [3:0] BCD;
	output [3:0] BCDout;

	function [3:0] mod3;
		input [3:0] bcdin;
		begin
			case (bcdin)
				1: mod3=1;
				2: mod3=2;
				4: mod3=1;
				5: mod3=2;
				7: mod3=1;
				8: mod3=2;
				default: mod3=0;
			endcase
		end
	endfunction

	assign BCDout=mod3(BCD);

	endmodule
</pre>
</code>
<br />
<br />
<code>
<pre>module chkfizz(BCD3,BCD2,BCD1,BCD0, fizz);
	input [3:0] BCD3;
	input [3:0] BCD2;
	input [3:0] BCD1;
	input [3:0] BCD0;
	output fizz;

	wire [3:0] sBCD3;
	wire [3:0] sBCD2;
	wire [3:0] sBCD1;
	wire [3:0] sBCD0;
	wire [3:0] tBCD;
	wire [3:0] aBCD;
	
	bcdmod3 bcdmod3_3(BCD3,sBCD3);
	bcdmod3 bcdmod3_2(BCD2,sBCD2);
	bcdmod3 bcdmod3_1(BCD1,sBCD1);
	bcdmod3 bcdmod3_0(BCD0,sBCD0);
	
	assign tBCD=sBCD3+sBCD2+sBCD1+sBCD0;
	
	bcdmod3 bcdmod3_a(tBCD,aBCD);
	
	assign fizz=(aBCD==4'd0);
endmodule
</pre>
</code>
<br /><br />　確認のためにトップモジュールではスライドスイッチによりBCDを入力してボタン2を押すと、その設定値からFizzBuzzのカウントを開始するようにした。<br /><br />　QuartusIIで[Project]→[Archive Project...]を選択するとプロジェクトをひとまとめにしてくれる。ダイアログで[Advanced]ボタンを押し、一番上のFileset:はService Requestを選択。これで出力するとoutout_filesディレクトリ以下にfizzbuzz.qarというようなファイルができる。これを他のQuartusIIがインストールされているマシンに持って行ってダブルクリックするとプロジェクトが展開される。<br /><br />　以下に置いてみました。<br /><a href="https://docs.google.com/file/d/0B2yELpUGLIuUVHdSV01jMzlvc28/edit" target="_blank">fizzbuzz.qar</a>(Googls Docs)<br /><br />追記：<br />それぞれの桁をa,b,c,dとおく。a+b+c+d=mod3なら1000a+100b+10c+dもmod3か？<br />999a+99b+9c + a+b+c+dとすると、9(111a+11b+c) + a+b+c+d で 3で割り切れて0 と + mod3となる。<br />ってことでよいのかな。中学二年の範囲。]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6252752.html">
<title>DE0 FPGAでFizzBuzz</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6252752.html</link>
<description>やりたいと思って約二年。やっとやる気が出て一週間。verilogの記述でFizzBuzzができた。ソース。https://gist.github.com/4649209 1〜9999までの数字を右詰めゼロサプレスで表示。3の倍数はFizz、5の倍数はBuzz、両方の倍数はFzBzとそれっぽく7セグメントのLEDで表示。Fizz...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-28T02:08:22+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[やりたいと思って約二年。やっとやる気が出て一週間。verilogの記述でFizzBuzzができた。<br /><br />ソース。<br /><a href="https://gist.github.com/4649209" target="_blank">https://gist.github.com/4649209</a>&nbsp;<br /><br />1〜9999までの数字を右詰めゼロサプレスで表示。3の倍数はFizz、5の倍数はBuzz、両方の倍数はFzBzとそれっぽく7セグメントのLEDで表示。<br />Fizz判定は3進カウンタ、Buzz判定は5進カウンタを使い、BCD4桁カウンタと同じクロックで同時に進む。<br />数字が0の場合を表示するとまずいので、この時は7セグメントデコーダをoffにして何も表示しないようにした。<br /><br /><object width="320" height="264"><param name="movie" value="http://www.youtube.com/v/EJAQTHFFgY4&amp;feature=youtube_gdata_player"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/EJAQTHFFgY4&amp;feature=youtube_gdata_player" type="application/x-shockwave-flash" allowfullscreen="true" width="320" height="264"></object><br /><br />　色々ハマったけどwarningは全て見て無視出来る理由がないものは調査。１つのモジュールに複数の機能を入れない。複雑になり作っていてよくわからなくなったので単一機能のモジュールに分割し、上位モジュールで配線する。<br />　別の方法として、BCD出力を受けてこの中でFizzBuzz判定し、表示を差し替えるようにすれば3進5進カウンタを使わずに任意のBCDに対して判定ができるが、テーブルを作ることになるかな。5の判定は最後の桁が0 or 5でよさそうだがちょっと考えよう。]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6250136.html">
<title>DE0 QuartusIIでのコンパイル結果をちょっと見る</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6250136.html</link>
<description>QuartusII 12.1 Windows 32bit　ゼロサプレスのデコーダ作ってて、どんな回路が作られてるのだろうと覗いてみた。QuartusIIの[Tools]→[Netlist Viewers]→[RTL Viewer]追記：※この回路はゼロサプレス部分にミスがあります。　入力がすべて０の判定を三項演算子でやると、コ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-26T18:43:25+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[QuartusII 12.1 Windows 32bit<br /><br />　ゼロサプレスのデコーダ作ってて、どんな回路が作られてるのだろうと覗いてみた。QuartusIIの[Tools]→[Netlist Viewers]→[RTL Viewer]<br /><br />追記：<br /><b>※この回路はゼロサプレス部分にミスがあります。　</b><br /><br />入力がすべて０の判定を三項演算子でやると、コンパレータになってる。<br />&nbsp;assign bout=(bcd==4'b0000)?1'b1:1'b0;<br /><a target="_blank" title="2013decoder_eq0" href="http://livedoor.blogimg.jp/hardyboy/imgs/9/b/9be626e3.png"><img class="pict" hspace="5" alt="2013decoder_eq0" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/9/b/9be626e3-s.png"><br /></a><div>Flow Status<span style="white-space: pre;">	</span>Successful - Sat Jan 26 18:40:00 2013<br /><div>Quartus II 32-bit Version<span style="white-space: pre;">	</span>12.1 Build 177 11/07/2012 SJ Web Edition</div><div>Revision Name<span style="white-space: pre;">	</span>fizzbuzz</div><div>Top-level Entity Name<span style="white-space: pre;">	</span>fizzbuzz</div><div>Family<span style="white-space: pre;">	</span>Cyclone III</div><div>Device<span style="white-space: pre;">	</span>EP3C16F484C6</div><div>Timing Models<span style="white-space: pre;">	</span>Final</div><div>Total logic elements<span style="white-space: pre;">	</span>112 / 15,408 ( &lt; 1 % )</div><div>Total combinational functions<span style="white-space: pre;">	</span>101 / 15,408 ( &lt; 1 % )</div><div>Dedicated logic registers<span style="white-space: pre;">	</span>67 / 15,408 ( &lt; 1 % )</div><div>Total registers<span style="white-space: pre;">	</span>67</div><div>Total pins<span style="white-space: pre;">	</span>57 / 347 ( 16 % )</div><div>Total virtual pins<span style="white-space: pre;">	</span>0</div><div>Total memory bits<span style="white-space: pre;">	</span>0 / 516,096 ( 0 % )</div><div>Embedded Multiplier 9-bit elements<span style="white-space: pre;">	</span>0 / 112 ( 0 % )</div><div>Total PLLs<span style="white-space: pre;">	</span>0 / 4 ( 0 % )<br />&nbsp;</div><br /></div>ゲートレベルで考えるとちゃんとゲートになっている。<br />assign bout=(~(|bcd));<br /><a target="_blank" title="2013decorder_or0" href="http://livedoor.blogimg.jp/hardyboy/imgs/6/d/6dc8e654.png"><img class="pict" hspace="5" alt="2013decorder_or0" border="0" height="310" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/6/d/6dc8e654-s.png"></a><br />&nbsp;Flow Status<span style="white-space: pre;">	</span>Successful - Sat Jan 26 18:37:14 2013<div>Quartus II 32-bit Version<span style="white-space: pre;">	</span>12.1 Build 177 11/07/2012 SJ Web Edition</div><div>Revision Name<span style="white-space: pre;">	</span>fizzbuzz</div><div>Top-level Entity Name<span style="white-space: pre;">	</span>fizzbuzz</div><div>Family<span style="white-space: pre;">	</span>Cyclone III</div><div>Device<span style="white-space: pre;">	</span>EP3C16F484C6</div><div>Timing Models<span style="white-space: pre;">	</span>Final</div><div>Total logic elements<span style="white-space: pre;">	</span>110 / 15,408 ( &lt; 1 % )</div><div>Total combinational functions<span style="white-space: pre;">	</span>99 / 15,408 ( &lt; 1 % )</div><div>Dedicated logic registers<span style="white-space: pre;">	</span>67 / 15,408 ( &lt; 1 % )</div><div>Total registers<span style="white-space: pre;">	</span>67</div><div>Total pins<span style="white-space: pre;">	</span>57 / 347 ( 16 % )</div><div>Total virtual pins<span style="white-space: pre;">	</span>0</div><div>Total memory bits<span style="white-space: pre;">	</span>0 / 516,096 ( 0 % )</div><div>Embedded Multiplier 9-bit elements<span style="white-space: pre;">	</span>0 / 112 ( 0 % )</div><div>Total PLLs<span style="white-space: pre;">	</span>0 / 4 ( 0 % )</div><br />　LEが2個少なくなった。差はないと思っていたんだけど、記述での最適化は効くということだろうか。&nbsp;<br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6249500.html">
<title>DE0 ゼロサプレス付きカウンタ</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6249500.html</link>
<description>続き。カウンタと7セグメントLEDに表示するデコーダ、スイッチ入力のチャタリング除去のモジュールを作成した。　QuartusIIで新規プロジェクトを作成。[Assignment]→[Import Assignment...]で前回作成したピンアサインを取り込む。20130126追記：肝心のゼロサプレス部分に間...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-26T12:12:15+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[続き。カウンタと7セグメントLEDに表示するデコーダ、スイッチ入力のチャタリング除去のモジュールを作成した。<br /><br />　QuartusIIで新規プロジェクトを作成。[Assignment]→[Import Assignment...]で前回作成したピンアサインを取り込む。<br /><br /><b>20130126追記：肝心のゼロサプレス部分に間違いがあります。</b><br />このままだと４桁の１００１表示で１０□１の様になります。ゼロサプレスは直前ではなくずっと前の桁がすべて０でなければならないので、segleddec.vは以下書き換え。<br /><br />assign bout=(bcd==4'b0000)?bin:0;<br /><br /><a target="_blank" href="https://gist.github.com/4639707">https://gist.github.com/4639707</a>&nbsp;<br /><br />　segleddec.vは4bitの入力を0～Fの16パターンと解釈し、それぞれのパターンに対応する7セグメントのLEDを点灯させる。DE0の7セグメントLEDはアノードコモンなので'0'で点灯。<br />　TTLの7447はゼロサプレスの機能を持っている。これは普通の電卓の表示のように、桁の左側の余計なゼロを表示しないというもの。左側に位置する桁が'0'で、自分自身が'0'ならば表示を抑止する。ただし１桁目は'0'も表示する。<br /><br />segleddec.v<br /><div><span style="white-space: pre;">	</span>assign bout=(bcd==4'b0000)?1'b1:1'b0;<span style="white-space: pre;">	</span>// ~&amp;bcd</div><div><span style="white-space: pre;">	</span>assign led=(bout&amp;&amp;bin)?8'b11111111:ALED(bcd,dp);</div><br />　左側の桁は'0000'ならboutを出力。右側の桁はそれをbinで受ける。右側の桁は自分が'0000'かつ左側の桁が'0000'(bin='1')なら表示を抑止。たくさん並んでいる桁なら、一番左側の桁のbinは'1'に吊ってあとはカスケード接続。ただし一番右、最後の桁はbinを'0'にして切り離す。<br /><br />hexcounter.v:<br /><div><span style="white-space: pre;">	</span>segleddec seg0(cnt[27:24],1'b0,1'b0, hled0,bout0_0);<span style="white-space: pre;">	</span>// Digit xxx0 always on</div><div><span style="white-space: pre;">	</span>segleddec seg1(cnt[31:28],1'b0,bout2_1, hled1,bout1_0);</div><div><span style="white-space: pre;">	</span>segleddec seg2(cnt[35:32],1'b0,bout3_2, hled2,bout2_1);</div><div><span style="white-space: pre;">	</span>segleddec seg3(cnt[39:36],1'b0,1'b1, hled3,bout3_2);</div><br />　こんな感じ。モジュールを定義しておいてこのように書くとインスタンスseg0,seg1,seg2,seg3を生成できる。<br />&nbsp;<br /><br />　二進カウンターは特に問題ないが、パラメータ化して任意のビット長まで指定できるようにしてある。非同期リセット付き。<br />　TTLなどは非同期リセットがかかるまでは値を保持するFFの内容は'1'か'0'かわからないものとして扱うが、パワーオン後にスキャンを行い初期設定するFPGAやASICは値が確定している。ただし'1'か'0'かは設定によるし、昔パワーオン直後のすべてのFFの値は'1'というPLDを使ったことがあった。<br /><br />　ついでにスイッチ入力をFF受けで同期化してチャタリングを抑止するunchat.vを組み込んだ。同期回路に非同期の信号を直接入れるのは気持ち悪い。以下の様なトラブルを調査したことがあるが、こんなことがありえるのだ。<br /><br /><a target="_blank" href="http://keisanki.at.webry.info/200803/article_1.html">入力信号は必ずFF受けで</a>&nbsp;<br /><br />　ここではカウンターで16分周した(50MHz÷65536＝20ns×65536＝1.3ms)間隔でスイッチの入力をサンプリングする。チャタリングはこの周期内には収まっている前提。<br />　パラメータ化はしていない。<br /><br /><object width="320" height="264"><param name="movie" value="http://www.youtube.com/v/LNJIAXgluL8&amp;feature=youtube_gdata_player"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/LNJIAXgluL8&amp;feature=youtube_gdata_player" type="application/x-shockwave-flash" allowfullscreen="true" width="320" height="264"></object><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6246072.html">
<title>DE0 オンボードのLED、スイッチ類のピンアサイン</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6246072.html</link>
<description>「超入門！FPGAスタータ・キット DE0で始めるVerilog HDL」を見ながらDE0ボードで遊び始めているが、色々な実験をする前にピンアサインを入れてしまおう。毎回Pin Plannerで設定するのも嫌なので、本の途中を飛ばして第17章へ。最上位階層(top module)でないとFPGAのI/Oには...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-24T21:25:04+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[「超入門！FPGAスタータ・キット DE0で始めるVerilog HDL」を見ながらDE0ボードで遊び始めているが、色々な実験をする前にピンアサインを入れてしまおう。毎回Pin Plannerで設定するのも嫌なので、本の途中を飛ばして第17章へ。最上位階層(top module)でないとFPGAのI/Oには接続できないが、ここで最上位階層の枠を決めて対応するピンもPin Plannerで定義してやると、あとはこれを保存しておけば別のデザインを始めるときに呼び出すだけでよい。ついでにLEDやスイッチのテストも兼ねた記述を入れた。<br /><br /><a href="https://gist.github.com/4620609" target="_blank">https://gist.github.com/4620609<br /></a><br />
<code>
<pre>// terasIC DE0 topmodule skeleton
// onboard I/O 3-button,10-sw,10-LED,4-7SEG
//
module Skeleton(clk,btn,sw,led,hled0,hled1,hled2,hled3,lcd_bl);
  input clk;
	input [2:0] btn;
	input [9:0] sw;
	output [9:0] led;
	output [7:0] hled0;
	output [7:0] hled1;
	output [7:0] hled2;
	output [7:0] hled3;
	output lcd_bl;
	
	assign led=(btn[2]==1'b1) ? sw: ~sw; // button2 press, then invert all LED
	assign hled0[7:0]=(btn[1:0]==2'b11) ? ~sw[7:0]: 8'b11111111; // 7segment digit xxx0
	assign hled1[7:0]=(btn[1:0]==2'b10) ? ~sw[7:0]: 8'b11111111; // 7segment digit xx0x press button 0
	assign hled2[7:0]=(btn[1:0]==2'b01) ? ~sw[7:0]: 8'b11111111; // 7segment digit x0xx press button 1
	assign hled3[7:0]=(btn[1:0]==2'b00) ? ~sw[7:0]: 8'b11111111; // 7segment digit 0xxx press button 1,0
	assign lcd_bl=sw[9]; // optiona LCD backlight
 
endmodule
</pre>
</code>
<br />プッシュボタンは押すと'0'、離した状態で'1'。<br />スライドスイッチは上の位置で'1'、下の位置で'0'。<br />緑のLEDは'1'で点灯。<br />7セグメントLEDはアノードコモンなので'0'で点灯。セグメントは上から時計回りにa,b,c,d,e,f、中央はg、小数点はdp。<br /><br />　ピンプランナーでの画面。<br /><a target="_blank" title="pinplanner" href="http://livedoor.blogimg.jp/hardyboy/imgs/4/5/453433be.png"><img class="pict" hspace="5" alt="pinplanner" border="0" height="383" width="480" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/5/453433be-s.png"></a><br /><br /><br />せっかくピンアサインの対応表を作ったので以下にcsvファイルを置いときます。お手持ちの表計算ソフトで読み込んで下さい。<br /><br /><a href="https://gist.github.com/4620569" target="_blank">https://gist.github.com/4620569</a><br /><br />動画はこちら。<br /><object width="320" height="264"><param name="movie" value="http://www.youtube.com/v/_RImTSgmnnQ&amp;feature=youtube_gdata_player"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/_RImTSgmnnQ&amp;feature=youtube_gdata_player" type="application/x-shockwave-flash" allowfullscreen="true" width="320" height="264"></object>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/6244403.html">
<title>terasIC DE0評価ボードで何か動かすまでのメモ</title>
<link>http://blog.livedoor.jp/hardyboy/archives/6244403.html</link>
<description>　2年ほど触らないままでいたFPGAの評価ボード(terasicのDE0)、ちょっときっかけがあったので使ってみた。サンプルの記述を論理合成してボードに転送し、スイッチとLEDを連動させるまでの手順。terasIC Altera DE0 BoardDE0のマニュアルなど以降Windows7(64bit)で作業。開発...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2013-01-24T01:08:15+09:00</dc:date>
<dc:subject>DE0</dc:subject>
<content:encoded><![CDATA[<div>　2年ほど触らないままでいたFPGAの評価ボード(terasicのDE0)、ちょっときっかけがあったので使ってみた。サンプルの記述を論理合成してボードに転送し、スイッチとLEDを連動させるまでの手順。</div><div><br /><a href="http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=364" target="_blank">terasIC Altera DE0 Board<br /></a><br /><a href="http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;CategoryNo=56&amp;No=364&amp;PartNo=4" target="_blank">DE0のマニュアルなど<br /></a><br /><div>以降Windows7(64bit)で作業。</div><br /><div>開発用ソフトのダウンロード 最新はQuartus II v12.1 ウェブ・エディションをインストール</div></div><div><a href="http://www.altera.co.jp/" target="_blank">ALTERA<br /></a><br /><div>※これが約4GBと大きいのでウチなんかだと一晩コース</div><br /><br /><div>　「超入門！FPGAスタータ・キット DE0で始めるVerilog HDL」を参照しながら開始。</div><div>この本はQuartus II v9.0を例に説明してある。インストールと動作確認は1章、2章。</div><div>　論理回路がわかっている人は3〜6章は飛ばしていい。</div><br /><div>&nbsp;DE0をPCに接続する。デバイスがインストールされなかったら、 コントロールパネル＞すべてのコントロールパネル項目＞システム＞デバイスマネージャーからUSB Blusterを探し、再インストール。C:\altera\12.1\quartus\drivers以下を指定。</div><br /><div>☆最初のハマリどころ</div><div>[File]→[New Project Wizard...]でディレクトリを指定するが、ここがデスクトップだとパーミッションがないと言われ作成できなかった。自分のホームディレクトリだとOKだが、そこにプロジェクト用のファイルが散らばってしまうのでサブディレクトリを指定。</div><br /><div>　FPGAデバイスは Family: CycloneIII で Available devices: から EP3C16F484C6を選択。</div><div>　他は設定しなくていい。</div><br /><br /><div>　プロジェクトウィザードが終了したら[File]→[New]でVerilog HDL Fileを選択。</div><br /><div>この本のとおりにするとLesson1.vというファイル名で一旦保存。</div><div>次に以下のソースを入力。</div></div><div><a href="https://gist.github.com/4608000" target="_blank">https://gist.github.com/4608000<br /></a><br /></div>
<pre><code>
module Lesson1( sw, led );
  input [9:0] sw ;
	output [9:0] led ;
 
	assign led=sw;
	
endmodule
 
/*
module Lesson1(
sw0,sw1,sw2,sw3,sw4,sw5,sw6,sw7,sw8,sw9,
led0,led1,led2,led3,led4,led5,led6,led7,led8,led9);
	input sw0,sw1,sw2,sw3,sw4,sw5,sw6,sw7,sw8,sw9;
	output led0,led1,led2,led3,led4,led5,led6,led7,led8,led9;
	
	assign led0=sw0;
	assign led1=sw1;
	assign led2=sw2;
	assign led3=sw3;
	assign led4=sw4;
	assign led5=sw5;
	assign led6=sw6;
	assign led7=sw7;
	assign led8=sw8;
	assign led9=sw9;
	
endmodule
*/
</code></pre>
<br />※コメント内は入出力をバラで書いた場合。<br /><br /><div>保存してから[Processing]→[Start]→[Start Anarysis &amp; Elaboration]を実行。成功したら次はピンアサイン。</div><div>ピンアサインは[Assignments]→[Pin Planner]でピンプランナーを開く。</div><div>ここで NodeNameに対し以下のLocationを入力する。</div><br /><div>NodeName Location</div><div>led[9] PIN_B1</div><div>led[8] PIN_B2</div><div>led[7] PIN_C2</div><div>led[6] PIN_C1</div><div>led[5] PIN_E1</div><div>led[4] PIN_F2</div><div>led[3] PIN_H1</div><div>led[2] PIN_J3</div><div>led[1] PIN_J2</div><div>led[0] PIN_J1</div><div>sw[9] PIN_D2</div><div>sw[8] PIN_E4</div><div>sw[7] PIN_E3</div><div>sw[6] PIN_H7</div><div>sw[5] PIN_J7</div><div>sw[4] PIN_G5</div><div>sw[3] PIN_G4</div><div>sw[2] PIN_H6</div><div>se[1] PIN_H5</div><div>sw[0] PIN_J6</div><br /><div>このピン割当てについてはDE0_User_manualを参照。</div><br /><div>[Processing]→[Start Compilation]でビルドする。</div><br /><div>☆次のハマりどころ</div><div>[Processing]→[Start Compilation]でいきなりビルドするとピンアサインも勝手に割り当てられてしまい、ピンプランナーで付け替えることができない。</div><div>[Assignments]→[Remove Assignments]で□Pin,Location &amp; Routing Assignmentsにチェックを入れて[OK]で解除。このあとピンプランナーで入力。</div><br /><div>　あとはDE0に転送する。左側のスライドスイッチが[RUN]の位置にあることを確認し、DE0の電源を入れる。</div><div>[Tools]→[Programmer]で画面を開き、左上にある[Hardware Setup...]ボタンを押して USB-Blaster [USB-0] をダブルクリック。ここの設定は一回だけでよい。</div><div>転送はこの画面を開いて[Start]のボタンを押す。これでFPGAにConfigureが転送される。</div><br /><div>　DE0の電源を入れるとデモがスタートするが、これは基板上のConfiguration用ROMからFPGAにデモが書いてあるイメージが転送されるため。上記操作だとDE0基板上のUSB-Bluster経由でPCからFPGAに直接転送される。</div><br /><div>スライドスイッチをONにすると対応したLEDが点灯する。(動画)</div><div><object width="320" height="264"><param name="movie" value="http://www.youtube.com/v/rn2aXGzYI6Q&amp;feature=youtube_gdata_player"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/rn2aXGzYI6Q&amp;feature=youtube_gdata_player" type="application/x-shockwave-flash" allowfullscreen="true" width="320" height="264"></object><br /></div><br /><div>　ビルド時のWarinigに関しては、今回はclockは使用していないので</div><div>332068 No clocks defines in design.</div><div>は無視。</div><div>332012 Synopsys Design Constraints File fine not found: ...&nbsp;</div><div>は制約ファイルといってディレイのタイミングを調整するのに使うが今回は意識しないのでこれも無視。</div><div>(ってSynopsysの技術使ってるんだこれ)</div><br /><div>　感想。こんなに気軽に出来るとは思ってなかった。身構え過ぎでした。</div><div>大昔、元職場の同僚がアルテラのPentium60/66MHzに似たパッケージの石を486DX100MHzのWindows3.1マシンで一生懸命設計しコンパイルに一晩かかっていたのを思い出しましたが、そんな話ではなかった。こんなに簡単に出来ていいのか、としばらくは興奮状態。</div><br /><div>なつたんさん、今頃使いはじめてごめんなさい。これから使い潰します。</div>
<br />
<table cellpadding="5" border="0"><tbody><tr><td valign="top"><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/478983137X/keisanki-22/"><img alt="超入門！FPGAスタータ・キットDE0で始めるVerilog HDL: すぐ始められる!USB対応・書き込み器不要・大容量FPGA搭載! (トライアルシリーズ)" border="0" src="http://ecx.images-amazon.com/images/I/51QO3wFFB4L._SL160_.jpg"></a></td><td valign="top"><span><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/478983137X/keisanki-22/">超入門！FPGAスタータ・キットDE0で始めるVerilog HDL: すぐ始められる!USB対応・書き込み器不要・大容量FPGA搭載! (トライアルシリーズ)</a><br />芹井 滋喜 <br /><br />CQ出版  2011-07-22<br />売り上げランキング : 115091<br /><br /><a target="_top" href="http://www.amazon.co.jp/exec/obidos/ASIN/478983137X/keisanki-22/">Amazonで詳しく見る</a></span><span> by <a href="http://www.goodpic.com/mt/aws/index.html">G-Tools</a></span></td></tr></tbody></table>]]>
</content:encoded>
</item>

</rdf:RDF>
