¿Cómo se puede asignar una cadena sintetizable a una matriz de bytes en SystemVerilog?

0

Quiero inicializar una matriz de bytes (o cualquier otro tipo posible) a una cadena larga. Por ejemplo define: string str = "abcdefg" . Leí estos dos enlaces ( 1 & 2 ) pero no pude encontrar una manera simple. Estas son dos formas de código duro que encontré:

1_ byte str [0:7]; = '{"a", "b", "c", "d", "e", "f", "g", "h"}; Esta no es una forma apropiada, porque la cadena es muy larga en mi aplicación real y no puedo escribirla letra por letra.

2_ Usando el tipo de cadena: string str = "abcdefg" . Pero solo puede ser simulado y no es sintetizable. Quartus solo permite definir la cadena en función o tarea. Así que uso la función getStr() para inicializar la cadena:

typedef byte string_t[0:7];

function string_t getStr();
    int i;
    string tmp_str = "abcdefgh";            
    string_t str;

    for(i=0; i<8; i=i+1)
        str[i]=tmp_str[i];

    return str;
endfunction

y utilízalo en mi código:

byte str [0:7];
always @(posedge clk) begin 
     str = getStr(); // str will be "abcdefg" after getStr() return it.
     //The rest of the code...
end

Creo que debe haber una manera mejor y más simple para inicializar una cadena en SystemVerilog. Si lo sabes ayúdame. Gracias.

    
pregunta Soheil Shababi

1 respuesta

1

Debería poder hacer esto sin usar tipos de cadena. Solo usa un flujo de bits

string_t str = string_t'("abcdefg");

Esto funciona porque una cadena literal (lo que está encerrado entre "") se interpreta como un valor integral de 64 bits, y mientras la variable de destino tenga el mismo número de bits totales, los bits se transmitirán desde el 64 -bit integral a la matriz fija de 8 bits X 8 elementos elementos.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas