私が働いていた場所には、FPGAデザイナーのキャンプが2つありました。私がシミュレート、シミュレート、シミュレート、またはキューブ化と呼んだ1つのキャンプ。もう1つのキャンプはすべてデザインに関するものでした。
立方体の人たちは、modelsimのようなシミュレーターを使用しました。彼らは、コーディング方法やデザインスイートのブロックを介して初期設計を思いつきました。次に、それをシミュレートし、機能しないものを見つけて、コードを変更します。このプロセスは、機能する設計ができるまで数回繰り返されました。
デザインキャンプ(私が好んだ)は、波形を紙(またはVisioのようなデジタルペーパー)に設計しました。次に、論理図を考えます。これは自己文書化プロセスです。次に、図はコードに変換されました(コードと図が1対1であった場合、図に何かがあった場合、コードにそのプロセスがありました)。その後、シミュレーションを行い、シミュレーション波形を紙上で設計された波形と比較したところ、同じであることが予想されました。
結局両方をやってしまいましたが、時々キューブモードになってしまい、面白くありませんでした。私は時々自分の目標を見失ったことに気づきました。たとえば、ステートマシンの状態を変更し、その変更が次の状態に波及する場合、それを修正する必要があります。私はそれについて考えるよりも多くの時間を費やすことになりました。
どちらのキャンプに行きたいですか?厳密な設計が必要で、自分に合った方法を実行する必要があると思いますが、設計をより詳細かつ厳密に行えば、長期的には問題が少なくなると思います。私は可能なことのいくつかの例を挙げました、それらはあなたの職場の組織構造に合わないかもしれません。設計の詳細と注意深い計画が非常に役立つ理由は、自分が何をしているのかを考えるように強いられるからです。デバッグが容易になります。これを可能にする設計ワークフローを開発します。また、シミュレーションツールに精通し、シミュレートされたデバイスで発生する可能性のあるすべての条件をテストする優れたテストベンチを作成します。もちろん、これは時間とバランスを取る必要があります。たとえば、シミュレーションでデバイスをシミュレートするADC HDLコードを記述します。
(私の意見では)FPGA設計で最も価値のあるツールは、設計を完全にテストし、そのペースで実行できる優れたテスト手順です。FPGAの設計は、「機能するだけ」とは期待できません。すべての機能が機能することを確認するには、努力が必要です。エラーを見つけたら、シミュレーションと設計に戻って、シミュレーションされたFPGAとRTLの違いを学びます。これは主に経験から得られますが、デザインがシミュレーションでは機能するがハードウェアでは機能しない場合は、違いがある理由を見つける必要があります。
私が学んだいくつかの重要な点:
1)入力を無害化し、クロックとリセット回路はクリーンである必要があります。デュアルランクシンクロナイザーとは何かを理解します。リセット回路にはさまざまなトポロジーがあり、それらの使用方法を知っています(Webにはすばらしい記事があり、手元にありません)。
2)設計の要件を前もって取得し、次にそれらの周りに設計します。あなたの周りの人々があなたに明確な要件を与えないなら、あなた自身でいくつかを考え出してください。
3)Matlab固定小数点ツールボックスは、制御システムとDSPアプリケーションのシミュレーションに最適ですが、アクセスできない場合があります。これは、コーディングする前にデザインを証明する優れた方法です。
4)最初にデザイン、次にコーディング、そしてシミュレーションです。
5)強く型付けされ、また、PCB回路図とhdlで信号名を一致させます。(これは私がVerilogよりもVHDLをはるかに好む理由でもあります。