10

元の質問は次のとおりです。

便利な作業を行うために実際に使用できる、VHDLの本当に便利で難解な言語機能は何ですか?

元の質問は削除され、私はただ答えていました。特にVHDLを他の(通常の)プログラミング言語と比較する場合、これは興味深い質問だと思います。

免責事項:私はVHDLでほんの少しの些細な例をしました。

しかし、他のプログラミング言語と比較した場合、私が特に気に入ったのは(おそらくあなたが求めているものではありませんが、これらのことのために、すべてのプログラマーはVHDLを少し知っているべきだと思います):

  1. 単一のインターフェースのいくつかの異なる実装(アーキテクチャー)を持ち、それらを簡単に交換する機能。

  2. 言語モデルに固有の低オーバーヘッドの並列処理。データフロー言語を思い出させてくれます。

4

8 に答える 8

7

VHDLの非常に便利だが難解な言語機能は何ですか...

temp <= 45 deg;「角度」、「電圧」、「温度係数」などのユーザー定義の物理タイプvolt <= 3.3 V;

于 2009-11-24T10:30:52.663 に答える
6

場合によっては、何かを行う方法が複数あることがあります。ほとんどの場合、VHDL ではさまざまな方法で処理できます。別の信号の値に基づいて、信号に異なる値を割り当てたい状況を見てください。

選択された信号割り当て

これを行う最も具体的な方法は、選択された信号割り当てを使用することです。のいくつかの可能な値に基づいてb、値を に割り当てますa。ここのコードに冗長性はありません。

with a select b <=
        "1000" when "00",
        "0100" when "01",
        "0010" when "10",
        "0001" when "11";

条件信号割り当て

条件付きシグナル割り当ての構成は、もう少し一般的です。選択肢ごとに、条件を指定する必要があります。これは、任意のブール式を条件として記述できることを意味し、同等性チェックよりも自由度が高くなります。この構成により自由度が高まりますが、冗長性も少し高くなります。a =すべての行に等値チェック ( ) を書かなければなりませんでした。長い名前のシグナルを使用すると、コードがかさばります。また、選択したシグナル割り当てで使用される区切り記号はコンマでした。else条件信号の割り当てでは、キーワードが必要です。同じ機能のための追加のコード。

b <= "1000" when a = "00" else 
         "1000" when a = "01" else 
         "1000" when a = "10" else 
         "1000" when a = "11";

ケースステートメントとの組み合わせプロセス

最も一般的に使用できる構造はプロセスです。このプロセス内で、case ステートメント、または if ステートメントのカスケードを記述できます。ここにはさらに冗長性があります。プロセス (開始、終了) のスケルトン コードとセンシティビティ リスト。それは大きな努力ではありませんが、これを起草している間にba. 小さなミスを犯しやすい。otherまた、ケースで何が起こるかを指定する必要があります。

process(a)
begin
        case a is
                when "00" => b <= "1000";
                when "01" => b <= "0100";
                when "10" => b <= "0010";
                when "11" => b <= "0001";
                when others => assert "unreachable" severity failure;
        end case;
end process;

この最後のコード スニペットは最大で、おそらく最もエラーが発生しやすいものですが、おそらく最も一般的なものでもあります。これは、プロセスとケース ステートメントという、おなじみで頻繁に使用される 2 つの構造を使用します。

選択信号と条件付き信号の割り当ての問題は、構文にシステムがないことです。意味はほぼ同じですが、構文が異なるだけで、気が遠くなります。Doulos の VHDL ゴールデン リファレンス ガイドのコピーを机の上に常備している多くのエンジニアを知っています。彼らの名前は常に言及されるため、これは Doulos にとって良いことです。

于 2011-06-01T19:44:06.823 に答える
5

VHDL の最大の特徴は、ハードウェアの設計と実装に使用されることです。:)

単一のインターフェースの複数の異なる実装 (アーキテクチャ) を持ち、それらを簡単に交換できる機能。

C++ の OOP と同じです。1 つのインターフェイスと多くの実装を定義できます。VHDL では、同じデバイスのシミュレーション モデルと合成モデルを作成するのに非常に便利です。

言語モデルに固有の低オーバーヘッドの並列処理。データフロー言語を思い出させます。

実際、並列実行セマンティクスを実装する C++ への SystemC ライブラリがあります。http://www.systemc.orgから簡単にダウンロードして試すことができます。C++ から RTL への合成に取り組んでいます。したがって、4 ~ 5 年以内に、すべてのハードウェア開発が SystemC と C++ を使用して行われることを願っています。

于 2009-06-22T19:11:15.777 に答える
2

VHDL の「難解な」機能の多くは、Ada に由来しています。私は Ada の専門家ではないので、これについて言及しますが、Ada を学ぶことで、VHDL で何が達成できるかについての私のビジョンが大幅に改善されました。

于 2011-05-31T22:43:36.853 に答える
2

VHDLの非常に便利だが難解な言語機能は何ですか?

まず、私は VHDL に「難解な」機能があるという理論を信じていません。ただし、実際に存在する VHDL の一般的な「スタイル」は、ほとんどの場合、ハードウェア シンセサイザーがサポートする VHDL のサブセットに影響されます。

VHDL の世界での方程式は非常に単純です。ツールが言語サブセットをサポートしている場合は、それが使用されます。そうでない場合、この機能は十分に活用されない可能性があります。

特に、VHDL を他の (通常の) プログラミング言語と比較すると。

VHDL はプログラミング言語ではないことに注意してください。むしろ、離散イベント システムを記述するための言語です (デジタル ハードウェアの記述に使用できるという「偶然の」結果を伴います)。プログラミング言語との比較は、実際のプログラミング言語のように見える VHDL に由来すると思います。

OPの質問に対する実際の回答に進みます。

VHDLの非常に便利だが難解な言語機能は何ですか...

これが私の選択です、順不同です。

  1. アーキテクチャ: インターフェイスにさまざまなアーキテクチャを選択できる機能は、VHDL が持つ最も便利な機能であり、常に使用されています。
  2. ジェネレーター: ジェネレーターを使用すると、複雑な通常のハードウェア構造を非常に簡単に記述できます。乗算器、加算器、複雑なパイプラインなどを考えてみてください。残念ながら、多くのツールは生成された出力を混乱させます。
  3. ブロック:デザインをサブブロックに細分する安価な方法。ただし、すべてのツールがサポートしているわけではありません。
  4. 信号解像度: ハードウェア合成ではなく、回路などをシミュレートする場合に便利です。
  5. 属性: シミュレータ/シンセサイザに命令を添付して、回路を実装するための最良の方法を見つけるのに役立つ優れた方法です。ほとんどの場合、これはシンセサイザー/マッパー/p&r ツールのコマンド ライン オプションで実行できますが、ハードウェアを作成するために必要なすべての情報が 1 つの場所に限定されているため、属性はより自然に感じられます。
于 2009-07-17T07:56:21.030 に答える
1

条件付きシグナルの割り当ては、caseステートメントと同じです。つまり、重みが等しいブランチです。選択された信号割り当てはプライオリティエンコーダ構造です。つまり、ネストされたif / then/elseステートメントと同等です。vhdlのすべての同時代入ステートメントは、代入演算子の右側にある信号で構成される感度リストを持つプロセスとまったく同じであることに注意してください。

私のお気に入りの難解な機能は、構成(同じエンティティの複数のアーキテクチャがある場合に特に便利です)とアクセスタイプです。これらにより、動的なデータ構造を作成できます。ハードウェアの設計には役立ちませんが、テストベンチの作成には非常に役立ちます。引数の型アノテーションをオーバーロードするメソッドは、非常に読みやすいコードにもなります。これは、残念ながらSystemVerilogに欠けている機能です。

ポール。

于 2011-06-01T19:51:28.653 に答える
0
  1. パッケージに信号を含めることができます。

  2. 構成に新しいポートを作成できます。

  3. 戻り値の型に基づいて関数をオーバーロードできます。

  4. アーキテクチャから使用できるエンティティでシグナルを定義できます。これは私が知っているものには役に立ちませんが、そこにあります。

于 2013-04-18T17:31:02.510 に答える
0

私が知っている最も難解なことは、次の 3 つの原則の組み合わせです。

  1. 文字リテラル: '\'
  2. 拡張識別子: \'bar\
  3. 属性: 識別子の属性

さて、この式は何でしょう?: foo'\'bar\ foo の \'bar\ 属性です。

これを生き残るvhdlレクサーはないと思います。

于 2013-04-07T13:11:02.203 に答える