3

Veriog で 4 対 1 の関数を実装する必要があります。入力は 4 ビットで、0 ~ 15 の数値です。出力は 0 または 1 の単一ビットです。各入力は異なる出力を提供し、入力から出力へのマッピングは既知ですが、入力と出力自体は不明です。私はVCがコードをうまく最適化し、できるだけ短く/きちんとしたものにしたいと思っています。これまでの私の解決策:

wire [3:0] a;
wire b;
wire [15:0] c;

assign c = 16'b0100110010111010; //for example but could be any constant
assign b = c[a];

c を宣言しなければならないのは見苦しく、vcs がそこで K マップを認識するかどうかはわかりません。これは、case ステートメントや接続法標準形の代入と同様に機能しますか?

4

5 に答える 5

5

あなたが持っているものは大丈夫です。case ステートメントも同様に機能します。それは、あなたがどれだけ表現力豊かになりたいかという問題です。

選択したエンコーディングに特別な意味がない場合 (たとえば、メモリ アドレス セレクター)、ソリューションであるインデックス作成は正常に機能します。選択エンコーディングが設計者にとって特別なセマンティックな意味を持っている場合 (そしてそれほど多くはない場合)、case ステートメントと列挙型を使用します。

合成に関しては、どちらを使用してもかまいません。どんな適切な合成ツールでも同じ結果が得られます。

于 2008-09-15T23:23:26.850 に答える
3

私はダラスに完全に同意します。ケースステートメントを使用します-それはあなたの意図をより明確にします。合成ツールはそれをルックアップテーブルとして構築し(並列の場合)、可能な限り最適化します。

また、RTLコードを短くすることについてはそれほど心配しません。最初にわかりやすくするために撮影します。合成ツールはあなたが思っているよりも賢いです...

于 2008-09-04T13:14:46.813 に答える
2

私の好みは、あなたの問題にとって理にかなっていれば、列挙型または `defines を使用する case ステートメントです。コードのレビュー、メンテナンス、および検証を容易にするためのもの。

于 2008-09-04T03:29:04.257 に答える
2

このような場合、RTL の明快さはすべてに勝ります。SystemVerilog には、いつブロックを組み合わせロジック、ラッチ、またはフロップに合成する必要があるかを明確にするための特別な always ブロック ディレクティブがあります (また、それと競合する RTL を記述した場合、合成ツールはエラーをスローする必要があります (たとえば、すべての信号をまた、エンコーディング自体がピンに伝播しない限り、このツールはおそらく、使用しているエンコーディングを最もハードウェア効率の高いエンコーディング (設計全体の面積を最小化するエンコーディング) に置き換えることに注意してください。最上位モジュールの。

このアドバイスは一般的にも当てはまります。コードを人間が理解しやすいものにすると、おそらく合成ツールもより理解しやすくなり、文字通り何千人年ものアルゴリズム研究をより効率的に RTL に反映させることができます。

必要に応じて、三項演算子を使用してコーディングすることもできますが、次のようなものをお勧めします。

always_comb //or "always @*" if you don't have an SV-enabled tool flow
begin 
  case(a)
  begin
    4'b0000: b = 1'b0;
    4'b0001: b = 1'b1;
    ...
    4'b1111: b = 1'b0;
    //If you don't specify a "default" clause, your synthesis tool
    //Should scream at you if you didn't specify all cases,
    //Which is a good thing (tm)
  endcase //a
end //always
于 2008-09-19T05:07:47.323 に答える
1

どうやら私はお粗末な合成ツールを使用しています。:-) 両方のバージョン (ワイヤ遅延のファンアウトに基づくモデルを使用するモジュールのみ) を合成したところ、質問のインデックス バージョンは、ケース ステートメントよりも優れたタイミングと面積の結果を示しました。Synopsys DC Z-2007.03-SP を使用。

于 2008-10-12T17:50:24.297 に答える