You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:05