systemverilog - 更简单的避免方式"范围受常数expr限制"问题

时间:2016-04-27 20:17:01

标签: verilog system-verilog

我围绕这个问题进行了编码,但我认为这很麻烦;缺乏我从VHDL测试平台迁移到vlog的优雅......

如果有更好的方法,请查看LMK。 tmsg是一个typedef结构。 我,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

提前致谢, 杰里

1 个答案:

答案 0 :(得分:0)

玩了一下,发现修改过的&#34; +:&#34;符号的工作原理如下 - 并保持紧凑的符号:

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

所以它是从起始索引向下的向量,长16b。

不像VHDL那样直接,但不是很糟糕。