概要
基板の外部から入力するトリガ信号が来ているかをLEDで目視確認できるような構成について紹介します。
トリガはFPGAで受けて処理していますので、残念ながらフルディスクリートではありません。
おすすめのバッファIC
TI社のSN74LV1T34DBVRがおすすめです。
- 単一電源で動作可能
- FPGAのIO電源3.3Vのとき、トリガ入力1.8V~5Vまで入力可能
- 安い(40円くらい)
- 手づけでもリフローでも実装がしやすい((SOT-23)
- IO電圧が1.8でも、3.3Vでも、5Vでも使える
基板外部からの信号を入力するので、念のため保護ダイオードとプルダウンして使っているケースが多いです。
利用するFPGAのモジュール
過去に紹介したVHDLのモジュールを組み合わせることで、処理を実現しています。
各モジュールの中身は過去記事を参照してください。
こちらのモジュールで入力信号の同期化及びエッジの検出をしています。
こちらの記事で紹介したモジュールに検出した立ち上がりエッジを入力することで、一定時間より長くLEDを点灯させることができ、目視可能となります。
VHDLソース
過去記事のモジュールをインスタンスしているだけですが、このようにTRIGGER_INDICATORモジュールとして用意しておくと再利用しやすいです。
TRIGGER_INDICATOR.vhd
-------------------------------------------------------------------
-- トリガインジケーター
-- 非同期のトリガ入力信号を同期化して、立ち上がりエッジを検出し、
-- エッジから一定時間引き延ばしたモニタ信号を生成する。モニタ信号はLEDにて目視。
-------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity TRIGGER_INDICATOR is
Port(
i_CLK :in std_logic;
i_RST_p :in std_logic;
i_TRIGGER_p :in std_logic;--
o_TRIGGER_SYNC :out std_logic;--同期化したトリガ
o_TRIGGER_RISE :out std_logic;--トリガの立ち上がりエッジ
o_TRIGGER_FALL :out std_logic;--トリガの立ち下がりエッジ
o_INDICATOR_p :out std_logic --トリガ入力目視用のインジケーター(LEDなどに接続)
);
end entity;
architecture RTL of TRIGGER_INDICATOR is
signal sync_trg :std_logic;
signal rise_p :std_logic;
signal fall_p :std_logic;
signal extend_pulse_p :std_logic;
begin
--同期化FFとエッジ検出
u_SYNCHRO_DFF:entity work.SYNCHRO_DFF
port map
(i_CLK =>i_CLK
,i_RST_p =>i_RST_p
,i_PORT =>i_TRIGGER_p
,o_SYNCHRO =>sync_trg
,o_RISE_p =>rise_p
,o_FALL_p =>fall_p
);
--駆動パルスのエッジを引き延ばす(レジスタリード用)
u_PULSE_EXTENDER:entity work.PULSE_EXTENDER
generic map(
EXTEND_CYCLE => 25000000--引き延ばすクロックサイクル数(50MHzで0.5s)
)
port map
(i_CLK =>i_CLK
,i_RST_p =>i_RST_p
,i_SOURCE_PULSE_p =>rise_p
,o_EXTEND_PULSE_p =>extend_pulse_p
);
o_TRIGGER_SYNC <=sync_trg;
o_TRIGGER_RISE <=rise_p;
o_TRIGGER_FALL <=fall_p;
o_INDICATOR_p <=extend_pulse_p;
end architecture;