systemverilog program examples constraint classes system-verilog

system-verilog - program - systemverilog hierarchy



Diferencia de los tipos de datos SystemVerilog(reg, logic, bit) (5)

Como no puedo agregar un comentario, tengo que escribir lo que parece una nueva respuesta, pero no lo es. ¡Suspiro!

@ e19293001, @Morgan, logic define una variable de 4 estados a diferencia del bit , y por lo tanto una variable logic se puede usar para almacenar 1''bz por lo que el siguiente código es válido y se compila:

logic t_data; assign t_data = (drive) ? y : 1''bz ;

Pero estoy de acuerdo en que para reflejar la intención del diseño, se debe utilizar tri lugar de logic en estos casos (aunque debo decir que no veo que la gente use tri lugar de logic / wire demasiada frecuencia).

Hay diferentes tipos de datos en systemverilog que se pueden usar como los siguientes:

reg [31:0] data; logic [31:0] data; bit [31:0] data;

¿En qué se diferencian los tres?


El tipo de datos lógico no permite múltiples controladores. La última asignación gana en el caso de una asignación múltiple. El tipo de datos de acceso / cable da X si el controlador múltiple intenta conducirlos con un valor diferente. El tipo de datos lógico simplemente asigna el último valor de asignación.


Reg y la lógica son exactamente lo mismo. Estos tipos de datos aparecen dentro de los bloques siempre o inicial y almacenan valores, es decir, siempre @ (a) b <= a ;, el registro b se evalúa solo cuando cambia ''a'', pero de lo contrario simplemente almacena el último valor que se le asignó.

Los cables son simplemente conexiones y necesitan ser conducidos continuamente. Estoy de acuerdo en que pueden comportarse de forma idéntica a como lo mencionó @Morgan, pero pueden imaginarse como una pieza de alambre duro, cuyo valor cambia solo el valor en el otro extremo o la fuente cambia.


reg y el wire fueron los tipos originales. Los cables se asignan constantemente y los registros se evalúan en puntos particulares, la ventaja aquí es que el simulador realiza optimizaciones.

wire w_data; assign w_data = y; // Same function as above using reg reg r_data; always @* r_data = y ;

Un error común al aprender Verilog es asumir que un tipo de registro implica un registro en hardware. La optimización anterior para el simulador se puede hacer a través del contexto de su uso.

Esto introduce la logic que se puede utilizar en lugar de cable y registro.

logic w_data; assign w_data = y; // Same function as above using reg logic r_data; always @* r_data = y ;

También se han creado los bit y byte tipo que solo pueden contener 2 estados 0 o 1 no x o z. byte implica bit [7:0] . El uso de estos tipos ofrece una pequeña mejora en la velocidad, pero recomendaría no usarlos en RTL, ya que su verificación puede omitir valores sin inicializar o reinicios críticos.

El uso de bit y byte sería más común en los componentes de testbench, pero puede dar lugar a problemas en el caso de tener que manejar x para estimular la recuperación y la corrupción de datos.

Actualizar

En el momento de redactar este informe, tenía la impresión de que la logic no se podía utilizar para la tristeza, no puedo encontrar el documento original en el que me basé. Hasta nuevas actualizaciones, comentarios o ediciones, revoco mi afirmación de que la lógica no se puede utilizar para crear líneas tri-estatales .

Se ha agregado el tipo tri , para definir explícitamente una línea tri-estatal. Se basa en las propiedades de un wire , la logic se basa en las propiedades de un reg .

tri t_data; assign t_data = (drive) ? y : 1''bz ;

Si ya no tiene que admitir Verilog de compatibilidad con versiones anteriores, le recomendaría que utilice la logic y tri . El uso de la ayuda de la logic reclasificación y y tri refleja la intención de diseño de una línea triple.


  • La elección del reg nombre resultó ser un error , porque la existencia de registros se deduce en función de cómo se realizan las asignaciones. Debido a esto, el uso de reg está esencialmente en desuso en favor de la logic , que en realidad es del mismo tipo.

  • logic es un tipo de datos de 1 bit y 4 estados.

  • bit es un tipo de datos de 1 bit y 2 estados que puede simular más rápido que la logic
  • Si una logic también se declara como un wire , tiene la capacidad adicional de admitir varios controladores. Tenga en cuenta que, por defecto, el wire es equivalente a wire logic .
  • En general, las " nets " (como wire y tri ) son las más adecuadas para diseñar buses de comunicación.

Hablando en términos prácticos, para RTL generalmente no importa si declara con reg , o logic , o wire . Sin embargo, si tiene que hacer una declaración explícita de un tipo de 4 estados (a diferencia de cuando no lo hace ), normalmente debe elegir la logic ya que eso es lo que pretende el lenguaje.

Artículos relacionados: