Forum: FPGA, VHDL & Co. ERROR:Place:1018


von Rolf R. (ultra-low)


Lesenswert?

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

von Rolf R. (ultra-low)


Lesenswert?

jetzt habe ich my_clock von D18 auf C9 umgelegt und es funktioniert. 
aber warum ging es mit D18 nicht ?
gruss

von Rick Dangerus (Gast)


Lesenswert?

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