Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Verilog

Puertos Verilog

Los puertos son un conjunto de señales que actúan como entradas y salidas de un módulo en particular y son la forma principal de comunicarse con él. Piense en un módulo como un chip fabricado colocado en una PCB y se vuelve bastante obvio que la única forma de comunicarse con el chip es a través de sus pines. Los puertos son como pines y el diseño los utiliza para enviar y recibir señales del mundo exterior.

verilog-port

Tipos de Puertos

Puerto Descripción
Entrada El módulo de diseño solo puede recibir valores del exterior usando su input puertos
Salida El módulo de diseño solo puede enviar valores al exterior usando su output puertos
Entrada El módulo de diseño puede enviar o recibir valores usando su inout puertos

Los puertos se consideran por defecto como redes de tipo wire .

Sintaxis

Puertos declarados como inout puede actuar como entrada y salida.

  
  
	input  [net_type] [range] list_of_names; 	// Input port
	inout  [net_type] [range] list_of_names; 	// Input & Output port
	output [net_type] [range] list_of_names; 	// Output port driven by a wire
	output [var_type] [range] list_of_names; 	// Output port driven by a variable

  

Ejemplo

En el código que se muestra a continuación, hay tres input puertos, uno output puerto y uno inout puerto.

  
  
module  my_design ( input wire			clk,
                    input 					en,
                    input 					rw,
                    inout [15:0]	  data,
                    output 					int );
                    
	// Design behavior as Verilog code
	
endmodule

  

Es ilegal usar el mismo nombre para múltiples puertos.

  
  
	input  aport;         // First declaration - valid
	input  aport;         // Error - already declared
	output aport;         // Error - already declared

  

Puertos firmados

El signed El atributo se puede adjuntar a una declaración de puerto o una declaración de red/reg o ambas. Las redes implícitas están por defecto sin firmar .

  
  
module ( input      a, 
                    b,
         output     c);
		 
	// ports a, b, and c are by default unsigned
endmodule

  

Si la declaración net/reg tiene un signed atributo, entonces el otro también se considerará firmado.

  
  
	module ( input signed a, b,
	         output c);
		wire a, b;          // a, b are signed from port declaration
		reg signed c;       // c is signed from reg declaration
	endmodule

  

Variaciones de puerto

Verilog 1995

Verilog ha sido objeto de algunas revisiones y la versión original de IEEE en 1995 tenía la siguiente forma de declaración de puerto. Aquí, la declaración del módulo tenía que enumerar primero los nombres de los puertos entre corchetes y luego la dirección de esos puertos definidos más adelante dentro del cuerpo del módulo.

  
  	
module test (a, b, c);
	
	input 	[7:0] a;            // inputs "a" and "b" are wires
	input 	[7:0] b;  
	output 	[7:0] c; 			// output "c" by default is a wire
	
	// Still, you can declare them again as wires to avoid confusion
	wire 	[7:0] a;
	wire 	[7:0] b;
	wire 	[7:0] c;
endmodule
	
	
module test (a, b, c);
	
	input  [7:0] a, b;
	output [7:0] c;           // By default c is of type wire
	
	// port "c" is changed to a reg type
	reg    [7:0] c;           
endmodule
  

Verilog 2001 en adelante

La nomenclatura de puertos de estilo ANSI-C se introdujo en 2001 y permitió especificar el tipo dentro de la lista de puertos.

  
  
module test ( input [7:0]	a,
                            b, 		// "b" is considered an 8-bit input
              output [7:0]  c);
			  
	// Design content			  
endmodule

module test ( input wire [7:0]	a, 	
              input wire [7:0]  b, 		
              output reg [7:0]  c);
			  
	// Design content
endmodule

  

Si una declaración de puerto incluye un tipo de red o variable, se considera que ese puerto está completamente declarado. Es ilegal volver a declarar el mismo puerto en una declaración de tipo neto o variable.

  
  
module test ( input      [7:0] a,       // a, e are implicitly declared of type wire
	          output reg [7:0] e );

   wire signed [7:0] a;     // illegal - declaration of a is already complete -> simulator dependent
   wire        [7:0] e;     // illegal - declaration of e is already complete
   
   // Rest of the design code
endmodule

  

Si la declaración del puerto no incluye un tipo de red o variable, entonces el puerto se puede declarar en una declaración de tipo de red o variable nuevamente.

  
  
module test ( input      [7:0] a,
              output     [7:0] e);
	              
     reg [7:0] e;              // Okay - net_type was not declared before
     
     // Rest of the design code
endmodule

  

Verilog

  1. Tutorial de Verilog
  2. Concatenación Verilog
  3. Asignaciones de Verilog
  4. Bloqueo y no bloqueo de Verilog
  5. Funciones de Verilog
  6. Tarea Verilog
  7. Generador de reloj Verilog
  8. Funciones matemáticas de Verilog
  9. Formato de hora de Verilog
  10. Alcance de la escala de tiempo de Verilog
  11. Operaciones de E/S de archivos de Verilog