7176|1

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

关于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/1ps

module a (clk) ;
input clk;
wire clk_a ;

assign #5 clk_a = clk;

endmodule

`resetall

文件名:module_b.v
`timescale 10ps/1ps

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;
#12500 $finish;
end


always begin
#10 clk = ~clk;
end

a a_inst(clk);
b b_inst(clk);

endmodule

 

结论:
从上面的波形中可以看出,虽然使用了相同的delay表述:
assign #5 clk_a(b) = clk;
但由于在module中指定的timescale精度不同,在实际的simulation中delay的长度是不同的,但都是等于5×timescale最小精度。

此帖出自FPGA/CPLD论坛

最新回复

关于timescale 补充如下: 在Verilog HDL 模型中,所有时延都用单位时间表述。使用`timescale编译器指令将时间单位与实际时间相关联。该指令用于定义时延的单位和时延精度。`timescale编译器指令格式为:   `timescale time_unit / time_precision time_unit 和time_precision 由值1、10、和100以及单位s、ms、us、ns、ps和fs组成。例如:   `timescale 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。如果用如下的`timescale程序指令代替上例中的编译器指令,   `timescale 10ns/1ns   那么5.22对应52ns, 6.17对应62ns。     在编译过程中,`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    详情 回复 发表于 2010-12-29 11:08
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报

569

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

关于timescale 补充如下:

Verilog HDL 模型中,所有时延都用单位时间表述。使用`timescale编译器指令将时间单位与实际时间相关联。该指令用于定义时延的单位和时延精度。`timescale编译器指令格式为:

 

`timescale time_unit / time_precision

time_unit time_precision 由值110、和100以及单位smsusnspsfs组成。例如:

 

`timescale 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 ns100 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/ 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

 

此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表