2014-11-16 25 views
0

是否有可能從計算只保留最後X位這樣?:保持特定位從計算

a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}} 
//can it be done in one line of code? Like: 
//a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}} [X:0] 

回答

1

可以分配到級聯線,與對於LSB的臨時變量,它應該清楚,以這些位不被使用,並且可以優化合成工具遠。

wire [4:0] temp; 

assign {a_register, temp} = some_addr - {some_addr[(width-1):limit],limit{1'b0}}; 

reg [4:0] temp; 

always @(posedge clk) begin 
    {a_register, temp} <= some_addr - {some_addr[(width-1):limit],limit{1'b0}}; 
end 
0

如果你想只保留一個計算的最後N位,你只需要做a_register大小N.分配將僅計算最後的N位。如果您需要a_register是出於某種原因時,你總是可以只選擇a_register最後N位,並分配一個值:

a_register[X:0] <= some_addr - {some_addr[(width-1):limit],limit{1'b0}}; 

什麼你現在不工作;但是您始終可以使用臨時值來存儲計算結果,並採取[X:0]

assign temp = some_addr - {some_addr[(width-1):limit],limit{1'b0}}; 
... 
a_register <= temp[X:0]; 

(雖然它不是1線)