Specman中实例化同类型多寄存器后指针类型错误的解决方法
问题描述
用户定义寄存器类型及实例化代码如下:
寄存器类型定义
reg_def GCC_CTRL_12_T { reg_fld SEL_CH_PRIORITY : uint(bits:10) : RW : 0; };
寄存器文件中实例化寄存器
extend GCC_MAIN vr_ad_reg_file { reg_list HDLC_CORE1_GCC_CTRL_12[1] of GCC_CTRL_12_T at 0x1000b; }; extend GCC_MAIN vr_ad_reg_file { reg_list HDLC_CORE2_GCC_CTRL_12[1] of GCC_CTRL_12_T at 0x1010b; };
序列中定义寄存器指针
extend CFG_CORE_REGS vr_ad_sequence { !core1_gcc12_ctrl : HDLC_CORE1_GCC_CTRL_12 vr_ad_reg; !core2_gcc12_ctrl : HDLC_CORE2_GCC_CTRL_12 vr_ad_reg; };
错误信息
'HDLC_CORE1_GCC_CTRL_12' is not a subtype of 'vr_ad_reg' at line 76 in /auto/ns_asics/VR_Projects/zgal/wa/alon/gcc/views/gcc_verif/gcc_verif/src/agents/mpif/mpif_master_sequence.e !core1_gcc12_ctrl : HDLC_CORE1_GCC_CTRL_12 vr_ad_reg;
解决方案
错误根源在于HDLC_CORE1_GCC_CTRL_12是寄存器数组类型(通过reg_list [1]声明),而非单个vr_ad_reg类型。可通过以下两种方式修正:
方法一:引用数组内的单个寄存器实例
因为你声明的是长度为1的数组,直接取索引0的元素作为指针类型即可:
extend CFG_CORE_REGS vr_ad_sequence { !core1_gcc12_ctrl : HDLC_CORE1_GCC_CTRL_12[0] vr_ad_reg; !core2_gcc12_ctrl : HDLC_CORE2_GCC_CTRL_12[0] vr_ad_reg; };
方法二:将寄存器声明改为单个实例而非数组
如果不需要数组形式,去掉reg_list后的[1],声明单个寄存器:
extend GCC_MAIN vr_ad_reg_file { reg HDLC_CORE1_GCC_CTRL_12 of GCC_CTRL_12_T at 0x1000b; }; extend GCC_MAIN vr_ad_reg_file { reg HDLC_CORE2_GCC_CTRL_12 of GCC_CTRL_12_T at 0x1010b; };
修改后原序列中的指针声明即可正常使用。
内容的提问来源于stack exchange,提问作者Zeev Gal
相关产品推荐
相关产品推荐

