Verilog - «Недопустимый выходной или входной порт для подключения к порту» - PullRequest
0 голосов
/ 05 ноября 2018

Это мой первый опыт написания кода в 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 голосов
/ 05 ноября 2018

Вы определили свой модуль как:

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));
...