2012-03-05 32 views
9

oluşturun.artırım yapılması Birden Genvars ben Verilog çok aşamalı karşılaştırıcı oluşturmak çalışıyorum ve bir oluşturmak tek döngüde birden genvars artırmak için nasıl bilemiyorum Bildirimi

genvar i,j; 
//Level 1 
generate 
    j=0; 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    j = j+2; 
    end 
endgenerate 

Ve alma aşağıdaki hatayı: Aşağıdaki çalışıyorum

Error-[SE] Syntax error 
    Following verilog source has syntax error : 
    "encoder.v", 322: token is '=' 
    j=0; 

herkes aynı üretmek açıklamada birden genvars artırmak için nasıl biliyor? Ya da en azından eşdeğer bir işlevsellik olsun? ci1tc yarısı derinliğe sahiptir ve istediğiniz varsayarsak

cevap

5

aşağıdaki çalışması gerekir ci1[0] = min(tc[0], tc[1]), ci[1] = min(tc[2], tc[3]) vb ki: Bir döngü oluşturmak için bir örtülü yaratır

module st_genvar(); 

    int ci1 [0:127]; 
    int tc [0:255]; 

    function int minw(int i1, int i2); 
     if(i1 < i2) 
     minw = i1; 
     else 
     minw = i2; 
    endfunction 

    genvar i; 
    //Level 1 
    generate 
     for (i=0;i<128;i=i+1) 
     begin: level1Comp 
      assign ci1[i] = minw(tc[i*2],tc[i*2+1]); 
     end 
    endgenerate 

endmodule 
11

Anyone know how to increment multiple genvars in the same generate statement?

Buna izin verilmez Döngü değişkeni için localparam ifadesi ve döngüdeki öğeleri yalnızca bu yerel pakete dayalı olarak detaylandırır. Bu, genvar bir yerel param olarak bildirilmişse, döngü içindeki herhangi bir öğenin döngü dışında geçerli olması gerektiği anlamına gelir.

genvar i,j; 
//Level 1 
generate 
    j=0; 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    j = j+2; 
    end 
endgenerate 

Eğer döngü içinde açık bir parametresi kullanılarak genvar bağımlı bir 'sabit' değer yaratabilecek Bu durumda

//Done for each value of i 
genvar j; 
localparam integer i = i_for_each_iteration; 

j=0; //Not valid outside a procedural context so modelsim complains 
assign ci1[i] = minw(tc[j],tc[j+1]); 
j = j+2; //Also not valid outside a procedural context 

olur.

genvar i; 
//Level 1 
generate 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    localparam integer j = i*2; 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    end 
endgenerate 
+0

çok ilginç! Yerel cihaz donanımda bir şey mi yaratıyor? – Adam

+1

Hayır. Yerel tasarımlar, tasarım detaylandırması için kullanılan sabitlerdir. –