2

VHDLのベストデザインプラクティスに関する質問。

ステートマシンを設計するとき、アーキテクチャ内で信号を使用するか、変数を使用する必要があります。私はこれまで変数を使用してきました。なぜなら、それらはプロセスに対して「ちょっと」プライベートであり、IMHOは、プロセスの外部からアクセスするべきではないため、理にかなっています。しかし、これは優れた設計手法ですか?

type state_type is (s0,s1);  
signal state : state_type := s0;  

A : process(clk)
begin   
  if rising_edge(clk) then  
    case state is  
.....  
    end case;  
  end if;
end process;  

--This process uses a variable  
B : process(clk)  
  type state_type is (s0,s1);  
  variable state : state_type := s0;  
begin  
  if rising_edge(clk) then  
    case state is  
      .....  
    end case;  
  end if;
end process;  
4

4 に答える 4

4

私は信号を使うのが好きです。その理由は、設計を複数のプロセスに分割できるためです。1つのプロセスは、ステートマシンが状態から状態にどのように移動するかを心配する可能性があり、他のプロセスには、状態に依存するロジックが含まれる可能性があります。

このようにすることは、それぞれ1つのことを実行する複数の単純なプロセスを持つことができることを意味します。変数を使用すると、すべてが1つのプロセスに入る必要があり、それは扱いにくくなる可能性があります。

しかし、それは文体的な選択です。

于 2012-08-13T16:48:15.800 に答える
3

variable別のプロセスに何らかの価値を伝える必要がない限り、私は常にsを使用します。それsignalが目的だからです。

「状態変数のローカライズ」のもう1つの潜在的な利点(または、コーディング標準の違反として監視するもの!)は、同じエンティティ内の2つのステートマシンで、とを衝突させることなくtype呼び出すvariable state_typeことができることです。state

于 2012-08-13T12:45:19.487 に答える
2

合成には、ほとんど信号を使用します。

なんで?

  • 信号はより普遍的に理解されているようです。
  • コードの明確さ。信号はすべて一度に同時に更新されます。変数とシグナルの混合は、変数の割り当てがすぐに有効になることを覚えておく必要があるため、(潜在的に)混乱する可能性がありますが、後続のシグナルの割り当ては優先順位を意味します。シグナルの値は、プロセスの同じ実行中に変更されることはありません。
  • 深い論理パスのリスクが低くなります。経験の浅い設計者は、Cプログラムのような変数を使用したくなるかもしれません。その結果、ロジックがタイミングの目標を達成できなくなります。

なぜだめですか?

  • 大規模な設計では、信号のリストが非常に長くなり、信号のタイプ/サイズなどを見つけるのが困難になる可能性があります。通常、これは、デザイン内の最大のブロックのラッパー、および/またはデザインのトップレベルでのみ発生します。

テストベンチには、用途に応じて変数とシグナルを使用します。

于 2012-08-15T16:28:53.227 に答える
0

この場合のシグナルがプロセスの入力または出力として必要ない場合は、変数を使用する方が適切です。アーキテクチャを構築するときに、モジュールの出力にシグナルを割り当てる必要があり、それが勝った場合は使用しないでください。信号を作成し、アーキテクチャの別のモジュールに接続するために使用しないもののために、より多くのメモリを消費する必要はありません。

于 2012-08-13T09:55:28.227 に答える