| ||||||||
| ||||||||
| ||||||||
|
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