ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« Design Wave Magazine 2007年7月号付録のFPGAを使う | メイン | FPGAのコンフィグ用XSVFファイルを1クリックで生成する »

FPGAでLEDを点滅させる




fpga_blink_led_01.gif
今回はFPGA内部のクロックを利用してLEDを点滅する。利用したFPGAは前回と同じくDesign Wave Magazine 2007年7月号付録基板。搭載されているのはSpartan3Eだ。

fpga_blink_led_02.gif
「ISE WebPack」を起動したらプロジェクトを作成する。「File」メニューの「New Project」を選択すればいい。

fpga_blink_led_03.gif
そしてプロジェクト名とプロジェクトの保存フォルダを指定する。今回はプロジェクト名を「BlinkLED」、保存場所を「c:\projects」とした。

fpga_blink_led_04.gif
次の画面ではデバイスの設定をする。
「Family」を「Spartan3E」に、
「Device」を「SC3S250E」に、
「Package」を「VQ100」に、
「Speed」を「-4」にする。

fpga_blink_led_05.gif
前回はプロジェクト作成後にソースファイルを追加した。今回はウイザード上からソースファイルを追加する。
デバイスの設定画面の次に現れる「Create New Source」画面で「New Source」ボタンを押す。

fpga_blink_led_06.gif
するとソースファイルの形式選択画面が開く。ここで「VHDL Module」を選択する。ファイル名は「BlinkLED」とした。

fpga_blink_led_07.gif
そして信号の設定をする。今回はクロックを利用してLEDを光らせるため、「CLK」と「LED」を用意し、それぞれ「in」と「out」に設定した。

fpga_blink_led_08.gif
これでソースコードの追加が終わる。「Finish」ボタンを押す。

fpga_blink_led_09.gif
画面上に作成したソースファイルの名前と形式が表示される。確認したら「Next」ボタンで次へ進む。

fpga_blink_led_10.gif
既存ソースファイルの追加画面が開く。ここではそのまま「Next」ボタンで進む。

fpga_blink_led_11.gif
これでプロジェクトの作成が終わりだ。「Finish」ボタンでウイザードを終える。

fpga_blink_led_12.gif
ウイザードによって自動的にソースコードが追加される。追加されたソースコード「BlinkLED.vhd」を開き、修正する。今回はクロックを23ビットのカウンターで周してLEDに出力することにした。
「signal TMP : STD_LOGIC_VECTOR(22 downto 0)」の行で内部で利用する23ビットの変数(?)をゼロで初期化して用意する。そしてクロックの立ち上がり(if CLK'event and CLK='1' then)をトリガーとして変数が22ビットの間(if TMP < "10000000000000000000000" then)はLEDを光らせ、それを超えたら消灯させる。
VHDLの作りは非常に簡単。PascalとVisual Basicが混じったような文法で記述できる。ただ信号値を16進数で指定する方法などは不明。できればいいのだが、できないとしたら、ゼロの数を書き間違えてタイミングが意図した通りに動かない!というケアレスミスが生じやすいだろうなぁ。


----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 21:15:47 07/02/2007
-- Design Name:
-- Module Name: BlinkLED - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity BlinkLED is
Port ( CLK : in STD_LOGIC;
LED : out STD_LOGIC);
end BlinkLED;

architecture Behavioral of BlinkLED is

signal TMP : STD_LOGIC_VECTOR(22 downto 0) := "00000000000000000000000";
begin

process (CLK)
begin
if CLK'event and CLK='1' then
TMP <= TMP + "00000000000000000000001";

if TMP < "10000000000000000000000" then
LED <= '1';
else
LED <= '0';
end if;
end if;
end process;

end Behavioral;






fpga_blink_led_13.gif
ソースコードが書けたらピンの配置を決めるためユーザー制約ファイルを作る。前回は「Project」メニューの「New Source」から追加して作成した。しかし手順が多いと面倒なので今回は手順を省略していきなり「User Constraints」の「Assign Package Pins」を右クリックして現れたメニューから「Run」を選択して設定画面を開く。

fpga_blink_led_14.gif
すると、まだユーザー制約ファイル(UCFファイル)がプロジェクトに追加されていないため、自動的に作るかどうかが問われる。ここで「Yes」を選択する。

fpga_blink_led_15.gif
すると「Xilinx PACE」が起動してピン配置を指定できるようになる。
クロック端子(CLK)を「P88」に、LEDを「P98」にする。
88ピンをクロックに指定するのは、その端子が"クロック用だから"という単純な理由だ。DCMなどを利用するのでない限り(?)、この「P88」を指定するといいだろう。
指定が終わったら右上の「×」ボタンから閉じる。

fpga_blink_led_16.gif
これでソースコードの記述とピン配置の設定が終わった。次にビルド(論理合成など)をする。「Generate Programming File」を右クリックして現れたメニューから「Run」を選択すればいい。

fpga_blink_led_17.gif
しばらくするとビルドが終わる。次にFPGAの書き込みに必要なXSVFファイルを作成するため「Generate Programming File」にある「Configure Device (iMPACT)」を右クリックして現れるメニューから「Run」を選択する。

fpga_blink_led_18.gif
作業内容の選択画面が開いたら「Enter a boundary-Scan chain manually」を選択する。

fpga_blink_led_19.gif
これでiMPACTの画面が開いた。ここで右クリックをして現れたメニューから「Add Xillinx Device」を選択する。

fpga_blink_led_20.gif
するとファイル選択画面が開く。ここでビルドにより生成されたビットストリームファイル「blinkled.bit」を選択する。

fpga_blink_led_21.gif
すると画面にICのアイコンが追加される。確認したら「Output」メニューの「XSVF File」にある「Create XSVF File」を選択してXSVFファイルの作成を開始する。

fpga_blink_led_22.gif
保存するXSVFファイル名は「Test」とした。

fpga_blink_led_23.gif
XSVFファイルの作成が開始したらICを右クリックして現れたメニューから「Program」を選択する。

fpga_blink_led_24.gif
プロパティ選択画面が開いたらそのまま「OK」ボタンを押す。

fpga_blink_led_25.gif
これでXSVFファイルにビットストリームが書き込まれた。XSVFファイルの作成を終わらせるため「Output」メニューの「XSVF File」にある「Stop Writing to XSVF File」を選択する。

fpga_blink_led_26.gif
これでプロジェクトフォルダーに保存されたXSVFファイル「Test.xsvf」をJTAGライターでFPGAへ書き込む。


_DSC9171.JPG
すると基板上に用意されている緑色LEDが点滅した。CLK入力は基板に実装した水晶発振子が33MHzで、それをそのまま利用している。ソースコード上で利用している点滅周期は23ビット周期。23ビットは2進数で100000000000000000000000(0が23個)=10進数で8388608。つまり33MHz÷8388608≒3.94Hz。ということで一秒間に4回程度の点滅となる。

_DSC9178.JPG
LEDの点滅周期をオシロスコープで調べてみた。計測結果は3.92Hz(オシロスコープはかなり適当)。理論値が3.94Hzだからおおよそあっていた。










Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報