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