QuartusのState Machine Viewerを使ってみる

FPGA

関連記事 FPGAの記事一覧

スポンサーリンク

State Machine Viewer

今回はQuartusのState Machine Viewerを使ってみたいと思います。

State Machine Viewerを使うと、Quartusで設計したステートマシーンをグラフィカルに表示してくれるようです。

ちなみに、QuartusのRTL Viewerについても記事にしたので、ご興味のある方はこちらもご覧ください。

ステートマシーンの仕様

まず、以下のようなステートマシーンを作成したいと思います。

  • 初期ステートはS0
  • クロックの立ち上がりエッジでS0からS1に遷移
  • Dir=0のときは、クロックの立ち上がりエッジでS1からS2に遷移
  • Dir=1のときは、クロックの立ち上がりエッジでS1からS3に遷移
  • Reset=0になったら、どのステートにいてもクロックの立ち上がりエッジでS0に遷移

ステートマシーンをVHDLで作成

上で決めた仕様のステートマシーンをVHDLで記述してみました。

library IEEE;library IEEE;
use IEEE.std_logic_1164.all;

entity StateMachine is
   port (
        nReset : in std_logic;
        Clk : in std_logic;
        Dir : in std_logic;
        StateOut : out  std_logic_vector(1 downto 0) 
   );
end StateMachine;

architecture rtl of StateMachine is
   
   type state_pos is ( S0, S1, S2, S3 );
   signal state : state_pos;

begin

   process(nReset, Clk) begin

      if Clk'event and Clk = '1' then

         if nReset = '0' then

            state <= S0;

         elsif state = S0 then

            state <= S1;

         elsif state = S1 then

            if Dir = '0' then

               state <= S2;

            else

               state <= S3;

            end if;

         end if;

      end if;

   end process;


   process( state ) begin

      case state is

         when S0 => StateOut <= "00";  

         when S1 => StateOut <= "01";  

         when S2 => StateOut <= "10";  

         when S3 => StateOut <= "11"; 

      end case; 

   end process;

end rtl;

State Machine Viewerを実行

ステートマシーンを作成し、コンパイルまで完了したら、State Machine Viewerを実行してみます。

Quartusで実行する方法は、Tools > Netlist Viewers > State Machine Viewerを選択します。

すると、以下のような結果が表示されました。

この結果を見ると、期待通りのステートマシーンが設計できていたようです!

これだけ見ると使い方は簡単なのですが、最初はState Machine Viewerを実行しても結果を表示してくれず、ここまで到達するのに時間がかかりました。

なので、結果を表示してくれなかった時に実施した対策を以下に記載しておきます。

ステートマシーンを表示してくれない時は

最終的には無事にステーマシーンがグラフィカルに表示されましたが、最初は何も表示されない空の結果が表示されるだけでした。

同じ状況の方は、下の内容を試してみてください。

コンパイルのセッティングを変える

ステートマシーンをグラフィカルに表示させるためには、コンパイルのセッティングを変える必要があるようです。

変更方法は、まず、Assignment > Settingsを選択します。

次に”Compiler Settings”のカテゴリーを選択し、”Advanced Settings (Synthesis)”を選択します。

次に、
“Safe State Machine”を”On”にし、
“State Machine Processing”を”User-Encoded”に設定します。

設定が終わったらOKを押します。

そしたら、もう一度コンパイルします。

コンパイル終了後に”Compilation Report”が表示されるので、内容を確認してみます。

Analysis & Synthesis > Settings > Settingsを選択すると、
先ほど変更した”Safe State Machine”と
“State Machine Processing”の設定が確認できるので、
コンパイル設定の変更が反映されているかを確認します。

これでコンパイルの設定変更は終了です。
ステートマシーンが表示されるか、試してみて下さい。

“quartus_npp”の実行

私の場合は、コンパイルの設定変更だけではダメでした。

再度、いろいろ調べた結果、Quartusのhelpで以下の説明を見つけました。

ID:12752 Perform NLV Preprocess (quartus_npp) before opening the State Machine Viewer. 
CAUSE: You attempted to open the State Machine Viewer, but the Quartus Prime software cannot open the State Machine Viewer until NLV Preprocess (quartus_npp) finishes processing your design. Performing NLV Preprocess generates the State Machine netlist needed to generate the data in the State Machine Viewer.
ACTION: Perform NLV Preprocess (quartus_npp) and then open the State Machine Viewer.

これを見ると”quartus_npp”を実行しないといけないようです。

でも、”quartus_npp”ってナニ???

最初は意味がわかりませんでしたが、quartusのインストールフォルダにあるbin64フォルダに、quartus_nppというアプリケーションがあるのを見つけました。

これを実行後にState Machine Viewerを実行したら無事にグラフィカルなステートマシーンが表示されました!

なので、私の場合は、このquartus_nppが原因だったようです。もちろん、コンパイルの設定も効いていると思いますが。

まとめ

State Machine Viewerがグラフィカル表示してくれない時は、以下を試すと良いかもしれません。

  • Safe State MachineをOnにする
  • State Machine ProcessingをUser-Encodedにする
  • quartus_nppのアプリを実行する

関連記事 FPGAの記事一覧

タイトルとURLをコピーしました