Verilog - ¿Puede definir un segmento de bits?

3

¿Puedes define un trozo de bits en Verilog?

Por ejemplo, esto es posible:

'define opcode 5:3  // is this possible?

reg [ 7:0 ] a, b;

...

if ( a[ 'opcode ] == someValue )  // a[5:3]

    doStuff

if ( b[ 'opcode ] == someValue )  // b[5:3]

    doStuff
    
pregunta Jet Blue

2 respuestas

6

Puede 'define casi cualquier texto que desee. Tendría que usar a['opcode] con la marca inversa.

SystemVerilog te da algunas otras opciones.

La construcción let declara un nombre para una expresión.

let opcode = a[5:3];
...
if (opcode==someValue)

Puedes usar una estructura empaquetada.

struct packed {
   logic [1:0] field1;
   logic [2:0] opcode;
   logic [2:0] field2;
} a;

Ahora puedes referirte a a.opcode como as a[5:3] .

    
respondido por el dave_59
4

Sí, puedes.

Pero probablemente sea más limpio y fácil simplemente dividir el registro en campos usando cables:

wire [2:0] a_opcode = a[5:3];

if (a_opcode == someValue) ...

¿De cuántos registros diferentes extraerás los códigos de operación?

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas