好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

09.关于`timescale.pdf

4页
  • 卖家[上传人]:飞***
  • 文档编号:53938893
  • 上传时间:2018-09-06
  • 文档格式:PDF
  • 文档大小:114.90KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 今天看了很多博主写的关于verilog 中的 timescale 的东西,收获很多将大家 的东西转载一下,并加点自己的整理东西 在 Verilog HDL 模型中,所有时延都用单位时间表述 使用`timescale 编 译器指令将时间单位与实际时间相关联该指令用于定义时延的单位和时延精 度`timescale 编译器指令格式为: imescale time_unit / time_precision time_unit和 time_precision由值 1、10、和 100 以及单位 s、ms 、u s、ns 、ps 和 fs 组成例如:`imescale 1ns/100ps 表示时延单位为 1ns , 时延精度为 100ps `timescale 编译器指令在模块说 明外部出现 , 并且影响后面所有的时延值例如: `timescale 1ns/ 100ps MODULE 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如果用如下的 `timesca le 程序指令代替上例中的编译器指令, `timescale 10ns/1ns 那么 5.22 对应 52ns, 6.17 对应 62ns在编译过程中, `timescale 指令影响这一编译器指令后面所有模块中的时延 值,直至遇到另一个 `timescale 指令或 `resetall 指令 当一个设计中的多个模块 带有自身的 `timescale 编译指令时将发生什么?在这种情况下,模拟器总是定位 在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度以下转自另一篇文章: ) 在 verilog 中是没有默认 timescale 的一个没有指定 timescale 的 verilog 模块就有可能错误的继承了前面编译模块的无效timescale 参数所以在 verilog 的 LRM 中推荐“ 在每个 module 的前面指定 `timescale, 并且相应的在最后加一个 `resetall来确保 timescale的局部有效 ”在编译过程中, `timescale 指令影响这一编译器指令后面所有模块中的时延 值,直至遇到另一个 `timescale 指令或 `resetall 指令。

      当一个设计中的多个模块 带有自身的 `timescale 编译指令时将发生什么?在这种情况下,模拟器总是定位 在所有模块的最小时延精度上, 并且所有时延都相应地换算为最小时延精度例 如,`timescale 1ns/ 100ps MODULE AndFunc (Z, A, B); OUTPUT Z; input A, B; and # (5.22, 6.17 ) Al (Z, A, B); endMODULE `timescale 10ns/ 1ns MODULE TB; reg PutA, PutB; WIRE GetO; initial begin PutA = 0; PutB = 0; #5.21 PutB = 1; #10.4 PutA = 1; #15 PutB = 0; end AndFunc 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 程序指令将不再有效为了确认这种用法,我编写了一个小小的包含两个模块module_a 和 mod ule_b 的 testbench ,其中 module_a,module_b与 testbench 指定了不同的 timescale 精度通过 simulation 的波形可以发现 ,Simulator 的确在不同的 module 中使用了不同的 times 精度 代码如下: 文件名: module_a.v `timescale 100ps/1ps module module_a (clk) ; input clk; wire clk_a ; assign #5 clk_a = clk; endmodule `resetall 文件名: module_b.v `timescale 10ps/1ps module module_b (clk) ; input clk; wire clk_b ; assign #5 clk_b = clk; endmodule `resetall 文件名: testbench.v `timescale 1ns/10ps module tb(); reg clk; initial begin clk = 0; end initial begin $fsdbDumpvars; #12 $finish; end always begin #1 clk = ~clk; end module_a a_inst(clk); module_b b_inst(clk); endmodule针对这三个文件,进行不同的修改,得到不同的波形:结论: 从上面的波形中可以看出,虽然使用了相同的delay 表述: assign #5 clk_a(b) = clk; 但由于在 module 中指定的 timescale精度不同,在实际的simulation中 delay 的长度是不同的,但都是等于5×timescale最小精度。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.