FPGAプログラミング、開始点


29

私はソフトウェア開発者(C、C ++、objective-c、java ...)であり、FPGAのプログラミングを学ぶことに興味があります。質問は簡単に見えるかもしれませんが、今はちょっと立ち往生しているので、時間をかけてこの質問を手伝ってください。私の会社は私に技術に精通し、格子製品に取り組むように頼みました。私の質問はどこから始めればいいですか?いくつかの調査の結果、VHDLとVerilogのどちらかを選択できることがわかりましたが、いずれも使用したことがありません。どこから始めるべきかを提案できる専門家はいますか?言語を学び、ハードウェアコンポーネントについて学び、それからラティス製品を学びますか?または、ラティス製品から直接開始します(FPGAベンダー間でプログラミング方法が非常に異なることを読みました)


3
C / C ++プログラミングに精通している場合は、VHDLではなくVerilogを選択する必要があります。Verilogの構文はCに似ています
。– m.Alin

1
@ m.Alin始めたばかりで、Cのように見えても問題ではないことがわかりました。なぜなら、最も難しい部分は構文ではなく、概念の違いだからです。意味は似ても似つかCのものにはない
エドガーKlerks

C / C ++ / Java / etcで見つかった最大の変更。あなたが書くモジュール(私は翻訳単位に相当すると思います)は純粋にイベント駆動型です。Cでは、基本的な原理に簡略化されており、コンパイルされたプログラムはコードの1行目、2行目、3行目、4行目などを実行します。Verilog/ VHDLにはそのようなものはありません。 :この入力ピンはmodule1_inputに接続し、module1_outputはmodule1_inputがHighになるたびに状態を切り替えます。代わりにif(condition)、それですwhen(condition)。ほとんどのFPGA IDEには、まるで紙に描いているかのように、グラフィックデザインの入力もあります。
チャーリーハンソン

回答:


40

デジタル設計には、ソフトウェア開発との共通点はあまりありません(Verilog構文がC言語に少し似ているが、見た目が違うだけかもしれません)。したがって、このタイプの質問に適切に答えることは非常に困難です。しかし、ソフトウェア開発からハードウェア設計までの道を歩んだ男として、試してみます。自分のことを振り返ってみると、今知っていることを知っていたら、当時の自分にアドバイスしていたはずです。

ゼロから始めます

ソフトウェア開発に関するすべてを忘れてください。特にプログラミング言語。これらの原則は、デジタル設計には適用されません。CPUを設計した人にとっては、おそらくアセンブラーまたはCでプログラミングするのは簡単でしょうが、アセンブラープログラマーはCPUを設計することはできません。

あなたの学習経路では、ソフトウェアからの既存の知識で簡単な問題と思われるものを解決する傾向はありません。古典的な例の1つは「forループ」です。たとえば、Verilogでforループを記述できますが、それは別の目的を果たします。主にコード生成に使用されます。また、ソフトウェア開発者が見るようにforループの場合もありますが、シミュレーション以外の用途には適していません(つまり、FPGAをそのようにプログラムすることはできません)。

そのため、取り組む必要のあるすべてのタスクについて、その方法を知っているとは思わず、代わりに調査を行います。本や例の確認、経験豊富な人への質問などです。

ハードウェアとHDL言語を学ぶ

最も一般的なHDL言語は、VerilogとVHDLです。AHDL(Altera HDL)のようなベンダー固有のものもあります。これらの言語はハードウェアコンポーネントの記述に使用されるため、ほとんど同じ構文を異なる構文で同じことを表現するために使用されます。

Cのように見えるので、Verilogを学ぶことを勧める人もいます。はい、その構文はCとAdaを組み合わせたものですが、ソフトウェア開発者が学習しやすいわけではありません。実際、VerilogでCを記述する誘惑があるため、さらに悪化する可能性があると思います。それは非常に悪い時間を過ごすための良いレシピです。

それを念頭に置いて、VHDLをじっと見ることをお勧めします。ただし、上記を考慮する限り、Verilogも問題ありません。

覚えておくべき重要なことの1つは、その言語で何を表現しているのかを理解する必要があるということです。どのようなハードウェアが「記述」され、どのように機能するか。

そのため、エレクトロニクス全般に関する本と、このような優れた本— HDL Chip Design(別名ブルーブック)を入手することをお勧めします。

シミュレーターを入手する

ハードウェアで何かを開始し、ベンダー固有の機能などを使用する前に、シミュレータを入手してください。私はVerilogで始めていましたが、GTK WaveとともにIcarus Verilogを使用しました。これらは無料のオープンソースプロジェクトです。本で見る例を実行し、自分の回路を設計して練習して、それを味わってください。

開発ボードを入手する

前進したいときは、開発ボードを入手してください。雇用主がラティスと一緒に行きたいことを知っている場合は、ラティスボードを入手してください。

プログラミング方法は非常に似ていますが、異なる詳細があります。たとえば、さまざまなツール、さまざまなオプション、さまざまなインターフェイス。通常、1つのベンダーでの経験があれば、切り替えるのは難しくありません。しかし、おそらくこの余分な学習曲線を避けたいと思うでしょう。

また、使用する予定のコンポーネントまたは拡張可能なコンポーネントがボードに付属していることを確認します。たとえば、ルーターのようなネットワークデバイスを設計する場合は、ボードにイーサネットPHYがあるか、HSMCコネクタなどを介して拡張できることを確認してください。

通常、ボードには適切なリファレンス、ユーザーガイド、および設計例が付属しています。それらを研究します。

本を読む

本を読む必要があります。私の場合、デジタルデザインを知っている友人はいませんでした。また、このサイトは1つの簡単な理由からあまり役に立ちませんでした。質問の言い回しも知りませんでした。私が思いついたのは、「ああ、みんな、dcfifoというものがあり、クロックドメインの交差の課題について聞いたことがあります。それは何で、なぜデザインが機能しないのですか?」

私は個人的にこれらから始めました:

FPGAベンダーには、ベストプラクティスを備えたクックブックがたくさんあります。リファレンスデザインと共にそれらを研究します。これは、たとえばアルテラのものです。

より具体的な質問で戻ってきます

本を読みながら、デザインをシミュレートし、開発ボード上のいくつかのLEDを点滅させると、多くの質問があります。ここで質問する前に、本の次のページまたはオンライン(ラティス固有のフォーラム)で回答が表示されていないことを確認してください。


この詳細な回答に感謝します。どのように進めることができるかを本当に助けてくれました。残念ながら、私を助けてくれる友人はいません。しかし、あなたは私を多くのトラブルから救っただけでなく、もう一度感謝します!!!!
アニラ

5
素晴らしい答え。
アサドエブラヒム

学校に戻って、VHDLを学ぶ前にC ++を学びました。それを理解するのに苦労していましたが、すべてがクリックされたポイントは、すべてがリアルタイムで並列に(ノードjsのような非同期ではなく)発生することを理解したときでした。ソフトウェア開発はシーケンシャルフローに従いますが、HDLでは、すべてが一度に行われます(ほとんどの場合)。"x = 1; y = 2; y = x; x = y"のようなものがある場合、SWの最後のyはHDLの1に等しくなり、xとyの両方が同時に互いに変化します。これを覚えておけば、人生があなたにとって楽になるかもしれません。
PGT

@PGT単一のコアまたは複数のコアで実行されている複数のプロセスが「y」にアクセスできる場合、yの値は1以外の値になると予想されます。
アディティア

1

別の方法として、ザイリンクスのVivado HLSやアルテラのOpenCLソリューションなどの高レベル合成手法を使用することもできます。これにより、ソフトウェアのバックグラウンドを考慮して、ハードウェア記述言語を学習するための曲線が緩和される可能性があります。


-1

最初にデジタル設計の基本を学びます。Mealy / Mooreマシン、組み合わせロジック、真理値表、カルノーマップなど。回路図(7セグメントカウンター)でシンプルなデザインの作成を開始し、HDLを学習します。ヨーロッパでは、Verilogが米国で使用されています。最後に、タイミングが重要です。信号にはコンポーネントの瞬間および温度に依存する遅延があり、すべての信号には別の遅延があることに注意してください。

読むべき本:http : //www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

完全な言語構文の知識は、後で、最初にデジタル設計と問題を理解するためのものです。


ヨーロッパでは、Verilogが米国で使用されています。すべての真実ではない...
マット・ヤング

実際、私はVerilogを学び、英国出身です。また、uni(英国)で行ったモジュールの1つで教えられた言語でもあります。
トムカーペンター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.