Почему модули не соединены друг с другом?

#verilog #active-hdl

Вопрос:

Я должен выполнить кодирование Verilog в Active HDL 12, но я не знаю, почему три модуля не соединяются друг с другом в верхнем модуле.

шкала времени верхнего модуля 1 нс / 1 пс

 module Main (Mx1,Mx2,Mx3,Mx4,My); input Mx1; input Mx2;  input Mx3; input Mx4; output My;  wire interface1; wire interface2;  And a1(.X (MX1),.Y (MX2),.O1 (interface1)); Or o1(.X1 (MX3),.Y1 (MX4),.O2 (interface2)); Xor x1(.X2 (interface1),.Y2 (interface2),.O3 (My));   endmodule  

And модуль

 `timescale 1 ns / 1 ps  module And ( X ,Y ,O1 );  input X ; input Y ; output wire O1 ;   assign O1 = X amp; Y;  endmodule  

Or модуль

 `timescale 1 ns / 1 ps  module Or ( X1 ,Y1 ,O2 );  input X1 ; input Y1 ; output wire O2 ;   assign O2 = X1 amp; Y1;  endmodule  

Xor модуль

 `timescale 1 ns / 1 ps  module Xor (X2,Y2,O3);  input X2; input Y2; output O3;   assign O3 = X2 ^ Y2;  endmodule  

В выводе я вообще не вижу ответа.

Ответ №1:

Verilog чувствителен к регистру. Это означает Mx , что и MX являются двумя разными сигналами. Mx Например, вход не подключен к And модулю. Один из способов исправить это-изменить:

 And a1(.X (MX1),.Y (MX2),.O1 (interface1)); Or o1(.X1 (MX3),.Y1 (MX4),.O2 (interface2));  

Для:

 And a1(.X (Mx1),.Y (Mx2),.O1 (interface1)); Or o1(.X1 (Mx3),.Y1 (Mx4),.O2 (interface2));  

Некоторые симуляторы генерируют предупреждающие сообщения. Например, симулятор каденции (доступный в edaplayground) показывает такие предупреждения, как:

 And a1(.X (MX1),.Y (MX2),.O1 (interface1));  | xmelab: *W,CSINFI : implicit wire has no fanin (Main.MX2).  

Еще один способ помочь идентифицировать этот тип распространенных ошибок-использовать эту директиву компилятора в своем коде:

 `default_nettype none  

В этом случае ваш симулятор должен генерировать ошибки компиляции.