我有一段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)之间是否存在这方面的语法差异。
答案 0 :(得分:3)
在您的简单情况下,括号是可选的;无论Verilog版本如何,这两种情况都是有效的语法。
如果您有更复杂的表达式,则需要使用括号,例如:
assign #(mstrobe/2) sclk=iclk;
另外,由于您使用Perl解析Verilog,您是否知道Verilog-Perl?
答案 1 :(得分:1)
在该上下文中使用括号的另一个时间是延迟指定时间步长。您的示例将延迟10(或任何mstrobe设置为)由您的时间刻度确定的时间单位。但是你可以做#(10ps),其中mstrobe = 10ps,这可以保证你延迟10ps,与你的时间刻度无关。在指定时间刻度时,我不确定它们是否必需,但它是良好的编码习惯。