2006年09月04日

Verilog-HDLの文法後編

前回の続きです。

■回路記述
●function
関数です。
どうやら、moduleは、関数ではなく、C言語で言うところのプログラム自体を指すということになりそうです。そうすると、main関数は、moduleの内部にあるということで、moduleのmain関数(相当)というのはないのかもしれません。

function ビット幅 ファンクション名;
endfunction

●if
C言語同様の扱いとなります。特に、変わったところはありません。

●case

case (式)

式:ステートメント

default:ステートメント

endcase

C言語で言うところのswitchです。

●for
C言語同様の扱いとなります。特に、変わったところはありません。

●while
C言語同様の扱いとなります。特に、変わったところはありません。

●repeat

repeat(回数)


指定回数、繰り返すという構文です。

●forever

forever


無限ループするという構文です。。。さすがは、ハードウェアって感じですね。これは。



■特殊な文
C言語には無いハードウェアならではと思われる構文を説明します。

●遅延制御

#遅延式

というように、遅延を制御するために使用します。
#10 A=B;

10単位時間後に、「A=B」を実行します。(単位時間は、timescalse文で指定します。)

●イベント制御

@イベント式

というように、イベント駆動をするための構文となります。
always @(A)

B=C;

Aが、変化したら、「B=C」が実行されます。(alwaysは、後述します。)
また、特別な条件指定として、
posedge・・・立ち上がりエッジ

negedge・・・立ち下がりエッジ

というものも使えるそうで、ほかにもいろいろとあるようです。

●イベント文

event イベント;

上記の駆動条件として使用できるものです。
ただし、論理回路化されないそうなので、実回路を考える場合にはレジスタ宣言などに置き換えなければなりません。

●assign文

aggign 遅延 代入文;

ポート、ネット宣言に対して、代入したい場合に使用します。
レジスタ宣言に対しては、「=」のみで代入できます。

●always文
Verilog-HDLのキモというべきものだそうです。いろいろ使用法があるようですのです。

always タイミング・コントロール ステートメント

タイミング・コントロール・・・@イベント式 または #定数式


タイミング・コントロールに、変化がある度に実行される文となります。C#のdelegateのような存在となります。

●initial文
上記always文の実行時に一回のみ実行されるバージョンです。

●制御ブロック

begin

式;

end

C言語の「{式}」に相当し、まさにパスカルそのものの意味です。
always @(A) begin

B=1;

C=1;

end

●並行ブロック

fork

式;

join

上記の制御ブロックの仲間ですが、こちらは、「内部にある式がすべて同時に実行」されます。
fork

b=1;

#10 c=1;

#5 d=1;

e=1;

join

上記の場合、「b=1」と「e=1」が実行され、5単位時間経過後、「d=1」が実行され、10単位時間経過後、「c=1」が実行されるということになります。




以上、駆け足できましたが、必要そうな部分は何とかなるのではないかと思います。

Creative Commons License
This weblog is licensed under a Creative Commons License.