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ß
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:
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.STD_LOGIC_ARITH.ALL; |
4 | use IEEE.STD_LOGIC_UNSIGNED.ALL; |
5 | |
6 | |
7 | ---- Uncomment the following library declaration if instantiating
|
8 | ---- any Xilinx primitives in this code.
|
9 | --library UNISIM;
|
10 | --use UNISIM.VComponents.all;
|
11 | |
12 | entity main is |
13 | Port ( CLK : in STD_LOGIC; |
14 | SW0 : in STD_LOGIC; |
15 | SW1 : in STD_LOGIC; |
16 | SW2 : in STD_LOGIC; |
17 | SW3 : in STD_LOGIC; |
18 | WAVE_OUT : out STD_LOGIC_VECTOR (7 downto 0)); |
19 | |
20 | end entity main; |
21 | |
22 | architecture Behavioral of main is |
23 | |
24 | component Zaehler is |
25 | Port ( clk : in STD_LOGIC; |
26 | counter_out : out STD_LOGIC_VECTOR (7 downto 0)); |
27 | end component Zaehler; |
28 | |
29 | component generator is |
30 | Port ( CLK : in STD_LOGIC; |
31 | YOUT : out STD_LOGIC_VECTOR(7 downto 0)); |
32 | end component generator; |
33 | |
34 | for all: Zaehler use entity WORK.Zaehler(Behavioral); |
35 | for all: generator use entity WORK.generator(Behavioral); |
36 | |
37 | begin
|
38 | process(CLK) |
39 | begin
|
40 | if SW0 = '1' then |
41 | Zaehler1: zaehler |
42 | port map(CLK => CLK, counter_out => WAVE_OUT); |
43 | |
44 | else then |
45 | PRBS: generator |
46 | port map(CLK => CLK, YOUT => WAVE_OUT); |
47 | |
48 | end if; |
49 | end process; |
50 | 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
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.
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
Alles klar. Vielen Dank für die Tipps. Ich werde es so versuchen! Grüße Kim
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.
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.