Verilog基础:编译指令`timescale

2023-12-05 20:52

本文主要是介绍Verilog基础:编译指令`timescale,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相关阅读

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        `timescale编译指令用于指定指令后模块的时间单位和时间精度。时间单位是时间值的度量单位,例如延迟值和仿真时间;而仿真精度决定了最小可分辨延迟时间值。

        为了在一个(或多个)文件中使用不同的时间单位,下面一些有关时间的结构很有用:

1、`timescale编译指令用于指定其后模块的时间单位和时间精度。

2、$printtimescale系统任务用于显示一个模块的时间单位和时间精度。

3、$time和$realtime系统函数用于以当前模块的时间单位和时间精度显示仿真时间。

4、$timeformat系统任务用于指定格式字符串中转换说明%t的格式。

        `timescale编译指令指定了其后模块的时间和延迟值的度量单位和精度,直到遇到了另一个 `timescale编译指令。如果没有使用`timescale编译指令或者使用了`resetall编译指令复位,则时间单位和时间精度默认是由仿真器决定的。如果一些模块有`timescale编译指令,而一些没有,则会报错(简单来说就是,要么所有都用默认值,否则所有模块都需要使用`timescale编译指令),如下两种情况所示。

//错误,因为bbb模块使用默认值,而aaa模块指定了`timescale
`timescale 1ns/1ns
module aaa();bbb bbb_inst(a);
endmodule`resetall
module bbb(input a);initial  #5 $display("bbb");
endmodule//错误,因为bbb模块使用默认值,而aaa模块指定了`timescale(编译指令值影响本文件中定义的模块)
//文件1
`timescale 1ns/1ns
module aaa();bbb bbb_inst(a);
endmodule//文件2
module bbb(input a);initial  #5 $display("bbb");
endmodule

        `timescale编译指令的语法如下所示。

        time_unit参数指定了时间单位。而time_precision参数指定了时间精度,一个层次化设计的所有模块中最小的时间精度决定了仿真的时间精度,需要注意的是,仿真的时间精度并不一定和各模块的时间精度相同,这也就是说一个模块可能显示出比自己仿真精度还小的时间值。同时,时间精度还决定了一个延迟值在被使用前会被四舍五入的位数。上面两点在之后都会举例说明。

        时间精度不能比时间单位还大,也就是说精度最大与时间单位相同,这很好理解,如果一个时间精度都大于时间单位了,那它将成为实际意义上的时间单位。

        time_unit参数和time_precision参数由两部分组成,一个整数值和一个时间字符串,其中整数值可以是1,10,100,而字符串可以是s,ms,us,ns, ps和fs。时间字符串和时间单位的对应关系如下表所示。

时间字符串时间单位
s
ms毫秒
us微秒
ns纳秒
ps皮秒
fs飞秒

        我们首先说明一个延迟值在被使用前会因为时间精度而四舍五入,下面给出了一个例子。

`timescale 10ns/1ns
module aaa();initial #1.55 a=1;
endmodule

        由于时间单位是10ns,所以1.55代表了15.5ns,而时间精度是1ns,代表需要四舍五入至最低位是1ns,即四舍五入至16ns,因此真正的延迟时间值为16ns。

        一个模块的时间精度并不一定代表模块可辨别的最小时间值,而只是代表该模块可辨别的最小延迟时间值,真正决定一个模块可辨别的最小时间值的是仿真的时间精度,下面给出了一个例子。

`timescale 1ps/1ps
module aaa();reg a;bbb bbb_inst(a);initial #5 a=1;
endmodule`timescale 1ns/1ns
module bbb(input a);initial @(a) $display($realtime);
endmodule输出:
0.005

         仿真的时间精度为所有模块中最小的时间精度因此是1ps,在5ps时a赋值为1,因此触发了bbb模块中的$display($realtime);语句,$realtime系统函数的作用是以当前模块的时间单位为单位返回当前仿真时间的实数值,即以1ns为单位,返回5ps仿真时间,所以结果为0.005,这小于bbb模块仿真精度1ns。

        最后顺带一提,仿真时间精度也是仿真能推进的时间精度,在上例中,无法以500fs为步长推进仿真时间,无论你推进了多少次。

        以上内容可以总结为:一个模块的仿真精度,决定了其内延迟值的精度,而层次化设计中所有模块的仿真精度中最小的那个,决定了仿真器维护的仿真时间精度,可以认为是仿真时间的真正单位(没有小数部分)。一个模块的仿真单位决定了其延迟值的单位和$time和$realtime等系统函数返回值的单位。

这篇关于Verilog基础:编译指令`timescale的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/459101

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应