工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

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

  1. C# 変数と (プリミティブ) データ型
  2. C++ データ型
  3. C データ型
  4. Python データ型
  5. Java データ型 (プリミティブ)
  6. 5種類のデータセンター[例付き]
  7. 2021年の8種類のクラウドコンピューティング
  8. 例を含む8種類のデータ侵害
  9. Verilog チュートリアル
  10. Verilog 連結
  11. C - データ型