FC2ブログ

Verilog記述ビット幅異なる演算時のバグ例

菅原さんのVeritakの「Verilog HDL高度なF.A.Q.」を見てて、勉強になった。

参照先: http://japanese.sugawara-systems.com/user_note/professional_FAQ.htm#R11

■バグ例
 ○バグ出る記述
     reg [3:0] wp, rp;
     assign fifo_full = (rp-1==wp) ? 1'b1: 1'b0;

   上記では、rp=4'h0、wp=4'hFの時にfifo_fullが1にならない。

 ○解説
   rp-4'b0001にすればOK。
   これもビット幅の問題であり、"1"は32ビット以上の整数。
   なので、==の評価時は、両辺同じ32ビット幅に拡張される。

   fifo_full演算の左側(rp-1)=32'hffff_ffff、右側(wp)=32'h0000_000f
   となってしまい、同値にならない。よって、IF文がFalseになる。
   特に演算系では、ビット幅は一致させた方が良い。

前に同じ事を調べたが、すっかり忘れて最近自作したFIFOもこのバグ発生する気が・・・
スポンサーサイト



コメントの投稿

非公開コメント

No title

これ懐かしいな~。私がDDR SDRAMのデバックをしていたときに、教えてもらったFAQです。
http://marsee101.blog19.fc2.com/blog-entry-763.html

No title

毎度コメントありがとうございます。
こちらmarseeさんのFAQでしたか。
なんとなくサイト眺めてたら覚えておくべき情報に当たったので、ほとんどそのままの内容ですが、
備忘録として記載させて頂きました。
カレンダー
01 | 2020/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード