2016-12-02 25 views
0

我有一個輸入邏輯序列,我想將其轉換爲一個參數,以便將其添加到我的程序中的其他地方。如何將輸入信號更改爲systemverilog中的參數?

例如,

module myModule(input logic[7:0] SW, output logic[7:0] LEDR); 

    parameter shift = SW; 
    assign LEDR = SW[shift + 1: shift]; 

endmodule 

我知道這不是正確的語法,我只是想獲得的主要思想。

回答

0

您無法將變量轉換爲參數。詳細說明後,參數的值將被鎖定。一個變量在模擬之前不會有值。

部分選擇(有時稱爲範圍切片)應該做你所需要的。有關更多信息,請參閱 Indexing vectors and arrays with +:

具有SW切片本身並意義,因爲所得到的值將總是0。這裏是更好的例子:

module myModule(input [8:0] IN, input [2:0] SW, output [1:0] LEDR); 
    assign LEDR = IN[SW +: 2]; 
endmodule 
+0

謝謝,它解決了我的問題。一個問題,但是,這是怎麼來的呢?我認爲無論是在索引支架'$ IN [SW +:2];'必須是一個常數?軟件可以在運行時改變。 – Developer

+0

使用':'時,雙方都需要是常量。 '+:'和' - :'是不同的,左邊的情況可以是變量(起始索引),右邊必須是常量(寬度和方向)。這是在IEEE文件中解釋,引用和鏈接到文檔鏈接我把我的答案 – Greg

+0

Ohhhhh好吧,我明白了,所以整體選擇必須是恆定的,謝謝。 – Developer

2

參數按定義編譯時間常數。這意味着您不能根據可隨時間變化的表達式來更改其值。

你可以做的是改變你的模型,所以它不需要參數。例如,您可以將代碼編寫爲

module myModule(input logic[7:0] SW, output logic[7:0] LEDR); 
    assign LEDR = SW[SW +: 2]; 
endmodule 
+0

的語法是'+:'和'SW [SW +:1]'是就像'SW [SW]' – Greg

+0

一樣修正我的例子 –

相關問題