系统 Verilog 非法分配:无法将解压缩类型分配给打包类型

问题描述

在系统 Verilog 中我写道:

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]”:无法将解压类型分配给 打包类型。

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

解决方法

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

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

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

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}};