2011-10-08 50 views
-1

假設我有一個向量value[6:0]和一個輸入向量input[3:0]。問題是我想了許多在值向量位的設定爲1點的基礎上輸入的值,例如:使用系統verilog中的運行時值選擇位向量範圍

input = 0011(3中分解)然後value = 000111(組3位以1
input = 0101(5中分解)然後value = 011111(設置5位到1

由於我們可以做到這一點,只有當值不變,但在這裏它是運行時改變。任何想法解決這個問題?

回答

4

這裏沒有必要選擇一個範圍。

wire [3:0] input; 
wire [7:0] shifted; 
wire [6:0] value; //This can only hold 0 to 7 

//Assign 2^input then subtract 1 
assign shifted = 1'b1 << input; 
assign value = shifted - 1; 
+0

感謝亞當,我會試試這種方式,我做了另一種方式用於循環。也許會試圖看看哪些方法可以節省我的資源。再次感謝 – princegialai

0

這可能是如此簡單:

wire [3:0] input; 
wire [31:0] constant_value = 32'h0000_FFFF; 
wire [15:0] output; 

assign output = constant_value[ input +: 16 ]; 

注 「+」 範圍選擇。

+0

'assign output = constant_value [0 +:input];',它會給我正確的輸出嗎? – Jithin