2012-03-05 10 views
9

Próbuję utworzyć wielostopniowy komparator w verilog i nie mogę wymyślić, jak zwiększyć liczbę genew w jednej pętli. Próbuję następujący:Inkrementacja wielu genvarów w Verilog Wygeneruj oświadczenie

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 

I otrzymuję następujący błąd:

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

Każdy wie, jak zwiększyć wielu genvars w tym samym generować zestawienia? Lub przynajmniej uzyskać równoważną funkcjonalność?

Odpowiedz

5

Zakładając, że ci1 ma połowę głębokości tc i chcesz, powiedzmy ci1[0] = min(tc[0], tc[1]), ci[1] = min(tc[2], tc[3]) etc dodaje powinno działać:

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?

To nie jest dozwolone, ponieważ generują dla pętli tworzy niejawny Instrukcja localparam dla zmiennej pętli i rozwija elementy w pętli oparte tylko na tym localparam. Oznacza to, że wszystkie elementy wewnątrz pętli muszą być ważne poza pętlą, jeśli genvar został zadeklarowany jako localparam.

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 

staje

//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 

W tym przypadku można utworzyć „stałą” wartość zależną od genvar wykorzystaniem wyraźnego parametru wewnątrz pętli.

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

bardzo interesujące! Czy localparam tworzy coś w sprzęcie? – Adam

+1

No. Localparams są stałymi, które są używane do opracowania projektu. –

Powiązane problemy