【发布时间】:2023-03-11 16:25:02
【问题描述】:
我是 verilog 的新手,因此我有一个非常简单的问题。我想在data_in 分配给pad 之前在下面的语句中添加延迟
分配垫=(启用)?数据输入:1'bz;
类似
assign pad = (enable) ? #10 data_in : 1'bz;
但它不会工作。这样做的正确方法是什么?
【问题讨论】:
标签: verilog delay assign bidirectional inout
我是 verilog 的新手,因此我有一个非常简单的问题。我想在data_in 分配给pad 之前在下面的语句中添加延迟
分配垫=(启用)?数据输入:1'bz;
类似
assign pad = (enable) ? #10 data_in : 1'bz;
但它不会工作。这样做的正确方法是什么?
【问题讨论】:
标签: verilog delay assign bidirectional inout
你应该把延迟放在assign和pad之间
assign #10 pad = (enable) ? data_in : 1'bz;
此延迟将在 data_in 和切换到高阻抗时看到。
您可以分别控制上升、失败和关闭时间。例如:
assign #(10,10,0) pad = (enable) ? data_in : 1'bz;
没有开启时间,所以如果你只想延迟data_in,你需要创建一个间歇性分配
wire #10 data_in_delayed = data_in;
assign pad = (enable) ? data_in_delayed : 1'bz;
您可以在IEEE Std 1800-2012 § 10.3 连续分配中了解有关延迟分配语句的更多信息。注意 SystemVerilog 允许对网络和变量类型进行赋值语句,Verilog 仅支持网络类型。
另外,请注意# 延迟会被综合忽略。 #延迟仅用于模拟。
【讨论】: