首页 > 编程知识 正文

verilog中时钟的串并转换,verilog二进制转bcd码

时间:2023-05-03 08:30:38 阅读:171160 作者:997

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

作者: IT小方

来源: CSDN

原文: 3359 blog.csdn.net/super _ Haifeng/article/details/50110371

声明:本文为博主原创文章。 转载请附上博文链接!

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

说明:

timescale是Verilog HDL的时间刻度预编译指令,用于定义模拟模块时的时间单位和时间精度。 格式如下。

` timescale模拟时间单位/时间精度

注:用于说明模拟时间单位和时间精度的数字必须是1、10、100,不能是任何其他数字。 此外,时间精度不能大于时间单位。 最多两个是一样的大小。 例如,以下定义都是正确的。

` timescale 1ns/1ps

` timescale 100ns/100ns

以下定义是错误的:

` timescale 1ps/1ns

时间精度是一个模拟模块时间和延迟的精确程序,例如时间精度定义为10ns,时间序列中的所有延迟最大可精确到10ns,而8ns或18ns是不可能的。

在编译过程中,timescale命令会影响此编译器命令之后的所有模块的延迟值,直到找到另一个timescale命令resetall命令为止。

verilog没有默认的时间比例。 未指定timescale的verilog模块可能会错误地继承以前编译的模块的无效timescale参数。

举个简单的例子来说明:吧

例如,我们取得曲子的当前时间

//nstimeintervaltime=self.player.current time.value/self.player.current time.time scale; 以下转载其他文章

如果一个设计中的多个模块都有自己的timescale编译指令,会怎么样? 在这种情况下,模拟器将始终定位于所有模块的最低延迟精度,所有延迟将相应地转换为最大值

时间延迟精度,例如:

time scale1ns/100 psmoduleandfunc (z,a,b ); 输出z; input A,b; and # (5.22,6.17 ) al ) z、a、b ); end module time scale 10 ns/1 nsmoduletb; reg PutA,PutB; WHRE GetO; initialbeginPutA=0; PutB=0; #5.21 PutB=1; #10.4 PutA=1; #15 PutB=0; endandfuncaf1(geto,PutA,PutB ); 在endMODULE示例中,每个模块都有自己的timescale编译器指令。 timescale编译器指令首次应用于时延。 因此,在第一个模块中,5.22对应于5.2ns,6.17对应于6.2ns。 在第二个模块中,5.21对应于52ns,10.4对应于104ns,15对应于150ns,当对模块TB进行模拟时,设计中的所有模块的最小时间精度为100ps。 因此,所有延迟,特别是模块TB中的延迟,均换算为精度100ps。 延迟52ns现在与520100ps、104与1040100ps、150与1500*100ps相对应,更重要的是,在模拟中使用了100ps作为时间精度。 对于仿真模块AndFunc,模块TB中的timescale程序指令将被禁用,因为模块TB不是模块AndFunc的子模块。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。