用于包装参数时,Verilog中的括号是否有任何特殊意义?

时间:2011-10-10 11:08:04

标签: verilog

我有一段Verilog代码由程序员处理,不再在我工作的公司工作。摘录如下:

parameter mstrobe = 10;
.
.
.
assign #(mstrobe) sclk=iclk;

sclk是一根电线,iclk被分配了系统时钟的值)

我还有一个单独的Perl脚本,用于对现有的Verilog文件进行一些操作。此脚本在解析#(mstrobe)时会遇到错误,因为mstrobe括在括号内。虽然我可以轻松解决这个问题,但我想知道的是上面的assign语句和

之间是否存在根本区别
assign #mstrobe sclk=iclk;

我想确定这两个陈述是否相同,或者在Verilog版本(Verilog-2001,Verilog-2005,SystemVerilog)之间是否存在这方面的语法差异。

2 个答案:

答案 0 :(得分:3)

在您的简单情况下,括号是可选的;无论Verilog版本如何,这两种情况都是有效的语法。

如果您有更复杂的表达式,则需要使用括号,例如:

assign #(mstrobe/2) sclk=iclk;

另外,由于您使用Perl解析Verilog,您是否知道Verilog-Perl

答案 1 :(得分:1)

在该上下文中使用括号的另一个时间是延迟指定时间步长。您的示例将延迟10(或任何mstrobe设置为)由您的时间刻度确定的时间单位。但是你可以做#(10ps),其中mstrobe = 10ps,这可以保证你延迟10ps,与你的时间刻度无关。在指定时间刻度时,我不确定它们是否必需,但它是良好的编码习惯。