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.