Forum: FPGA, VHDL & Co. VHDL Ausgangsvektor


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jele D. (jele_d)


Angehängte Dateien:

Lesenswert?

ich soll die Ausgangsverktor angeben . mit X "5"

 AUSW AHL = “000“
 AUSW AHL = “001“
 AUSW AHL = “010“
 AUSWAHL = “011“
 AUSW AHL = “100“
 AUSW AHL = “101“

: Verschoben durch Moderator
von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Ja nun, man schreibe sich eine Testbench, siehe Anhang.

Alles Gute, Alles Liebe (-:

von Gustl B. (-gb-)


Lesenswert?

Und sonst kann man das lösen indem man Schritt für Schritt auflöst was 
da steht.

constant K : std_logic_vector(0 to 7) := o"6" & '0' & '1' & o"5";

o bedeutet Oktal, also 3 Bits, o"6" ist also 110. K ist dann "11001101".

VEKTOR_1 <= ('1' & X"5" & '0');

x bedeutet Hexadezimal, also 4 Bits, x"5" ist 0101. VEKTOR_1 ist dann 
"101010".

VEKTOR_2 <= ('1', K(4) and K(6), K(4), '0', '0', K(7) xor '1');

Da kann man K von oben einsetzen und die Logikfunktionen auflösen. 
VEKTOR_2 ist "101000".

Bei der "Schleife" kann man sich einen Buchstaben nach dem Anderen 
angucken. Erstmal nur A:

SCHLEIFE : for I in 0 to 5 generate
   A(I) <= '1' when (VEKTOR_1(I) <  VEKTOR_2(I)) else '0';
end generate;

Das kann man auch schreiben als:

A(0) <= '1' when (VEKTOR_1(0) <  VEKTOR_2(0)) else '0';
A(1) <= '1' when (VEKTOR_1(1) <  VEKTOR_2(1)) else '0';
A(2) <= '1' when (VEKTOR_1(2) <  VEKTOR_2(2)) else '0';
A(3) <= '1' when (VEKTOR_1(3) <  VEKTOR_2(3)) else '0';
A(4) <= '1' when (VEKTOR_1(4) <  VEKTOR_2(4)) else '0';
A(5) <= '1' when (VEKTOR_1(5) <  VEKTOR_2(5)) else '0';

Und weil VEKTOR_1 und VEKTOR_2 konstant sind, kann man auch das auflösen 
in:

A(0) <= '1' when ('0' <  '1') else '0';
A(1) <= '1' when ('1' <  '0') else '0';
A(2) <= '1' when ('0' <  '1') else '0';
A(3) <= '1' when ('1' <  '0') else '0';
A(4) <= '1' when ('0' <  '0') else '0';
A(5) <= '1' when ('1' <  '0') else '0';

Jetzt kann man den Operator ausführen und bekommt:
A(0) <= '1';
A(1) <= '0';
A(2) <= '1';
A(3) <= '0';
A(4) <= '0';
A(5) <= '0';
Oder A ist "000101".

Das macht man dann noch für die anderen B, C, D, E, F mit dem Ergebnis:
B = 010101
C = 010000
D = 101111
E = 111010
F = 101010

Damit weiß man dann auch, was bei dem
with AUSWAHL select
rauskommt.

Eine Testbench zu schreiben ist hier aber der deutlich schnellere Weg.

von Markus F. (mfro)


Lesenswert?

Gustl B. schrieb:
> Damit weiß man dann auch, was bei dem
> with AUSWAHL select
> rauskommt.

...und hat seine Hausaufgaben fertig, ohne auch nur im Geringsten den 
eigenen Kopf angestrengt oder irgendwas kapiert zu haben.

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]
  • [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.

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