2011-10-10 99 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獨立於你的時間表。我不確定他們在指定時間尺度時是否需要,但這是很好的編碼練習。

相關問題