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

Verilog 时间刻度范围

默认时间刻度

虽然预计 Verilog 模块在模块之前定义了时间刻度,但模拟器可能会插入默认时间刻度。可以使用系统任务 $printtimescale 打印在 Verilog 详细层次结构中的任何范围内应用的实际时间刻度 它接受范围作为参数。

  
  
module tb;
	initial begin
		// Print timescale of this module
		$printtimescale(tb);
		// $printtimescale($root);
	end
endmodule

  

看到即使在这个模块之前没有放置时间刻度指令,模拟器最终还是应用了 1ns/1ns 时间刻度值。

模拟日志
xcelium> run
Time scale of (tb) is  1ns /  1ns
xmsim: *W,RNQUIE: Simulation is complete.

标准时间尺度范围

默认情况下,放置在文件中的 timescale 指令将应用于该指令之后的所有模块,直到定义另一个 timescale 指令。

  
  
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

module alu;
  
endmodule

`timescale 1ns/10ps

module des;
  
endmodule

  

在上面的例子中,tb 和 alu 的时间刻度为 1ns/1ns,而 des 的时间刻度为 1ns/10ps,因为在 des 的模块定义之前放置了指令

模拟日志
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

Verilog 文件之间的范围

可以使用 `include 将其他文件包含到当前文件中 指令,它是一个预处理器指令,使编译器在编译之前放置包含文件的内容。所以,这相当于简单地将其他文件的全部内容粘贴到这个主文件中。

  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

`include "file_alu.v"
`include "file_des.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

看到结果与前面的示例完全相同。 alu 获得 1ns/1ps 的时间刻度,因为它是最后一个保持有效的指令,直到编译器找到 alu 定义,尽管将它放在不同的文件中。 des 获得 1ns/10ps 的时间刻度,因为该指令在其定义之前被替换。

模拟日志
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

交换文件可以改变时间尺度

文件的包含顺序在时间刻度指令的重新定义中起着重要作用,这在下面的示例中很明显。

  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

看到模块 alu 现在获得了 1ns/10ps 的时间尺度。

模拟日志
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  10ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

这是在文件顶部设置时间刻度指令的原因之一,以便该文件中的所有模块都假定正确的时间刻度,而与文件包含无关。

但是,这种方法可能难以在不更改每个文件的情况下以不同的时间尺度精度(斜线后面的值)进行编译。许多编译器和模拟器还提供了一个选项来覆盖将应用于所有模块的默认时间刻度值。


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. Verilog Hello World