非法赋值:无法将未打包类型分配给打包类型

问题描述 投票:0回答:2

在 SystemVerilog 中我写道:

module mult32x32_arith (
    input logic clk,             // Clock
    input logic reset,           // Reset
    output logic [63:0] product  // Miltiplication product
);

logic left_decoder, right_decoder, product_FF[63:0]={64{1'b0}};

    always_ff @(posedge clk, posedge reset) begin
        if (reset==1'b1)begin
            product <= product_FF;
        end
        else begin
            
        end
    end

但是,我在这一行遇到错误:

product <= product_FF;

它说:

错误:mult32x32_arith.sv(19):从类型“reg $[63:0]”对类型“reg[63:0]”的非法分配:无法将未打包类型分配给 包装型。

但是,我不明白问题是什么。

verilog system-verilog modelsim
2个回答
0
投票

您声明

product
为已包装,而
product_FF
为未包装。请参阅 IEEE Std 1800-2017,第 7.4 节 打包和非打包数组

术语压缩数组用于指代声明的维度 在数据标识符名称之前。术语 unpacked array 用于 参考数据标识符名称后声明的维度

您需要将它们声明为相同的数据类型。例如,要使它们都打包,请更改:

logic left_decoder, right_decoder, product_FF[63:0]={64{1'b0}};

至:

logic left_decoder, right_decoder;
logic [63:0] product_FF = {64{1'b0}};

0
投票

有一个更简单的解决方案:比特流转换 - 请参阅语言规范

中的第 6.24.1 节

typedef logic[63:0] packed_64;

然后是作业

product <= packed_64'(product_FF);

也许 typedef 是不必要的,没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.