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.