我还是SystemVerilog的新手,并尝试做一些示例。 一个示例使用包定义一些数据类型,如下所示:
package definitions;
parameter VERSION = "1.1";
typedef enum {ADD, SUB, MUL} opcodes_t;
typedef struct {
logic [31:0] a, b;
opcodes_t opcode;
} instruction_t;
function automatic [31:0] multiplier (input [31:0] a,b);
return a * b;
endfunction
endpackage
我正在尝试在本模块中使用它
module ALU (input definitions::instruction_t IW,
input logic clock,
output logic [31:0] result);
always_ff @(posedge clock) begin
case (IW.opcode)
definitions::ADD : result = IW.a + IW.b;
definitions::SUB : result = IW.a - IW.b;
definitions::MUL : result = definitions::multiplier(IW.a, IW.b);
endcase
end
endmodule
但是当我尝试使用ModelSim对其进行仿真,并且尝试强制信号IW.a
和IW.b
查看输出时,总是会收到此错误:Error: (vsim-3592) signal_force : Fields of user-defined types are not supported ('/ALU2/IW.a').
>
所以,我的问题是如何对这些数据类型使用force? 谢谢!