US English (US)
JP Japanese
CN Chinese
KR Korean

Contact Us

If you still have questions or prefer to get help directly from an agent, please submit a request.
We’ll get back to you as soon as possible.

Please fill out the contact form below and we will reply as soon as possible.

  • Knowledge Base Home
  • Contact Us
Japanese
US English (US)
JP Japanese
CN Chinese
KR Korean
  • Home
  • Moku:Go
  • Moku:Goロジックアナライザ & パターンジェネレータ

マルチインストゥルメントモードでデジタルI/Oピンを使用するにはどうすればいいですか

マルチインストゥルメントモードとMokuクラウドコンパイルでMoku:GoデジタルI/Oを使用する

Written by Heyang Long

Updated at April 9th, 2025

Contact Us

If you still have questions or prefer to get help directly from an agent, please submit a request.
We’ll get back to you as soon as possible.

Please fill out the contact form below and we will reply as soon as possible.

  • Moku:Lab
    Moku:Lab に関するよくある質問 Moku:Labロジックアナライザ/パターンジェネレータ Moku:Lab時間および周波数アナライザー Moku:Labスペクトラムアナライザー Moku:Lab PID コントローラ Moku:Labオシロスコープ Moku:Lab位相計 Moku:Labレーザーロックボックス Moku:Labデジタルフィルターボックス Moku:Lab任意波形ジェネレータ Moku:Lab波形ジェネレーター Moku:Lab周波数応答アナライザー Moku:Lab FIR フィルター ビルダー Moku:Labロックインアンプ Moku:Labデータロガー
  • Moku:Go
    Moku:Goに関するよくある質問 Moku:Goロックインアンプ Moku:Goロジックアナライザ & パターンジェネレータ Moku:Goオシロスコープ & 電圧計 Moku:Goスペクトラムアナライザー Moku:Go波形ジェネレータ Moku:Go時間・周波数アナライザー Moku:Goデジタルフィルターボックス Moku:Go FIR フィルター ビルダー Moku:Goレーザーロックボックス Moku:Go任意波形ジェネレータ Moku:Go周波数応答アナライザー Moku:Goデータロガー Moku:Go計 Moku:Go電源 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
+ More

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;                                                             

Was this article helpful?

Yes
No
Give feedback about this article

Related Articles

  • Mokuを更新して新しい機器にアクセスする
  • 計器ディスプレイ上の複数のコントロールにアクセスする方法
  • 私たちの研究室では WiFi は許可されていません。どうすればMokuを使用できますか?
  • 「pkg_resources という名前のモジュールがありません」というエラーを修正
  • Moku:Pro波形ジェネレータの立ち上がり時間と立ち下がり時間はどれくらいですか?

Sitemap

  • Moku:Lab
  • Instruments
  • Software
  • Company
  • Support
  • Store
  • Terms & Conditions
  • Privacy Policy

Offices

United States
+1 (619) 332-6230
12526 High Bluff Dr
Suite 150
San Diego, CA 92130

Australia
+61 2 6171 9730
243 Northbourne Avenue
Suite 2
Lyneham, ACT 2602

Australia
+61 03 7073 3594
700 Swanston Street
Suite 5E, Level 5
Carlton, VIC 3053

Follow us

Youtube LinkedIn

官方微信

Contact us
© 2025 Liquid Instruments. All rights reserved.

Knowledge Base Software powered by Helpjuice

Definition by Author

0
0
Expand