Forum: FPGA, VHDL & Co. FPGA Xilinx Anfänger-Frage


von Kai S. (hugstuart)


Lesenswert?

Hallo,
ich beschäftige mich seit Kurzem mit FPGAs und habe ein kleines Problem. 
Ich benutze das Nexys2-Board und will mit einem Taster eine LED toggeln. 
Dazu habe ich folgenden Code geschrieben:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity Taster is
5
  port (  CLK : in bit;
6
    LED : out bit);
7
end Taster;
8
9
architecture Behavioral of Taster is
10
11
begin
12
  process(CLK)
13
    begin
14
      if (CLK = '1' and CLK'event) then
15
        LED <= '1';
16
      end if;
17
    end process;
18
end Behavioral;

LED ist hier eine LED des Boards, und CLK ist ein Taster. Meine Idee 
war, den Taster quasi als Taktgeber zu nutzen und so bei steigender 
Flanke die LED anzuschalten. Das Toggeln ist in diesem Beispiel noch 
nicht realisiert. Leider bekommen ich beim kompilieren folgenden 
Hinweis:

WARNING:Xst:647 - Input <CLK> is never used. This port will be preserved 
and left unconnected if it belongs to a top-level block or it belongs to 
a sub-block and the hierarchy of this sub-block is preserved.

Kann mir da jemand weiterhelfen?

Danke!
Kai

von zachso (Gast)


Lesenswert?

poste doch mal bitte deine UCF die du benutzt.

von Christian R. (supachris)


Lesenswert?

Ist ja auch klar, dass das wegoptimiert wird. Denn die LED leuchtet in 
deinem Code nach der ersten CLK-Flanke eh immer. Gewöhn dir ganz ganz 
schnell an, eine Testbench für den Simulator zu schreiben, am besten 
noch bevor du den eigentlichen Code schreibst. Sonst fällst du bei VHDL 
schnell auf die Nase. Und dann benutze bitte möglichst std_logic statt 
bit und für den Takt rising_edge(CLK) sonst erlebst du alle möglichen 
Effekte im Simulator bzw. in der Hardware. Gut in deinem 
Einfachst-Beispiel ist das noch egal.
Was du noch brauchst ist eine Rücksetzbedigung für die LED, sonst ist 
die immer 1.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Kai S. schrieb:
> Leider bekommen ich beim kompilieren folgenden Hinweis:
> WARNING:Xst:647 - Input <CLK> is never used.

Sieh dir mal den RTL-Schaltplan (zu finden bei der Synthese) an. Du 
wirst sehen, dass der LED-ausgang einfach hart auf '1' verdrahtet wird 
(Screenshot). Warum?

Du gibst der LED keinen Defaultwert, und bei jedem Takt wird die LED auf 
'1' gesetzt. Deshalb gehen die Tools davon aus, dass dir auch der 
Defaultwert '1' angenehm sein könnte.

Die Vorgabe eines Defaultwerts wäre eine Abhilfe:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity Taster is
5
  port (  CLK : in bit;
6
          LED : out bit := '0');
7
end Taster;
8
9
architecture Behavioral of Taster is
10
begin
11
  process(CLK) begin
12
    if (CLK = '1' and CLK'event) then
13
      LED <= x;
14
    end if;
15
  end process;
16
end Behavioral;

Besser wäre aber gleich, ein lokales signal zu verwenden, das zu 
bearbeiten, und dann auf den Ausgang zuzuweisen:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity Taster is
5
  port (  CLK : in bit;
6
          LED : out bit);
7
end Taster;
8
9
architecture Behavioral of Taster is
10
signal x : std_logic := '0';
11
begin
12
  process(CLK) begin
13
    if (CLK = '1' and CLK'event) then
14
      x <= '1';
15
    end if;
16
  end process;
17
  LED <= x;
18
end Behavioral;
Das Ergebnis ist dann genau gleich wie vorher, aber du kannst das Signal 
problemlos lesen (z.B. zum toggeln).


Kai S. schrieb:
> Meine Idee war, den Taster quasi als Taktgeber zu nutzen
Das ist generell eine schlechte Idee, denn inzwischen weiß man vom 
"Tasterprellen": 1 Tatendruck = viele Taktimpulse.

BTW:
>> use IEEE.STD_LOGIC_1164.ALL;
Wenn du schon die std_logic einbindest, dann verwende sie auch. Und 
nicht das leidige Bit:
>> entity Taster is
>> port (  CLK : in bit;
>>          LED : out bit);

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
Noch kein Account? Hier anmelden.