Verilog - Недопустимое выходное или входное соединение порта для порта

Это мой первый опыт написания кода на Verilog, а также мой первый запрос на StackExchange! Пожалуйста, извините меня заранее за любой этикет, который я не использую в этом посте.

Я пробирался через некоторые подобные вопросы, уже размещенные здесь, но я не мог понять, как применить решения к моему собственному коду...

Я не уверен, почему я получаю указанную выше ошибку при попытке запустить симуляцию, а также не знаю, как ее исправить. Пожалуйста, порекомендуйте?:)

Ниже я прикрепил свой исходный код вместе с модулем тестового стенда и ошибками, которые я получил при попытке запустить симуляцию.

Любая обратная связь очень ценится!


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

person Community    schedule 05.11.2018    source источник


Ответы (1)


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

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));
person Qiu    schedule 05.11.2018