慣性遅延と伝播遅延VHDLには慣性遅延と伝播遅延の遅延モデルがある。慣性遅延はその名前の通り慣性を持っており、慣性の値未満の幅しか持たない信号は出力には現れない。逆に慣性の値以上の幅を持った信号は、その信号幅はそのまま遅延時間後に出力に現れる。このような振る舞いをするため、同期回路等では1クロックより大きい遅延を入れてしまうと1パルス幅の信号は出力に現れなくなってしまう。慣性遅延は以下のように記述し、ごく一般的に使用する。ns;伝播遅延は、慣性遅延と違ってどのような信号でも遅延時間後に入力がそのまま出力に現れる。伝播遅延は以下のように記述し、配線やディレイラインのモデリングに使用する。クロックに同期した信号の配線モデリングは1クロック以内の遅延値が前提だと思うので慣性遅延でも問題は起きないが、最近の高速シリアル信号等は伝播遅延を使用しないとモデリングが大変になる。ns;シミュレータ側から見ると慣性遅延は1つのイベントバッファを使いイベントが重なると上書きされるような動作を行い、伝播遅延はイベントを無限のFIFOに入れるような動作を行う。このため遅延させる信号の最小イベント間隔が遅延時間以上の場合は慣性遅延と伝播遅延の結果に違いはない。05:50これがわからなかったときには、だいぶ悩みました。Verilogでも、これにはまりまして、やはり悩みました。伝播遅延の書きかたを見つけて、うまく行ったときはうれしかったです。21:34いつもいつもコメントありがとうございます。私も「transport」を知らなかったときは悩みました。昔見た小さい慣性遅延をいくつもいれた記述は、実はある代理店のセミナテキストに書かれていたので意外と知らない人が多いのかもしれません。marseeさんのBlogを拝見したところ、最近Verilogを勉強されていたと思いますが、私もSystemVerilogを使いたいのでその前にVerilogを勉強しようと思っています。13:00Verilog2001の伝播遅延の書き方は下です。http://marsee101.blog19.fc2.com/blog-entry-406.htmlVerilogは多次元配列やgenerateをかけなかったので、Verilog2001で書いています。使えるので、組み合わせ回路を書くときも簡単です。テストベンチはあまり書いたことないので良くわかりませんが、VHDLよりも書きやすいという話です。(これからの課題)あと、はまったのは、ModelSimでシミュレーションするときに、glbl.vをコンパイルしておく必要があることです。ライブラリもコマンドラインから指定する必要があるようです。http://marsee101.blog19.fc2.com/blog-entry-392.htmlVerilog2001だと、結構、論理合成はVHDLと同様にかけると思います。13:09Verilog2001での伝播遅延の書き方は下のとおりです。http://marsee101.blog19.fc2.com/blog-entry-406.htmlVerilogは多元配列やgenerate文がなかったので、Verilog2001で書いています。@*とも書けるので組み合わせ回路を書くのが楽です。Verilog2001だとVHDLからの移行も楽じゃないでしょうか?ただ、ほとんど論理合成しか試していません。テストベンチはVerilogの方が書きやすいそうなので、(Cのように書ける)やってみようと思っていますが、なかなかそこまで行きません。それから、ModelSimのシミュレーションでVHDLと違っていたのは、Xilinxだとglbl.vというファイルをコンパイルしておく必要があることです。ライブラリもコマンドラインで指定しています。13:13情報ありがとうございます。今までVerilogは使いづらいと思っていたのですが、Verilog2001は便利そうですね。@*と書くとセンシティビティリストの漏れがなくなるのは助かります。「FPGAの部屋」さんはVHDLからVerilogに移行するときに疑問や問題になりそうな情報があるので、今の私にはとても参考になります。marseeさんのDDRコントローラのように、私も何かテーマを決めて実際に回路を作りながら勉強しようと思います。問い合わせ・連絡先ta_bo__@livedoor.com本サイトは以下のアクセス解析を使用しております。