Lamento hacer esta pregunta, que creo que es muy básica, pero no puedo encontrar una respuesta. El siguiente ejemplo claramente funciona. Pero me gustaría omitir la declaración de los cables ay y by.
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
wire ay,by;
sub a(.y(ay));
sub b(.y(by));
assign x= sel ?ay:by;
endmodule
Los módulos tienen un nombre. ¿Es posible dirigirse directamente a sus puertos? en caso afirmativo, ¿cuál es la sintaxis correcta? Esto no funciona (en Quartus)
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
sub a();
sub b();
assign x= sel ?a.y:b.y;
endmodule
No, no es posible hacer esto.
La module.wire
sintaxis funciona en algunos sistemas, pero todas las herramientas de síntesis requerirán que utilice los puertos correctamente.
Las declaraciones de cable se pueden omitir y, en la mayoría de los casos, se implicará un cable de 1 bit de ancho. Esto generalmente se considera una mala práctica, ya que terminará con desajustes de ancho si olvida declararlos más anchos que 1 bit.
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
//wire ay,by; No wire declaration
sub a(.y(ay)); //1 bit wide wire implied
sub b(.y(by));
assign x= sel ?ay:by;
endmodule
Las salidas no conectadas se optimizarán mediante síntesis.
Fabio Dalla Libera
pjc50