亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Verilog

Verilog 调度语义

Verilog 设计和测试平台通常有很多行代码,包括 alwaysinitial 块、连续赋值和其他在模拟过程中在不同时间变得活跃的程序语句。

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

  

事件队列

一个模拟步骤可以分为四个不同的区域。活动事件队列只是需要在当前时间执行的一组进程,这可能导致更多进程被调度到活动或其他事件队列中。事件可以添加到任何区域,但总是从 active 中删除 地区。

当当前时间步的活动队列中的所有事件 执行完毕后,模拟器将时间提前到下一个时间步并执行其活动队列。

  
  
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 个时间单位之后调度下一条语句。

是什么让模拟具有不确定性?

仿真过程中可能存在竞争条件,最终会为相同的设计和测试平台提供不同的输出。非确定性行为的原因之一是因为 active 事件可以从队列中移除并按任意顺序处理。


Verilog

  1. Verilog 教程
  2. Verilog 连接
  3. Verilog 作业
  4. Verilog 阻塞和非阻塞
  5. Verilog 函数
  6. Verilog 任务
  7. Verilog 时钟发生器
  8. Verilog 数学函数
  9. Verilog 时间格式
  10. Verilog 时间刻度范围
  11. Verilog 文件 IO 操作
  12. 为什么是时候改进员工排班