« プロセッサはこの先どう進化するのか? | トップページ | ISEの日本語フォント設定 »

2011年12月13日 (火)

組み込み屋の為のVerilog入門 その3

しつこくも その3である。
入門というか、私がやり始めたころの嵌りネタ特集と化している。
VerilogはC言語と文法が近く、C言語からの転向組みにはまあやさしいといえばやさしい。
で、CにあってVerilogで弱いもの。
キャストである。

32bitを乗算して上位ワードがほしい場合

module shift(
    input [31:0] in0,
    input [31:0] in1,
    output [31:0] out
    );
assign out = (in0 * in1) >> 32;
endmodule

  などと書こうものなら問答無用で最適化されて回路が消滅する。
  Verilogでは、式の中のもっともbit幅が多いものに計算サイズが合わせられる。
  上の例では、32bitが最大であるから、ものの見事にシフト結果は0固定となる。

  ではどうするか?

  assign out = ({32'd0, in0} * in1) >> 32;

とりあえずこんな感じでbit幅を増やして逃げておくしかない。イマイチ美しくないのである。

« プロセッサはこの先どう進化するのか? | トップページ | ISEの日本語フォント設定 »

FPGA」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/560384/53478532

この記事へのトラックバック一覧です: 組み込み屋の為のVerilog入門 その3:

« プロセッサはこの先どう進化するのか? | トップページ | ISEの日本語フォント設定 »