2013-08-20 20 views
3

我想創建一個源文件結構,以便我的systemverilog設計中的註冊偏移量來自整個項目中的一個文件。動機是,所有寄存器都位於一個文件中,可以傳遞給軟件團隊。隨後,對地址映射的任何更改都只需要更改爲僅一個文件。從systemverilog源樹中的一個源文件註冊偏移量

目前,我使用一個名爲「address_map.h」的包含文件來定義地址偏移量。所有具有寄存器的模塊的地址都在這裏添加。該文件包含在每個模塊中的聲明部分的頂部。這種方法的問題是相同的參數在不同的模塊中被重新定義。我可以通過在特定於模塊的宏中封裝偏移量來解決此問題。但它引入了我不喜歡的語句順序依賴性。例如, address_map.h如下所示 -

localparam 
    REG_ADDR_WIDTH        = 8, 
    REG_DATA_WIDTH        = 32, 
    NUM_OF_REG_REGIONS       = 2; 

//reg region 1 
localparam 
    MISC_REG_REGION        = 0, 
    MISC_NUM_OF_REG        = 4, 
    MISC_VER_DATE         = 0, 
    MISC_VER_TIME         = 1, 
    MISC_SCRATCH         = 2, 
    MISC_TEMP_SENSE        = 3; 

//reg region 2 
localparam 
    ADC_REG_REGION        = 1, 
    ADC_NUM_OF_REG        = 4, 
    ADC_VER_DATE         = 0, 
    ADC_VER_TIME         = 1, 
    ADC_SYNC_STAT        = 2, 
    ADC_SYNC_EN         = 3, 
    ADC_OFFSET         = 4; 

有人知道更好的方法嗎?

回答

3

另一種選擇是使用SystemVerilog package。有關完整說明,請參閱IEEE std 1800-2012 § 26。通常,軟件包對於存儲和封裝共享/通用定義很有用;如typdefs,靜態函數和共享參數。這裏使用多包裝的工作實例http://www.edaplayground.com/s/6/95

更好的是主觀的。這取決於你(和你的團隊)認爲更容易管理的內容。您還需要確保您的工具(模擬器,合成器,棉絨等)得到適當的支持。例如edaplayground.com中的iverilog 0.10尚不支持在軟件包中導入軟件包。

package share_pkg; 
typedef logic [ 7:0] ADDR_t; 
typedef logic [31:0] DATA_t; 
localparam NUM_OF_REG_REGIONS    = 2; 
endpackage 

//reg region 1 
package region1_pkg; 
parameter 
    REG_REGION        = 0, 
    NUM_OF_REG        = 4, 
    VER_DATE         = 0, 
    VER_TIME         = 1, 
    SCRATCH         = 2, 
    TEMP_SENSE        = 3; 
endpackage 

//reg region 2 
package region2_pkg; 
localparam 
    REG_REGION        = 1, 
    NUM_OF_REG        = 4, 
    VER_DATE         = 0, 
    VER_TIME         = 2, 
    SYNC_STAT        = 2, 
    SYNC_EN         = 3, 
    OFFSET         = 4; 
endpackage 
+1

This works。感謝您花時間在edaplayground.com上分享解決方案。這是一個非常酷的網站。 – shparekh