비용 절감: 솔루션
할당된 값이
reg
어떻게 선언되는지 , 잘못된 위치에 배치 되는지 확인 하고, 벡터로 선언해야 하는지[m:n]
, 배열로 선언해야 하는지 ,[m:n]
변수명 앞에 배치해야 하는지, 뒤에 배치해야 하는지 잘 생각해 보세요.
비용은 절약되지만 아래로 스크롤하여 :) 내 여행을 확인하는 것이 좋습니다. 유익하셨다면 좋아요와 모아두세요~
배경
때때로 특정 등록에 값을 할당할 때 다음 프롬프트가 나타납니다.
Error: cannot assign to memory
Error: cannot assign a packed type to an unpacked type
문제 해결 프로세스
자세히 살펴본 결과, reg
등록 유형을 선언할 때 선언 数组
이 向量
. 지금 바로:
/* 出现错误的代码 */
reg reg_tagv_wen[1:0];//声明成了数组,这里即2个1位的reg
/* 修正后的代码 */
//修正完成后,上方赋值语句不再报错。
reg [1:0] reg_tagv_wen;//声明成了向量,这里即1个两位的reg
배열 의 경우 할당할 배열 요소를 명시적으로 지정 해야 합니다 . 벡터 의 경우 동시에 여러 비트에 값을 할당 할 수 있습니다 .
이 오류는 원래 의도가 2비트 벡터 로 선언하는 것이었으나 이를 변수 이름 뒤의 잘못된 위치에 배치 하고 배열 (2개의 1비트 regs) 로 선언했기 때문에 발생했습니다 . 오류.[1:0]
해결책은 [1:0]
이를 앞으로 이동시켜 벡터로 선언하는 것입니다.
범용 솔루션
일반적인 해결책은 할당된 reg가 어떻게 선언되는지, [m:n]
잘못된 위치에 배치되는지 확인하고, 벡터로 선언해야 하는지 배열로 선언해야 하는지, [m:n]
변수 이름 앞이나 뒤에 배치해야 하는지 신중하게 고려하는 것입니다.