在 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]”的非法分配:无法将未打包类型分配给 包装型。
但是,我不明白问题是什么。
您声明
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}};
有一个更简单的解决方案:比特流转换 - 请参阅语言规范
中的第 6.24.1 节typedef logic[63:0] packed_64;
然后是作业
product <= packed_64'(product_FF);
也许 typedef 是不必要的,没有测试过。