回答:
どちらを学ぶべきかはわかりませんが、ここにいくつかの対照的な点があります(非常にVHDL中心のユーザーからですが、できる限り公平にしようとしました!)。開発スタイルに関して:
そして、「私は現在使用していない2つのうちどちらかを好む」という行に沿った有名な引用を覚えておいてください(申し訳ありませんが、実際に誰がこれを書いたのか思い出せません-おそらくJanick Bergeron?)
最初は多くのコンパイルエラーが発生しますが、ほとんどの場合は期待どおりに機能します。これは、(なじみのない構文とともに)非常に急な感覚の学習曲線につながる可能性があります
エラーはシミュレーションの後半で発見されます-「何かを成し遂げるような気分」への学習曲線は浅いですが、長く続きます(それが正しいメタファーなら?)
また、Verilogの利点は、Verilogの巨大な拡張であるSystemVerilogにハイエンド検証がますます依存していることです。しかし、ハイエンドツールはVHDL合成コードとSystemVerilog検証コードを組み合わせることもできます。
完全に別のアプローチの場合:MyHDL -VHDLまたはVerilogのいずれかを生成できる一連の合成拡張機能を備えた検証言語としてPythonのすべての機能を利用できます。
またはCocotb-検証言語としてのPythonのすべての機能。学習可能なHDL(VHDLまたはVerilog)で合成可能なコードが記述されたままです。
同じ週に両方を学びました。VHDLはADA / Pascalに似ており、VerilogはCに似ています。VHDLはコンパイルを取得するのにより冗長で痛みを伴いますが、コンパイルを取得すると、成功する可能性が高くなります。少なくともそれは私が見つけたものです。Verilogは、Cのように、自分で自分の足を撃たせることに非常に満足しています。航空宇宙/政府などの一部の業界はVHDLに傾いていますが、他の業界はVerilogに傾いています。私が両方で見つけた問題はテストベンチ機能であり、シミュレーションからシリコン/ FPGAへの学習を試みて取得しようとするとき、合成可能なコードのみを書くことは別のレベルの教育です。
CDLと呼ばれる私が本当に好きな言語があります。厳密に合成可能であり、他の方法でテストベンチを記述し、他のツールに取り込むことができる合成可能なVerilogを生成します。残念ながら、CDLのドキュメントが不足しているため、VerilogまたはVHDLよりもはるかに簡単に使用できることを示すサンプルを世界に公開したいと考えていますが、それを行ってはいけません。独自のシミュレーション/テスト環境が付属しています。CDLとGTKWaveあなたは仕事のかなりの量を行うことができます。
Verilatorと呼ばれる別のツールは、Verilogをクリーンに保つのにかなり硬直しています。これは無料のVerilogシミュレータで、Cimに接続したり、C / C ++でテストベンチを作成したりする非常に簡単な方法です。Verilogも使用できますが、制限はありません。ありイカルスのVerilogは大きく、より良く知られているだけでなく、私が推薦するVerilatorをあなたはVerilogのを知りたい場合。VHDLにはGHDLがありますが、私の経験はVerilatorほどではありませんでしたが、少なくとも足を濡らそうとする無料のツールはあります。ソフトウェアプログラミングの経験がある場合は、VHDLよりも速くVerilogを選択して楽しむことができます。
私はレオンに間違いなく同意します、両方試してください。 fpga4funおよびその他のWebページにはいくつかの有益な情報があり、それらのページのいくつかは、議論しているトピックに対応するVerilogとVHDLの両方を提供します。このようなページは、2つの言語を比較するのに最も役立ちます。HDLの使用があなたのキャリアでやりたいことである場合、両方とも少なくともいくつかの機能を備えていることをお勧めします。
これについて多くの聖戦が行われました。Verilogの1つの特定の欠点は、その非決定的な動作です。http://www.sigasi.com/content/verilogs-major-flaw
どちらにも長所と短所があります。VHDLはよりアカデミックで、冗長で複雑です。より多くのコードを記述する必要がありますが、厳密さはそれが機能する可能性が高いことを意味します。Verilogは、典型的なデジタル設計ではよりシンプルですが、トリッキーなバグを作成しやすくします。VHDLは大学でより一般的です。Verilogは、大規模な半導体企業でより一般的です。
通常、どちらを選択するかは、使用しているツールによって決まります。人気のあるFPGAツールのいくつかは、VHDLでより良く機能します。一部の一般的なASICツールは、Verilogの方が優れています。だから、どちらが良いかはあなたがそれで何をしたいかに依存します。
EEスクールで一般的なアルテラFPGAを使用して小規模プロジェクトを構築するとします。無料のツールは両方のHDLをサポートしています。ただし、ユーザーコミュニティのほとんどがVHDLを使用している場合があります。その言語を選択した場合、より多くのサンプルコード、再利用可能なモジュールなどがあります。
逆に、深刻なチップ設計作業を行う大企業で働くつもりなら、ほとんどの人は最近Verilogを使用しています。強力な合成、シミュレーション、および検証ツールは、Verilog用に最適化されています。そして最近、SystemVerilog-高レベルのシステム設計と検証をサポートするVerilogの拡張。
ここでの詳細な議論とここでの便利なリンク:
初心者/愛好家の場合、最善のアドバイスは、使用するチップを決定し、ベンダーが提供する例を確認することです。それを使用します。経験豊富なデジタルデザイナーになったら、他の言語を習得するには数日しかかかりません。
簡単な答え:SystemVerilogを使用しますが、VHDLも学習します。可能であれば、Verilog-2001は避けてください。
非常に長い答え:とりあえず、私はVerilogでVerilog-2001を意味すると思いますが、これはおそらく他のほとんどの答えも仮定していることでしょう。おそらく、両方を学ぶことをお勧めしますが、どちらも使用しません(これについては、回答の最後で詳しく説明します)。主な違いは、次の点で再開できます。
wire
vs reg
)とはいえ、最も重要な概念は、異なる名前(always
vsなど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_ff
、always_latch
、always_comb
のために-設計者はロジックの種類を実装するブロックの間にすぐに区別し、そして助けブロックalways_comb
とalways_latch
- (!特に初心者のためのVHDLおよびVerilogでの無限バグの発生源、)自動的に感度リストに行くべき信号を推測しますlogic
混乱置き換えタイプwire
とreg
の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つの重要な言語があります(ただし、これらのツールの品質は大きく異なる場合があります)。
過去13年間の私のキャリアは、80%のASICと20%のFPGAでした。
VHDLは最初の3.5年間使用され、残りはVerilogでした。Verilogへの切り替えは難しくなく、場所(シリコンバレー)と速度の理由から、今日はVerilogでコーディングするだけです。
また、パフォーマンスのために非同期インターフェイス、ラッチ、およびゲートレベルのセミカスタムデザインを多数行っているため、VHDLは今のところほとんど使用されていません。代わりに、SystemVerilogとSystemCを使用して、大規模なエンジニアリングプロジェクトに使用する方がはるかに便利であることがわかりました。
ある段階では、Verilator(無料!高速)などのツールを使用して、重要なシミュレーションに必要な多くの資金を節約できました。VHDLには(まだ)このオプションはありません。また、常に裕福なプールで泳いだり、100万を超えるゲート設計を行わなかったりする場合は、絶対に必要ないかもしれません。
それにもかかわらず、VHDLは、堅実なハードウェア設計の原則を開発する前に、初心者にとってより良いものです。ここでのEDA関係者との私の通信は、彼らが過去10年間ほとんどVHDL開発を行っていないことを示唆しており、今日HLSの背後に大きなドライブがあります。そのため、VHDLツールの開発者はあまりいません...
VHDLに行ったのは、主にCをよく知っていて、verilogを書き込もうとすると、ハードウェアを記述していないCPUをターゲットにしているかのように書く傾向があることがわかったためです。
コードのページを書いて、書いたものがハードウェア設計ではなくシーケンシャルなプログラムであることに気づくのは非常に面倒です。そうだとシンセになりますが、結果はくて遅くなりました。
VHDLは十分に異なっていたため、制御フローではなく論理設計の観点から考える方がはるかに簡単でした。
結局のところ、言語はめったに難しいことではなく、スキルはタイピングではなくシステム設計にあります。
よろしく、ダン。
昨年、私が研究した大学は、初心者向けに2つの公開講座を推進しました。両方とも同じ内容をカバーしましたが、1つはVHDLを使用し、もう1つはVerilogを使用しました。
もちろん、私は両方の教授にVHDLとVerilogの違いを尋ねました。両方とも最高を選べなかった。
だから、どちらが自分にとって良いかを知るために、両方のコースをしなければなりませんでした。私の最初の印象は、VHDLはPascalに似ていて、VerilogはCに似ているということです。
この後、VHDLのみを実行することにしました。そのとき、私はDelphiで作業していたからです。
しかし、コース終了後はFPGAを使用したことがありません。だからこれは私があなたを助けることができる最高です。
私はほぼ完全に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つは、非常に冗長な言語であるため、コメントを必要としないと信じる傾向があるようです(デザイナーの心の中)。もちろんそうではありませんが、コードの前にコメントを書く必要があります。
私は2セントを重視します。私は自分自身がVHDLのヘビーユーザーですが、Verilogは確かに仕事をこなすことができます。(時間とタイピングコストはありますが)いつでも別のものにラップできます。
私が見つけたのは、生のVHDLには多くの便利な機能がないことです。(ORまたはAND:std_logic_vector全体を思い出す)。したがって、VHDLを使用する場合、デバッグ可能な合成可能な関数のツールボックスを作成することで、生産性を大幅に向上させることができます。
誰かがこれらの「持ち運びに便利な」機能をすべて提供する優れたオープンソースライブラリを参照できますか?
これまでの回答では、2つの言語の対比がほぼカバーされており、この記事では次の点もかなりカバーしています:http : //www.bitweenie.com/listings/verilog-vs-vhdl/
また、言及されていない点をさらに2つ挙げたいと思います。
いくつかの理由から、最初にVHDLを学習することをお勧めします。強い型付けは、初心者が簡単にミスを犯すのを助けます。また、Verilogを最初に使用した後、VHDLを手に入れるのが難しいと聞きました。
正直なところ、どちらの言語でも間違いはありません。そして、あなたがこの業界で非常に長く働いているなら、いずれにせよ両方の言語を最終的に学ぶことになるでしょう。