問題タブ [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.
bit-manipulation - Verilog での Pythonesque ビットスライス?
Python では、次のように偶数ビットまたは奇数ビットを選択できます。
Verilog でこれを行うことができれば、式を展開して手動で行う必要がなくなるため、非常に実用的です。拡張 (つまり{a[0], a[2]}
と{a[1], a[3]}
) すると、それ以外の方法でパラメータ化されたワイヤ セットでは明らかに機能しません。
verilog - モジュールのチェーンを構築するにはどうすればよいですか?
モジュールのチェーンを構築するのに問題があります。すべてのモジュールをリストしたモデルを手動で接続できますが、より簡潔な表現が必要です。次のコードを試してみましたが、うまくいきませんか? コードを修正するにはどうすればよいですか?
ここで、pe (入力、出力、入力、出力、clk、リセット)。
system-verilog - System Verilog fork の混乱、fork と begin の間で実行されるステートメント
ここで簡略化されたサンプル コードを参照してください。
私の混乱は、への呼び出しarr_obj1s[j].run()
が決して返されないことです (それらは永遠にループを実行します)。そして、その呼び出しが begin/end ブロックの外側に配置されることの意味を完全には理解していません。永久run()
に実行されるプロセスはどれですか?また、返されないawait()
プロセスが実行されている場合、各呼び出しが返されるのはrun()
どうしてでしょうか?
編集:ここにいくつかの詳細があります。完全なコードを投稿するとページとページになりますが、この余分なビットが役立つことを願っています.
obj1 のrun()
関数は次のようになります。
例として、run_a
基本的には次のようになります (すべて類似しています)。
しかし、obj2 のrun()
関数は基本的に次のようになります。
例として、run_d()
次のようになります。
system-verilog - SystemVerilogスタイルのクロック分割とSystemCへの駆動の移植
System VerilogモデルをSystemCに移植していますが、このフェーズロックループクロック駆動方式をモデル化するための最良の方法がわかりません。SVで時計を駆動することは、SystemCがカーネルにそれを実行する方法を提供する、少し手動のプロセスであるように私には思えます。しかし、私が見ているSVモデルで手動で行われる種類のクロック分割をSystemCがどのようにサポートしているかはわかりません。
この簡略化されたSystemVerilogモデルについて考えてみます。
次に、テストベンチで:
つまり、私のSystemCに相当するテストベンチは基本的に次のようになります。
しかし今、私は基準クロックから駆動する内部クロックを適切にモデル化する方法に少し固執しています。SVコードのような手動のアプローチを試みることはできると思いますが、それはSystemCの方法とは思えません。私が持っていたもう1つのアイデアはsc_main
、例のPLLスタイルではなく、からすべてのクロックを直接駆動することですが、それが機能するかどうかを確実に言う経験はありません。SystemCでこのようなことをするための規則はありますか?
verilog - 算術シフトは、符号付き変数に関係なく、論理シフトとして機能します
私はそのように宣言されたレジスタを持っています:
2の補数を配列に配置し、その数を算術的にシフトすると、代わりに論理シフトされます。
明らかに、数値が署名されていない場合、システムは算術シフトではなく論理シフトします。ただし、はっきりとわかるように、「レジスタ」は確実に署名されています。
私がここで何が欠けているのか誰か知っていますか?
ありがとう!
hardware - 畳み込みエンコーダの終了と状態レジスタのリセット
通常、送信機用の畳み込みエンコーダーを設計する場合、メッセージの送信後にエンコーダーをゼロ状態に戻すために、ある種の終了メカニズムが適用されます。これは、多くの場合、送信されたメッセージに末尾のシーケンスを追加することによって行われます。たとえば、フィードバックのない畳み込みエンコーダの場合、特定の数 (n) のゼロです。この方法では、エンコーダをすべてゼロの状態に戻すのに n クロック サイクルかかります。
一方、たとえば HDL で畳み込みエンコーダを実装する場合、このゼロ状態へのリセットは、エンコーダのすべての (シフト) レジスタを単純にリセットすることによっても実現できます。そうすれば、わずか 1 クロック サイクル後にゼロ状態に到達できます。
文献では、2 番目の方法について言及している人を見たことがなく、その理由は何なのか疑問に思っていました。
verification - systemverilogでの「ディセーブルフォーク」の適切な使用
私は次の擬似コードに似たものを持っています:
コードから:他の2つのスレッドが動作している間、入力の適用のみがフォークを壊すことができます(1)forの各反復の間、つまり入力のストリームが適用されたら、すべてのスレッドを無効にします-次の反復が始まるまで、生成されたすべてのスレッドを無効にします(新しい構成で)
だから私は上記のコードをに変更しました
しかし、これはforループも無効にしているようです/または私が理解していない類似のものですが、効果はテストがハングアップしています。誰かが私に理由と解決策を説明できますか?
interface - インターフェイス幅と $size を使用した自動 SystemVerilog 変数サイズ?
SystemVerilog で標準化されたメモリ インターフェイスを備えたモジュール (私の場合は DSP) を作成しようとしています。モジュール内の変数のサイズを、接続されたインターフェイスのバス幅に基づいて自動的に調整したいと考えています。私の理論的根拠: これにより、HDL コーダーがモジュールに接続するすべてのインターフェイス バスの幅をモジュールに伝えるパラメーターを渡す必要がなくなります (そうではありません)。これはひどいことです。パラメータがないときれいに見えます)。
ただし、これを機能させることはできないようです。問題を示す例を次に示します。以下は、Quartus II 12.1 で合成されます。
は最終的に正しい値 (9) を取得することに注意してください。width2
幅を正しく設定するには遅すぎauto_sized2
ます。最初は、すべての変数に幅が割り当てられた後に単純に評価されると思っていましたが、の幅を設定するのに問題なく機能$size
するため、そうではないようです。$size(data_in)
auto_sized1
何かご意見は?繰り返しますが、それはプロジェクトの成功にとって重要ではありません。私はこの時点で最も興味があります!
ありがとう -
verification - systemverilogの構造体、パッケージ、クラスの違い
classとstructの違いは簡単ですが、パッケージはスキーム全体のどこに適合しますか。私が見るパッケージのほとんどは、ライブラリファイルからのインポートがあり、ディレクトリに他のsvファイルが含まれています。具体的には、パッケージが通常最適なコーディングスキームで使用される場合、そのレベルで特定の変数が追加されていない場合は、代わりにヘッダーファイルを使用することをお勧めしますか?ありがとう
interface - SystemVerilog: 関数/タスクへのインターフェイスの受け渡し (合成用!)
インターフェイスを関数またはタスクに渡す合成可能な方法はありますか? 私のユースケースは次のとおりです。いくつかの関数を含むパッケージがあります(ただし、それが役立つ場合はそれらをタスクに変換できます:))、これらはすべてモジュールで使用される可能性があり、モジュールのポートにアクセスする必要がある場合があります。通常、すべてのポートを にグループinterface
化し、それをモジュールに追加して、それをvirtual
関数に渡します。ただし、私の合成ツールのマニュアルには、virtual
サポートされていないと記載されています。
何か不足していますか?signal
VHDL の引数と同様に、合成用のタスクにポートを提供する方法が必要ですか?
いくつかのコード例:
理想的には、タスクmypack::do_something
はポートをポートとして使用できます。つまり、ポートの変更を待機したり、ポートに値を書き込んだりできます。signal
基本的に、VHDL で(variable
または引数ではなく) 引数として渡すことで実現するのと同じですconstant
。