Forum: FPGA, VHDL & Co. vhdl n-Bit Komparator


von Jele D. (jele_d)


Angehängte Dateien:

Lesenswert?

ich habe versucht die Fragen zu beantworten , aber ich kann mir 
vorstellen , dass die Frage 2 ist falsch oder etwas fehlt noch , Danke 
im Voraus


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

entity KOMPARATOR_1_BIT is
port (
E,A,B: in std_logic;
Z2,Z1,Z0: out std_logic
)
end entity KOMPARATOR_1_BIT ;
architecture VERGLEICHER of KOMPARATOR_1_BIT is
begin
Z2 <= E AND A AND (NOT (B) );
Z1 <= ( E AND ( NOT (A)) AND (NOT (B))) OR  ( E AND A AND B );
Z0 <= E AND (NOT (A) AND B);
end VERGLEICHER ;

A )
 entity KOMPARATOR_4_BIT is
port
( X,Y : in std_logic_vector (3 downto 0);
 GROESSER. KLEINER , GLEICH : out std_loic ;
) ;
end entity KOMPARATOR_4_BIT ;
architecture VERGLEICHER of KOMPARATOR_4_BIT is


component KOMPARATOR_1_BIT is
port (
E,A,B: in std_logic;
Z2,Z1,Z0: out std_logic ;
);
end component KOMPARATOR_1_BIT ;
signal C : std_logic_vector(3 downto 0);
signal GR: std_logic_vector ( 3 downto 0);
sinal Kl : std_logic_vector ( 3 downto 0);

begin
1:  KOMPARATOR_1_BIT portmap (‚1 ‚), X(3) , Y(3) , GR(3),   C(0),Kl(3));
2: KOMPARATOR_1_BIT portmap ( C(0), X(2) , Y(2) , GR(2) , C(1), K(2));
3: KOMPARATOR_1_BIT portmap (  C(1), X(1), Y(1), GR(1),     C(2), K(1));
4: KOMPARATOR_1_BIT portmap ( C(2) , X(0), Y(0), GR(0),  GLEICH , 
Kl(0));


b ) mit einer n Bit Schleife
am Anfang
die generic Anweisung
  generic
  (
   N: natural :=6
  );

 begin
E <= ‚1‘;
SCHLEIFE: for I in 0 to N-1 generate
          KO: KOMPARATOR_N_BIT port map ( C(I), X( I), Y(I), GR(I), 
C(I-1), Kl(I));
 end generate ;
GLEICH <= C( 3);
KLEIN <= GR(2) OR
GROESSER <=
end architecture VERHALTEN ;

: Verschoben durch Moderator
von Mork vom Ork (Gast)


Lesenswert?

Ehrlich gesagt, hätte ich jetzt mal den n-Bit Komparator in RTL 
hinschreiben können. Der scheint mir aber so plausibel, wenngleich ich 
gerne wüsste, wie der E genau verrechnet wird und warum der beim 
obersten auf 1 liegen muss.

Was die Schleife angeht, hätte ich keine VHDL-Schleife erwartet, die 
eine Struktur aufbaut, sondern eine auszuführende Schleife, die die 
Aufgabe sequenziell löst. Was gemeint war, weis aber nur der 
Aufgabensteller.

Ob die Schleife funktioniert, sagt dir der Simulator deines Vertrauens. 
Der zieht diese gesamte Struktur auf und zeigt sie auch explizit. Und 
natürlich kann er es durchsimulieren.

von Achim S. (Gast)


Lesenswert?

Du solltest mit Simulator oder Synthesetool zumindest schon mal die 
groben Schreib- bzw. Syntaxfehler finden und korrigieren. Das sollte 
wenigstens Fehler wie die folgenden beheben:

Jele D. schrieb:
> 1:  KOMPARATOR_1_BIT portmap (‚1 ‚), X(3) , Y(3) , GR(3),   C(0),Kl(3));

Jele D. schrieb:
> E <= ‚1‘;

Ansonsten: wenn deine for-Schleife von 0 bis N-1 läuft, dann wird das 
generate bei I=0 nicht funktionieren:

Jele D. schrieb:
> KO: KOMPARATOR_N_BIT port map ( C(I), X( I), Y(I), GR(I),
> C(I-1), Kl(I));
Denn dort tritt ein C(0-1) auf, das in deinem std_logic_vector C nicht 
existiert. Du musst ggf. eine Sonderehandlung für das "nullte Element" 
der Schleife machen.

von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Achim S. schrieb:
> die
> groben Schreib- bzw. Syntaxfehler finden und korrigieren.

Da sind noch sehr viel mehr drinnen ...

Jele D. schrieb:
> Z2,Z1,Z0: out std_logic
> )
> end entity KOMPARATOR_1_BIT ;

; nach Klammer fehlt.

Jele D. schrieb:
> GROESSER. KLEINER

Statt . sollte ; stehen. Aber mache doch bitte getrennte Einträge:
GROESSER : out std_logic;
KLEINER  : out std_logic;
GLEICH   : out std_logic;

Und lass auch gleich Leerzeichen weg am Ende vor dem ;.

Jele D. schrieb:
> out std_loic ;

Sollte wohl std_logic werden ...

Jele D. schrieb:
> sinal Kl

... und hier signal.

Achim S. schrieb:
> Du musst ggf. eine Sonderehandlung für das "nullte Element"
> der Schleife machen.

Dafür kann man gut den Vector für das Carry um 1 Bit erweitern und das 
statisch auf '1' festlegen.

Achim S. schrieb:
> Du solltest mit Simulator

Exakt! Das ist doch das schöne an so kleinen Aufgaben: Man kann sie gut 
simulieren und noch durch Hingucken in der Simulation erkennen was da 
passiert und ob das korrekt ist.

Mork vom Ork schrieb:
> Was die Schleife angeht, hätte ich keine VHDL-Schleife erwartet, die
> eine Struktur aufbaut, sondern eine auszuführende Schleife, die die
> Aufgabe sequenziell löst. Was gemeint war, weis aber nur der
> Aufgabensteller.

An der Schaltung ist nichts sequenziell. Ja, das Carry huscht da durch, 
das sieht man auch an den Spikes in der Simulation, aber das ist reine 
Kombinatorik ohne Takt. Eine Schleife muss nicht sein (und ist vom 
Aufgabensteller auch verboten worden), man kann immer Alles auch 
ausführlich hinschreiben, aber eine Schleife erleichtert die Arbeit 
drastisch.

Im Anhang wie man das mit einer Schleife lösen kann, samt Testbench. Das 
jetzt ohne Schleife zu schreiben, also die Indizes durch Zahlen zu 
ersetzen, das wird die TO schon schaffen.

Alles Gute, Alles Liebe (-:

: Bearbeitet durch User
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.