Saltar al contenido

¿Cuál es la diferencia entre reg y wire en un módulo verilog?

Mantén la atención ya que en este tutorial vas a hallar la contestación que buscas.Esta reseña fue evaluado por nuestros expertos para asegurar la calidad y exactitud de nuestro post.

Solución:

Cable:-

Los cables se utilizan para conectar diferentes elementos. Pueden tratarse como cables físicos. Se pueden leer o asignar. No se almacenan valores en ellos. Deben ser controlados por una instrucción de asignación continua o desde un puerto de un módulo.

Reg: –

Al contrario de su nombre, los registros no se corresponden necesariamente con registros físicos. Representan elementos de almacenamiento de datos en Verilog / SystemVerilog. Conservan su valor hasta que se les asigna el siguiente valor (no a través de la instrucción de asignación). Se pueden sintetizar en FF, latch o circuito combinatorio. (¡¡¡Puede que no se puedan sintetizar !!!)

Los cables y las normas están presentes desde el período de tiempo de Verilog. SystemVerilog les agregó un nuevo tipo de datos llamado lógica. Entonces, la siguiente pregunta es qué es este tipo de datos lógicos y en qué se diferencia de nuestro viejo cable / registro.

Lógica:-

Como hemos visto, el tipo de datos reg es un poco erróneo en Verilog. La adición del tipo de datos lógicos de SystemVerilog es para eliminar la confusión anterior. La idea detrás es tener un nuevo tipo de datos llamado lógica que al menos no da la impresión de que sea sintetizable por hardware. El tipo de datos lógicos no permite varios controladores. Tiene un comportamiento de última asignación gana en caso de múltiples asignaciones (lo que implica que no tiene equivalencia de hardware). Los tipos de datos Reg / Wire dan X si varios controladores intentan manejarlos con valores diferentes. El tipo de datos lógicos simplemente asigna el último valor de asignación. La siguiente diferencia entre reg / wire y la lógica es que la lógica puede ser impulsada por el bloque de asignación, la salida de un puerto y dentro de un bloque de procedimiento como este

  logic a;
    assign a = b ^ c;                   // wire style 
    always (c or d) a = c + d;          // reg style
    MyModule module(.out(a), .in(xyz)); // wire style

Los bloques de procedimiento se refieren a always, always_ff, always_comb, always_latch, initial etc. bloques. Si bien las declaraciones de asignación de procedimiento se refieren a la asignación de valores a reg, integer, etc., pero no alambres (redes).

wire los elementos deben ser conducido continuamente por algo y no puede almacenar un valor. De ahora en adelante, se les asignan valores usando asignación continua declaraciones.

reg se puede utilizar para crear registros en bloques procedimentales. Por lo tanto, puede Tienda algún valor.

reg elementos pueden ser utilizado como salida dentro de un módulo real declaración. Pero,reg elementos no poder estar conectado al puerto de salida de un módulo instanciación.

Por lo tanto, un reg puede conducir un cable como RHS de un assign declaración. Al revés, un cable puede conducir un reg en como RHS de un bloque procesal.

Para tener una idea clara sobre la declaración de reg o wire, consulte la imagen a continuación:

ingrese la descripción de la imagen aquí

Entonces, siempre que infiera la lógica secuencial, que almacena / contiene algún valor, declare esa variable / puerto como reg. Aquí, Q es un regdentro un módulo, pero mientras instanciando este módulo dentro de algún otro módulo, entonces este puerto debe estar conectado a un wire.

Recordar, wire sólo puede inferir a la lógica combinacional, mientras que reg puede inferir a lógica combinacional o secuencial.

El blog de Dave es una buena fuente de información detallada. Para obtener más información, consulte Sintetizar diferencias y enlaces de registro de cables de Verilog.

Como se declara aquí:

La red más utilizada es cable, así que usémoslo para comprender un neto mejor.

Piense en un cable de su hogar, es algo que conecta dos componentes eléctricos. ¿Derecha? Ahora, dime ¿qué pasará si rompo el cable? Se perderá la conexión (ruta de alta impedancia ‘bz). Así es exactamente como se sintetiza una red en hardware: la conexión entre dos puertas permite una asignación continua. Las redes no pueden no almacenar un valor (a excepción de trireg, que puede tener un estado capacitivo, donde si desconecta la conexión, se bloqueará en el último valor asignado)

Vea este código simple de Verilog usando cable (red):

module net_example (
   input wire a,
   input wire b
);

wire net;
assign net = a ? 1'b1 : (b ? 1'b0 : 1'bx);

endmodule

Hardware sintetizado:ingrese la descripción de la imagen aquí

Entonces, espero que haya sido fácil de entender las redes. Echemos un vistazo al reg ahora. Déjame empezar diciendo: declarando cualquier cosa con tiporegno siempre significa que se sintetizará como un registro (elemento de almacenamiento). Citando lo que dice la sección 4.7 de Verilog LRM (2005) sobre reg,

Debido a que el registro tiene un valor entre asignaciones, se puede usar para modelar registros de hardware. Se pueden modelar elementos de almacenamiento sensibles a los bordes (es decir, flip-flops) y sensibles al nivel (es decir, pestillos transparentes y restablecidos). No es necesario que un registro represente un elemento de almacenamiento de hardware porque también se puede usar para representar la lógica combinatoria.

Centrarse en la palabra “pueden” en el texto mencionado anteriormente. A diferencia de net, reg es capaz de mantener un valor, por lo que es elegible para almacenar valores. Y es por eso que “pueden” ser utilizado como elemento de almacenamiento. Profundicemos con algo de código Verilog.

Código de Verilog usando reg para hacer el elemento de almacenamiento:

module net_reg (
   input wire a,
   input wire b
);

reg register;

always @(*) begin
   if (a) register = 1'b1;
   else if (b) register = 1'b0;
end

endmodule

Dado que, no codifiqué cuál debería ser el valor de Registrarse cuando a == 0 y b == 0, por lo tanto, Registrarse contiene el valor anterior (vea la línea roja que hice para mostrar la retroalimentación) lo que lo convierte en un elemento de memoria.

Hardware sintetizado:ingrese la descripción de la imagen aquí

Si solo agrego una línea para proporcionar el valor predeterminado a Registrarse en el código mencionado anteriormente, he proporcionado un valor a Registrarse para todas las combinaciones de ay b. Por lo tanto, no es necesario mantener ningún valor. Entonces, a pesar de que declaré el Registrarse como reg, se sintetizará como un cable y no un elemento de almacenamiento.

module net_reg (
   input wire a,
   input wire b
);

reg register;

always @(*) begin
   register = 1'b0;
   if (a) register = 1'b1;
   else if (b) register = 1'b0;
end

endmodule

Hardware sintetizado:ingrese la descripción de la imagen aquí
Entonces, la principal conclusión de aquí es que un registro no siempre se sintetiza como elemento de almacenamiento.

Te mostramos reseñas y valoraciones

Si te gustó nuestro trabajo, eres capaz de dejar una reseña acerca de qué te ha gustado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *