一 仿真单位 timeunit
我们知道,当我们的代码中写清楚延时语句时,若不指定时间单位,则使用此单位; 例如: `timescale 1ns/1ps 则 #15 语句表示delay15ns;
例:如下代码,module a 的timescale是1ns/1ps, module b 是1ps/1ps; module b中的clk,频率是由输入参数 t 决定的,在module a中例化 b 时,输入参数接 t1,而t1的值是5us。
那么,我们期望的是inst_b中的clk 是每隔5us 翻转一次,也就是5000 ns翻转一次,然而事实真的如此吗?
通过仿真波形来看,实际上inst_b中的clk 每隔5ns翻转一次。 发生了什么事?
因为“变量” 是没有单位这个概念的。
在module a中定义的变量 t1=5us ,在a的timescale 1ns/1ps下,会被解析成5000,原因就是*细节点中提到的,“若指定单位,则仿真工具会转化为当前仿真单位的数值”,当前仿真单位是ns,所以"5us"会被解析成"5000"这个“数”。
然后,会把5000这个数,传给inst_b, 相当于module b中的forever语句变成: forever #5000 clk = ~clk; 然而&#