2011-10-10 962 views
3

我有一段程序员不再在我工作的公司工作过的一段Verilog代码。的提取物在下面给出:Verilog中用括号括起来的括号有什么特别的意义?

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

sclk是导线,iclk分配系统时钟的值)

我也有用于执行现有的Verilog文件的一些操作一个单独的Perl脚本。由于mstrobe被括在圆括号内,所以该脚本在解析#(mstrobe)时窒息。虽然我可以解决这个问题很容易,我想知道的是是否有赋值语句上方

assign #mstrobe sclk=iclk; 

我想,以确保两个报表是否是等价的,或者是否有任何的根本区别Verilog版本(Verilog-2001,Verilog-2005,SystemVerilog)在这方面的语法差异。

回答

3

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

assign #(mstrobe/2) sclk=iclk; 

在一个侧面说明,因为你正在使用Perl解析Verilog的,你知道的Verilog-Perl

括号会,如果你有一个更复杂的表达式,如要求?

+1

谢谢!我正在使用我们自己的内部库进行解析,但Verilog-Perl看起来像是一个很好的实现,所以感谢这个链接。 –

1

另一次在该上下文中使用括号时,延迟指定时间步。您的示例将延迟10(或任何mstrobe设置为)由您的时间表确定的timeunits。你可以做#(10ps),其中mstrobe = 10ps,这可以保证你延迟10ps独立于你的时间表。我不确定他们在指定时间尺度时是否需要,但这是很好的编码练习。

相关问题