verilog wandlung vector zu array

Gast #5275819
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.
Gast #5276048
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
Gast #5276057
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren