2009-09-04 11 views
10

Czy możemy mieć tablicę wystąpień dla modułu niestandardowego?Czy możemy mieć zestaw niestandardowych modułów?

Na przykład: możemy mieć input [15:0] a; - to tworzy autobus. Czy możemy zrobić to samo dla niestandardowych modułów, tj. DFF [15:0] d;, gdzie DFF jest niestandardowym modułem? Tutaj zamierzam utworzyć 16 wystąpień modułu DFF.

Odpowiedz

8

nie jest możliwe, aby to zrobić bezpośrednio (aktualizacji: teraz po odebraniu mark4o za wiem, że istnieje sposób), ale co można zrobić to za pomocą instrukcji generate aby utworzyć wiele instancji modułu niestandardowego i hakiem ich do twoich sygnałów. Powinien wyglądać mniej więcej tak:

wire DFF_i[15:0]; 
wire DFF_o[15:0]; 

generate 
    genvar i; 
    for (i=0; i<15; i=i+1) begin : dff 
    custom i_custom(
     .clk(clk) 
     ,.input(DFF_i[i]) 
     ,.output(DFF_o[i]) 
    ); 
    end 
endgenerate 

Inaczej prawdopodobnie istnieją pewne możliwości podczas syntezy do stosowania właściwej moduły niestandardowe, ale nie jestem tam ekspertem.

zdrowie, Daniel

20

Verilog tablice przypadkach dodano Verilog-1995 (IEEE 1364/95). Mogą być używane z bramkami, zdefiniowanymi przez użytkownika prymitywami i modułami. Generatory, które są potężniejsze, ale także bardziej złożone, zostały dodane w Verilog-2001.

Oto przykład tablicy instancji Module

DFF d[15:0] (clk, DFF_i, DFF_o); 

dla każdego połączenia portu, jeżeli rozmiar, który pasuje do tego parametru formalnego to jest połączone z każdym przypadku. W przeciwnym razie każda instancja jest połączona z częścią-select (lub bit-select) wyrażenia.

+0

Cześć Mark4o, fajnie, nie wiedziałem o tym! Nauczyłem się czegoś nowego :) Pozdrawiam, Daniel – danielpoe

+0

Czy te moduły są tworzone równolegle lub jedno po drugim? – eldos

+0

@eldos: Jeśli rozmiar połączenia portu odpowiada parametrowi formalnemu, jest on połączony równolegle z każdą instancją. Za pomocą wektora możesz połączyć instancje seryjnie. – mark4o