verilog中有时延功能,用于模拟电路中信号传播延迟的关键特性,时延不可综合,常用于仿真测试激励中。
今天分享下Verilog中的时延概念、类型及其在实际设计中的应用。
一、Verilog时延基础
1、时延的定义
时延在Verilog中用于模拟信号在电路中的传播延迟。它对于确保设计满足时序要求和性能标准至关重要。
2、时延的表示
Verilog中的时延可以通过两种主要方式表示:延迟声明和延迟语句。
(1)延迟声明
在模块或过程的开头使用 # 符号声明一个全局延迟,例如 #5 表示一个5个时间单位的延迟 。
(2)延迟语句
在赋值语句中使用 # 来指定延迟,如 #10 value = input; 表示在接收到 input 信号后,经过10个时间单位将值赋给 value 。
正规延迟:
# 符号位于等号之外,如 #5 C = A + B; ,表示在当前时刻后等待5个时间单位再计算右侧表达式的值 。
内定延迟:
# 符号位于等号之内,如 C = #5 A + B; ,表示先计算右侧表达式的值,然后等待5个时间单位后赋值给C 。
二、Verilog时延类型
1、连续赋值时延
以下是三种不同的连续赋值时延的写法示例:
// 普通时延
wire Z, A, B;
assign #10 Z = A & B; // A和B的与运算结果延时10个时间单位赋值给Z
// 隐式时延
wire A, B;
wire #10 Z = A & B; // Z的声明中包含了10个时间单位的时延
// 声明时延(不推荐)
wire A, B;
wire #10 Z;
assign Z = A & B; // 所有对Z的连续赋值都会延迟10个时间单位
2、惯性时延
惯性时延是指在信号脉冲宽度小于指定时延时,输出不会对该脉冲做出响应。
以下是惯性时延的代码示例:
module time_delay_module(
input ai, bi,
output so_lose, so_get, so_normal
);
assign #20 so_lose = ai & bi; // 延迟20个时间单位
assign #5 so_get = ai & bi; // 延迟5个时间单位
assign so_normal = ai & bi; // 无延迟
endmodule