SystemVerilog添加了爲常見代碼段(函數,類型,常量等)提供名稱空間的包。但是由於包沒有實例化,所以它們不能被參數化,所以處理參數化成員是有問題的。在實踐中,我發現這非常有限,因爲我的自定義類型有很多參數指定字段寬度等。處理SystemVerilog包中的參數化
我一般通過使用帶有默認值的參數來處理此問題,並理解我將需要返回更改包某些應用程序的源代碼,這對我來說似乎非常錯誤。但我還沒有找到辦法更清楚地處理這個問題。例如:
package my_pkg;
parameter ADDR_MSB = 7;
parameter DATA_MSB = 31;
typedef struct {
logic [ADDR_MSB:0] address;
logic [DATA_MSB:0] data;
} simple_struct_t;
endpackage
有沒有人找到一個更清潔的方式來處理這個問題?我很想聽聽它,因爲我認爲軟件包是SV的一個非常強大的補充,可以實現更安全的代碼重用,但這種限制非常嚴重。
不夠公平,但我對設計代碼而不是測試平臺代碼更感興趣,而且對於日期類不能合成。 – JeffW 2010-10-23 15:13:39
也與宏評論相關,我不明白這是如何真正改變任何東西。使用宏或參數可以修改代碼以在編譯時重新定義或更改該值。實際上對於參數來說,這個值的改變可以推遲到稍微靈活一點的精化時間。無論採用哪種方式,都會導致代碼混淆,因爲所使用的值對審閱者而言並不明顯。 – JeffW 2010-10-23 15:15:24