[英]Variable slicing vector Systemverilog
我認為錯誤是“范圍必須恆定”的錯誤!
我要實現的操作是這樣的:
給定8位有符號/無符號向量和VARIABLE點,例如:b7b6b5b4b3b2.b1b0或b7b6b5b4b3.b2b1b0
我必須在整數部分加上第一個小數位,例如:
第一個單詞為b7b6b5b4b3b2 + b1,第二個情況為b7b6b5b4b3 + b2。
小數位數由名為“ port_scale”寬C_SHIFT_BITS的端口給出。
這是我的代碼,我想生成所有組合:
C_SHIFT_BITS = 4;
always_comb begin
for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
dout_temp[k-1][8:0] = din[(k-1)+:8-k] + din[(k-1)+:1]
end
for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
if (port_scale == k) begin
dout = dout_temp[k][8:0];
end
end
end
您是否有其他解決方案或方法可以對此進行編碼以使其更通用? 我不會編寫大量的case語句,因為參數C_SHIFT_BITS可以是任何數字,小於din的寬度。 for循環應能解決非法din [port_scale ...],但無法正常工作。
謝謝
我認為您只需要移動k
dout_temp[k-1][8:0] = (din >> k-1) + din[k];
你也可以擺脫第二個循環
dout = dout_temp[port_scale][8:0];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.