簡體   English   中英

可變切片向量Systemverilog

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM