2016-04-16 12 views
3

Ich möchte ein Byte-Array (oder einen anderen möglichen Typ) zu einer langen Zeichenfolge initialisieren. Zum Beispiel definieren: string str = "abcdefg". Ich lese diese zwei Links (Link 1 & Link 2), aber ich konnte einen einfachen Weg nicht finden. Dies sind zwei harte Code-Möglichkeiten, die ich fand:Wie kann man einem Byte-Array in SystemVerilog einen synthetisierbaren String zuweisen?

1_ byte str [0:7]; = '{"a", "b", "c", "d", "e", "f", "g", "h"}; Dies ist kein geeigneter Weg, weil die Zeichenfolge ist sehr lang in meiner realen Anwendung und ich kann sie nicht schreiben, Brief für Buchstabe.

2_ Verwendung des Zeichenfolgetyps: string str = "abcdefg". Aber es kann nur simuliert werden und ist nicht synthetisierbar. Quartus erlaubt nur die Definition einer Zeichenkette in Funktion oder Aufgabe. So verwende ich die Funktion getStr() zur Initialisierung string:

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 

und verwenden Sie es in meinem Code:

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

Ich denke, es muss eine bessere und einfachere Möglichkeit für eine Zeichenfolge in SystemVerilog initialisieren. Wenn du es weißt, hilf mir. Vielen Dank.

+1

Die Answare ist in [dieser Link] (http://electronics.stackexchange.com/questions/228686/how-can-assign-a-synthesizable-string-to-a-byte-array-in-systemverilog/ 228779 # 228779) ... –

Antwort

0

Sie können eine gepackte Anordnung mit einem String initialisieren:

bit [0:87] BIT_ARRAY = "Hello world"; 

Ist das nah genug? Wenn Sie wirklich ein entpacktes Byte-Array benötigen, müssen Sie es konvertieren.

+0

Ja, ich muss das entpackte Byte-Array verwenden, weil ich nach der Initialisierung jeden Buchstaben der Zeichenfolge lesen muss, Buchstabe für Buchstabe. Bei Verwendung eines Byte-Arrays kann man einfach beispielsweise den 4. Buchstaben "byte viertel = BYTE_ARRAY [3]" lesen. Obwohl es nicht einfach ist, Buchstaben eines Bit-Arrays zu lesen (zum Lesen von 4. müssen wir Bits von 24 bis 31 lesen). Können Sie bitte Ihre Lösung mit der Beschreibung, wie Bit-Array in Byte-Array konvertieren können, abschließen? –

+0

Ich habe einen Weg gefunden, Bit-Array in Byte-Array umzuwandeln [hier] (https://books.google.com/books?id=fnnx2iH_4XYC&pg=PA56&lpg=PA56&dq=convert+bit+array+to+unpacked+byte+array&source= bl & OTS = du2LzKzgeK & sig = 2bdKOr5B7I6N945FSjx24JWwGZE & hl = en & sa = X & ved = 0ahUKEwjPw7yTp5PMAhUCEJoKHU0sDewQ6AEIIjAB # v = OnePage & q =% 20bit% 20array% 20to% 20unpacked% 20Byte% 20array & f = false) konvertieren, aber es ist nicht in Quartus synthetisiert werden kann, kann es nur in Modelsim simuliert werden . 'Bit [63: 0] bit_array = "abcdefgh";' ' Byte str [0: 7] = {{>> bit_array}};' –

+0

@saman Samani Ja, ich jener Streaming opeators gedacht, aber Ich dachte nicht, dass sie synthetisch sein könnten. Ich hätte gedacht, dass man in eine For-Schleife konvertiert, wenn @sharvil11suggested den Trick machen würde und synthetisch sein könnte (ich habe keinen Synthesizer zur Hand, um es zu überprüfen). –