組み込み屋の為の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」カテゴリの記事
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
この記事へのコメントは終了しました。
コメント