お金の節約: ソリューション
代入された値が
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 ビット ベクトルとして宣言することでしたが、変数名の後の[1:0]
間違った位置に配置し、配列( 2 つの 1 ビット reg)として宣言したためです。エラー。
解決策は、[1:0]
それを前面に移動してベクトルとして宣言することです。
ユニバーサルソリューション
一般的な解決策は、割り当てられた reg がどのように宣言されているか、[m:n]
間違った位置に配置されているかどうかを確認し、それをベクトルとして宣言するか配列として宣言するか、[m:n]
変数名の前後に配置するかを慎重に検討することです。