0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog仿真事件中的延时分析

FPGA设计论坛 ? 来源:CSDN技术社区 ? 2025-04-18 09:54 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. 电路的延时

在实际电路中存在两种延迟,惯性延迟 (Inertial delay) 和传导延迟 (Transport delay)

惯性延迟

定义:若元件的输入信号的脉冲宽度小于一定值时,元件的输出没有响应,也就是说元件具有一定的惯性。

产生原因:当脉冲到达时,由于脉冲宽度小于元件本身的延迟,当脉冲结束时,元件的新输出还未建立起来。考虑了电路中存在的大量分布电容

传导延迟

定义:输入信号变化到对应输出信号变化经过的时间,类似于物理传输线的延迟。

产生原因:载流子运动的速度有限,通过导线需要一定的时间。

2. Verilog 中的时序模型

在分析 Verilog HDL 的仿真行为前,我们需要了解 Verilog 中时序模型。

时序模型分为:门级时序模型、过程时序模型。

门级时序模型

适用范围:所有的连续赋值语句、过程连续赋值语句、门原语、用户自定义原语。

特点:

任意时刻输入发生变化,将重新计算输出。

当之前的的事件未执行完毕时又发生的新的变化,则会撤销之前的事件,开始新的事件。

过程时序模型

适用范围:过程语句。

特点:

当敏感列表发生变化时触发执行。

当之前的的事件未执行完毕时又发生的新的变化,则不撤销原有事件,同时开始新的事件,如果同时有几个更新事件,它们的执行顺序是不确定的。

3. Verilog 中的仿真延迟语句

Verilog 中的仿真延时语句为 #n,n 表示延时时间,将该语句加在语句中,延迟 n 个时间单位。

延时的添加方法有两种:正规延迟和内定延迟

正规延迟 (#在外面)

#5 C = A +B

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C,此时使用的 A B 的值是 T+5 时刻的值。

内定延迟 (#在里面)

C = #5 A +B

在 T 时刻执行到该语句时,先计算 A+B 的值,计算后等待 5 个时间单位将值赋给 C,使用的 A B 的值是 T 时刻的值。

4. 在 Verilog 建模中增加延时

两种延时的添加方式和三种赋值方式 (连续赋值、阻塞赋值、非阻塞赋值) 一共形成六中添加延迟的方式。

// 1. 连续赋值+ 正规延迟assign#5C = A +B;// 2. 连续赋值+ 内定延迟assign C =#5A +B;// 3. 阻塞赋值 + 正规延迟always @(*) begin   #5 C = A +B; end // 4. 阻塞赋值 + 内定延迟 always @(*)begin  C =#5A +B;end// 5. 非阻塞赋值 + 正规延迟always @(*) begin   #5 C <= A +B; end ?// 6. 非阻塞赋值 + 内定延迟 always @(*)?begin? ? ?C <=?#5?A +B;end

下面对这六种方式逐一分析:

连续赋值+ 正规延迟

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C1。

使用的 A B 的值是 T+5 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。

当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。

仿真结果:

d6b960a6-1a9d-11f0-9310-92fbcf53809c.png

可以看出在 6ns、8ns、9ns、10ns 时刻 A 发生了变化,但皆因持续时间小于 5ns,所以都没有对 C1 产生影响,只有在 12ns 和 18ns 的变化持续时间超过 5ns,作用到 C1 上。

连续赋值+ 内定延迟

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C2。

使用的 A B 的值是 T 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。

当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。

该种方式有记忆属性,与连续赋值原则不符,为非法语句,编译不能通过。

阻塞赋值 + 正规延迟

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值阻塞赋给 C3。

使用的 A B 的值是 T+5 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。

仿真器忽略延迟时间段的数据变化。

仿真结果:

d6cb3c86-1a9d-11f0-9310-92fbcf53809c.png

在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 11ns 时刻的 A B 的值计算出结果赋给 C3,而忽略了 8ns 和 10ns 时刻的变化。

阻塞赋值 + 内定延迟

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C4。

使用的 A B 的值是 T 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为阻塞赋值,此时 always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。

仿真器忽略延迟时间段的数据变化。

仿真结果:

d6e213de-1a9d-11f0-9310-92fbcf53809c.png

在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 6ns 时刻的 A B 的变化后的值计算出结果赋给 C4,而忽略了 8ns 和 10ns 时刻的变化。

非阻塞赋值 + 正规延迟

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值非阻塞赋给 C5。

使用的 A B 的值是 T+5 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。

仿真器忽略延迟时间段的数据变化。

仿真结果:

d6f302b6-1a9d-11f0-9310-92fbcf53809c.png

在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 11ns 时刻的 A B 的值计算出结果赋给 C5,而忽略了 8ns 和 10ns 时刻的变化。

非阻塞赋值 + 内定延迟

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C6。

使用的 A B 的值是 T 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为非阻塞赋值,将赋值事件放进事件队列后,always 语句执行结束,等待下一次的触发,触发来到时开始新一轮的事件。

仿真器接受延迟时间段的数据变化,输入的变化延迟会全部反应在输出上。

仿真结果:

d70f65e6-1a9d-11f0-9310-92fbcf53809c.png

A B 的每一次变化都触发 always block 的执行,每一次变化都延时 5ns 后反应在 C6 上。

下图为 always block 中的四种延时方式的仿真流程:

d72d3aee-1a9d-11f0-9310-92fbcf53809c.png

// 仿真源码`timescale1ns/1ps moduleTestbench;reg A,B;wire C1,C2;reg C3,C4,C5,C6;initialbeginA =0;B =0;C3 =0;C4 =0;C5 =0;C6 =0;#6A =1;#2A =0;#1A =1;#1A =0;#2A =1;#6A =0;end// 1. 连续赋值+ 正规延迟assign#5C1 = A +B;// 3. 阻塞赋值 + 正规延迟always @(*) begin   #5 C3 = A +B; end // 4. 阻塞赋值 + 内定延迟 always @(*)begin  C4 =#5A +B;end// 5. 非阻塞赋值 + 正规延迟always @(*) begin   #5 C5 <= A +B; end ?// 6. 非阻塞赋值 + 内定延迟 always @(*)?begin? ? ?C6 <=?#5?A +B;endendmodule

5. 总结

根据上述分析,容易看出惯性延时对应于连续赋值中的正规延迟,而传导延时对应于非阻塞赋值中的内定延迟。

所以仿真中常用 “连续赋值 + 正规延迟“ 模拟惯性延迟,用 ”非阻塞赋值 + 内定延迟“ 模拟传导延迟。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    52

    文章

    4300

    浏览量

    136063
  • Verilog
    +关注

    关注

    29

    文章

    1367

    浏览量

    112417
  • 时序
    +关注

    关注

    5

    文章

    399

    浏览量

    38135
  • 模型
    +关注

    关注

    1

    文章

    3531

    浏览量

    50566
  • 延时分析
    +关注

    关注

    0

    文章

    2

    浏览量

    5654

原文标题:Verilog 仿真事件中的延时分析

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    北大Verilog课件四百多页

    数字集成电路设计入门--从HDL到版图于敦山北大微电子学系?介绍Verilog HDL,内容包括:–Verilog应用–Verilog语言的构成元素–结构级描述及仿真–行为级描述及
    发表于 08-03 00:23

    Verilog设计内外延时

    Verilog设计内外延时
    发表于 08-15 16:31

    时分复用的verilog

    现有4路fifo数据,要时分复用的存入SRAM里,请问用verilog怎么写啊???新手,求赐教!!!
    发表于 10-27 13:28

    verilog乘法器延时问题

    刚刚学习verilog,夏宇闻的《verilog数字系统设计教程(第三版)》,P143图10.3,乘法器延时为1个与门和8个全加器的
    发表于 10-10 23:04

    北大微电子verilog讲义课件

    介绍Cadence Verilog仿真器, 内容包括: 设计的编译及仿真 源库(source libraries)的使用 用Verilog-XL命令行界面进行调试 用NC Verilo
    发表于 05-28 15:23 ?402次下载
    北大微电子<b class='flag-5'>verilog</b>讲义课件

    MSP430软件精确延时分析与程序实现

    MSP430软件精确延时分析与程序实现
    发表于 09-27 14:33 ?113次下载

    MIMO天线延时失衡性能分析

    针对MIMO系统,从理论上分析分布式天线系统延时失衡对MIMO系统带来的影响。通过仿真,定量分析了MIMO上下行链路
    发表于 11-10 14:27 ?27次下载
    MIMO天线<b class='flag-5'>中</b>的<b class='flag-5'>延时</b>失衡性能<b class='flag-5'>分析</b>

    单片机的C语言延时分析实例说明

    本文档的主要内容详细介绍的是单片机的C语言延时分析实例说明包括了:例1,12MHz晶振调试,例2:12MHz晶振调试,传参数,for循环只有1层,且是char类型。
    发表于 07-16 17:39 ?0次下载
    单片机的C语言<b class='flag-5'>延时分析</b>实例说明

    Verilog设计增加延时仿真技术

    作者:bleauchat 在设计仿真激励文件时,为了满足和外部芯片接口的时序要求,经常会用到延时赋值语句,由于不同的延时赋值语句在仿真过程中行为不同,会产生不同的激励输出,如果不认真区
    的头像 发表于 11-25 15:29 ?2326次阅读

    如何使用Icarus Verilog+GTKWave来进行verilog文件的编译和仿真

    本文将介绍如何使用Icarus Verilog+GTKWave来进行verilog文件的编译和仿真。 Icarus Verilog Icarus V
    的头像 发表于 07-27 09:16 ?6012次阅读
    如何使用Icarus <b class='flag-5'>Verilog</b>+GTKWave来进行<b class='flag-5'>verilog</b>文件的编译和<b class='flag-5'>仿真</b>

    FreeRTOS高级篇9---FreeRTOS系统延时分析

    FreeRTOS提供了两个系统延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()。相对延时是指每次延时
    发表于 01-26 17:34 ?6次下载
    FreeRTOS高级篇9---FreeRTOS系统<b class='flag-5'>延时分析</b>

    multisim 555触摸延时仿真

    multisim 仿真 555触摸延时仿真资料分享。
    发表于 04-15 14:30 ?15次下载

    verilog仿真工具编译

    Icarus Verilog(以下简称iverilog )号称“全球第四大”数字芯片仿真器,也是一个完全开源的仿真器。
    的头像 发表于 08-15 09:11 ?8943次阅读

    Verilog 测试平台设计方法 Verilog FPGA开发指南

    指南: Verilog测试平台设计方法 选择仿真工具 : 选择一款强大的仿真工具,如ModelSim、Xilinx ISE等。这些工具提供了丰富的功能,包括波形查看、调试功能、时序分析
    的头像 发表于 12-17 09:50 ?1195次阅读

    Verilog 电路仿真常见问题 Verilog 在芯片设计的应用

    。然而,在实际应用,设计师可能会遇到各种问题,这些问题可能会影响仿真的准确性和设计的可靠性。 Verilog电路仿真常见问题 仿真环境的搭
    的头像 发表于 12-17 09:53 ?1244次阅读