hallo das ist mein erster vhdl code und schon gibts probleme. entity test is Port ( my_clock : in STD_LOGIC; my_result : out STD_LOGIC_VECTOR (3 downto 0)); end test; architecture Behavioral of test is signal my_count_temp : STD_LOGIC_VECTOR(3 downto 0) := "0000"; begin process(my_clock) begin if my_clock'event and my_clock = '1' then my_count_temp <= my_count_temp + 1; end if; end process; my_result <= my_count_temp; end Behavioral; ich möchte dass bei jedem tastendruck von Push-Button der zähler um eins erhöht wird und an LEDs ED7-ED4 angezeigt wird. nun bekomme ich immer den folgenden fehler: ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB /. my_clock habe ich an Push-Button Switch/BTN_WEST/D18. ich verstehe nicht warum ich my_clock an D18 nicht legen kann. ich benutze spartan-3e kit von xilinx. und wo hätte ich nachschlagen müssen dass mir dieser fehler nicht unterlaufen würde ? gruss
jetzt habe ich my_clock von D18 auf C9 umgelegt und es funktioniert. aber warum ging es mit D18 nicht ? gruss
Es ist keine gute Idee/ kein guter Stil, ein Clocksignal per Hand zu erzeugen. Clocksignale für FPGAs liegen in der Größenordnung von 1..60MHz (intern auch mehr). Clocksignale müssen im FGPA aufwendig verteilt werden, deswegen gibt es spezielle Eingangspins dafür. Deinen Taster musst Du übrigens noch entprellen. Dafür läßt sich z.B. alle 5 ms ein clock-enable Signal erzeugen. Mit diesem liest Du den Taster in ein Schieberegister ein und guckst, ob dort das Muster "011" drin steht. Wenn ja, hast Du Deinen Tastendruck erkannt und kannst diesen weiterverarbeiten. Rick P.S.: Hier noch ein paar Verbesserungsvorschläge:
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.numeric_std.all; -- Standardbibliothek |
4 | |
5 | entity test is |
6 | Port ( my_clock : in STD_LOGIC; |
7 | my_result : out STD_LOGIC_VECTOR (3 downto 0)); |
8 | end test; |
9 | |
10 | architecture Behavioral of test is |
11 | signal my_count_temp : unsigned(3 downto 0) := "0000"; -- damit kann man "rechnen" |
12 | begin
|
13 | process(my_clock) |
14 | begin
|
15 | if rising_edge(my_clock) then -- leichter lesbar |
16 | my_count_temp <= my_count_temp + 1; |
17 | end if; |
18 | end process; |
19 | my_result <= std_logic_vector(my_count_temp); -- casting |
20 | end Behavioral; |
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.