2016-04-27 9 views
0

私はその問題をコード化しましたが、厄介だと思います。優雅さが欠けているので、私はVHDLのテストベンチからブログに移行しようとしていました...systemverilog - "exprによって制限された範囲"の問題を回避する簡単な方法

もっと良い方法があれば見てみましょう。 tmsgはtypedef構造体です。 i、jは整数です。
大きなベクトルを16bスライスにパースするのを容易にするためにtmpを宣言しました。事前に

$display("---- Writing T1 message -----"); 
for (i = 0; i < 5; i += 1) // send most of the filename as hexascii 
begin 
    for (j = 0; j < 16; j +=1) // bit assign the sliced vec *sigh* 
     begin 
      tmp[j] = tmsg.fname[88-i*16-1-j]; 
     end  

    wr(`SEND_MSG_QUEUE + `SMQ_MSG_Q_REG, tmp, 0, 3); 

    /* --- the original "range slice issue" line *sigh again* ---- 
    wr(`SEND_MSG_QUEUE + `SMQ_MSG_Q_REG, 
       tmsg.fname[88-i*16-1:88-(i+1)*16], 0, 3); 
    ------------------------------------------------------------- */ 
end 

おかげで、 ジェリー

+0

もう少し周りを遊んで、修正された "+:"表記が次のように機能し、コンパクト表記を維持することがわかりました。 – JerryJamesO

答えて

0

もう少し周りを演奏し、修正することを見つけ、「+:」の表記は次のように動作します - コンパクトな表記を維持します。

 wr(`SEND_MSG_QUEUE + `SMQ_MSG_Q_REG, 
          tmsg.LBA[48-i*16-1 -:16], 0, 3); 

だから、それはです開始インデックスから下向きのベクトル、16b長い。

VHDLとまっすぐではありませんが、ひどいわけではありません。

関連する問題