2006年09月02日
Verilog-HDLの文法前編
さて、前回の謎を解くべく、こちらであげた参考書を元に、体系だった基礎勉強の開始です。
■なぜ、HDLを使うのか?
C言語とアセンブラ言語の関係と同じで、ハードウェア依存性をなくすためです。
■何を、設計・記述するのか?
回路図を設計し、記述するための言語となります。
この場合の回路図というのは、「AND回路」「OR回路」「NAND回路」「NOR回路」を組み合わせた理論回路を指します。
■文法
●構造
・moduleによる構造が基本単位となります。
module モジュール名(ポート・リスト);
ポート宣言
ネット宣言
レジスタ宣言
パラメータ宣言
回路記述
endmodule
という、構造となります。
●変数
・ポート宣言
input led;
という、入出力ポートの指定となります。
input [7:0] led;
とすると、ビット幅(配列?)指定になります。
・ネット宣言
wire led;
という、配線の指定となります。ポート宣言した場合は、省略できるようです。
こちらもビット幅指定可能です。
・レジスタ宣言
reg ff1;
という、ラッチやフリップフロップの指定となります。基本的には、ネット宣言の値を保持できる番というもののようです。
こちらもビット幅指定可能です。
・パラメータ宣言
parameter STEP=1000;
という、定数宣言の指定となります。
●値の表現
・論理値
0・・・0
1・・・1
x・・・不定値
z・・・ハイ・インピーダンス
という、値が存在します。
また、
supplay
strong
pull
large
weak
medium
small
highz
という、信号強度の指定ができるそうですが、シミュレーション時にしか使用されないようです。省略時には、「strong」になります。
・定数表現
b,B・・・2進数
o,O・・・8進数
d,D・・・10進数
x,X・・・16進数
これは、そのままの意味です。
●演算子
・基本的な演算子
算術演算
ビット演算
論理演算
等号演算
関係演算
シフト演算
は、優先順位も含めて、ほぼC言語と同じです。
・真偽値
真・・・1(1'b1)
偽・・・0(1'b0)
です。
・連接演算子
{led1, led2}
という、記述をする「{}」を使用する演算子です。
led1,led2が、8ビットであったとすると、これは16ビットということになります。
・リダクション演算
&
~&
|
~|
^
~^
意味は、ビット演算子と同じですが、ビットすべてに作用させることができます。
reg [7:0] cnt;
に、この演算子を適用すると、cnt[0]〜cnt[7]まで、すべてが演算されます。
・例外的なもの
インクリメント、デクリメントはありません。
a=b=c=1
というような記述はできません。
- by noritsuna
- at 00:01