AR# 60799

Vivado 合成のデザイン アシスタント - 合成 HDL 属性のサポート - fsm_encoding、fsm_safe_state、srl_style

説明

このアンサーでは、Vivado 合成の属性である fsm_encoding、fsm_safe_state、srl_style について説明し、そのコード例を示します。
 
コード例は、このアンサーの最後にあるリンクからダウンロードできます。

既知の問題、適切なコード記述に関する情報が含まれます。

注記
: 各コード例は Vivado プロジェクトの作成に直接使用できます。
各例に含まれる合成属性は、各ソース ファイルのヘッダーを参照してください。

ソリューション

FSM_ENCODING:

fsm_encoding 属性は、有限ステート マシンに使用するエンコード方式を指定します。
デフォルト値は auto で、コーディング スタイルに基づいて最適な FSM エンコードが Vivado 合成で自動的に選択されます。
fsm_encoding を使用できるようにするには、まず FSM が推論される必要があります。


使用可能な値は、one_hot、sequential、johnson、gray、none (FSM を抽出しない)、および auto です。

Verilog 例:

(* fsm_encoding = "gray" *)reg [2:0] state;

VHDL 例:

attribute fsm_encoding : string;
attribute fsm_encoding of state : signal is "gray";

 


FSM_SAFE_STATE:

fsm_safe_state 属性を設定すると、ステート マシンが無効ステートになった場合にどうすべきかを指定するロジックがステート マシンに挿入されます。


無効ステートの FSM では出力が予測不可能になることがありますが、これはセーフ ステートによって回避できます。

使用可能な値は、auto_safe_state、reset_state、power_on_state、および default_state です。

  • auto_safe_state: 1 ビット/フリップの自動訂正にハミング 3 エンコードを使用します。
  • reset_state: 1 ビット/フリップのハミング 2 エンコード検出を使用して、ステートマシンを強制的にリセット ステートにします。

fsm_safe_state を "reset_state" に設定すると、エンコードされたステート マシンで無効なステートが検出された場合にリセット状態が使用されます。

リセット状態は、リセット時のステートとして指定されているステートです。次に例を示します。

   if (reset = '1') then
    state <= s1;

  • "power_on_state": 1 ビット/フリップのハミング 2 エンコー ド検出を使用して、ステート マシンを強制的にパワーオン ステートにします。

fsm_safe_state 属性の "power_on_state" 値には、"reset_state" と同じ機能があります。

この値は、RTL でリセット状態が定義されておらず、セーフ ステートとしてステート レジスタの初期 INIT 値を使用する場合に使用できます。 
 

  • "default_state": ハミング 2 エンコード検出を使用して、ステート マシンを RTL で指定されたデフォルトのステートに、そのステートに到達できない場合でも強制します。

Verilog では、fsm_safe_state 属性と共に "default" キーワードを使用して、デフォルト値をセーフ ステートとして使用することを指定できます。

VHDL では、"when others" キーワードに同じ効果があります。 

fsm_safe_state 属性を default_state に設定すると、デフォルトまたは case 文の "when others" セクションでステート マシンに適用される値がセーフ ステートとして使用されます。

Verilog 例:

(* fsm_safe_state = "reset_state" *) reg [2:0] state;


VHDL 例:

attribute fsm_safe_state : string;
attribute fsm_safe_state of state : signal is "reset_state";


SRL_STYLE:

srl_style 属性は、SRL プリミティブを推論する必要があるかどうか、および SRL の前、後、または前後にレジスタを配置するかどうかを指定します。  

たとえば、srl_style 属性の値を reg_srl に設定すると、SRL と SRL の入力を駆動するレジスタが推論されます。

使用可能な値は、register、srl、srl_reg、reg_srl、および reg_srl_reg です。

Verilog 例:

(* srl_style = "srl_reg"*) reg [clock_cycles-1:0] shift_reg = {clock_cycles{1'b0}};

VHDL 例:

attribute srl_style : string;
attribute srl_style of shift_reg : signal is "srl_reg";

fsm_safe_state および srl_style 属性に対して使用可能な値の詳細は、次のリンクから『Vivado Design Suite ユーザー ガイド: 合成』 (UG901) を参照してください。

属性名HDL ファイル
fsm_encoding.zip
  • fsm_encoding.v
  • fsm_encoding.vhd
fsm_safe_state.zip
  • fsm_safe_state.v
  • fsm_safe_state.vhd
srl_style.zip
  • srl_style.v
  • srl_style.vhd
 

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
fsm_encoding.zip 1 KB ZIP
fsm_safe_state.zip 1 KB ZIP
srl_style.zip 1 KB ZIP
AR# 60799
日付 10/23/2017
ステータス アクティブ
種類 ソリューション センター
ツール