マルチインストゥルメントモードでデジタルI/Oピンを使用するにはどうすればいいですか
マルチインストゥルメントモードとMokuクラウドコンパイルでMoku:GoデジタルI/Oを使用する
- Moku:Lab
- Moku:Go
-
Moku:Pro
Moku:Proに関するよくある質問 Moku:Pro波形発生器 Moku:Proタイム&周波数アナライザ Moku:Proロジックアナライザ/パターンジェネレーター Moku:Proレレーザーロックボックス Moku:Proロックインアンプ Moku:Proスペクトラムアナライザ Moku:Proデータロガー Moku:Pro任意波形発生器 Moku:Proマルチ機器モード Moku:Pro位相計 Moku:Pro FIRフィルタービルダー Moku:Pro PIDコントローラー Moku:Proオシロスコープ Moku:Pro周波数応答アナライザ Moku:Proデジタルフィルターボックス
- Python API
- MATLAB API
- 任意波形発生器
- データロガー
- デジタルフィルターボックス
- FIR フィルタ ビルダー
- 周波数応答アナライザー
- レーザーロックボックス
- ロックインアンプ
- オシロスコープ
- 位相計
- PIDコントローラー
- スペクトラムアナライザー
- 時間と周波数アナライザー
- 波形発生器
- ロジックアナライザ/パターンジェネレーター
- マルチ機器モード
- Mokuクラウドコンパイル
- Mokuに関するよくある質問
- LabVIEW API
Moku:Goは 16 個の双方向ピンがあり、ユーザーはこれらを 16 個の独立した信号ピンとして利用することも、1 つの 16 ビット バスに組み合わせることもできます。この記事ではMoku:Goのマルチインストゥルメント モードでデジタル I/O ピンを使用する方法について説明します。
1. スタンドアロンデジタルピン
Moku:Goの 16 個のピンはそれぞれデジタル入力または出力として個別に設定でき、ロジック アナライザーの統合パターン ジェネレーターによって制御できます。ピン 1 ~ 8 は出力ピンとして設定され、ピン 9 ~ 16 は入力ピンとして設定されました。ピン 1 ~ 8 はジャンパー ワイヤを使用して外部でピン 9 ~ 16 にループバックされました。


このセットアップでは、ロジック アナライザ/パターン ジェネレータは、特定のデジタル ピンからの信号を読み取ると同時に、他のデジタル ピンに信号を出力できます。下の図に示すように、ロジック アナライザは、DIO とジャンプ ワイヤを介してパターン ジェネレータ 1 によって生成された信号を正確にキャプチャします。ビットは 0 ベースですが、ピンは 1 ベースであることに注意してください。

2. 16ビットバスとして結合
デジタル ピンは、最下位ビット (LSB) から最上位ビット (MSB) の順に 16 ビット信号バスにマッピングできます。たとえば、ピン 1 は 16 ビット信号バスのビット 0 (LSB) に対応し、ピン 16 はビット 15 (MSB) に対応します。下のスクリーンショットに示されている構成では、波形ジェネレーターが DIO を介して 16 ビットのランプ波を生成し、同時にロジック アナライザーが 16 ピンの出力波形を視覚化します。

ランプ波形は、100 Hz の繰り返しレートと 10 Vpp の振幅に設定されています。ロジック アナライザの波形は、上位ビットの遷移が少なく、下位ビットの遷移が多いことを示しています。この観察結果は、最上位ビット (MSB) が各サイクル内で 2 回しか変化しないのに対し、最下位ビット (LSB) は波形の更新のほぼすべてで変化するため、予想される動作と一致しています。

3. Mokuクラウドコンパイル
Moku Cloud Compile (MCC) を使用すると、DIO を使用して適応性が高くカスタマイズされたアルゴリズムを作成するための範囲が広がります。デジタル信号発生器を作成し、DIO を介して信号を送信することができます。たとえば、次の MCC カスタム関数を考えてみましょう。ピン 1 からトリガー信号を読み取り、ピン 6 ~ 8 に 3 つのデジタル トリガーを生成します。その後、ピン 6 ~ 8 はピン 2 ~ 4 にループバックされ、ロジック アナライザーを使用して観察できます。

たとえば、添付の MCC コードは、入力トリガー信号を受信すると、隣接する各トリガー間に 10 クロック サイクルのギャップがある 3 つのトリガー信号を生成します。次の図は、トリガーされていない出力結果 (左) とトリガーされた出力結果 (右) の両方を示しています。トリガーされた図では、トリガー信号間の 320 ns (10 * 1/31.25 MHz) の遅延が確認できます。
このカスタム トリガー関数の VHDL コードは以下に提供されており、合成してMoku:Goにデプロイできます。ビットストリームを生成するには、次のリンクに従ってください: Moku Cloud Compile - 入門ガイド
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
-- InputA(0): trigger input
-- OutputA(5): regenerated trigger0 output
-- OutputA(6): regenerated trigger1 output
-- OutputA(7): regenerated trigger2 output
architecture TopWrapper of CustomWrapper is
type t_state is (Waiting, Running);
signal state, state_next : t_state;
signal prevTriggerIn : std_logic;
signal count, count_next : unsigned(15 downto 0);
begin
State_Machine: process (prevTriggerIn, InputA(0), count, state)
begin
case state is
when Waiting =>
if(prevTriggerIn /= '1' and InputA(0) = '1') then
state_next <= Running;
else
state_next <= Waiting;
end if;
when Running =>
if(count /= to_unsigned(31,count'length)) then
count_next <= count + to_unsigned(1,count'length);
state_next <= Running;
else
count_next <= to_unsigned(0,count'length);
state_next <= Waiting;
end if;
end case;
end process;
Trigger_Gen: process(clk) is
begin
if reset = '1' then
state <= Waiting;
prevTriggerIn <= '0';
count <= to_unsigned(0,count'length);
OutputA(5) <= '0';
OutputA(6) <= '0';
OutputA(7) <= '0';
elsif rising_edge(Clk) then
prevTriggerIn <= InputA(0);
state <= state_next;
count <= count_next;
case state is
when Waiting =>
OutputA(5) <= '0';
OutputA(6) <= '0';
OutputA(7) <= '0';
when Running =>
if (count = to_unsigned(10,count'length)) then
OutputA(5) <= '1';
OutputA(6) <= '0';
OutputA(7) <= '0';
elsif (count = to_unsigned(20,count'length)) then
OutputA(5) <= '0';
OutputA(6) <= '1';
OutputA(7) <= '0';
elsif (count = to_unsigned(30,count'length)) then
OutputA(5) <= '0';
OutputA(6) <= '0';
OutputA(7) <= '1';
else
OutputA(5) <= '0';
OutputA(6) <= '0';
OutputA(7) <= '0';
end if;
end case;
end if;
end process;
end architecture;