mikrocontroller.net

Forum: FPGA, VHDL & Co. Aufbau eines VHDL-Projekts


Autor: Kim33 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgendes Problem:
Ich habe in VHDL mit ISE 11.1 mehrere, voneinander unabhängige Projekte 
beschrieben, wie z.B. einfacher Counter, Sinusgenerator,...
Nun möchte ich auf meinem Spartan 3E die Switch-Schalter nutzen, um 
zwischen diesen Projekten umherzuschalten und jeweils einen anderen 
Ausgang auszugeben.
Meine Frage ist sehr prinzipieller Natur: Wie kann ich so ein Projekt in 
ISE aufbauen. Ich stelle mir dabei ein Top-Model vor und viele 
Untermodelle, auf die das Top-Model zugreifen kann.
Doch wie kann ich Models für das Top-Model sichtbar machen? Oder muss 
ich dazu Packages benutzen?

Ich hoffe es kann mir jemand helfen, und bin für jede Hilfe offen.

Gruß

Autor: jaja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du brauchst ist component und portmap

Autor: Kim33 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank schon mal für die Antwort. Jetzt kann ich mir schon ein 
bisschen besser vorstellen, wie ich das Projekt aufzubauen habe. Jedoch 
habe ich noch Probleme mit der Syntax.
Mein main-Code sieht bis jetzt so aus:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity main is
    Port ( CLK : in  STD_LOGIC;
        SW0 : in  STD_LOGIC;
           SW1 : in  STD_LOGIC;
           SW2 : in  STD_LOGIC;
           SW3 : in  STD_LOGIC;
           WAVE_OUT : out  STD_LOGIC_VECTOR (7 downto 0));

end entity main;

architecture Behavioral of main is

component Zaehler is
    Port ( clk   : in  STD_LOGIC;    
           counter_out : out  STD_LOGIC_VECTOR (7 downto 0));
end component Zaehler;

component generator is
  Port (   CLK   : in  STD_LOGIC;
        YOUT  : out STD_LOGIC_VECTOR(7 downto 0));
end component generator;

for all: Zaehler use entity WORK.Zaehler(Behavioral);
for all: generator use entity WORK.generator(Behavioral);

begin
  process(CLK)
  begin
  if SW0 = '1' then
  Zaehler1: zaehler 
  port map(CLK => CLK, counter_out => WAVE_OUT);
  
  else then
  PRBS: generator
  port map(CLK => CLK, YOUT => WAVE_OUT);

  end if;
end process;
end Behavioral;

Dabei liegt das Problem in der If-Anweisung, denke ich. Ich bekomme den 
Fehler:
ERROR:HDLParsers:808 - Line 59. = can not have such operands in this 
context.
ERROR:HDLParsers:164 - Line 61. parse error, unexpected PORT, expecting 
OPENPAR or TICK or LSQBRACK

Wie kann ich diesen Fehler verhindern, und auf die jeweilige Stellung 
der Switche ein anderes Signal auf den Ausgang geben?

Grüße
Kim

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht das nicht. Alles, was du instanziierst, muss zur Kompile-Zeit 
feststehen. Wenn du das umschalten willst, musst du alle Module parallel 
in den FPGA implementieren und nur den Ausgang mit einem Multiplexer 
umschalten.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so macht man das nicht, port maps macht man nicht in einem process.

Du könntest es so machen:

Alles instantiieren, und dann die Ausgaenge deiner Module auf den output 
multiplexen

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zwei doofe ein gedanke

Autor: Kim33 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar. Vielen Dank für die Tipps. Ich werde es so versuchen!

Grüße
Kim

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ansonsten wenn´s zur Synthese-Zeit bekannt ist, ähnlich wie #ifdef unter 
C kann man das mit "generate" machen. Aber das geht nicht mit deinen 
Schaltern.

Autor: Kim33 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön, das funktioniert soweit. Das main-Modul wird so zwar etwas 
größer als ich mir das so vorgestellt hatte, aber seinen Zweck erfüllt 
es ;-).

Grüße

Autor: Matthias G. (mgottke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ könnte man auch Multi-Boot-System erstellen. Daher: Man 
erstellt mehrere Designs die alle im Config-PROM abgelegt werden. Man 
kann dann, über den FPGA gesteuert, das jeweilige Design laden. Das ist 
aber definitiv nichts für Anfänger.

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.