2016-04-27 70 views
0

我圍繞這個問題編碼,但我認爲這很麻煩;缺乏我尋求從VHDL測試平臺遷移到vlog的優雅...systemverilog - 簡單的方法來避免「範圍以恆定的expr範圍」問題

看看和LMK,如果有更好的方法。 tmsg是一個typedef結構。 i,j是整數。
聲明瞭一個tmp以便於將一個大向量解析爲16b個切片。

$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那麼直接,但不是很糟糕。