Forum: FPGA, VHDL & Co. Counter mit Taster - Map fehlermeldung


von Simone E. (kristallfee)


Lesenswert?

Hallo zusammen!

Ich fange im Rahmen meines studiums an VHDL zu lernen.
Ich habe ein Xilinx Board (ml 605) mit einem Virtex-6 und benutze ISE 
12.4.

Ich habe angefangen kleine Module zu schreiben um mich ein wenig 
einzuarbeiten. Bei meinem zweiten Programm bekomme ich aber einen Fehler 
bei dem ich nicht weiss wie ich ihn beheben kann.

Das Programm soll auf einen Tastendruck hin einen Zaehler um eins 
erhoehen.
Ich moechte dieses Modul spaeter zum debuggen benutzen, indem ich es an 
signale dranhaenge und weiss wie oft (oder ueberhaupt) das signal 
ausgeloest wurde.

Hier mein Code:
1
 library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_UNSIGNED.ALL;
4
5
entity led is
6
    Port (input : in STD_LOGIC;
7
          LED : out  STD_LOGIC_VECTOR (3 downto 0));
8
end led;
9
10
architecture Behavioral of led is
11
12
signal counter : std_logic_vector (3 downto 0):="0000";
13
14
begin
15
LED <= counter ;
16
17
process(input, counter)
18
begin
19
20
if (input'event and input = '1') then 
21
counter <= counter +1;
22
23
else
24
counter <= counter ;
25
26
end if;
27
end process ;
28
29
end Behavioral;

LED ist auf vier leds gelegt, input auf einen taster auf dem board.

Die Synthese laeuft fehlerfrei, translate auch, aber bei Map bekomme ich 
folgende Fehlermeldung:

A clock IOB / BUFGCTRL clock component pair have been found
   that are not placed at an optimal clock IOB / BUFGCTRL site pair. The 
clock
   IOB component <input> is placed at site <IOB_X1Y169>. The 
corresponding
   BUFGCTRL component <input_BUFGP/BUFG> is placed at site 
<BUFGCTRL_X0Y0>. The
   clock IO can use the fast path between the IOB and the Clock Buffer 
if a) the
   IOB is placed on a Global Clock Capable IOB site that has the fastest
   dedicated path to all BUFGCTRL sites, or b) the IOB is placed on a 
Local
   Clock Capable IOB site that has dedicated fast path to BUFGCTRL sites 
in its
   half of the device (TOP or BOTTOM). You may want to analyze why this 
problem
   exists and correct it. If this sub optimal condition is acceptable 
for this
   design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf 
file to
   demote this message to a WARNING and allow your design to continue. 
However,
   the use of this override is highly discouraged as it may lead to very 
poor
   timing results. It is recommended that this error condition be 
corrected in
   the design. A list of all the COMP.PINs used in this clock placement 
rule is
   listed below. These examples can be used directly in the .ucf file to
   override this clock rule.
   < NET "input" CLOCK_DEDICATED_ROUTE = FALSE; >


Ich verstehe die Fehlermeldung nicht in Zusammenhang mit meinem Code. 
Ich benutze doch garkeine Clock.
In meiner ucf Datei stehen nur die fuenf Zuordnungen die ich schon 
mehrfach ueberprueft habe.

Kann mir jemand erlaeutern was es mit dieser Fehlermeldung auf sich hat?

Vielen Dank

Simone

von Stefan R. (stefripp)


Lesenswert?

Das ist eigentlich eine Warnung, dass den Clock Signal nicht richtig 
beschaltet wurde.

Das kommt daher, dass Input im Endeffekt auf den Clock-Eingang eines 
FlipFlops geroutet wird und somit für ISE zur Clock wird.

Schau dir den Schaltplan an, den ISE generiert hat. Wenn du dort deine 
Signale verfolgst, wird dir alles klar werden.

von Simone E. (kristallfee)


Lesenswert?

Hallo!

das bedeutet ich habe einen taktgesteuerten Flipflop bekommen (in der 
synthese), der input als clock benutzt, nungut, so war das nicht 
gedacht.

Im Programm erscheint dies aber als richtiger Fehler und nichtnur als 
Warnung. Diesen Fehler moechte ich auch nicht einfach ueberbruecken, wie 
es in den letzten Saetzen des Fehlers vorgeschlagen wird. Ich weiss ja 
nicht ob das noch andere Auswirkungen hat.

Waere es den besser dieses Modul mit einer Clock laufen zu lassen? 
Bringt mir das Vorteile ausser das ich diesen Fehler umgehe? (oder ist 
es im Prinzip egal?)


Dankeschoen

Simone

von Stefan R. (stefripp)


Lesenswert?

Du solltest auf jeden Fall die Taste entprellen und die clk-Eingänge der 
FFs mit einer echten Clock verbinden. Wenn der Takt mal schneller wird, 
bekommst du sonst sofort echte Probleme

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


Lesenswert?

Stefan R. schrieb:
> Wenn der Takt mal schneller wird,
> bekommst du sonst sofort echte Probleme
Die werden schon so kommen, wenn ein simpler Taster als Taktquelle 
verwendet wird. Ich würde sagen: dieser Zähler zählt pro Tastendruck 
deutlich mehr als nur einen Schritt...

Simone E. schrieb:
> das bedeutet ich habe einen taktgesteuerten Flipflop bekommen (in der
> synthese), der input als clock benutzt, nungut, so war das nicht
> gedacht.
Du hast es aber genauso beschrieben:
1
if (input'event and input = '1') then

> Waere es den besser dieses Modul mit einer Clock laufen zu lassen?
Es wäre nicht besser, dieses Modul mit dem einen Sytemtakt laufen zu 
lassen, sondern es wäre besser, jedes Modul mit (dem gleichen) Takt 
laufen zu lassen. Das nennt man dann ein "synchrones Design".

> Bringt mir das Vorteile ausser das ich diesen Fehler umgehe?
Ja. Nur so kann ein Design von den Tools sinnvoll verwaltet werden...

Hier nochmal meine Postulate für FPGA-Anfänger:
1
Ein Design (insbesondere ein Anfängerdesign) hat genau 1 Takt, 
2
der immer auf dieselbe Flanke aktiv ist. 
3
Es gibt keinen (und schon gar keinen asynchronen) Reset.
4
Externe Signale werden über 2 Flipflops einsynchronisiert.
5
Jede Abweichung von diesen Regeln muß fundiert begründet werden können.

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.