Hallo, ich versuche mich gerade in VHDL und in Xilinx FPGA (Digilent Board mit XC2S200E, ISE10.1) einzuarbeiten. Wann brauche ich eigentlich IBUF, oder BUFG? Wo ist der Unterschied zwischen IBUF, IBUFG, BUFG? Wo definieren, in VHDL oder in UCF? Ach ja und ich glaube ich habe auch noch OBUF gelesen. Wozu brauch ich den? Gruß Helmut
> Wann brauche ich eigentlich IBUF, oder BUFG? Das sind alles irgendwelche Treiber. BUF = Buffer I = In O = Out G = Global (Takt) > Wo definieren, in VHDL oder in UCF? IdR verwendet ISE automatisch den richtigen Buffer. Du selber definierst nur, ob und wo du einen Eingang/Ausgang willst (IBUF/OBUF). ISE Erkennt dann selber, ob das ein Takteingang ist (BUFG) > Ach ja und ich glaube ich habe auch noch OBUF gelesen. Die exakte Bedeutung und Verwendung von OBUF IBUF OBUFG IBUFG BUFG wird im libraries guide erklärt. Den findest du über doc/usenglish/books/manuals.pdf im ISE Verzeichnis
Hallo Lothar, "IdR verwendet ISE automatisch den richtigen Buffer." Das hört sich ja schon mal gut an. Danke. Ich habe als Übung einen Zähler mit Takt/CLK1) und Reset(BTN1) programmiert. Beide Pins(CLK1, BTN1) sind an globale Clock-Pins angeschlossen (GCK0, GCK1). Der Zähler funktioniert. Warum bekommt nur BTN1 bei der Synthese einen IBUF zugewiesen? View Technoology Schematic: CLK1 --- |I O| ---- |CLK der Flipflops| BTN1 --- |IBUF| ---- |CLR Reset der Flipflops| UCF-File: NET "BTN1" LOC = "P77"; NET "CLK1" LOC = "P80"; NET "LED1" LOC = "P69"; NET "LED2" LOC = "P71"; NET "LED3" LOC = "P49"; NET "CLK1" TNM_NET = CLK1; TIMESPEC TS_CLK1 = PERIOD "CLK1" 15 ns HIGH 50%; VHDL-Code: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity led_cnt is Port ( CLK1 : in STD_LOGIC; -- 50MHz BTN1 : in STD_LOGIC; -- button-1 LED1 : out STD_LOGIC; -- LED-1 LED2 : out STD_LOGIC; -- LED-2, P68, A4 LED3 : out STD_LOGIC); -- LED-2, P68, A4 end led_cnt; architecture Behavioral of led_cnt is signal counter: std_logic_vector(23 downto 0) := "0000"&"0000"&"0000"&"0000"&"0000"&"0000"; signal counter2: std_logic_vector(3 downto 0) := "0000"; signal abc: STD_LOGIC; begin process (CLK1, BTN1) begin if BTN1='1' then counter <= "000000000000000000000000"; --null; else if CLK1='1' and CLK1'event then counter <= counter + 1; end if; end if; end process; LED1 <= counter(23); process (BTN1) begin if BTN1='1' and BTN1'event then counter2 <= counter2 + 1; end if; end process; LED2 <= counter2(0); abc <= BTN1; LED3 <= abc; end Behavioral;
Helmut schrieb: > Ich habe als Übung einen Zähler mit Takt/CLK1) und Reset(BTN1) > programmiert. Beide Pins(CLK1, BTN1) sind an globale Clock-Pins Oh oh... also das wird vermutlich so nicht funktionieren. Der Taster Prellt und dann hast du ein nahezu zufälliges Verhalten > angeschlossen (GCK0, GCK1). Der Zähler funktioniert. Warum bekommt nur > BTN1 bei der Synthese einen IBUF zugewiesen? Weil die Synthese erkannt hat das du einen globalen Takt (CLK) hast und der "Button" ein Asyncrones Ereignis ist. Hier:
1 | process (CLK1, BTN1) |
2 | begin
|
3 | if BTN1='1' then |
4 | counter <= "000000000000000000000000"; --null; |
5 | else
|
6 | if CLK1='1' and CLK1'event then |
7 | counter <= counter + 1; |
8 | end if; |
9 | end if; |
10 | end process; |
Hier ist BTN1 der (asyncrone) Reset also ein normaler 'input'. Schau dir mal Lothas Seite an besonders: Entprellen: http://www.lothar-miller.de/s9y/categories/5-Entprellung und einsyncronisieren: http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren
@Lothar und Laubi, Vielen Dank für eure Hilfe und die Links auf Lothar's Seite. Ich sollte vielleicht doch erst mal das VHDL-Buch durchlesen. "Lehrbuch Digitaltechnik, Eine Einführung mit VHDL, Jürgen Reichardt" Hab gestern auch noch feststellen müssen, dass in der neuen ISE 11 mein Spartan-2E FPPGA nicht mehr unterstützt wird. Musste dann wieder die 10.1 installieren. Vielleicht sollte ich mir doch besser ein Spartan-3 Board zulegen. Leider ist das Spartan-6-Board noch zu teuer. Gruß Helmut
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.