数値の指定

まずはサンプルを入力して実行してみよう。

module adder_2( sw1, led);
 // 入出力信号宣言
 input [1:0]sw1;
 input [2:0]led; 
	
 assign led = sw1 + 2'b10; 
	
endmodule

お分かりのように、この回路はスイッチの値と2進数の01を加算する回路である。
前回までは変数だったが、今回はverilogで定数を扱う方法を学ぼう。

verilogでは以下の定数を指定できる

  • 2進数(b)
  • 8進数(o)
  • 10進数(d)
  • 16進数(h)

定数の書式は

(ビット幅)'(基数:b,o,d,hのどれか)(数値)

である。とにかく例題を見てみれば理解しやすいと思う。

4'b1001
10'd1023
24'h0FA103

ビット幅、基数を省略した場合は十進数とみなされる。verilogでは小数を扱えない。
ビット幅を省略した場合は合成ツールが適当に決める(ようだ)。
また、ゼロは省略できる。つまり

32'b0

と書くことができる。(できなかったら'0'を32個書かないといけない…よかった。)
十六進数の場合は0-9の数値に加え、a-fのアルファベットを使える。もちろん大文字も可能。
後日説明するが、数値以外にも'x'(不定値・ドントケア),'z'(ハイインピーダンス)を使うこともできる。
これは必要になったら説明するから、頭の片隅にいれておこう。

さて、するどい人は気づいたと思うが、verilogでは負の数を扱えない。
これはハードウェアは設計者が数値を管理しなければならないためだ。
例えば 4'b1001 はどう解釈したらいいのだろう?

  1. 十進数で'9'だ
  2. 最上位ビット(MSB)を符号とみなせば'-1'だ
  3. いやいや、'-7'だよ
  4. ちがうね、MSBの次に小数点があるとみなせば 1.0 x 1 + 0.5 x 0 + 0.25 x 0 + 0.125 x 1 = 1.125だよ
  5. そうじゃなくて、上位2桁を基数、下位2桁を仮数とみな(ry

どれも正解。数値を

  1. 符号なし整数
  2. 1の補数
  3. 2の補数
  4. 固定小数点
  5. 浮動小数点

とみなすのは設計者の仕事なのだ。もちろん小数や負の数を扱うときには
演算精度や桁あわせを考えないといけない。
今回は入門だから、頭の片隅においておいて欲しい。必要がでたら説明します。
(それまでこの入門が続いているやら…)

条件演算子【Altera DE0】へ進む
Verilog入門へ戻る


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-04-13 (水) 11:11:16 (2319d)