5

VHDL でステート マシンをコーディングするには、1 つのプロセスまたは 2 つのプロセスの 2 つの一般的な方法があります。2 つのプロセスより優れたハードウェアになるという噂があります (一部の大学では教えられています)。誰もこれについて確固たる証拠を持っていますか? 私自身の予備テストでは、まったく違いがないことが示されています。

再現可能な実験を探しています: 2 つのコーディング スタイルの VHDL コード、およびそれらを合成する方法 (どのツール、どのパラメーター) の詳細。

2 つのプロセスがより優れた合成ハードウェアをもたらすという神話を暴くか、確認するのを手伝ってください。

4

3 に答える 3

3

この種の「知識」の多くは、約 20 年前のツールに基づいています。物事は進みました。

すべての場合においてすべてが修正されているとは言えませんが、実際に試行を実行することで正しいことを行っています。

過去に回避されたその他の事柄は次のとおりです。

  • どうやらそれらは合成できないため、ジェネリック。
    そうではなく、通常防御されているコードの前処理よりもはるかに優れています。
  • ポートに記録します。これは、長い間 DC シェルの問題を引き起こしました。それは物事を誤解するでしょう。これが解決したかどうかはわかりません。
  • さまざまなスタイルの同期プロセス、特にwaitセンシティビティ リストではなく使用するもの。VHDL仕様を読むと、2つは同等であり、同じ方法で実装する必要があると書かれているため、これは特にクレイジーです。
于 2011-10-25T14:55:30.267 に答える
2

申し訳ありませんが、再現可能な実験はありませんが、シンセサイザーが気にかけているとしたら、私はよろめきます(少なくとも最近では、確固たる証拠はありませんが)!確かに、VHDLを解析して、一連のフリップフロップに供給する一連のロジックに分解します。

それが昔ながらのシンセサイザーの問題だったのか、それとも人々がただそう思ってたのかさえわかりません!

于 2011-10-25T12:06:38.090 に答える
0

以下のコードは、クロック ゲートを備えたライブラリでこれを示す必要があります。シミュレーション結果は同じになり、フォーマル検証はこれらの両方が同一であることを証明します。ただし、最初のものは消費電力と面積が少なくなる可能性があります。

//Instances 1 clock gate
reg [7:0] value;
always @(posedge i_clk)
  if(enable)
    value <= new_value; 

//Instances 8 muxes
always @(posedge i_clk)
  if(enable)
    value <= new_value;
  else //Exhaustive so assignment always occurs
    value <= value;

最初の例では、8 つの DFF すべてへのクロックに 1 つのクロック ゲートを使用します。2 番目の例では、8 つのマルチプレクサを使用して、各 DFF からの出力をその入力にループ バックします。クロック ゲートとマルチプレクサの面積と消費電力の比率によっては、その差が大きくなる可能性があります。これは Talus でテストされました。

もちろん、2 番目の例の else 句は役に立ちませんが、この実験のポイントは、ツールが複雑な casez/x ステートメントをどの程度うまく処理し、always ブロック全体で有効化を共有できるかを確認することでした。FSM の場​​合、FSM が検出される限り、構文は重要ではありません。これは、XST がそれらを処理する方法に基づいており、ステート マシンの最適化は非常に成熟したトピックです。

于 2011-10-29T18:53:04.697 に答える