Estoy realmente confundido por la concepción del tipo de red, tipo de variable, tipo de datos y objetos de datos en SystemVerilog. Estoy usando el simulador dentro de Xilinx Vivado 2018.02 para todos los códigos siguientes.
logic
en SystemVerilog puede sustituir parcialmente el rol de wire
en Verilog. Digamos que tengo el siguiente código dentro de un módulo
logic q_bar;
logic q;
assign q_bar = ~q;
always_ff @(posedge clk or negedge rst) begin
if(!rst)
q <= 1'b0;
else
q <= q_bar;
end
¿El compilador infiere un tipo de red para q_bar
ya que assign
ed? q
es de tipo variable ya que su asignación está en un bloque de procedimiento.
Otro ejemplo:
typedef logic [7:0] mem_t[3:0][3:0];
typedef wire [7:0] byte_wire_t;
La primera línea es legal, pero el simulador se queja de la segunda: "Cable de palabra clave SystemVerilog utilizado en texto incorrecto". Pero la gramática de typedef
es
typedef data_type type_identifier { variable_dimension } ;
| typedef [ enum | struct | union | class | interface class ] type_identifier ;
...
¿No es wire
un tipo de datos? ¿El tipo de red es un tipo de datos?