关于timescale的解释.docx
15页关于`timescale(转载)在 Verilog HDL 模型中,所有时延都用单位时间表述使用`timescale 编译器指令将时间单位与实际时间相关联该指令用于定义时延的单位和时延精度`timescale 编译器指令格式为:`timescale time_unit / time_precisiontime_unit 和 time_precision 由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成例如:`timescale 1ns/100ps表示时延单位为 1ns, 时延精度为 100ps`timescale 编译器指令在模块说明外部出现, 并且影响后面所有的时延值例如:`timescale 1ns/ 100psMODULE AndFunc (Z, A, B);OUTPUT Z;input A, B;and # (5.22, 6.17 ) Al (Z, A, B);//规定了上升及下降时延值endMODULE编译器指令定义时延以 ns 为单位,并且时延精度为 1/10 ns(100 ps)因此,时延值 5.22 对应 5.2 ns, 时延 6.17 对应 6.2 ns。
如果用如下的`timescale 程序指令代替上例中的编译器指令,`timescale 10ns/1ns那么 5.22 对应 52ns, 6.17 对应 62ns 在编译过程中,`timescale 指令影响这一编译器指令后面所有模块中的时延值,直至遇到另一个`timescale 指令或`resetall 指令当一个设计中的多个模块带有自身的`timescale 编译指令时将发生什么?在这种情况下,模拟器总是定位在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度例如,`timescale 1ns/ 100psMODULE AndFunc (Z, A, B);OUTPUT Z;input A, B;and # (5.22, 6.17 ) Al (Z, A, B);endMODULE`timescale 10ns/ 1nsMODULE TB;reg PutA, PutB;WIRE GetO;initialbeginPutA = 0;PutB = 0;#5.21 PutB = 1;#10.4 PutA = 1;#15 PutB = 0;endAndFunc AF1(GetO, PutA, PutB);endMODULE在这个例子中,每个模块都有自身的`timescale 编译器指令。
`timescale 编译器指令第一次应用于时延因此,在第一个模块中,5.22 对应 5.2 ns, 6.17 对应 6.2 ns; 在第二个模块中 5.21 对应 52 ns, 10.4 对应 104 ns, 15 对应 150 ns如果仿真模块 TB,设计中的所有模块最小时间精度为 100 ps因此,所有延迟(特别是模块 TB 中的延迟)将换算成精度为 100 ps延迟 52 ns 现在对应 520*100 ps,104 对应 1040*100 ps,150 对应 1500*100 ps更重要的是,仿真使用 100 ps 为时间精度如果仿真模块 AndFunc,由于模块 TB 不是模块 AddFunc 的子模块,模块 TB 中的`timescale 程序指令将不再有效参考资料:1. 关于 verilog 中 timescale 的讨论在 verilog 中是没有默认 timescale 的一个没有指定 timescale 的 verilog 模块就有可能错误的继承了前面编译模块的无效 timescale 参数所以在 verilog 的 LRM 中推荐“在每个 module 的前面指定`timescale,并且相应的在最后加一个`resetall 来确保 timescale 的局部有效”为了确认这种用法,我编写了一个小小的包含两个模块 module_a 和 module_b 的 testbench,其中 module_a,module_b 与 testbench 指定了不同的 timescale 精度。
通过 simulation 的波形可以发现,Simulator 的确在不同的 module 中使用了不同的 times 精度代码如下:文件名:module_a.v`timescale 100ps/1psmodule a (clk) ;input clk;wire clk_a ;assign #5 clk_a = clk;endmodule`resetall文件名:module_b.v`timescale 10ps/1psmodule b (clk) ;input clk;wire clk_b ;assign #5 clk_b = clk;endmodule`resetall文件名:testbench.v`timescale 1ns/10psmodule tb(); reg clk;initial beginclk = 0;endinitialbegin$fsdbDumpvars;#12500 $finish;endalways begin#10 clk = ~clk;enda a_inst(clk);b b_inst(clk);endmodule波形如下: 结论:从上面的波形中可以看出,虽然使用了相同的 delay 表述:assign #5 clk_a(b) = clk;但由于在 module 中指定的 timescale 精度不同,在实际的 simulation 中 delay 的长度是不同的,但都是等于 5×timescale 最小精度对`timescale 的深入理解 在实际应用过程中,如网口 IP CORE 调试过程中,就会出现不同文件的 module 在不同的时间单位和精度的情况之下,因此,有必要对这个问题进行深入透彻地了解和分析。
下面进行详细分析I. 在顶层文件里 instantiates each module,本身不写`timescale 命令,但据说对 modelsim 的默认情况是`timescale 1ps/1ps,现看看波形图和各模块程序:待测信号 Posedge time `timescale 延迟时间表达式b, d, f 5 ns NONE NONEA 5 ns + 1.6 ns 1ns / 100ps #1.55C 5 ns + 1.55 ns 1ns / 10ps #1.55e 5 ns + 0.16 ns 100ps / 10ps #1.55分析:top 文件完全没有干涉各模块的时间单位和精度程序如下:// top.v 文件,无 ` timescalemodule top(a,b,c,d,e,f);output a,c,e;input b,d,f;timescale_t t_1(.A(a),.B(b));timescale_tt t_2(.C(c),.D(d));timescale_ttt t_3(.E(e),.F(f));endmodule//timescale_t.v 文件`timescale 1ns / 100psmodule timescale_t(A,B);output A;input B;assign #1.55 A = B;endmodule//timescale_tt.v 文件`timescale 1ns / 10psmodule timescale_tt(C,D);output C;input D;assign #1.55 C = D;endmodule//timescale_ttt.v 文件`timescale 100ps / 10psmodule timescale_ttt(E,F);output E;input F;assign #1.55 E = F; endmoduleII. 在顶层文件里写上`timescale 1ns/1ps,其他设置和程序不变,看看波形图:待测信号 Posedge time `timescale 延迟时间表达式b, d, f 5 ns 1ns / 1ps NONEA 5 ns + 1.660 ns 1ns / 100ps #1.55C 5 ns + 1.550 ns 1ns / 10ps #1.55E 5 ns + 0.160 ns 100ps / 10ps #1.55分析:可见如果顶层写明了`timescale 命令,那么它将会影响其模块内部各子模块的精度,而不会对时间单位产生任何影响。
但是,如果 top.v 中的时间精度比某个子模块的大,程序将如何处理呢?答案是,结果和 I 中的一样!III. 在顶层文件的各实例化文件前面写上不同的`timescale,其他不变,看看效果:显示,在一个 module 内部不可以编写 `timescale 命令!程序如下:`timescale 1ns/100psmodule top(a,b,c,d,e,f);output a,c,e;input b,d,f;`timescale 1ns / 100pstimescale_t t_1(.A(a),.B(b));`timescale 1ns / 10ps timescale_tt t_2(.C(c),.D(d));`timescale 100ps / 10pstimescale_ttt t_3(.E(e),.F(f));endmodule对书中和网上疯狂转载的一段话进行修正:“一个设计中的多个模块带有滋生的`timescale 指令,模拟器总是定位在所有模块的最小时延精度上 ”这里的所有模块,指的是跟模块和某一个子模块相比较,并采用二者之间最小的精度,对于多个并行的子模块而言,它们是不会相互干扰对方的精度的。

卡西欧5800p使用说明书资料.ppt
锂金属电池界面稳定化-全面剖析.docx
SG3525斩控式单相交流调压电路设计要点.doc
话剧《枕头人》剧本.docx
重视家风建设全面从严治党治家应成为领导干部必修课PPT模板.pptx
黄渤海区拖网渔具综合调查分析.docx
2024年一级造价工程师考试《建设工程技术与计量(交通运输工程)-公路篇》真题及答案.docx
【课件】Unit+3+Reading+and+Thinking公开课课件人教版(2019)必修第一册.pptx
嵌入式软件开发流程566841551.doc
生命密码PPT课件.ppt
爱与责任-师德之魂.ppt
制冷空调装置自动控制技术讲义.ppt


