問題タブ [system-verilog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4117 参照

system-verilog - System Verilog 構造体と参照メンバーへのキャスト

ベクターを構造体にキャストし、同じステートメントでメンバーを抽出したいと思います。これは可能ですか?そうしないと、一時変数に代入する必要があり、見苦しくなります。

例えば:

^^^^^ これは明らかに許可されていません ! なんで ?

0 投票する
1 に答える
25108 参照

system-verilog - SystemVerilog の case ステートメントが機能しない

このケースステートメントが機能しない理由を誰でも知っています:

VCSを使用しています。これを DVE デバッガーで実行してみましたが、デバッガーで実行するとコードが正しく動作しました。また、このコードは別の case ステートメント内にネストされていますが、ここには示されていません。

0 投票する
2 に答える
4103 参照

verilog - ブロッキング割り当てを使用してVerilogのフリップフロップを推測する

「Verilog合成でのノンブロッキング割り当て、殺すコーディングスタイル!」を読みました。クリフォードカミングスによる。彼は、次のコード(12ページ、簡略化)は、教科書でよく使用されるフリップフロップの正しい実装であると述べています。この文書は最優秀論文賞を受賞したので、その主張は真実だと思います。

これらのフリップフロップを2つ以上直列に接続した場合に、なぜこれが正しく機能し続けるのかを知りたいです。言う

私の見方では、tmpの値がsecondffによって使用される前に更新される可能性があるため、2つではなく1つのフリップフロップになります。誰かが基準のどの部分が起こり得ないと言っているか教えてもらえますか?どうもありがとう。

[そのようなコードを書くことを考えたことはありません。コーディングスタイルが貧弱で意味が自明でない場合でも、ブロック/非ブロックの動作を理解したいだけです]

後で追加:

私は今、その論文が正しくない可能性が高いと思います。1364-2201Verilog標準のセクション5「SchedulingSemantics」では、何が起こるかについて説明しています。特に、68ページのセクション5.6.6「ポート接続」では、単方向ポートは連続割り当てとまったく同じであると述べています。同様に、継続的な割り当ては、常にすべてに敏感なブロックです。つまり、以下の私の例でのffの2つのインスタンス化は、複数のalways句を持つモジュールと同等であり、誰もが同意するだろうということです。

Clive Cummingsが質問に答えた後に追加されました:

規格のセクション5から抜粋した上記のステートメントは、更新イベントのタイミングのみを参照しており、一部の継続的な割り当てと常にブロックの間の文字通りの同等性を意味するものではないことを指摘してくれたCCに感謝します。それでも、一部のシミュレーター(Icarus Verilogなど)が「フリップフロップ」でブロッキングと非ブロッキングの割り当てを使用して異なるシミュレーション結果を生成する理由を説明していると思います。[より大きな例では、ブロッキング割り当てで2つの明らかなffが得られ、非ブロッキング割り当てで正しい5つが得られました。]他のシミュレーター(たとえば、デフォルトオプションまたはCverを備えたModelsim)は、どの形式でも同じ結果を生成するようです。割り当てが使用されます。

0 投票する
3 に答える
1862 参照

verilog - Verilog コードから合成されたハードウェアが正しいとはどういう意味ですか?

「Verilog 合成でのノンブロッキング代入、キルするコーディング スタイル!」を読みました。クリフォード・カミングス著。彼は、この質問の下部にあるコードは、3 つのフリップフロップ パイプラインに合成されることが「保証されている」と述べていますが、正しくシミュレートされることは保証されていません (例 pipeb3、10 ページ、「保証された」コメントは 12 ページにあります)。 )。この文書は最優秀論文賞を受賞したので、その主張は正しいと思います。http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf

私の質問: Verilog 合成の正確性は、シミュレーション セマンティクスを参照しない場合、どのように定義されますか? どうもありがとう。

ボーナス ポイントの質問は次のとおりだと思います: 明確に定義された合成セマンティクスを持ち、明確に定義されたシミュレーション セマンティクスを持たない、可能な限り単純な Verilog プログラムを提供してください。再度、感謝します。

実際、シミュレートと合成の両方で明確に定義されているが、2 つの結果が異なる Verilog を誰か教えてもらえますか?

コード:

PS: 誰かが気になる場合に備えて、正しい合成ツールのもっともらしい定義は、「合成されたハードウェアは、正しいシミュレーターができることを行う」という行に沿っている可能性があります。しかし、これは論文と矛盾しています。

[今、その論文は正しくないと思います。1364-2001 標準のセクション 5.2 は、Verilog プログラムの意味はそのシミュレーションによって定義され、その後標準が定義する (非決定性とすべて) ことを明確に述べています。合成ツールがシミュレーターに加えて提供しなければならない「保証」については、まったく言及されていません。

合成可能なサブセットを説明する別の標準 1364.1-2002 があります。合成されたハードウェアのセマンティクスがシミュレーションと何らかの形で異なるべきであるという明白な言及はありません。セクション 5.2.2「エッジに敏感なストレージ デバイスのモデル化」では、非ブロッキング割り当てを使用してフリップフロップをモデル化する必要があると述べています。標準的に言えば、それ以外の使用はサポートされていないことを意味します。

最後の注意として、前の段落で言及されたセクションでは、ブロッキング割り当てを使用して非ブロッキング割り当ての RHS を計算できると述べています。これは、カミングスの推奨事項 5 に違反しているようです。

Cliff Cummings は、1364.1-2002 標準のワーキング グループのメンバーとしてリストされています。この規格は、IEEE Web サイトで置き換えられたものとしてリストされていますが、置き換えられたものはわかりません。]

0 投票する
2 に答える
771 参照

oop - システムのベリログ /oop

以下のコードのオブジェクトは、一度だけインスタンス化されていますよね? したがって、インスタンス化された単一のオブジェクトには、値が 2 である単一の整数 i フィールドが含まれている必要があります。2 ではなく 1 が返されるのはなぜp.iですか? これは SystemVerilog に固有のものですか? それとも、すべての oop 言語が同様に動作しますか?

ありがとう

0 投票する
1 に答える
3404 参照

verilog - SystemVerilogプログラムブロックで信号を監視する方法

SystemVerilogを使用してテストベンチについていくつかのことを学ぼうとしています。しかし、プログラムブロック内のDUT信号を監視する方法を見つけることができなかったようです

次の例を検討してください。信号「ダミー」はDUTの出力であり、プログラムブロックに入力されます。次に、プログラムブロックの「ダミー」を監視して、「ダミー」に特定の値がある場合に「テスト」フラグを立てる必要があります。

一般的なモジュール駆動のテストベンチでは、常に@(dummy)と書くだけですが、プログラムでは常にブロックは許可されていません。どうすればこれを達成できますか?

0 投票する
3 に答える
1130 参照

verilog - システム verilog/verilog ---イベント

上記のコードは以下のコードとどう違うのですか? ポーズエッジクロックを5行目から7行目にシフトすると、コードがどのように変化しますか? 前もって感謝します

0 投票する
1 に答える
1699 参照

random - SystemVerilog randc の再初期化

randc 変数を再初期化する方法があるかどうか疑問に思っていました。複数のレジスタを設定しようとしていますが、任意の順序で設定できることを確認する必要があります。このオブジェクトは再ランダム化される可能性があり (クラスには他のランダムな値がいくつかあります)、関数が再度呼び出される可能性があります。私のコードは次のようになります。

あるいは、変数に対して std::randomize() を呼び出して、それを randc にする方法はありますか? ありがとう - ティム

0 投票する
2 に答える
3482 参照

verilog - Verilog 関数でノンブロッキング代入が許可されないのはなぜですか?

Verilog 関数ではノンブロッキング代入の使用が許可されていないことを読みました。誰もこれについてもっともらしい説明を提案できますか?

0 投票する
5 に答える
998 参照

verilog - SystemVerilog クラスのライン カバレッジをサポートするツール/シミュレータはありますか?

SystemVerilog コンポーネント用の自己テスト コードがいくつかあり、テストですべて、特にクラスの失敗ケースがカバーされるようにしたいと考えています。必要なのは、Java などの他のオブジェクト指向言語で通常使用されるものと同様に、行/分岐のカバレッジだけです。

VCS (バージョン 2012.06) のカバレッジを使用してみましたが、SystemVerilog のサポートは限定的であり、SystemVerilog クラスのカバレッジはサポートされていません。これをサポートするシミュレーターまたはツールはありますか?