如何分配未包装的真实阵列



在将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]':无法分配一个未包装的类型'真实$ [18:0]包装类型的"真实"。

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

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

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

不确定您要使用此代码做什么。实际类型为64位。将其连接到19位时,您将获得83位巴士,RDATA在LSB中。现在,将这个83位矢量分配到20位总线时,它将需要20个LSB,这意味着它等同于编写以下作业:

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

最新更新