VHDLまたはVerilog?[閉まっている]


94

VHDLVerilogは、今日のHDLです。HDLの経験がない人にとって、どちらの利点は何ですか?


2
それらは同様に効率的であるように見えるので、好みのものを選択してください。VHDLが私に最も適していることがわかりました。
レオン・ヘラー

1
これらのモデレーターに「投票」する方法を教えてください。以前の経験を持つ人々のレトリックは、本に含まれる情報よりも価値があります。本には時間の概念がありません。
dsgdfg

回答:


70

どちらを学ぶべきかはわかりませんが、ここにいくつかの対照的な点があります(非常にVHDL中心のユーザーからですが、できる限り公平にしようとしました!)。開発スタイルに関して:

そして、「私は現在使用していない2つのうちどちらかを好む」という行に沿った有名な引用を覚えておいてください(申し訳ありませんが、実際に誰がこれを書いたのか思い出せません-おそらくJanick Bergeron?)

VHDL

  • 強く型付けされた
  • より冗長
  • 非常に決定論的
  • 非Cライクな構文(および考え方)

最初は多くのコンパイルエラーが発生しますが、ほとんどの場合は期待どおりに機能します。これは、(なじみのない構文とともに)非常に急な感覚の学習曲線につながる可能性があります

Verilog

  • 弱い型付け
  • より簡潔に
  • 慎重にいくつかのルールに従う場合にのみ決定論的
  • Cに似た構文(および考え方)

エラーはシミュレーションの後半で発見されます-「何かを成し遂げるような気分」への学習曲線は浅いですが、長く続きます(それが正しいメタファーなら?)

また、Verilogの利点は、Verilogの巨大な拡張であるSystemVerilogにハイエンド検証がますます依存していることです。しかし、ハイエンドツールはVHDL合成コードとSystemVerilog検証コードを組み合わせることもできます。


完全に別のアプローチの場合:MyHDL -VHDLまたはVerilogのいずれかを生成できる一連の合成拡張機能を備えた検証言語としてPythonのすべての機能を利用できます。

またはCocotb-検証言語としてのPythonのすべての機能。学習可能なHDL(VHDLまたはVerilog)で合成可能なコードが記述されたままです。


2
私はVerilogを知っていますが、VHDLに精通していません。VHDLがVerilogよりも決定的であることはどういう意味ですか?
cic

44

同じ週に両方を学びました。VHDLはADA / Pascalに似ており、VerilogはCに似ています。VHDLはコンパイルを取得するのにより冗長で痛みを伴いますが、コンパイルを取得すると、成功する可能性が高くなります。少なくともそれは私が見つけたものです。Verilogは、Cのように、自分で自分の足を撃たせることに非常に満足しています。航空宇宙/政府などの一部の業界はVHDLに傾いていますが、他の業界はVerilogに傾いています。私が両方で見つけた問題はテストベンチ機能であり、シミュレーションからシリコン/ FPGAへの学習を試みて取得しようとするとき、合成可能なコードのみを書くことは別のレベルの教育です。

CDLと呼ばれる私が本当に好きな言語があります。厳密に合成可能であり、他の方法でテストベンチを記述し、他のツールに取り込むことができる合成可能なVerilogを生成します。残念ながら、CDLのドキュメントが不足しているため、VerilogまたはVHDLよりもはるかに簡単に使用できることを示すサンプルを世界に公開したいと考えていますが、それを行ってはいけません。独自のシミュレーション/テスト環境が付属しています。CDLGTKWaveあなたは仕事のかなりの量を行うことができます。

Verilatorと呼ばれる別のツールは、Verilogをクリーンに保つのにかなり硬直しています。これは無料のVerilogシミュレータで、Cimに接続したり、C / C ++でテストベンチを作成したりする非常に簡単な方法です。Verilogも使用できますが、制限はありません。ありイカルスのVerilogは大きく、より良く知られているだけでなく、私が推薦するVerilatorをあなたはVerilogのを知りたい場合。VHDLにはGHDLがありますが、私の経験はVerilatorほどではありませんでしたが、少なくとも足を濡らそうとする無料のツールはあります。ソフトウェアプログラミングの経験がある場合は、VHDLよりも速くVerilogを選択して楽しむことができます。

私はレオンに間違いなく同意します、両方試してください。 fpga4funおよびその他のWebページにはいくつかの有益な情報があり、それらのページのいくつかは、議論しているトピックに対応するVerilogとVHDLの両方を提供します。このようなページは、2つの言語を比較するのに最も役立ちます。HDLの使用があなたのキャリアでやりたいことである場合、両方とも少なくともいくつかの機能を備えていることをお勧めします。


1
非常に良いヒント。私と他の人への参照としてあなたの答えを編集しました。+1
ダニエルグリロ

23

これについて多くの聖戦が行われました。Verilogの1つの特定の欠点は、その非決定的な動作です。http://www.sigasi.com/content/verilogs-major-flaw


はい、それは悪いように見えますが、私は確信していません:これは言語またはこの特定のシンセサイザーの欠陥ですか?
-stevenvh

4
これは言語の問題です。異なるシンセサイザーは、予測できない方法で独自の動作を選択します。MentorシミュレーターまたはCadenceシミュレーターで同じコードを実行すると、異なる結果が得られる場合があります。
フィリップ

20

どちらにも長所と短所があります。VHDLはよりアカデミックで、冗長で複雑です。より多くのコードを記述する必要がありますが、厳密さはそれが機能する可能性が高いことを意味します。Verilogは、典型的なデジタル設計ではよりシンプルですが、トリッキーなバグを作成しやすくします。VHDLは大学でより一般的です。Verilogは、大規模な半導体企業でより一般的です。

通常、どちらを選択するかは、使用しているツールによって決まります。人気のあるFPGAツールのいくつかは、VHDLでより良く機能します。一部の一般的なASICツールは、Verilogの方が優れています。だから、どちらが良いかはあなたがそれで何をしたいかに依存します。

EEスクールで一般的なアルテラFPGAを使用して小規模プロジェクトを構築するとします。無料のツールは両方のHDLをサポートしています。ただし、ユーザーコミュニティのほとんどがVHDLを使用している場合があります。その言語を選択した場合、より多くのサンプルコード、再利用可能なモジュールなどがあります。

逆に、深刻なチップ設計作業を行う大企業で働くつもりなら、ほとんどの人は最近Verilogを使用しています。強力な合成、シミュレーション、および検証ツールは、Verilog用に最適化されています。そして最近、SystemVerilog-高レベルのシステム設計と検証をサポートするVerilogの拡張。

ここでの詳細な議論とここでの便利なリンク:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

初心者/愛好家の場合、最善のアドバイスは、使用するチップを決定し、ベンダーが提供する例を確認することです。それを使用します。経験豊富なデジタルデザイナーになったら、他の言語を習得するには数日しかかかりません。


4
ありがとう。最後の文は重要です。一方を他方に変換するツールはありますか?
-stevenvh

私が入らない歴史がいくつかありますが、modelsimを見ると、verilogを取り込むとvhdlに変換され、それからsimsになります。これは逆の方法では行われないため、少なくともverilogからvhdlに変換すると、そのツールで何らかの変換を確認できます。特に何らかの方法で変換する他のツールがあり、デモ版があります。
old_timer

3
一部の商用(合成、静的分析)ツールは、1つの言語で読み取り、他の言語で出力します。結果は、コンパイラを使用してAdaをアセンブリ言語に変換し、次にデコンパイラを使用してCを抽出するようなものです。結果は気に入らないでしょう。
アンディMcC

17

簡単な答えSystemVerilogを使用しますが、VHDLも学習します。可能であれば、Verilog-2001は避けてください。

非常に長い答え:とりあえず、私はVerilogでVerilog-2001を意味すると思いますが、これはおそらく他のほとんどの答えも仮定していることでしょう。おそらく、両方を学ぶことをお勧めしますが、どちらも使用しません(これについては、回答の最後で詳しく説明します)。主な違いは、次の点で再開できます。

  • Verilog-2001は簡潔ですが、VHDLは(非常に、非常に)詳細です。
  • Verilog-2001は、VHDLでサポートされていない非常に低レベルのコンストラクトをサポートします(ただし、通常のレジスタ転送レベル(RTL)デザインに使用する必要はありません)
  • VHDLはより強く型付けされており、通常、エラーを早期に検出するのがはるかに簡単になります
  • VHDLはVerilogよりもはるかに表現力があります
  • Verilog-2001の構文はCに似ていますが、VHDLの構文はAdaに似ています
  • Verilog-2001には、初心者向けのわかりにくい概念がいくつかあります(例:wirevs reg

とはいえ、最も重要な概念は、異なる名前(alwaysvsなどprocess)であるにもかかわらず2つの言語で共有されており、いずれにせよHDLの学習の難しさは背後にある概念(すべてのプロセスの並行性、HW規約など)言語自体よりも。違いを考慮して、Verilog 2001とVHDLのどちらかを選択した場合、私は個人的にVHDLの初心者に対処します。

ただし、先ほど述べたように、実際に選択する権限がある場合は、VHDLもVerilog-2001も使用しないことをお勧めします。多くの人が想定していることに反して、SystemVerilogはシステムレベルの設計または検証にのみ役立つ高レベル言語ではなく、SystemCのような高レベル合成ツールに入力できる言語と共有するものはほとんどありません。

その代わりに、SystemVerilogのは、(参照、のVerilog-2005に基づいて、Verilogの言語の完全な更新でhttp://en.wikipedia.org/wiki/SystemVerilogと一致する完全合成サブセット有する)簡潔でのVerilogのをより高い表現力の両方をよりVerilog-2001とVHDL。私の意見では、両方の長所を提供しています。

SystemVerilogで使用できる非常に重要な構造/式の例は、Verilog-2001、VHDL、またはその両方では使用できません。

  • always_ffalways_latchalways_combのために-設計者はロジックの種類を実装するブロックの間にすぐに区別し、そして助けブロックalways_combalways_latch- (!特に初心者のためのVHDLおよびVerilogでの無限バグの発生源、)自動的に感度リストに行くべき信号を推測します
  • logic混乱置き換えタイプwireregのVerilog-2001の種類を
  • 多次元バスを簡単に構築できるパック型(例:logic [N-1:0][M-1:0][P-1:0]Verilog-2001は2次元バスのみをサポートし、VHDLは設計者に新しい型を定義して類似の構造を構築させる)
  • struct(VHDLに類似record)などの高レベルの構造、さらにはinterface通常の構造(バスのポートなど)をモデル化するために非常に効果的に使用できる高レベルの構造

研究目的で非常に複雑なマルチコアシステムで作業しながら、このすべての違いを「肌で」テストしました。現在、多くのツールでサポートされており、(ほぼ毎日使用していることから)Synopsysツール(ASICおよびFPGA合成フローの両方)、Xilinx Vivado(FPGA合成用)、およびシミュレーションツールなどでサポートされていることは確かです。 MentorGraphics Modelsim、Cadence NCsim、およびSynopsys VCSとして。

完全に完成させるために、ハードウェア設計者のツールボックスには他にも2つの重要な言語があります(ただし、これらのツールの品質は大きく異なる場合があります)。

  • MyHDL(Pythonベース)やRocket(Scalaベース)などのHDL生成言語。ここでの概念は次のとおりです。高レベル言語でデザインを記述しますが、非常にHDL的な概念(コンカレントブロック、明示的なタイミングなど)を使用し、その後、従来のHDL(通常Verilog-2001)を生成します。正直なところ、HDLからの抽象化ステップは小さく、SystemVerilogはすでに多くの高レベルの概念を提供しており、中間ステップなしで合成フローに直接供給されるという利点があるため、これらは非常に便利ではありません。
  • Vivado HLS、LegUp、Calypto Catapultなどの高レベル合成ツール。これらは、多くの場合C、C ++、またはSystemCで非常に高レベルの記述を取り、通常はタイミングをとらず、(通常は読み取り不可能な)Verilogでベストエフォート実装を生成します。それらは、いくつかのオブジェクト(たとえば、畳み込み、FFTなどの関数のHWアクセラレータ)の生成にはかなり優れていますが、一般的には汎用ではありません。たとえば、ほとんどのHLSツールでプロセッサコアを設計することは不可能です。私が知っているのはBlueSpecだけで、これは実際にはHLSとHDL生成のハイブリッドです。

これはほとんど私が学んだ方法です。VHDLを最初に学び、3年間コーディングしました。Verilogのコーディングに3か月を費やし、(すぐに)SystemVerilogが進むべき道だと判断しました。今ではほとんどSVだけをコーディングしていますが、VHDLを使用して学んだ理解とコーディング技術に大きく依存しています。
スタンリ

12

過去13年間の私のキャリアは、80%のASICと20%のFPGAでした。

VHDLは最初の3.5年間使用され、残りはVerilogでした。Verilogへの切り替えは難しくなく、場所(シリコンバレー)と速度の理由から、今日はVerilogでコーディングするだけです。

また、パフォーマンスのために非同期インターフェイス、ラッチ、およびゲートレベルのセミカスタムデザインを多数行っているため、VHDLは今のところほとんど使用されていません。代わりに、SystemVerilogとSystemCを使用して、大規模なエンジニアリングプロジェクトに使用する方がはるかに便利であることがわかりました。

ある段階では、Verilator(無料!高速)などのツールを使用して、重要なシミュレーションに必要な多くの資金を節約できました。VHDLには(まだ)このオプションはありません。また、常に裕福なプールで泳いだり、100万を超えるゲート設計を行わなかったりする場合は、絶対に必要ないかもしれません。

それにもかかわらず、VHDLは、堅実なハードウェア設計の原則を開発する前に、初心者にとってより良いものです。ここでのEDA関係者との私の通信は、彼らが過去10年間ほとんどVHDL開発を行っていないことを示唆しており、今日HLSの背後に大きなドライブがあります。そのため、VHDLツールの開発者はあまりいません...


FreeHDL for VHDLシミュレーション?フロントエンドとしてのQucs。
マーティン

8

VHDLに行ったのは、主にCをよく知っていて、verilogを書き込もうとすると、ハードウェアを記述していないCPUをターゲットにしているかのように書く傾向があることがわかったためです。

コードのページを書いて、書いたものがハードウェア設計ではなくシーケンシャルなプログラムであることに気づくのは非常に面倒です。そうだとシンセになりますが、結果はくて遅くなりました。

VHDLは十分に異なっていたため、制御フローではなく論理設計の観点から考える方がはるかに簡単でした。

結局のところ、言語はめったに難しいことではなく、スキルはタイピングではなくシステム設計にあります。

よろしく、ダン。


5

昨年、私が研究した大学は、初心者向けに2つの公開講座を推進しました。両方とも同じ内容をカバーしましたが、1つはVHDLを使用し、もう1つはVerilogを使用しました。

もちろん、私は両方の教授にVHDLとVerilogの違いを尋ねました。両方とも最高を選べなかった。

だから、どちらが自分にとって良いかを知るために、両方のコースをしなければなりませんでした。私の最初の印象は、VHDLはPascalに似ていてVerilogはCに似ているということです。

この後、VHDLのみを実行することにしました。そのとき、私はDelphiで作業していたからです。

しかし、コース終了後はFPGAを使用したことがありません。だからこれは私があなたを助けることができる最高です。


5

私はほぼ完全にVHDLを使用しています。私の経験では、ヨーロッパではVHDLが、アメリカではVerilogがより一般的ですが、VHDLはアメリカでも着実に進歩しています。VHDLの強力なタイピングは、PALASMやアルテラのAHDLなどの小さなプログラマブルロジックで使用されるような昔ながらのハードウェア設計言語のように使用するので、気にしません。

VHDLを使用するほとんどの人にとって大きな問題は、強い型です。彼らは、std_logic_vector(ターゲット内のワイヤーのコレクションと考える)と "int"(デザインをコンパイルしているコンピューターに保存されている数値)との間で割り当てを行いたいと考えています。私が一般的に遭遇する最も厄介な型変換は、bit_vector(デザインをコンパイルするコンピューター内のワイヤーのコレクションの記述と考えられます)とstd_logic_vectorの間です。実際、今私をスタックエクスチェンジに引きずり込んだのは、char(コンパイルするコンピューターに保存されている文字変数)からintへの変換を探していたからです。

かつて、VHDLとVerilogの最も有名な対立は、ASIC&EDA誌が企画したデザインコンテストでした。Google「ハードウェアデザインコンテストの予期しない結果:Verilogが勝ち、VHDLが失われました-You Be The Judge!」、例:http : //www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

コンテストは、かなり複雑な9ビットレジスタを実装することでした。アップ/ダウンカウントなど、いくつかの機能がありました。その結果、9つのVerilogデザイナーのうち8人が90分後にコードを実行しました。VHDLの5人のうち0人は、何も機能していませんでした。

私は他の人のようにVHDLを使用しません。私がそれを使用する方法、型は私の邪魔になることはあまりありません。IEEE署名のないライブラリを使用して、完全にstd_logicとstd_logic_vectorで他のすべてを行うのと同じ方法で、上記のプロジェクトを実装していました。代わりに、VHDLデザイナーがintで作業を行い、型変換で迷子になったと思います。

型変換で迷子になる可能性のある場所は2つあります。(a)デザインと(b)テストベンチです。私にとっては、テストベンチを(ほぼ)完全にstd_logicで記述する方が簡単なので、テストベンチ自体を(ほぼ)合成できます。「ほぼ」とは、合成できない遅延割り当てでクロックを定義することを意味します。しかし、それ以外(およびコメント)、テストベンチと合成ロジックを区別することはできません。

とにかく、学習する最初の言語を決定する前に(ほとんどの人は好みがありますが、ほとんどの人は両方を使用します)、そのコンテストを調べて、それに関する解説を読むことをお勧めします。

VHDLで私が観察した問題の1つは、非常に冗長な言語であるため、コメントを必要としないと信じる傾向があるようです(デザイナーの心の中)。もちろんそうではありませんが、コードの前にコメントを書く必要があります。


1
VHDLの厳密な型指定が最大の問題であるというのは興味深い主張だと思います。私にとって、強い型付けは、抽象化のレベルを上げることができる中心的な機能です。ハードウェア設計では、動作を実装する構造を記述するか、構造を実装する動作を記述するかを選択できます。歴史は、抽象化が大規模システム設計の成功の鍵であり、デジタルシステムも例外ではないことを示しています。そのため、言語機能の非常に狭いサブセットに制限することで、多くを見逃すと思います。
trondd

2
確かに、私は「大規模システムの設計」を専門とせず、非常に効率的である必要がある小さなものを専門としています。電子機器の設計で効率が最重要になることがある理由はいくつかあります。時には、これらの多くの小さなシステムから大規模なシステムが作成され、この種の設計により効率が大幅に向上します。
カールブランネン

5

私は2セントを重視します。私は自分自身がVHDLのヘビーユーザーですが、Verilogは確かに仕事をこなすことができます。(時間とタイピングコストはありますが)いつでも別のものにラップできます。

私が見つけたのは、生のVHDLには多くの便利な機能がないことです。(ORまたはAND:std_logic_vector全体を思い出す)。したがって、VHDLを使用する場合、デバッグ可能な合成可能な関数のツールボックスを作成することで、生産性を大幅に向上させることができます。

誰かがこれらの「持ち運びに便利な」機能をすべて提供する優れたオープンソースライブラリを参照できますか?


2
AND / ORの削減は、他のいくつかの有用なアップデートとともにVHDL 2008に含まれていると確信しています。
ks0ze

4

これまでの回答では、2つの言語の対比がほぼカバーされており、この記事では次の点もかなりカバーしています:http : //www.bitweenie.com/listings/verilog-vs-vhdl/

また、言及されていない点をさらに2つ挙げたいと思います。

いくつかの理由から、最初にVHDLを学習することをお勧めします。強い型付けは、初心者が簡単にミスを犯すのを助けます。また、Verilogを最初に使用した後、VHDLを手に入れるのが難しいと聞きました。

正直なところ、どちらの言語でも間違いはありません。そして、あなたがこの業界で非常に長く働いているなら、いずれにせよ両方の言語を最終的に学ぶことになるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.