#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
В этом случае ваш симулятор должен генерировать ошибки компиляции.