问题描述
我正在尝试使用以下接口的接口,该接口在 <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
我做错了什么?
解决方法
我想出了解决办法。更改编译顺序以将接口放在最顶部解决了这个问题。