Verilog-HDL 文法(2):論理値,定数,データ型
2015/09/27
[CategoryTop] [Prev] [Next]
[目次]・論理値と定数
     * 論理値
     * 信号強度
     * 定数
   ・信号のデータ型
     * 型宣言
     * 宣言の省略

●論理値と定数

 ◆論理値
 
  ・Verilog-HDLで扱う論理値は以下の4種です。
    0 : Low
    1 : High
    x : 不定値
    z : High Impedance
  
  ・xとzの違いについては注意して下さい。(*1)
    x : 0か1かは不定だが、どちらかの値を取る(valid)
    z : 0でも1でもない(invalid, 回路状態としてHigh Impedance : VDD, GNDの両方
      に対してOPEN)
  
  ・波形と論理値の関係を以下に示します。
  ┌─────────────────────────────────────┐
   ─┐   ┌───┬───┐ z
    │ 0  │ 1  │ x  ├───
    └───┘   └───┘
  └─────────────────────────────────────┘
 
 ◆信号強度
 
  ・Verilog-HDLでは、信号に8種の強度を設定することができます。レベルの高い順に
   記述すると以下のようになります。
  ┌─────────────────────────────────────┐
    supply : Level 7 <--- 電源レベル
    strong : Level 6
    pull  : Level 5
    large  : Level 4
    weak  : Level 3
    medium : Level 2
    small  : Level 1
    highz  : Level 0 <--- これはレベル不定の意味
  └─────────────────────────────────────┘
  
  ・信号強度は論理値0/1の接頭辞として使用します。
    (例)strong0, strong1, small1 等々
  
  ・信号強度を省略した場合、strongレベルとして扱われます。
  
  ・信号強度はPrimitive Gate(*2)呼び出しにおいて適用することができます。
    (例)and (pull0, pull1) ins_and (z, a, b);
      |~~ |~~~~~~~~~~~~
      |  +-信号強度設定
      +-Primitive Gate名
  
  ・ただし信号強度の記述は論理合成対象外です。Simulation時に適用されます。

 ◆定数
 
  ・定数は以下のように記述します
  ┌─────────────────────────────────────┐
    <ビット幅>'<基数><数値>
     (例)1'b0, 8'hff
  └─────────────────────────────────────┘
  
  ・<ビット幅>は定数のビット幅を10進数で記述します。省略時は32bitになります。
  
  ・<基数>は以下の4種類です。省略時は10進の扱いになります。
  ┌─────────────────────────────────────┐
     b , B : 2進(binay)
     o , O : 8進(octal)
     d , D : 10進(decimal)
     h , H : 16進(hexadecimal)
  └─────────────────────────────────────┘
  
  ・<数値>には、基数に指定した文字と、論理値のx,zを記述することができます。ただ
   し10進記述の場合はx,zを使用できません。
  
  ・<数値>では区切り文字にアンダースコア '_' を使用することができます。
  
  ・それでは記述例をいくつか見てみましょう。
  ┌─────────────────────────────────────┐
         8 : 10進 : 32bit : 00000 .... 01000
       4'd5 : 10進 :  4bit :       0101
       1'b0 :  2進 :  1bit :         0
     16'hf0f0 : 16進 : 16bit : 1111000011110000
       4'bx :  2進 :  4bit :       xxxx <-- 要注意!!
      8'o255 :  8進 :  8bit :     10101101
       'haa : 16進 : 32bit : 000 ... 10101010
   8'b0101_xx01 :  2進 :  8bit :     0101xx01
  └─────────────────────────────────────┘


●信号のデータ型

 ◆型宣言
 
  ・Verilog-HDL : Hardaware Description Language。つまり記述は全てハードに直結
   します。よって記述の上で変数として扱う信号は、レベルを保持するワイヤに相当
   しています。
  
  ・つまり型宣言とは、どんな種類のワイヤなのかを宣言することです。Verilog-HDL
   の型宣言には2種類があります。
  ┌─────────────────────────────────────┐
     * ネット型  : 配線。信号論理値は原則として接続されるノードの値として
             決まります。
       (例)wire clk;
         wire z;
         
     * レジスタ型 : レジスタ。信号論理値が保持されます。
         reg q;
  └─────────────────────────────────────┘
  
  ・ネット型は配線(wire)なので、基本的に何らかの演算結果が接続されるだけです。
   よって代入操作(つまり接続)は、assign文のみ使用できます。
  
  ・レジスタ型はレベルを保持するラッチやフリップフロップに相当します。このため
   always文, initial, function, taskの中でのみ代入操作が可能です。
 
 
 ◆宣言の省略
 
  ・ポート信号はwire宣言を省略することができます。(裏を返せば、本来はwire記述
   が存在するということです)。普通はこのように省略記述しますが、パーサの解釈
   を見るときに「wireの存在」を知っていた方が良いでしょう。
  ┌─────────────────────────────────────┐
   +--------------------------+     +--------------------------+
   |module and_cell (z, a, b);|     |module and_cell (z, a, b);|
   | output z;        |     | output z;        |
   | input a, b;      |     | input a, b;       |
   | wire  z;        | -----> |             |
   | wire  a, b;      |  wire  | assign z = a & b;    |
   |             |  省略  |             |
   | assign z = a & b;    |     |endmodule         |
   |             |     +--------------------------+
   |endmodule         |
   +--------------------------+
  └─────────────────────────────────────┘
   
  ・またゲートやモジュール間を接続する1bitのwireも宣言を省略できます。実際に省
   略する/しないについてはローカルのデザインルールによります。また多bitのwire
   は省略できません。
  ┌─────────────────────────────────────┐
   +-------------------------------+    +-------------------------------+
   |module ff_cell (q, ck, d);   |    |module ff_cell (q, ck, d);   |
   | input ck, d;         |    | input ck, d;         |
   | output q;          |    | output q;          |
   | wire ltout;         |    |                |
   |                | -----> | l_latch llt_1 (ltout, ck, d);|
   | l_latch llt_1 (ltout, ck, d);| wire | h_latch hlt_1 (q, ck, ltout);|
   | h_latch hlt_1 (q, ck, ltout);| 省略 |                |
   |                |    |endmodule           |
   |endmodule           |    +-------------------------------+
   +-------------------------------+
  └─────────────────────────────────────┘
   

(*1)z(High Impedance)の期待をSimulationで行うことは容易ですが、実際の測定では測定
  経路の容量(時定数)を考慮する必要があります。


(*2)Primitive Gate
  ・Primitive GateとはVerilog-HDLにあらかじめ組み込まれたゲートです。moduleの定
   義無しに使用することができます。
    --------+--------------------------------------------------
    種別  | ゲート名
    --------+--------------------------------------------------
    gate  | and, nand, nor, or, xor, xnor, buf, not
    --------+--------------------------------------------------
    3state | bufif0, bufif1, notif0, notif1
    --------+--------------------------------------------------
    switch | nmos, pmos, cmos, rnmos, rpmos, rcmos
        | tran, tranif0, tranif1, rtran, rtranif0, rtranif1
    --------+--------------------------------------------------
    pullup | pullup
    pulldown| pulldown
    --------+--------------------------------------------------

  ・gateと3stateは論理合成可能です。ただし、書いた通りのゲート構成になるかどう
   かはわかりません。合成ライブラリ次第です。
  
  ・ポート記述は原則として (output, input, enable) の順番です。詳しくは
   Verilog-HDLのBNF(Backus Naur Form)を参照して下さい。


[Revision Table]
 |Revision |Date    |Comments
 |----------|-----------|-----------------------------------------------------
 |1.00   |2003-10-31 |初版
 |1.01   |2003-11-08 |リンク追加
[end]

Copyright(C) 2015 Altmo