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 dereg
está esencialmente en desuso en favor de lalogic
, 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 lalogic
- Si una
logic
también se declara como unwire
, tiene la capacidad adicional de admitir varios controladores. Tenga en cuenta que, por defecto, elwire
es equivalente awire logic
. - En general, las " nets " (como
wire
ytri
) 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: