2013-03-06 10 views
11

Czy możliwe jest tworzenie warunkowo modułu w verliog?Warunkowe tworzenie modułu verilog

przykład:

if (en==1) 
    then module1 instantiation 
else 
    module2 instantiation 
+0

Jeśli znalazłeś odpowiedzi na swoje pytanie, możesz je zaakceptować. To daje ludziom motywację, by później odpowiedzieć na więcej twoich pytań. – Morgan

Odpowiedz

4

Można użyć dyrektywy kompilatora jak

`define FOO 
`ifdef FOO 
    module1 ... 
`else 
    module2 ... 
`endif 

aby wybrać konkretyzacji w czasie kompilacji.

Jeśli pytasz, czy możesz utworzyć moduł na podstawie wartości przewodowej, nie możesz tego zrobić.

4

Nie można tego zrobić w czasie wykonywania, ponieważ opisuje się sprzęt, którego nie można zmienić w locie. Możesz włączyć lub wyłączyć funkcję oszczędzania energii, ale nie możesz jej zatrzymać. Zakładając, że chcesz poprawić ponowne użycie lub konfigurowalność bloków:

Często używane są techniki poprzedzające kompilację, jak również "definicje" (tyk).

Będą składać się z skryptu Perl, ruby ​​itp., Który analizuje plik szablonu.

My Previous answer using ruby scripts and templates.

20

IEEE Std 1364-2001:

12.1.3.3 generowania uwarunkowane generowania uwarunkowane jest czy else, jeżeli generują konstrukt pozwala na moduły, użytkownika elementarnych operacji, Verilog elementarnych operacji bramy ciągły przypisania, bloki początkowe i są zawsze blokami, które mają być warunkowo tworzone w innym module w oparciu o wyrażenie, które jest deterministyczne w momencie opracowania projektu: .

przykład podano w LRM:

module multiplier(a,b,product); 
parameter a_width = 8, b_width = 8; 
localparam product_width = a_width+b_width; // can not be modified 
// directly with the defparam statement 
// or the module instance statement # 
input [a_width-1:0] a; 
input [b_width-1:0] b; 
output [product_width-1:0] product; 

generate 
    if((a_width < 8) || (b_width < 8)) 
     CLA_multiplier #(a_width,b_width) u1(a, b, product); 
     // instantiate a CLA multiplier 
    else 
     WALLACE_multiplier #(a_width,b_width) u1(a, b, product); 
     // instantiate a Wallace-tree multiplier 
endgenerate 
// The generated instance name is u1 

endmodule 
+0

, czy to syntezator stanie? – chitranna

+0

@ new2android Myślę, że to jest, ale nie jestem tego pewien. W każdym razie PO nie pytał o to. –

+4

Instrukcje generowania są używane do definiowania/opisywania sprzętu w czasie kompilacji. Są syntezowalne dla danej konfiguracji. – Morgan