mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilinx: IBUF, IBUFG, BUFG, OBUF?


Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
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;
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-Eins...

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.