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

Verilog スケジューリング セマンティクス

通常、Verilog デザインとテストベンチには、always で構成される多数のコード行があります。 または initial シミュレーション中の異なる時点でアクティブになるブロック、連続代入、およびその他の手続き型ステートメント。

Verilog モデルの信号値のすべての変化は、更新イベントと見なされます .そして always などのプロセス と assign これらの更新イベントに敏感なブロックは任意の順序で評価され、評価イベントと呼ばれます .これらのイベントはさまざまなタイミングで発生する可能性があるため、イベント キューにスケジュールすることで、より適切に管理され、正しい実行順序が保証されます。 シミュレーション時間順に並べられています。

  
  
module tb;
	reg a, b, c;
	wire d;
	
	// 'always' is a process that gets evaluated when either 'a' or 'b' is updated. 
	// When 'a' or 'b' changes in value it is called an 'update event'. When 'always'
	// block is triggered because of a change in 'a' or 'b' it is called an evaluation
	// event
	always @ (a or b) begin
		c = a & b;
	end
	
	// Here 'assign' is a process which is evaluated when either 'a' or 'b' or 'c'
	// gets updated
	assign d = a | b ^ c;
endmodule

  

イベント キュー

シミュレーション ステップは、4 つの異なる領域に分割できます。アクティブなイベント キューは、現時点で実行する必要がある一連のプロセスにすぎません。その結果、アクティブなイベント キューまたは他のイベント キューにスケジュールされるプロセスが増える可能性があります。イベントはどの地域にも追加できますが、アクティブ からは常に削除されます

現在のタイム ステップのアクティブ キュー内のすべてのイベント が実行されると、シミュレーターは時間を次の時間ステップに進め、アクティブなキューを実行します。

  
  
module tb;
	reg x, y, z
	
	initial begin
		#1 	x = 1;
			y = 1;
		#1 	z = 0;
	end
endmodule

  

シミュレーションは時間 0 で開始され、シミュレーション時間が 1 時間単位に達したときに最初のステートメントが実行されるようにスケジュールされ、x と y が 1 に割り当てられます。これは、1 時間単位である現在の時間のアクティブなキューです。その後、シミュレーターは、z が 0 に割り当てられる 1 つの時間単位の後に、次のステートメントをスケジュールします。

シミュレーションが非決定的である理由

シミュレーション中に競合状態が発生し、同じデザインとテストベンチに対して異なる出力が得られる場合があります。非決定的な動作の理由の 1 つは、アクティブ であるためです。 イベントはキューから削除して、任意の順序で処理できます。


Verilog

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