如何分配一个真正的解包数组?

时间:2017-04-18 15:43:14

标签: system-verilog

在将Modelsim从10.3c更新到10.6a时,我遇到了这段代码的错误,这段代码在没有警告的情况下无法正常工作:

module test(
    input bit clk,
    input bit signed[31:0] data
);

    real rdata_dl[19:0] = '{20{0}};
    real rdata = 0;

    always @(posedge clk) begin
        rdata_dl = {rdata_dl[18:0], rdata};
        rdata = data;
    end

endmodule
  

- 编译模块测试

     

**注意:test.sv(10):( vlog-13177)促进连接' {rdata_dl [18:0],rdata}'分配模式:分配给真实/ wreal数组。

     

**错误(可抑制):( vlog-13215)test.sv(10):赋值模式元素' rdata_dl [18:0]':无法分配解压缩类型' real $ [18:0]'打包类型'真实'

     

**错误(可抑制):test.sv(10):( vlog-13174)非法分配模式。元素(2)的数量与类型的宽度(20)不匹配。

我设法通过使用此行来修复它:rdata_dl = {rdata_dl[18:0], real'(rdata)};

但是,我不明白为什么它失败了,为什么新版本会起作用。谁能解释一下?

1 个答案:

答案 0 :(得分:1)

不确定您要对此代码执行的操作。实型是64位。当它与19位连接时,你得到一个83位总线,其中rdata在LSB中。 现在,当将这个83位向量分配给20位总线时,它将需要20个LSB,这意味着它等同于编写以下赋值:

always @(posedge clk) begin
    rdata_dl = rdata[19:0];
    rdata = data;
end