Forum: FPGA, VHDL & Co. verilog wandlung vector zu array


von verilog (Gast)


Lesenswert?

Hallo,

Ich versuche gerade einen Vector [31:0] zu einem Array vom Typ 
[7:0][3:0] via generate zu wandeln ...
1
    reg [31:0] Vector;
2
    wire [7:0] Array [3:0];
3
 
4
    generate
5
    genvar g_index;
6
    for(g_index=0; g_index < 4; g_index = g_index + 1) begin
7
      assign Array[g_index] = Vector[(g_index+1)*8] : g_index*8];
8
      //assign Array[g_index*N +: N ] = Vector[g_index]; // +: also works
9
    end
10
    endgenerate

iverilog sagt:
test.v:12: syntax error
test.v:12: error: syntax error in continuous assignment
test.v:22: warning: extra digits given for sized hex constant.
test.v:22: warning: Numeric constant truncated to 32 bits.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wo sind die Zeilen 12 und 22?

von verilog (Gast)


Lesenswert?

Verzeigung, ich hatte noch einen andren Fehler. Hier mal das ganze 
Modul:
1
module jdoodle;
2
    reg [31:0] Vector;
3
    wire [7:0] Array [3:0];
4
5
    generate
6
    genvar g_index;
7
    for(g_index=0; g_index < 4; g_index = g_index + 1) begin
8
      assign Array[g_index] = Vector[(g_index+1)*8] : g_index*8];
9
      //assign Array[g_index*N +: N ] = Vector[g_index]; // +: also works
10
    end
11
    endgenerate 
12
13
    
14
    initial begin
15
        #1 Vector = 32'hC5B2B856;
16
        
17
        $monitor("%t,%h,%h,%h,%h",Array [0],Array [1],Array [2],Array [3]);
18
        #10 $finish;
19
    end
20
endmodule

Fehlermdelung (ausgeführt auf 
https://www.jdoodle.com/execute-verilog-online):
1
jdoodle.v:8: syntax error
2
jdoodle.v:8: error: syntax error in continuous assignment

von verilog (Gast)


Lesenswert?

Ah .. ich hab den Fehler gefunden, .. wenn man die Indexes richtig macht 
und sonst alle Schreibfehler rausnimmt, dann gehts auch :)
1
module jdoodle;
2
    reg [31:0] Vector;
3
    wire [7:0] Array [3:0];
4
5
    generate
6
    genvar g_index;
7
    for(g_index=0; g_index < 4; g_index = g_index + 1) begin
8
      assign Array[g_index] = Vector[(g_index+1)*8-1 : g_index*8];
9
      //assign Array[g_index*N +: N ] = Vector[g_index]; // +: also works
10
    end
11
    endgenerate 
12
  
13
    /*
14
      assign Array[0] = Vector[7 : 0];
15
      assign Array[1] = Vector[15 : 8];
16
      assign Array[2] = Vector[23 : 16];
17
      assign Array[3] = Vector[31 : 24];
18
*/
19
    
20
    initial begin
21
        #1 Vector = 32'hC5B2B856;
22
        
23
        $monitor("%t,%h,%h,%h,%h",$time,Array [0],Array [1],Array [2],Array [3]);
24
        #10 $finish;
25
    end
26
endmodule

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.