Verilog 仿真事件中的延时分析

Verilog 仿真事件中的延时分析

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 #5 C = A +B;

// 2. 连续赋值+ 内定延迟
assign C = #5 A +B;

// 3. 阻塞赋值 + 正规延迟
always @(*) begin
    #5 C = A +B;
end

// 4. 阻塞赋值 + 内定延迟
always @(*) begin
    C = #5 A +B;
end

// 5. 非阻塞赋值 + 正规延迟
always @(*) begin
    #5 C <= A +B;
end

// 6. 非阻塞赋值 + 内定延迟
always @(*) begin
    C <= #5 A +B;
end

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

  1. 连续赋值+ 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C1。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。
    当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。
    仿真结果:
    在这里插入图片描述

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

  2. 连续赋值+ 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C2。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。
    当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。
    该种方式有记忆属性,与连续赋值原则不符,为非法语句,编译不能通过。

  3. 阻塞赋值 + 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值阻塞赋给 C3。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:
    在这里插入图片描述

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

  4. 阻塞赋值 + 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C4。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为阻塞赋值,此时 always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:
    在这里插入图片描述

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

  5. 非阻塞赋值 + 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值非阻塞赋给 C5。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:
    在这里插入图片描述

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

  6. 非阻塞赋值 + 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C6。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为非阻塞赋值,将赋值事件放进事件队列后,always 语句执行结束,等待下一次的触发,触发来到时开始新一轮的事件。
    仿真器接受延迟时间段的数据变化,输入的变化延迟会全部反应在输出上。
    仿真结果:
    在这里插入图片描述

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

下图为 always block 中的四种延时方式的仿真流程:
在这里插入图片描述

// 仿真源码
`timescale 1ns/1ps 
module Testbench;
reg A,B;
wire C1,C2;
reg C3,C4,C5,C6;

initial begin
	A = 0; B = 0;
	C3 = 0; C4 = 0; C5 = 0; C6 = 0;
	#6 A = 1;
	#2 A = 0;
	#1 A = 1;
	#1 A = 0;
	#2 A = 1;
	#6 A = 0;
end

// 1. 连续赋值+ 正规延迟
assign #5 C1 = A +B;

// 3. 阻塞赋值 + 正规延迟
always @(*) begin
    #5 C3 = A +B;
end

// 4. 阻塞赋值 + 内定延迟
always @(*) begin
    C4 = #5 A +B;
end

// 5. 非阻塞赋值 + 正规延迟
always @(*) begin
    #5 C5 <= A +B;
end

// 6. 非阻塞赋值 + 内定延迟
always @(*) begin
    C6 <= #5 A +B;
end

endmodule

5. 总结

根据上述分析,容易看出惯性延时对应于连续赋值中的正规延迟,而传导延时对应于非阻塞赋值中的内定延迟。
所以仿真中常用 “连续赋值 + 正规延迟“ 模拟惯性延迟,用 ”非阻塞赋值 + 内定延迟“ 模拟传导延迟。

  • 46
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与国已互相成为双方最大的交易伙伴。国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占国外贸总值的15.4%。在过去20余年,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值