Systemverilog出现的cannot assign to memory或者cannot assign a packed type to an unpacked type

        检查被赋值的reg、logic变量是如何被声明的,是不是把[m:n]给放错位置了,仔细思索是应该声明成向量还是数组,[m:n]是放到变量名前还是变量名后即可。
        有时候我们在给某个reg、logic变量赋值的时候,会出现如下提示:

Error: cannot assign to memory
Error: cannot assign a packed type to an unpacked type

        仔细检查后,发现是在声明reg、logic类型的寄存器时,声明成了数组而非向量。即:

/* 出现错误的代码 */
reg reg_tagv_wen[1:0];//声明成了数组,这里即2个1位的reg

/* 修正后的代码 */
//修正完成后,上方赋值语句不再报错。
reg [1:0] reg_tagv_wen;//声明成了向量,这里即1个两位的reg

        对于数组,你必须明确的指定赋给数组当中的哪一个元素。
        对于向量,你可以同时对其中的若干位同时赋值

        我本人出现这种错误,是因为我的本意是声明成1个2位的向量,但是我把[1:0]放错了位置,放到了变量名后面,声明成数组(2个1位的reg)了,所以导致了报错。

解决方案即把[1:0]挪到前面去,声明成向量就好了。

通用的解决方案
        通用的解决方案是:检查被赋值的reg、logic变量是如何被声明的,是不是把[m:n]给放错位置了,仔细思索是应该声明成向量还是数组,[m:n]是放到变量名前还是变量名后即可。

你可能感兴趣的:(Systemverilog,fpga开发)