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

Verilog 割り当て

ネットと変数に値を配置することを代入と呼びます。 3 つの基本的な形式があります。

法定 LHS 値

割り当てには、右側 (RHS) と左側 (LHS) の 2 つの部分があり、その間に等号 (=) または不等号 (<=) があります。

割り当てタイプ 左側
手続き型
  • 変数 (ベクトル/スカラー)
  • ベクトル reg、整数、または時間変数のビット選択または部分選択
  • 思い出の言葉
  • 上記のいずれかの連結
連続
  • ネット (ベクトル/スカラー)
  • ベクター ネットのビット選択または部分選択
  • ビット選択と部分選択の連結
手続き型連続
  • ネットまたは変数 (ベクトル/スカラー)
  • ベクター ネットのビット選択または部分選択

RHS には、最終値に評価される任意の式を含めることができ、LHS は、RHS の値が割り当てられるネットまたは変数を示します。

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

手続き上の割り当て

手続き型割り当ては、always、initial、タスク、関数などの手続き内で発生し、変数に値を配置するために使用されます。変数は、同じ変数への次の代入まで値を保持します。

シミュレーション中のある時点でシミュレーションがこのステートメントを実行すると、値が変数に配置されます。これは、if-else-if、case ステートメント、ループ メカニズムなどの制御フロー ステートメントを使用して、必要な方法で制御および変更できます。

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

変数宣言の代入

次に示すように、宣言時に変数に初期値を設定できます。代入には期間がなく、同じ変数への次の代入が発生するまで値が保持されます。配列への変数宣言の代入は許可されていないことに注意してください。

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

以下に示すように、変数が宣言中および初期ブロックの時間 0 で初期化される場合、評価の順序は保証されないため、8'h05 または 8'hee のいずれかになる可能性があります。

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

手続きブロックと割り当てについては、後のセクションで詳しく説明します。

連続任務

段階的なシミュレーションの例については、ここをクリックしてください!

これは、スカラー ネットとベクター ネットに値を割り当てるために使用され、RHS に変更があるたびに発生します。これは、ゲートの相互接続を指定せずに組み合わせロジックをモデル化する方法を提供し、論理式でネットを簡単に駆動できるようにします。

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

b または c がその値を変更するたびに、RHS の式全体が評価され、 新しい値で更新されます。

ネット宣言の割り当て

これにより、ネットを宣言する同じステートメントに連続代入を配置できます。ネットは 1 回しか宣言できないため、1 つのネットに対して 1 つの宣言の割り当てのみが可能であることに注意してください。

  
  
	wire  penable = 1;

  

手続き型連続割り当て

これらは、式をネットまたは変数に連続的に割り当てることができる手続き型ステートメントで、2 つのタイプがあります。

割り当て解除

これは、変数へのすべての手続き型割り当てをオーバーライドし、deassign で同じシグナルを使用して非アクティブ化します .変数の値は、変数が手続き型または手続き型の連続代入によって新しい値を取得するまで同じままです。 assign の LHS ステートメントは、ビット選択、部分選択、または配列参照にすることはできませんが、変数または変数の連結にすることはできます。

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

強制解除

これらは assign - deassign に似ています 文だけでなく、ネットや変数にも適用できます。 LHS は、ネットのビット選択、ネットの部分選択、変数、またはネットにすることができますが、配列への参照および変数のビット/部分選択にすることはできません。 force ステートメントは、release を使用して解放されるまで、変数に行われた他のすべての割り当てをオーバーライドします。 キーワード。

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

  1. Verilog チュートリアル
  2. Verilog 連結
  3. Verilog ブロッキング &ノンブロッキング
  4. Verilog 関数
  5. Verilog タスク
  6. Verilog クロック ジェネレーター
  7. Verilog 数学関数
  8. Verilog タイムフォーマット
  9. Verilog タイムスケール スコープ
  10. Verilog ファイルの IO 操作
  11. Verilog ハローワールド