1

ケイデンスのイーサネット eVC を使用しており、エージェントのモニターは次の信号でタップされます。

.            ____________                    _____
.clk   _____|            |__________________|
.      ________ _______ ________________ _________
.data  __0a____X___07__X_______0b_______X_________
.                      ^ ^

クロックの立ち上がりエッジと立ち下がりエッジでデータをサンプリングします。上記の例では、データ 0x07 はガベージ データであり、有効な値は 0xa (clk 立ち上がり) と 0xb (clk 立ち下がり) です。ただし、モニターは (clk フォールの場合) 0x7 をサンプリングしています。

これは、Specman とシミュレーターの同期の問題であると思われます。もしそうなら、これはどのように解決できますか?

  • シミュレーター - IES 13.10
  • irun 13.10 のオプション - (ここでは、この問題に関係があると思われるものと、その目的が何なのかまだわからないもののみをここに含めます)

    -nomxindr  
    -vhdlsync  
    +neg_tchk  
    -nontcglitch  
    +transport_path_delays  
    -notimezeroasrtmsg  
    -pli_export  
    -snstubelab
    
  • 言語 - VHDL (トップ テストベンチ)、Verilog (DUT)、Specman (仮想シーケンス、Enet および OCP eVC)

  • 0x07 (上の波形の左 ^) からクロックの立ち下がりエッジ (右 ^) までの時間 = 0.098ns

同僚の 1 人が を使用することを提案し-sntimescaleましたが、それがどのように問題を引き起こしているのか、または解決するのか、まだ想像できません。Cadence の記事「specman tick synchronization delta delay timescale precision」でさえ、これらの検索文字列のいずれも有用なヒントを示していませんでした。

4

1 に答える 1

2

これは確かにタイムスケールの問題かもしれません。specman シミュレーター インターフェイスの同期問題のデバッグについて説明している包括的なクックブックがあります。ここを ご覧 ください.

シミュレーションで使用されるタイムスケールを確認するには、 irun に-print_hdl_precisionオプションを追加して、VHDL 階層の精度を出力します。Verilog の場合、コードまたは irun オプションで設定されている場合、自動的に出力されます。情報は精緻化中に出力されます。

Specman が使用するタイムスケールを確認するには、Specman プロンプトから次のコマンドを発行します:
SN> print get_timescale()

(timescale オプションが役に立たない場合にのみ) 試す別のオプションは、-vhdlsync フラグを削除することです。実際、ほとんどの混合環境では、このフラグを追加する必要があります。しかし、それがなくても環境がうまく機能するまれなケースがあります。このフラグを削除しようとする場合は、再作成することを忘れないでください。

クックブックで問題の解決策が見つからない場合は、より詳細な調査を行う必要があります。たとえば、specman は信号をどのようにサンプリングしますか。それはsimple_port、event_port、tickアクセスなどですか.また、いくつかのトレースおよびプローブコマンドが役立つ場合があります. そのような場合は、ケイデンスのサポートに連絡することをお勧めします。

幸運を!
セマダー

于 2015-07-19T11:32:03.843 に答える