2-Bit Komparator

Xilinx Spartan3

Hier zeige ich euch wie ihr zwei 1-Bit Komparatoren verbinden könnt um einen 2-Bit Komparator zu erzeugen.

-> Die Schaltung:

Die Schaltung besteht aus zwei 1-Bit Komparatoren die durch ein Und-Gatter verbunden sind. Dem entsprechend wird der Ausgang erst High wenn beide Komparatoren einen High-Pegel ausgeben.
Die Wahrheitstabelle der Schaltung verdeutlicht dies:

B1B0A1A0Q
00001
00010
00100
00110
01000
01011
01100
01110
10000
10010
10100
10110
11000
11010
11100
11111

Der Einfachheit halber greifen wir bei der Schaltung auf den bereits vorhandenen 1-Bit Komparator zurück.
Damit ersparen wir uns einiges an Arbeit.

-> Der Code:

Als erstes legt ihr ein Projekt mit dem Namen Zwei_Bit_Komparator an (siehe hier) und erstellt ein Source File (siehe hier).
Allerdings füllt ihr das Fenster für die Modul Definition so aus:

2_Bit_Komparator

Dadurch werden zwei 2-Bit Busse am FPGA (A und B) erzeugt.
Mit den Zahlen MSB und LSB gebt ihr an wie groß der Bus sein soll. Da ich für MSB 1 und für LSB 0 eingetragen habe, entsteht automatisch ein 2-Bit Bus.
Anschließend bestätigt ihr wieder mit „Next“ und anschließend mit Finish.
Als nächstes erstellt ihr noch ein Source File mit dem Namen Ein_Bit_Komparator und den 1-Bit Eingängen A und B, sowie dem 1-Bit Ausgang Q.
In dieses Source File kopiert ihr nun den Code vom 1-Bit Komparator.
Das ganze sollte dann bei euch so aussehen:

2_Bit_Komparator(2)

Nun könnt ihr auf das 1-Bit Komparator Modul zugreifen.
Hierfür muss in dem Deklarationsteil der Architektur eine neue Komponente angelegt werden.
Diese Komponente stellt die Verlinkung zu dem Modul her. Eine Komponente ist dabei ähnlich aufgebaut wie eine Architektur:

component [Name]
   Generic;
   Port;
end component;

Unsere Komponente für den 1-Bit Komparator sieht dem entsprechen so aus:

Es werden zwei Einänge (I1 und I2), sowie ein Ausgang (O1) deklariert.
Mit dieser Zeile:

kann ich nun auf die Komponente zugreifen.
U1 ist dabei der Name der Instantiierung und kann beliebig gewählt werden.
Ein_Bit_Komparator ist der Name des Source Files in dem die Funktion dieser Komponente abgelegt ist und mit

weise ich der Komponente die Ein- und Ausgänge meiner Schaltung zu.
Dem Eingang I1 der Komponente Ein_Bit_Komparator wird also der Eingang A(0) (das erste Bit von meinem Bus A) meiner Schaltung zugewiesen.
Dasselbe geschieht mit B(0) und dem Signal P0 wird der Ausgang O1 meiner Komponente zugewiesen.
Bei der Zuweisung MÜSST ihr unbedingt die Reihenfolge, wie ihr sie bei der Komponentendeklaration angegeben habt, einhalten.
Das selbe passiert jetzt mit der Zeile:

Allerdings habe ich hier als Eingänge A(1) und B(1) (das zweite Bit von den Bussen) gewählt und als Ausgang das Signal P1.
In dem Projektexplorer sollte nun folgendes stehen:

2_Bit_Komparator(3)
Jetzt müssen die Signale P0 und P1 noch miteinander verknüpft und am Ausgang ausgegeben werden.
Da der Ausgang nur High sein soll wenn entweder A(1), A(0), B(1) und B(0) High oder Low sind, müssen die Signale P0 und P1 verundet werden:

Anschließend kann die Schaltung synthetisiert und implementiert werden.
Wie dies gemacht wird seht ihr hier.
Nach einer erfolgreichen Synthese und Implementierung könnt ihr die Schaltung testen (die unterste LED ist der Ausgang des Komparators):

2_Bit_Komparator(4)
2_Bit_Komparator(5)

 

Dokumentation:

 

-> Zurück zum FPGA + VHDL Tutorial

4 thoughts on “2-Bit Komparator
  1. Hallo

    Ich blicke die Verbindung der beiden Ein-Bit-Komparatoren nicht: Angenommen, A(0) und B(0) nehmen logisch 0 an und A(1) und B(1) nehmen logisch 1 an. Dann wird P0 logisch 1 und P1 wird logisch 1 und deren Verundung gibt am Ausgang des 2-Bit-Komparators auch logisch 1. Das entspricht aber doch nicht der Wahrheitstabelle? Ich blicke nicht, warum nicht noch ein dritter Ein-Bit-Komparator eingebaut wird, der A(0) und A(1) oder B(0) und B(1) vergleicht und mit dem Gesamtergebnis verundet wird, tschuldigung :D

    • Hey,

      jeder einzelne Komparator vergleicht eine Stelle der Zahl.
      Erst wenn alle Komparatoren eine „1“ ausgeben, sprich jede Stelle der beiden Zahlen gleich ist, wird der Ausgang auf „1“ gesetzt :)

      Gruß
      Daniel

      • In der sechsten Zeile der Wahrheitstabelle am Beginn dieser Seite sind die Zahlen A und B gleich, das Ergebnis der Tabelle ist false, der FPGA würde aber true rausgeben, ich denk irgendwie die ganze Zeit, bei den Kombinationen 1010 und 0101 widersprechen sich FPGA und Wahrheitstabelle :D

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.