关于某timescale的解释
- 格式:doc
- 大小:58.00 KB
- 文档页数:24
钟慢尺缩:根据爱因斯坦的狭义相对论,特别是其中提出的钟慢尺缩论断。
当一个物体运动速度接近光速时,物体周围的时间会迅速减慢、空间会迅速缩小。
当物体运动速度等于光速时,时间就会停止、空间就会微缩为点,也就是说出现零时空。
当物体运动速度超过光速时,时间就会出现倒流即所谓负时间;空间也会相应回到过去空间,也就是所谓的负空间,这时该物体就进入了负时空,即时空倒流或时空倒转,从而该物体就实现了瞬移即瞬间移动。
钟慢尺缩以上说法是爱因斯坦对与钟慢尺缩的定义,根据爱因斯坦的概念扩展下去,时间倒流成为可能,物质挤压到无穷小成为可能,甚至物质成为负物质也是可能的,一切不可能的成为可能,科学的实在性在爱因斯坦的相对论面前如何生存,是科学家必须解决的重大课题。
在科学实在性面前,爱因斯坦的钟慢尺缩概念是错误的,在数学公式推演上又是成立的。
钟慢尺缩为什么在科学实在性是错误的,这是因为大自然绝对不会允许出现时间时间倒流的逆天行为的,大自然的时间箭头是不可逆前进着,速度超过光速的宇宙飞船也不会回到过去,回到过去在科学实在性的原则上绝对是科学幻想。
爱因斯坦的【钟慢尺缩】在概念定性是错误的定性。
既然钟慢尺缩是错误的概念,为什么在数学公式推演上成立,这是因为爱因斯坦在坐标系的定位层次上出现偏差,把不同层次的坐标系混合在一个系统内造成的。
第一条;爱因斯坦的钟慢尺缩的,钟慢,是如何在坐标系中混合的,例如;外星人牛顿与外星人爱因斯坦做光速宇宙飞船到地球上来,牛顿的钟表时间与爱因斯坦的钟表时间一致,到地球的距离一致,爱因斯坦的宇宙飞船的速度是光速,牛顿的宇宙飞船是火箭速度,第二条;时间一致,距离一致,宇宙飞船的速度不一致,结果就是爱因斯坦到了目的地地球,牛顿还在宇宙空间慢慢的旅游着,这时候,爱因斯坦的钟表时间相对牛顿的钟表时间慢了,第三条;相对牛顿到目的地的钟表时间,爱因斯坦的时间钟表确实慢了,同样的目的地爱因斯坦的钟表时间为2秒,牛顿到目的地的钟表时间为2000年,以此概念扩展,牛顿的钟表时间比爱因斯坦的钟表快了31536000倍,同样,爱因斯坦的钟表时间比牛顿的钟表时间慢了31536000倍。
习题集及参考答案一、填空题 1. 一般把EDA技术的发展分为()个阶段。
2. FPGA/CPLD有如下设计步骤:①原理图/HDL文本输入、②适配、③功能仿真、④综合、⑤编程下载、⑥硬件测试,正确的设计顺序是①()⑤⑥。
3. 在EDA工具中,能完成在目标系统器件上布局布线的软件称为()。
4. 设计输入完成之后,应立即对文件进行()。
5. 基于硬件描述语言的数字系统设计目前最常用的设计方法称为()设计法。
6. 将硬件描述语言转化为硬件电路的过程称为()。
7. IP核在EDA技术和开发中具有十分重要的地位,以HDL方式提供的IP被称为()IP。
8. SOC系统又称为()系统。
SOPC系统又称为()系统。
9. 将硬核和固核作为()IP核,而软核作为()IP核。
10. IP核在EDA技术和开发中具有十分重要的地位,以HDL方式提供的IP被称为()。
11. HDL综合器就是逻辑综合的过程,把可综合的VHDL/Verilog HDL转化成硬件电路时,包含了三个过程,分别是()、()、()。
12. EDA软件工具大致可以由五个模块构成,分别是设计输入编辑器、()、()、()和()。
13. 按仿真电路描述级别的不同,HDL仿真器分为()仿真、()仿真、()仿真和门级仿真。
14. 系统仿真分为()、()和()。
15. ()仿真是对设计输入的规范检测,这种仿真通过只能表示编译通过,说明设计满足一定的语法规范,但不能保证设计功能满足期望。
16.()仿真是对综合后的网表进行的仿真,它验证设计模块的基本逻辑功能,但不带有布局布线后产生的时序信息,是理想情况下的验证。
17. ()仿真是布局布线后进行的后仿真,仿真时考虑了布线延时,和芯片实际的工作情况更加接近。
18. 目前Xilinx公司生产的FPGA主要采用了()配置存储器结构。
19. 描述测试信号的变化和测试工程的模块叫做()。
20. 现代电子系统设计领域中的EDA采用()的设计方法。
时标和历法1、时标时标(Time Scale)就是标度时间的方法。
在时间的标度上,存在着两个相互独立的需求:一方面,我们希望时间标度能与地球的自转相吻合,可以称作天文学需求;另一方面,我们要求时间标度的单位是精确的,便于大家获得准确的时间。
由于地球自转的不均匀性,从这两个需求出发制定的时标会有细微的差异。
世界时(UT1)是基于地球自转的时标,下文会详细介绍。
国际原子时(TAI)是基于单位时间的时标,它以“铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间”为一秒,可以称作原子时标。
原子时标的准确度为每日数纳秒,而世界时的准确度只有数毫秒。
1.1 本初子午线对于基于天文观测的时标,地球上位于不同经度的观测者,在同一瞬间测得的结果是不同的。
因此需要统一的地理经度基准。
1884年在华盛顿举行的国际子午线会议决定,采用英国伦敦格林威治(Greenwich)天文台埃里中星仪所在的子午线作为时间和经度计量的标准参考子午线,称为本初子午线,又称格林威治子午线。
格林威治天文台于1948年迁到苏塞克斯郡(Sussex)的Herstmonceux Castle,但旧址继续被用作0度经线的位置。
1957年国际上以若干天文测时结果长期稳定性较好的天文台数据为参考,求得平均天文台经度原点。
1968年国际上把通过地极原点和平均天文台经度原点的子午线称为本初子午线。
可见,本初子午线的定义已经不依赖于格林威治天文台旧址。
1.2 世界时世界时的制定基准是太阳的周日视运动。
视运动就是我们看到的运动。
本来是地球绕着地轴由西向东转动。
但如果观测者以为自己不动,就可以认为太阳在由东向西转动,这就是太阳的周日视运动。
地球在自转的同时还围绕太阳公转,因为地球公转轨道是椭圆的,所以太阳的周日视运动是不均匀的。
天文学家制定了以太阳周日视运动的平均速度为基础的平太阳时,平太阳时的基本单位是平太阳日。
国际天文学联合会于1928年决定,将由格林威治平子夜起算的平太阳时称为世界时,简称UT。
(LSB: Least Significant Bit) 最低有效位(LSB)是给这些单元值的一个二进制整数位位置,就是,决定是否这个数字是偶数或奇数。
LSB有时候是指最右边的位,因为写较不重要的数字到右边位置符号的协定。
它类似于一个十进制整数的最不重要的数字,它是在一个(最右边)位置的数字。
LSB(Least Significant Bit),意思为最低有效位;MSB(Most Significant Bit),即最高有效位,若MSB=1,则表示数据为负值,若MSB=0,则表示数据为正。
MSB是Most Significant Bit的缩写,最高有效位。
在二进制数中,MSB是最高加权位。
与十进制数字中最左边的一位类似。
通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。
推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.Push-Pull输出就是一般所说的推挽输出.开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).开漏电路概念中提到的“漏”就是指MOSFET的漏极。
同理,开集电路中的“集”就是指三极管的集电极。
开漏电路就是指以MOSFET的漏极为输出的电路。
一般的用法是会在漏极外部的电路添加上拉电阻。
完整的开漏电路应该由开漏器件和开漏上拉电阻组成。
open-drain是漏极开路输出的意思,相当于集电极开路(open-collector)输出,即ttl中的集电极开路(oc)输出。
一般用于线或、线与,也有的用于电流驱动。
open-drain是对mos管而言,open-collector是对双极型管而言,在用法上没啥区别。
`timescale在Verilog HDL 模型中,所有时延都用单位时间表述。
使用`timescale编译器指令将时间单位与实际时间相关联。
Verilog学习笔记基本语法篇(⼗⼆)········编译预处理hVerilog HDL语⾔和C语⾔⼀样也提供编译预处理的功能。
在Verilog中为了和⼀般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上⾓,其对应的上键盘字符为"~",这个符号并不是单引号"'".这⾥简单介绍最常⽤的`define `include `timescale.1)宏定义`define⽤⼀个指定的标识符(名字)来代表⼀个字符串,其的⼀般形式为: `define 标识符(宏名)字符串(宏内容)如:`define SIGNAL string其作⽤是在后⾯程序中⽤SIGNAL替代所有的string字符串,在编译预处理时,将程序中该命令后⾯所有的SIGNAL替换为string。
这种替代过程称作宏展开。
说明:a)宏名可以是⼤写字母,也可以是⼩写字母。
⼀般⽤⼤写字母,防⽌与后⾯的变量名重复。
b)`define可以出现在模块定义⾥⾯,也可以出现在外边。
其有效范围是从该命令⾏开始⾄源⽂件结束。
c)在引⽤已定义的宏名时,必须在宏名的前⾯加上符号`,表⽰该名字是⼀个经过宏定义的名字。
d)宏定义是⽤宏名代替⼀个字符串,只做简单替换不检查语法。
e)宏定义不是Verilog HDL语句,不必在后⾯加分号。
f)在进⾏宏定义时,可以引⽤已经定义的宏名,可以层层替换。
g)宏名和宏内容必须在同⼀⾏进⾏声明。
如果在宏内容中包含有注释⾏,注释⾏不会作为被置换的内容。
注意:组成宏内容的字符串不能够被以下的语句记号分隔开。
注释⾏+数字+字符串+确认符+关键词+双⽬或三⽬运算符如下⾯的宏定义声明和引⽤就是⾮法的:`define first_half "start of string$display(`first_half end of string")2)⽂件包含处理`include所谓⽂件包含是指处理⼀个源⽂件可以将另⼀个源⽂件的全部内容包含进来,即将另外⽂件包含到本⽂件之中。
systemverilog的timescale作用域概述及解释说明1. 引言1.1 概述Timescale是SystemVerilog中一个重要的概念,它用来定义模拟仿真的时间单位和精度。
在SystemVerilog设计中,通过设置合适的timescale可以控制仿真过程中的时间分辨率,从而影响到模块之间的时序关系。
本文将详细介绍timescale作用域以及它在SystemVerilog设计和仿真过程中的重要性。
1.2 文章结构本文共分为五个部分进行讨论。
首先,在引言部分对本文的主题进行了简单概述,并介绍了文章所包含的结构内容。
其次,第二部分将详细介绍SystemVerilog 的timescale作用域,包括timescale的定义和作用,以及其使用方式和对代码行为的影响。
第三部分将阐述timescale作用域与模块层次之间的关系,包括规则、应用示例和局部timescale的使用方法。
接下来,在第四部分将比较全局timescale和局部timescale之间存在的区别,并探讨它们在不同场景下的应用场景。
最后,在结论部分对整篇文章进行总结,并提供正确理解和配置timescale 作用域时应注意的指南。
1.3 目的本文旨在深入探讨SystemVerilog的timescale作用域,并对其在设计和仿真过程中的重要性进行全面而深入的分析。
通过本文,读者可以了解timescale是如何定义和应用的,以及它对于模块之间时序关系的影响。
文章还将比较全局timescale和局部timescale之间的区别,并提供适用于不同应用场景下正确理解和配置timescale作用域的建议。
通过理解和掌握timescale作用域,读者可以更好地设计、开发和调试SystemVerilog代码,提高设计效率并降低错误发生的概率。
2. SystemVerilog的timescale作用域2.1 Timescale的定义和作用Timescale是SystemVerilog中一种用于控制时间单位和时间精度的机制。
timescale使用Timescale是一个开源的时间序列数据库,它是基于PostgreSQL构建的,并支持标准的SQL查询语言。
Timescale专注于处理高容量的时间序列数据,以及实时和历史数据的查询和分析。
以下是关于Timescale的使用的一些详细信息。
1.安装和配置Timescale是一个扩展,需要在已经安装了PostgreSQL的环境中使用。
可以通过源代码安装,或者使用预编译的二进制文件。
安装过程与安装PostgreSQL类似,但需要注意Timescale版本与PostgreSQL版本的兼容性。
安装完成后,还需要进行一些配置,例如设置默认数据库、启用Timescale扩展等。
2.创建和管理分区表Timescale通过使用分区表来处理大量的时间序列数据。
分区表将数据根据时间范围划分为多个子表,以提高查询性能。
可以使用标准的SQL语句来创建和管理分区表,例如使用"CREATE TABLE"语句创建主表和子表,使用"CREATE FOREIGN TABLE"语句创建与主表关联的子表等。
3.时间序列数据的插入和查询使用Timescale插入时间序列数据非常简单,只需要将数据按照时间顺序插入即可。
可以使用标准的SQL语句,例如"INSERT INTO"语句插入单行数据,或者使用批量插入功能插入多行数据。
查询时间序列数据也很方便,可以使用标准的SQL查询语句,例如"SELECT"语句,还可以使用特定的Timescale扩展函数,例如"TIME_BUCKET"函数将时间序列数据按照时间粒度进行分桶。
4.数据保留策略和数据压缩Timescale提供了灵活的数据保留策略,可以根据需求设置数据的保留时间。
可以通过设置分区表的保留期限、保留策略和过期时间等参数来管理数据的保留。
此外,Timescale还提供了数据压缩功能,可以通过设置压缩策略和压缩参数来减少存储空间和查询时间。
英语语法词汇详解timescale timescale英[ˈtʌɪmskeɪl]美[ˈtaɪmskeɪl]n.时段;时间复数:timescales英文释义:the period of time that it takes for something to happen or be completed某事发生或完成所需的时间举个例子:1.Climatic changes on a timescale of tens of thousands of years.数万年中的气候变化。
2.Progressively, larger objects substantially increase the timescale for collapse over still longer wavelengths.进而言之,较大的天体,因要在更长的波长上坍缩,将大大增长时间尺度。
3.Select an end date for the timescale on the right side of the timesheet.请为时间表右侧的时间刻度选择结束日期.4.In this case, the column dimension has been set as a timescale.在这种情况下,列维度被设置为一个时间表。
assignment英[əˈsaɪnmənt]美[əˈsaɪnmənt]n.任务;作业;归属;归因;转让;分配;指派;转让证书复数:assignments英文释义:1. [countable, uncountable] a task or piece of work that somebody is given to do, usually as part of their job or studies【可数,不可数】给某人做的任务或工作,通常是他们工作或学习的一部分2. [uncountable] the act of giving something to somebody; the act of giving somebody a particular task【不可数】给某人某物的行为;给某人一项特殊任务的行为举个例子:1.I have an idea: you go and secure a seat first, and I’ll hand in the assignment book for you.那么着吧,你先去占座位,我帮你交作业。
一、填空题(共10分,每空1分)1、变量是在程序运行过程中其值可以改变的量。
变量分为两种,一种类型为线网类型,一般指示硬件电路的物理连接,另一种是 ,对应的是具有状态保持作用的电路元件。
2、Verilog HDL中,如果一个给定的整数没有定义大小(size),缺省为位。
3、Verilog采用四值逻辑系统,0表示低电平,1表示高电平,x表示。
4、实际组合电路中,信号经过不同的路径到达某个门电路的输入端时,有先有后,这种现象称为。
5、有限状态机是由和组合逻辑构成的硬件时序电路;其状态只能在的情况下才能从一个状态转向另一个状态;6、状态机按照输出逻辑可以分为两种,一种称为状态机,其时序逻辑的输出不仅取决于当前状态,还取决于输入;另一种称为状态机,其时序逻辑的输出只取决于当前状态。
7、`timescale用于说明程序中的时间单位和仿真精度,语句`timescale 1ns/100ps中,程序中的仿真精度为8、完成语句,使rand0产生一个(-59,59)的随机数。
reg [23:0] rand0;rand0= ;二、选择题 ( 本题共 2 0 分,每小题 1 分 )1 、任v e r i l o g H D L 的端口声明语句中,用关键字声明端口为双向方向。
A.inoutB.INOUTC.inputD. output2、在V e r i l o g H D L的逻拇运算中,设A=8'b11010001,B=8'b00011001,则表达式"A&B"的结果为。
3A.8'b00010001B.8'b11011001C.8'b11001000D.8'b001101113、已知A=3'b110,B=3'b000,则AIIB结果为A.1B.O 110 D.3'b0014 、已知 A = 4 ' b 1 0 1 0 , 则 & A = ,A.1,0B.1,1 D.0,015、不完整的IF语句,其综合结果可实现:A . 三态控制电路B .条件相或的逻辑电路C.双向控制电路D.时序逻辑电路16、下列关于同步有限状态机的描述错误的是A. 状态变化只能发生在同一个时钟跳变沿;B.状态是否变化要根据输入信号,只要输入条件满足,就会立刻转入到下一个状态。
timescale使⽤1.timescale的介绍timescale包含时间单位和时间精度两部分。
设定格式为`timescale timeunit / timeprecisiontimeunit和timeprecision由值1、10、和100以及单位s、ms、us、ns、ps和fs组成。
2.timescale对相对时间的影响如果设定`timescale 1ns/1ps,#100是相对时间,等价于#100ns,⽽#100.1111会被认为是#100.111ns,因为它的精度⾼于timescaled的时间精度,⽽被四舍五⼊。
3.timescale的作⽤范围在编译过程中,`timescale指令影响这⼀编译器指令后⾯所有模块中的时延值,直⾄遇到另⼀个`timescale指令或`resetall 指令。
SystemVerilog可以声明⼀个时间单位和精度,这与Verilog-2001中的`timescale编译器指令具有等价的功能。
这些声明消除了使⽤编译器指令时对⽂件顺序的依赖性问题。
时间单位和精度可以分别使⽤timeunit和timeprecision关键字来声明,但这个时间⽂本值必须是10的幂。
对于任何模块、程序、包或接⼝,或者在任意编译单元作⽤域内,最多只能有⼀个时间单位和⼀个时间精度。
这就会定义⼀个时间作⽤域。
如果指定了timeunit和timeprecision的话,那么它们应该在任何当前时间作⽤域内其它条⽬之前声明。
timeunit和timeprecision声明可以作为后续条⽬重复,但必须与当前时间作⽤域内之前的声明匹配。
如下例⼦中:module A的时间单位/精度是100ps/ 1ps,module B的时间单位/精度是1ns/ 10ps,module C的时间单位/精度是1ps/ 1ps,module D的时间单位/精度是1s/1s`timescale 1ns / 10psmodule A (...); timeunit 100ps; timeprecision 1ps;endmodulemodule B (...);endmodule`timescale 1ps/1psmodule C (...);`timescale 1s/1sendmodulemodule D (...);endmodule再看⼀个例⼦`timescale 1ns/1psmodule add(input clk,input a,input b,output bit[1:0] sum);always@(posedge clk)begin#3;sum = a+b;$display("1:time:%t",$realtime);//3300;3.300$display("2:time:%f",$realtime);//3.300000;3.300000endendmodule`timescale 100ps/10psmodule test();wire[1:0] get_sum;reg input_a = 1;reg input_b = 1;bit clk;initial begin//$timeformat(-9,3,"",5);/*mark1*/#1;$display("3:time:%t",$realtime);//100;0.100$display("4:time:%f",$realtime);//1.000000;1.000000#2 clk = ~clk;endadd ADD(.clk(clk),.a(input_a),.b(input_b),.sum(get_sum));endmodule4.使⽤$timeformat和%t统⼀时间单位/精度timeformat_task ::= $timeformat[(units_number,precision_number,suffix_string,minimum_field_width)]; 上述例⼦中mark1处注释掉后,打印结果为分号前结果,打开注释后,打印结果为分号后结果。
关于`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 n s。
如果用如下的`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现在对应5 20*100 ps,104对应1040*100 ps,150对应1500*100 ps。
更重要的是,仿真使用100 ps为时间精度。
如果仿真模块AndFunc,由于模块TB不是模块AddFunc的子模块,模块TB中的`timescale程序指令将不再有效。
参考资料:1.blog.ednchina./thinkker/159517/message.aspx关于verilog 中timescale的讨论在verilog中是没有默认timescale的。
一个没有指定timescale的verilog模块就有可能错误的继承了前面编译模块的无效times cale参数。
所以在verilog的LRM中推荐“在每个module的前面指定`timescale,并且相应的在最后加一个`resetall来确保timescale的局部有效”为了确认这种用法,我编写了一个小小的包含两个模块module_a和module_b的testbench,其中module_a,module_b与testbe nch指定了不同的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 begin clk = 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 / 10pstimescale_tt t_2(.C(c),.D(d));`timescale 100ps / 10pstimescale_ttt t_3(.E(e),.F(f)); endmodule对书中和网上疯狂的一段话进行修正:“一个设计中的多个模块带有滋生的`timescale指令,模拟器总是定位在所有模块的最小时延精度上。
”这里的所有模块,指的是跟模块和某一个子模块相比较,并采用二者之间最小的精度,对于多个并行的子模块而言,它们是不会相互干扰对方的精度的。