2.内部端子・レジスタ

2章では、内部端子とレジスタについて解説します。
内部端子とレジスタは表8の宣言コマンドを使用します。

【表2-1.内部端子・レジスタのコマンド表】
宣言の種類 意味
wire
reg
内部端子
レジスタ

2-1.内部端子の解説

内部端子配線の役割をする構文です。
一つの信号を複数に増やしたり、演算の補助をする目的に使います。
内部端子に転送した値は、転送した時と同クロックで使用可能です。

そして、内部端子に値を何も転送しない間は、値が定らない状態(不定)になります。

内部端子の宣言方法は以下の様に行います。

wire 内部端子名 [ビット幅]

ビット幅は省略可能で、省略した場合は1ビットに決定します。

また、wireに値やデータを代入する場合は”=”を使って以下の様に記述します。

内部端子名 = 値

内部端子の使用例として、
例題3を見てみましょう。

【例題3.内部端子の使用例】
declare ex03 {
   input a, b ;
   output f ;
}
module ex03 {
   wire c, d ; //wire c,dの宣言

   c =  a & ~b ; //式1
   d = ~a & b ;  //式2
   f =  c | d ;  //式3
}

この例題3は”データ端子の宣言”, “内部端子の宣言”,
“共通アクション記述”,を有するモジュールです。

ハードウェア記述言語は並列動作を行うので、 共通アクション記述に記述した複数の動作は同時に実行します。

例題3の式1は「内部端子cに、”a”と”bの否定”の論理積を代入する」という動作です。
次に、式2は「内部端子dに、”aの否定”と”b”の論理積を代入する」という動作です。
そして、式3は「データ出力端子fに、c,dの論理和を代入する」という動作です。

例題3のシミュレーション結果は以下の様になります。

2-2.レジスタ

レジスタはクロック信号の立ち上がりにおいて、
直前の入力値を記憶する記憶素子です。

レジスタの宣言方法は以下になります。

reg レジスタ名 = 初期値

初期値は省略可能です。
また、初期値の値はVerilog-HDL互換、C言語互換の他に
10進数の自然数を入力することも可能です。

動作記述でレジスタに値を代入する場合は、
データ端子やwireと違う記号”:=”を用いて以下の様に記述します。

レジスタ名 := 値

レジスタに代入した値は、代入した次のクロックで記憶されます。
そして、レジスタの値を代入する場合は代入記号”=”を使います。

信号名 = レジスタ名

レジスタの使用例として例題4を見てみましょう。

【例題4.レジスタ使用例】
declare ex04 {
   input a, b ;
   output f ;
}
module ex04 {
   reg r ;

   r := a & b ; //式1
   f = r ;      //式2
}

この例題4の式1は「レジスタrにa,bの論理積を代入する」という動作です。
そして、式2は「データ出力端子fにレジスタrを代入する」という動作です。
以下に論理シミュレーション結果を示します。