SystemCとHDL


9

私は現在、既存の命令セットのプロセッサを実装する大学のプロジェクトに参加しています。プロジェクトの終わりまでに、このデザインを合成してFPGAで実行できるようになるはずです。これまでのところすべてが順調に進んでおり、数日前にVerilog HDLでデザインをインプリメントし始め、非常にシンプルなバージョンが機能しました。さて、問題:私は何年もハードウェア設計に携わってきた何人かの人々と連絡を取り、さらに先に進む前に、実装にSystemCの使用に移るべきだと提案しました。これが私の考えだったので、今、私は非常に混乱しました:

Verilog-> HDL言語としては、ハードウェアデザインをターゲットにしています。構造的および動作的なVerilogのようないくつかのレベルの抽象化がありますが、デザインのRTLを指定する非常にきちんとした形式です。選択したFPGAに応じて、さまざまなツールを使用して確実に合成できます(私の場合、ザイリンクスVivado 2014およびZynqボードを使用しています)。欠点としては、プレーンなVerilogは検証に十分な抽象化を提供していないため、System Verilogのようなものがあります。

SystemC->これは、C ++で時間の概念を効果的に導入し、イベント駆動型シミュレーションを実行できるようにするC ++クラスライブラリです。明らかに、これはどのHDLよりもはるかに高レベルであり、ここにあるものははるかに迅速に実装できます。これにより、検証やシミュレーターの実装などに非常に適したツールになり、実際に製造する前にドライバーがチップ用のドライバーやモノの設計を開始できるようになります。どうやら、合成可能なSystemCのサブセットもあり(ザイリンクスVivadoでもこれが可能だと思います)、場合によっては、SystemCを使用して、より高度な抽象化が便利な非常に大規模なシステムを設計できます。

だから、私の質問は:

  1. systemCとVerilog(または必要に応じてHDL言語)の概念は正しいですか?
  2. SystemCとVerilogはいつ使用する必要がありますか?
  3. Verilogでも、基本的にコードの合成方法に関する制約を大幅に減らしているため、多くの動作コードを使用すると、実装の重要なセクションで少し問題が発生する可能性があると言われています。より高いレベルの抽象化では、これは問題ではないでしょうか?つまり、systemCを使用すると、非常に遅く、電力を消費し、大きなデザインになる可能性があります...
  4. SystemCを提案した人は、私が「アーキテクチャの調査」をしているように見えると述べ、それが彼がVerilogを好む理由です。どういう意味ですか?アーキテクチャは通常、命令セットとマイクロアーキテクチャを参照し、命令セットの実装を参照するという印象を受けました(マイクロアーキテクチャは、命令を実行する実際のRTLです)。それで、アーキテクチャの調査は、命令セットがどれほど実行可能かを確認するためにプロセッサを実装していると彼が考えていることを意味するのでしょうか?
  5. 彼は、SystemCを使用することについての議論は、HDLよりも高いレベルの抽象化であるため、はるかに簡単であると述べました。彼はまた、デザインのタイミングを正しくする方が簡単だと主張しました。これはどの程度本当ですか?

助けていただければ幸いです。私は少し混乱しており、これについてオンラインで明確な情報を得るのが難しいと感じています。ありがとう!


こんにちは、どのアカデミックコースでしたか?
リフレクション

こんにちは、私はコンピュータサイエンスを勉強しました。厳密に言えば、これは標準コースの一部ではありません。私は、修士論文のためにトランスピュータに基づいてプロセッサを構築することを選択しました。
アンドレス・AG

回答:


3

あなたの友達はあなたが何をしているかを誤解しているか、SystemCを予備段階として考えていました。いずれの場合もHDLが唯一の選択肢です。基本的にはVerilogと同じように多くの調査全体を実行できるほど強力な合成可能なSystemVerilogを使用することをお勧めします。

  1. 部分的に。あなたはHDLとしてのVerilogと検証言語としてのSystemVerilogを区別し、SystemCはより高い抽象化だけでなく合成可能なサブセットも持っていると述べました。ここには2つのエラーがあります。まず、SystemVerilogは、完全に合成可能なサブセットを備えたHDLでもあり、明らかな修正(logicワイヤの単一タイプなど)とVerilogとして再開でき、多くの合成可能な抽象化メカニズム(インターフェイスなど)を備えています。Vivadoを含む多くのツールでサポートされています。一方、SystemC 直接合成可能(サブセットも含めない)、それはより高いレベルのモデリングとアーキテクチャの探索を目的としていますが、Vivado HLSなどの高位合成ツールでフィードして、合成可能(人が読めない)Verilogに変換できます。

  2. VerilogおよびSystemVerilogの合成可能なサブセットは、HW設計用の言語であり、通常レジスタ転送レベルでHWを記述するために使用されます。つまり、レジスタ、組み合わせ関数、有限状態マシンなどのブロックのセットとして。Verilog-2001も適切に記述できます。ゲートレベルのネットリストとしてのハードウェア。SVは、より高いレベルの抽象化にも使用できるため、検証機能を利用できます。一方、SystemCは、ブロック全体が高レベルの動作方法でのみ記述されるシステムの高レベルモデリングに適しています。また、アーキテクチャの調査、つまり、アーキテクチャのさまざまなパラメータと特性を評価し、全体的なパフォーマンスの変化を評価するためにも非常に強力です。

  3. これは、RTLモデルの開発中にRTL以外の方法で説明しようとした場合にのみ当てはまります。たとえば、反復積和演算を実行するブロックを記述する正しい方法は、組み合わせ乗数、組み合わせ加算器、およびレジスターを駆動する有限状態機械です-動作によってこれをソフトウェア(aループ)のように記述するつもりならはい、動作コードは機能しません。私が説明した各ブロック(マルチ、追加、登録、FSM)を説明するつもりならalwaysブロック、これは完全に問題なく、指定された結果を正確に実現するネットリストで機能します(多くの場合、合成ツールのロジックを最適化する機能を制限する非常に構造的なアプローチよりも優れています)。実際、SystemCの高レベルの合成は、非常に類似したパターンに固執する場合にのみ良い結果をもたらすことが多く、より高いレベルの言語を使用する利点を効果的に排除します。いずれにせよ、SystemCはプロセッサの実装には適していません。

  4. アーキテクチャは非常に広い用語であり、ISAに限定されていません。実際、現代のプロセッサでは、ISAの設計は小さなパズルのピースにすぎません。システムの設計のコンテキストでは、アーキテクチャとは通常、システムレベルの選択肢のセットを意味します(DMAは任意のコアまたは1つの特別なコアによって制御できますか?L1キャッシュは完全に関連しているか、関連付けられていますか?キャッシュはありますか?まったく、またはSWでメモリを管理しますか?)、ISAおよびプロセッサマイクロアーキテクチャを含む。あなたの友人が意味したのは、あなたがプロセッサのさまざまな構成を調査しているということだと思います。それは、実際にはアーキテクチャの調査(または、マイクロアーキテクチャの調査)です。ただし、これをFPGAに実装するとSystemCオプションが無意味になるという事実を見落としてしまった可能性があります。

  5. これは間違っています。ストリーミングフィルターなどの非常に単純なアクセラレーターを設計している場合、HLSツールではパイプラインステージを簡単に挿入できるため、これは当てはまる可能性がありますが、RTLで手動で行う必要があります(またはデータパスリタイミングを使用する必要がありますが、そうではないと思います) Vivadoで可能です)。他のすべての場合、特にプロセッサなどの非常に複雑で構造化されたオブジェクトでは、HLSは肥大化し、デバッグできず、しばしば間違ったVerilogを生成するため、合成する必要があります-ツールはこのジョブ用に設計されていません。


お手伝いありがとう。私はすでにVerilogを使用してプロジェクトを開始しましたが、私はまだあなたの答えから多くのことを学びました!
アンドレス・AG

3

あなたは大学にいて、エンジニアになるために(おそらく)勉強しています。エンジニアは、物事が低レベルでどのように機能するかを理解する必要があります。これを実現するには、抽象化のレイヤーを削除するのではなく、追加する必要があります。

このため、このプロジェクトではSystemCを使用しないことをお勧めします。あなたはあなたのプロのキャリアでそれを使うことになるかもしれませんが、それは将来のためです。

とにかくそれを使用することを選択した場合は、最初に講師に相談する必要があります。私が大学で同様の仕事をしたとき、上で概説した理由により、SystemCを使用しないように明示的に指示されました。


0

正直に言うと、それはすべてプログラミングです。SystemCでできることは、VHDLまたはVerilogでプログラムすることもできます。それはツールのサポートの問題です。SystemCまたはSystemVerilogは使用しません。

RTLデザイナをシステムプログラミングに変換するための明白なソリューションがベンダーにある場合、FPGAデザインに適切な言語をサポートする必要があるだけです。Mentor 2012 Wilsonの調査によると、FPGAの言語はVHDLです。http://blogs.mentor.com/verificationhorizo​​ns/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/を参照してください


0

SystemCは複雑な設計に使用されます。たとえば、建築レベルで何かを指定する場合。利点は、Verilogデザインよりもコード行が少ないこと、シミュレーション時間が短いこと、サイクルが正確なモデルです。SystemCは「合成できない」と言っている人を信じてはいけません。もちろん。アイデアを与えるために、Verilogには抽象レベルがあります。スイッチレベル/動作レベルでモデル化できます。選択は設計の複雑さに基づいて行われます。

ハードウェアを説明するより一般的な方法は、Verilogを使用することです。Verilogの合成は、多くのEDAツールでサポートされています。

通常、大規模な設計の場合、SystemCモデルとテストベンチはアーキテクチャ設計者が設計します。これらのモデルは、エレクトロニクス設計者に渡され、Verilog / VHDLを使用してRTLに変換されます。

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