The BAQ/Data Acquisition/Pulse Shape Analysis/FPGA Diary/5日目:I/Oを使う

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
DAQ System DAQ Module Pulse Shape Analysis RTLinux Linux Device Driver Home
FPGA Diary XPort Diary Home

もどる

FPGAの外部I/Oを使ってみる。

4日目のソースを元に、A2 Connector Pinを使ってI/Oを行う。

○ D6 = Pin 7 からClockに同期してパルスを出す
○ C6 = Pin 8 からPush Button(1) = BTN2を押したときに信号を出す
○ C9 = Pin 14 〜 B6 = Pin 21を入力にし、その状態をLED 1〜8に反映させる

まずはclock.ucfに以下を追加する。

NET "d6out"         LOC = "D6";
NET "c6out"         LOC = "C6";
NET "a2in<0>"       LOC = "C9";
NET "a2in<1>"       LOC = "D10";
NET "a2in<2>"       LOC = "A3";
NET "a2in<3>"       LOC = "B4";
NET "a2in<4>"       LOC = "A4";
NET "a2in<5>"       LOC = "B5";
NET "a2in<6>"       LOC = "A5";
NET "a2in<7>"       LOC = "B6";

このファイルでFPGAのI/Oと変数との関連付けするようだ。

次にclock.vhdで追加した変数について入力なのか出力なのかの指定を行う。

entity clock is port (
     clk50in                  : in std_logic ;
     d6out                    : out std_logic ;
     c6out                    : out std_logic ;
     a2in                     : in std_logic_vector(7 downto 0);
     ...省略...
end clock ;

signal d6           : std_logic ;
signal c6           : std_logic ;
signal a2           : std_logic_vector(7 downto 0) ;

d6out_obuf     : obuf_lvcmos33     port map(i => d6, o => d6out);
c6out_obuf     : obuf_lvcmos33     port map(i => c6, o => c6out);

loop1 : for i in 0 to 7 generate
a2_ibuf   : ibuf_lvcmos33     port map(i => a2in(i),   o => a2(i));
end generate ;

Clockに同期したパルスを出す部分は以下。

process (clk50, rst)
begin
if rst = '1' then
        d6 <= '0';
elsif clk50 = '1' then
        d6 <= '1';
elsif clk50 = '0' then
        d6 <= '0';
end if;
end process;

C6 = Pin 8 からPush Button(1) = BTN2を押したときに信号を出す部分。

process (pb, rst)
begin
if rst = '1' then
     c6 <= '0';
elsif pb(1) = '1' then
     c6 <= '1';
else
     c6 <= '0';
end if;
end process;

C9 = Pin 14〜B6 = Pin 21を入力にし、その状態をLED 0〜7に反映させる部分。

process (a2, rst)
begin
if rst = '1' then
  led <= "00000000";
else
  led <= a2;
end if;
end process;
Clockの出力 動作の様子(動画)

Clockに同期したパルスをオシロスコープで見た。50.000 MHzだそうです。
波高は5Vでした。

それとPin 6 (出力)とPin 16、17(入力)をつないだ様子を動画で。Pin 14〜21がLED 0〜7に対応している。
初めはPin 16にPin 6をつないでいる。LED 2 = Pin 16だけ消えている。その他のLEDは点灯している。(オープンだとHighになるらしい)
ボタンを押すとPin 6がHighになり、正しくLEDに反映される。
Pin 17につなぎかえて、同じくボタンを押してみた。正しい。

これが今回のプロジェクトファイル

Last Update: 2006/1/6
Hidetada Baba
baba rarfaxp.riken.jp