我有一個輸入邏輯序列,我想將其轉換爲一個參數,以便將其添加到我的程序中的其他地方。如何將輸入信號更改爲systemverilog中的參數?
例如,
module myModule(input logic[7:0] SW, output logic[7:0] LEDR);
parameter shift = SW;
assign LEDR = SW[shift + 1: shift];
endmodule
我知道這不是正確的語法,我只是想獲得的主要思想。
我有一個輸入邏輯序列,我想將其轉換爲一個參數,以便將其添加到我的程序中的其他地方。如何將輸入信號更改爲systemverilog中的參數?
例如,
module myModule(input logic[7:0] SW, output logic[7:0] LEDR);
parameter shift = SW;
assign LEDR = SW[shift + 1: shift];
endmodule
我知道這不是正確的語法,我只是想獲得的主要思想。
您無法將變量轉換爲參數。詳細說明後,參數的值將被鎖定。一個變量在模擬之前不會有值。
部分選擇(有時稱爲範圍切片)應該做你所需要的。有關更多信息,請參閱 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
參數按定義編譯時間常數。這意味着您不能根據可隨時間變化的表達式來更改其值。
你可以做的是改變你的模型,所以它不需要參數。例如,您可以將代碼編寫爲
module myModule(input logic[7:0] SW, output logic[7:0] LEDR);
assign LEDR = SW[SW +: 2];
endmodule
的語法是'+:'和'SW [SW +:1]'是就像'SW [SW]' – Greg
一樣修正我的例子 –
謝謝,它解決了我的問題。一個問題,但是,這是怎麼來的呢?我認爲無論是在索引支架'$ IN [SW +:2];'必須是一個常數?軟件可以在運行時改變。 – Developer
使用':'時,雙方都需要是常量。 '+:'和' - :'是不同的,左邊的情況可以是變量(起始索引),右邊必須是常量(寬度和方向)。這是在IEEE文件中解釋,引用和鏈接到文檔鏈接我把我的答案 – Greg
Ohhhhh好吧,我明白了,所以整體選擇必須是恆定的,謝謝。 – Developer