En VHDL puedo escribir (0 downto 1)
y generaré un Vector con 0 elementos.
Quiero hacer esto para "alinear a la derecha" un campo en una unión, si es necesario. Samplecode:
module example #(int ITEMS=3)(output logic[4:0] result);
union {
logic [4:0] result;
struct {
logic systemstatus;
logic [4-1-ITEMS-1:0] padding;
logic [ITEMS-1:0] itemStatus;
} bitfield;
} myStruct;
endmodule;
Quiero generar una estructura que se parece aproximadamente a esto:
systemstatus | 0padder | item3 | item2 | item1 //ITEMS==3
systemstatus | item4 | item3 | item2 | item1 //ITEMS==4
Como puede ver, el campo de relleno desaparece para 4 elementos. Sin embargo, el código anterior no hará lo que quiero en el sistema verilog, ya que en lugar de crear un vector con 0 elementos, siempre crearé un vector con al menos un elemento ( [0:0]
), y cuando la expresión se vuelva negativa ( [-1:0]]
) Crearé un vector con dos elementos.
¿Hay una manera de dejar a padding
"decaimiento / degeneración" en un vector vacío? Sé que podría hacer que myStruct.bitfield.itemStatus
simplemente tenga el tamaño correcto y siempre tenga acceso a un subvector. Pero el punto es hacer la magia una vez en la estructura y no preocuparse más por el resto del código.