Verilog-“端口的非法输出或inout端口连接”

时间:2018-11-05 07:49:56

标签: verilog modelsim

这是我第一次在Verilog中编码的经验,也是我的第一个StackExchange查询!对于我在这篇文章中没有使用的任何礼节,请提前原谅。

我苦苦思索已经在此处发布过的一些类似问题,但是我无法确定如何将解决方案应用于自己的代码...

我不确定在尝试运行仿真时为什么会收到上述错误,也不确定如何修复它。请指教?:)

我已经在下面附上了我的源代码,以及testbench模块和尝试运行模拟时收到的错误。

任何反馈都非常感谢!


module test1();
   reg O, P, W;  
   wire LowRate, StandardRate, PeakRate;   
outputs LowRate,StandardRate,PeakRate


   CircuitStructure 
testboi(LowRate,StandardRate,PeakRate,O,P,W);

   initial
   begin


O=0; P=0; W=0;
#10 O=0; P=0; W=0;
#10 O=0; P=0; W=1;
#10 O=0; P=1; W=0;
#10 O=0; P=1; W=1;
#10 O=1; P=0; W=0;
#10 O=1; P=0; W=1;
#10 O=1; P=1; W=0;
#10 O=1; P=1; W=1;

#10
$finish();
end
endmodule


module CircuitStructure(O, P, W, LowRate, 
StandardRate, PeakRate);

   input O, P, W;  
output LowRate, StandardRate, PeakRate;

   not
    UA1(NotP,P),
    UA2(NotO,O),
    UA3(NotW,W);

   nand
    UB1(Nand1,NotP,NotO),
    UB2(Nand2,NotW,P),
    UB3(PeakRate,Nand1,Nand2);

   and
    UC1(StandardRate,P,W);

   buf
    UD1(LowRate,O);
endmodule

模拟错误:

Loading work.test1
# Loading work.CircuitStructure
# ** Error (suppressible): (vsim-3053) 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v(10): Illegal         
output or inout port connection for port 'LowRate'.
#    Time: 0 ns  Iteration: 0  Instance: /test1/testboi File: 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v
# ** Error (suppressible): (vsim-3053) 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v(10): Illegal 
output or inout port connection for port 'StandardRate'.
#    Time: 0 ns  Iteration: 0  Instance: /test1/testboi File: 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v
# ** Error (suppressible): (vsim-3053) 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v(10): Illegal 
output or inout port connection for port 'PeakRate'.
#    Time: 0 ns  Iteration: 0  Instance: /test1/testboi File: 
C:/Modeltech_pe_edu_10.4a/ECE171_Project1/TestBench - Copy.v
# Error loading design

1 个答案:

答案 0 :(得分:3)

您已将模块定义为:

module CircuitStructure(O, P, W, LowRate, StandardRate, PeakRate);

但是,定义单元测试时,您使用不同的信号顺序:

testboi(LowRate,StandardRate,PeakRate,O,P,W);

这就是为什么编译器假定您要将LowRate信号分配给O输入,将StandardRate分配给P输入,等等。IEEE标准1800-2017(第23.3章)。 2)定义以下连接模块实例的方式:

  • 按端口顺序的位置连接,
  • 使用完全显式的连接命名端口连接,
  • 使用隐式连接(SystemVerilog)命名端口连接,
  • 使用通配符端口名称(SystemVerilog)命名端口连接。

使用第一个,您需要更改信号顺序:

testboi(O,P,W,LowRate,StandardRate,PeakRate);

使用第二个,您需要显式“告诉”编译器将哪些信号分配给特定端口:

testboi(.LowRate(LowRate),.StandardRate(StandardRate),.PeakRate(PeakRate),.O(O),.P(P),.W(W));