« スキー 金沢一里野スキー場 | メイン | BTC2013年活動報告レポートの提出(BTC_RMR) »

FPGA開発にチャレンジ (XILINX EDX-002 + Verilog)

FPGAは、プログラマブルな集積回路の一つ。Verilogなどで処理を記述して、修正回路として挙動させることができます。

ブレッドボードにゲートや抵抗を繋いで回路を作るよりも、楽に回路を実装できるかも?
いちいちカルノー図とか描かなくていいわけです。
(新しい技術なのかと思いきや、実はFPGAの発売は1985年からということで、自分より年上でした)

それはさておき、今回は下記URL「触って学ぼう FPGA開発入門」をもとに、クロックとボタン入力でLEDをカウントダウン/カウントアップさせるverilogを実行してみました。

【参考】
http://monoist.atmarkit.co.jp/mn/kw/fpga_basic.html (触って学ぼう FPGA開発入門)


module UPDOWN(RESET, CLK, DEC, COUNT); //モジュール名とポート
input RESET, CLK, DEC; //入力ポート
output [3:0] COUNT; //出力ポート

reg [22:0] tmp_count; //継続的代入文はwire宣言、手続き的代入文の左辺はreg宣言
reg [3:0] COUNT_TMP;

//動作を記述。(CLK,RESETいずれかが変化したら、always文中のbegin~endの処理が実施
always @(posedge CLK or negedge RESET)
begin
if (RESET == 1"b0) //RESETが0 (つまりON)のとき
tmp_count <= 23"h000000; //tmp_countを0にリセット
else //RESETが0でない(つ・ワりOFF)のとき
tmp_count <= tmp_count + 23"h1; //tmp_countをカウントup
end

//カ・Eンタは6MHzで高速すぎるため、フリーランカウンタの最上位ビットのみをクロックとして入力
assign DIVIDE_CLK = tmp_count[22]; //22bit目をDIVIDE_CLKへ

always @(posedge DIVIDE_CLK or negedge RESET)//DIVIDE_CLKまたはRESETが変化したとき
begin
if (RESET == 1"b0) //RESETが0 (つまりON)のとき
COUNT_TMP <= 4"h0; //tmp_countを0にリセット
else if (DEC == 1"b1) //RESETが0でない(つまりOFF)かつ、DECスイッチが押されていないとき
COUNT_TMP <= COUNT_TMP + 4"h1; //カウントアップ
else //DECスイッチが押されているとき
COUNT_TMP <= COUNT_TMP - 4"h1; //カウントダウン
end

assign COUNT = ~COUNT_TMP; //LEDは負論理(0のとき点灯)なので、反転

endmodule

Windows8に開発環境+ドライバを入れるとブルースクリーンになるので、わざわざWin7を引っ張りだすはめに...
せっかく7セグも実装されているのでこちらに出力したいですが、それはまた追々、

トラックバック

このエントリーのトラックバックURL:
http://www.ddhost.jp/mt/mt-tb.cgi/862

About

2014年01月19日 20:00に投稿されたエントリーのページです。

ひとつ前の投稿は「スキー 金沢一里野スキー場」です。

次の投稿は「BTC2013年活動報告レポートの提出(BTC_RMR)」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。