Verilog データ型
Verilog 言語のデータ型の主な目的は、フリップフロップのビットのようなデータ ストレージ要素と、論理ゲートとシーケンシャル構造の間を接続するワイヤのような伝送要素を表すことです。
変数が保持する値は?
real
を除いて、ほとんどすべてのデータ型は、以下に示す 4 つの異なる値のいずれかを持つことができます。 と event
データ型。
0 | 論理ゼロまたは偽の状態を表します |
1 | 論理 1、または真の状態を表します |
x | 未知の論理値を表します (0 または 1 の可能性があります) |
z | 高インピーダンス状態を表します |
次の図は、これらの値がタイミング図とシミュレーション波形でどのように表されるかを示しています。ほとんどのシミュレーターは、red の場所でこの規則を使用します。 X
の略 そしてオレンジ 真ん中は高インピーダンスまたは Z
を表します .
Verilog 値セットは何を意味しますか?
Verilog は基本的に、フリップフロップなどのハードウェア要素や、NAND や NOR などの組み合わせロジックを記述するために使用されるため、ハードウェアに見られる値システムをモデル化する必要があります。ロジック 1 は、供給電圧 Vdd を表します。 これは、製造技術ノードに基づいて、0.8V から 3V 以上の範囲に及ぶ可能性があります。論理ゼロは地面を表します したがって、値は 0V です。
X
または x
値がその時点で単純に不明であることを意味し、0 または 1 のいずれかである可能性があります。これは X
の方法とはまったく異なります。 ブール論理で処理され、「ドント ケア」を意味します。
不完全な電気回路と同様に、どこにも接続されていないワイヤはそのノードで高インピーダンスになり、Z
で表されます。 または z
. Verilog であっても、接続されていないワイヤがあると高インピーダンスになります。
ネットと変数
ネット および変数 は、異なるハードウェア構造を表し、割り当て方法と値の保持方法が異なるデータ型の 2 つの主要なグループです。
ネット
ネット 論理ゲートなどのハードウェアエンティティ間の接続に使用されるため、それ自体では値を保存しません。次の図では、net_11 というネットを使用して、AND ゲートの出力とフリップフロップの最初の入力 data_0 を接続しています。同様に、AND ゲートの 2 つの入力はネット net_45 と net_67 に接続されます。
ネットにはさまざまな種類があり、それぞれ特徴が異なりますが、最も人気があり、広く使用されている ネット デジタルデザインのタイプは wire
です . wire
要素を接続し、単一のゲートまたは連続割り当てによって駆動されるネットを接続するために使用される Verilog データ型です。 wire
ブレッドボード上の 2 つのコンポーネントを接続するために使用される電線に似ています。
複数のネットが必要な場合は、それらをまとめて単一の wire
を形成できます。 .以下に示す画像では、ワイヤのそれぞれで 4 つの個別の値を送信できる 4 ビット ワイヤがあります。次の記事で説明するように、幅が 1 より大きいエンティティはベクトルと呼ばれます。
wire [3:0] n0; // 4-bit wire -> this is a vector
以下のコードに示すように、ネット、パラメーター、または変数によって既に宣言されている名前を再宣言することは違法です。
module design;
wire abc;
wire a;
wire b;
wire c;
wire abc; // Error: Identifier "abc" previously declared
assign abc = a & b | c;
endmodule
変数
一方、変数はデータ ストレージ要素の抽象化であり、値を保持できます。フリップフロップはストレージ要素の良い例です。
Verilog データ型 reg
割り当て間で値を保持できるため、ハードウェア レジスタのモデル化に使用できます。 reg
であることに注意してください 組み合わせロジックを表すためにも使用できるため、常にフリップフロップを表す必要はありません。
左側の画像には、1 ビットを格納できるフリップフロップがあり、右側のフリップフロップは 4 ビットを格納できます。
その他のデータ型
整数
integer
ハードウェアのモデリング中に他の目的に使用できる 32 ビット幅の汎用変数で、整数値を格納します。
integer count; // Count is an integer value > 0
時間
time
variable は符号なしで 64 ビット幅であり、デバッグ目的でシミュレーション時間量を格納するために使用できます。 realtime
変数は単に時間を浮動小数点数として格納します。
time end_time; // end_time can be stored a time value like 50ns
realtime rtime; // rtime = 40.25ps
リアル
real
変数は浮動小数点値を格納でき、integer
と同じ方法で割り当てることができます そして reg
.
real float; // float = 12.344 - can store floating numbers
例
module testbench;
integer int_a; // Integer variable
real real_b; // Real variable
time time_c; // Time variable
initial begin
int_a = 32'hcafe_1234; // Assign an integer value
real_b = 0.1234567; // Assign a floating point value
#20; // Advance simulation time by 20 units
time_c = $time; // Assign current simulation time
// Now print all variables using $display system task
$display ("int_a = 0x%0h", int_a);
$display ("real_b = %0.5f", real_b);
$display ("time_c = %0t", time_c);
end
endmodule
シミュレーションログ ncsim> run int_a = 0xcafe1234 real_b = 0.12346 time_c = 20 ncsim: *W,RNQUIE: Simulation is complete.
Verilog 文字列
文字列は reg
に格納されます 、および reg
の幅 変数は、文字列を保持するのに十分な大きさである必要があります。文字列の各文字は ASCII 値を表し、1 バイトが必要です。変数のサイズが文字列より小さい場合、Verilog は文字列の左端のビットを切り捨てます。変数のサイズが文字列より大きい場合、Verilog は文字列の左側にゼロを追加します。
// "Hello World" requires 11 bytes
reg [8*11:1] str = "Hello World"; // Variable can store 11 bytes, str = "Hello World"
reg [8*5:1] str = "Hello World"; // Variable stores only 5 bytes (rest is truncated), str = "World"
reg [8*20:1] str = "Hello World"; // Variable can store 20 bytes (rest is padded with zeros), str = " Hello World"
上記の 3 つの変数をシミュレートする方法を示す完全な例を次に示します。
module testbench;
reg [8*11:1] str1;
reg [8*5:1] str2;
reg [8*20:1] str3;
initial begin
str1 = "Hello World";
str2 = "Hello World";
str3 = "Hello World";
$display ("str1 = %s", str1);
$display ("str2 = %s", str2);
$display ("str3 = %s", str3);
end
endmodule
str1 には、文字列 "Hello World" の 11 バイトすべてを格納するのに適切なサイズがあるため、文字列全体が出力されることに注意してください。ただし、str2 は 5 バイトしか格納できないため、上位 6 バイトが切り捨てられ、「World」のみを格納することになります。 3 番目の変数 str3 は 11 バイトよりも大きく、左側に空のスペースが埋め込まれているため、格納されている値は "Hello World" になります。
シミュレーションログncsim> run str1 = Hello World str2 = World str3 = Hello World ncsim: *W,RNQUIE: Simulation is complete.
Verilog