在 SystemVerilog 中声明接口时出现未声明的类型错误

问题描述

我正在尝试使用以下接口的接口,该接口在 <Project Directory>/otterMCU.srcs/sources_1/new/BranchPredictor.sv 中声明如下:

import Types::*;  // a package that provides the func3_t enum

interface BranchPredictor(
    input clk,input reset
);
    logic id_is_branch;
    func3_t id_branch_type;
    logic [31:0] id_pc;
    
    logic ex_branched;
    func3_t ex_branch_type;
    logic [31:0] ex_pc;
    
    logic should_branch;

    modport Predictor(
        input id_is_branch,input id_branch_type,input id_pc,input ex_branched,input ex_branch_type,input ex_pc,output should_branch
    );
    
    modport ID(
        output id_is_branch,output id_branch_type,output id_pc,input should_branch
    );
    
    modport EX(
        output ex_branched,output ex_branch_type,output ex_pc
    );
endinterface 

当我在另一个模块中使用它时,Vivado 出现 undeclared type 错误

[Synth 8-3892] undeclared type 'BranchPredictor'  ["<redacted>/otterMCU.srcs/sources_1/new/ottER_MCU.sv":78]

以下是它在模块中的使用方式(文件<Project Directory>/otterMCU.srcs/sources_1/new/ottER_MCU.sv):

module ottER_MCU(/*...*/);
    // ...
    BranchPredictor ibpred();  // this is the offending line
    // ...

    IDStage id_stage(
        .predictor(ibpred.ID),// this module uses one of the modports
        // ...
    );
    // ...
endmodule

我做错了什么?

解决方法

我想出了解决办法。更改编译顺序以将接口放在最顶部解决了这个问题。