www.mikrocontroller.net

Forum: FPGA, VHDL & Co. verbinden von modulen


Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, sehe ich es richtig, daß wenn ich mehrere vhdl-module habe, die ich 
im Toplevel verbinde, die verbindungen zwischen den einzelnen modules 
als signale im toplevel definieren muss, oder gehts einfacher?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> oder gehts einfacher?
Nein, du brauchst für die Verbindungen zwischen zwei Komponenten 
Signale. Nur die Signale, die vom Top-Entity-Port raus- oder reingehen, 
kannst du direkt verbinden.

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schlechte Nachricht ;).
Hab ich mir doch fast gedacht.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Tipp: mach nicht so viele Komponenten, dann mußt du nicht so viel 
verdrahten...  ;-)

Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da gebe ich lkmiller vollkommen recht. Mit mehreren Komponenten ist es 
zwar meist etwas übersichtlicher, aber gerade bei Programmen die man auf 
einem CPLD und nicht auf einem FPGA implementieren will kann das dazu 
führen, dass man schnell an die Grenzen der Makrozellen kommt. Da du ja 
für die Module zusätzliche Ein- und Ausgänge benötigst werden hier bei 
einem CPLD Latches angelegt die wiederum Makrozellen verbraten.
Aber auf einem FPGA hat man ja meist genug Ressourcen, da spielt das 
keine Rolle ;-).
Gruß Phil

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Phil schrieb:
> Mit mehreren Komponenten ist es
> zwar meist etwas übersichtlicher, aber gerade bei Programmen die man auf
> einem CPLD und nicht auf einem FPGA implementieren will kann das dazu
> führen, dass man schnell an die Grenzen der Makrozellen kommt.

Das stimmt so nicht. Die Anzahl der verwendeten Makrozellen hängt nur 
von der Komplexität der Schaltung ab. Ob man diese in Module aufteilt 
oder alles in einen Prozess schreibt, ist komplett egal.

> Da du ja
> für die Module zusätzliche Ein- und Ausgänge benötigst werden hier bei
> einem CPLD Latches angelegt die wiederum Makrozellen verbraten

Quatsch.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Da du ja für die Module zusätzliche Ein- und Ausgänge benötigst werden
Das sind nur interne Signalnamen, die werden vom Synthesizer sofort 
wieder rausgeworfen und durch eine Verbindung ersetzt.

>>  hier bei einem CPLD Latches angelegt die wiederum Makrozellen verbraten
Latches werden ganz anders und meist eher aus Versehen angelegt...

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Verbinden habe ich auch noch eine Frage.
Es gibt zwei Varianten wie man eine Komponente einbinden kann.


Variante 1:
Wenn man eine Komponente einbindet schreibt man in die architecture.

architecture Behavioral of ps2_to_uart is

signal ................


--ich nenne es mal deklarieren
--
  COMPONENT Uart_8N1_TR
  PORT(
    clk : IN std_logic;
    load : IN std_logic;
    data_in : IN std_logic_vector(7 downto 0);          
    busy : OUT std_logic;
    tx : OUT std_logic
    );
  END COMPONENT;

begin 
-- hier wird eine Instanz davon in die Hardware eingebaut und 
-- mit Signalen verdrahtet
  Inst_Uart_8N1_TR: Uart_8N1_TR PORT MAP(
    clk => clk,
    load => load,
    data_in => data,
    busy => open,
    tx => TX );
--

Variante 2:
architecture Behavioral of ps2_to_uart is
-- man spart sich die Deklaration

begin
uart_receiver: entity work.Uart_8N1_RX
 PORT MAP(
    clk => clk50_in,
    store_out => uart_in,
    data_out => data_uart,
    rx => rx_in
  );


Ich bevorzuge die Varinate 2, weil wenn in der Entwicklung ein Port sich 
ändert, ist diese Änderung an zwei Stellen durchzuführen und der 
Quellcode wird außerdem kürzer.
Leider weiß ich über das Schlüsselwort work zu wenig. Welche Mechanismen 
werden hier verwendet und welche Randbedingungen hängen hier dran?

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
work ist einfach der Name der Bibliothek, in der die Komponente liegt. 
Alles, was man nicht explizit in eine eigene Bibliothek packt, landet in 
work.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.