Forum: FPGA, VHDL & Co. VHDL Anfänger braucht Hilfe bei der Überprüfung IF-THEN-ELSE


von Tobi A. (tobi_python)


Lesenswert?

Guten Morgen zusammen,
ich bin gerade dabei VHDL zu lernen und stehe vor folgender Aufgabe:

Die nachstehende Karnaugh-Tafel soll in einer if-then-else Anweisung 
realisiert werden. Unten ist meine Lösung, jedoch kann ich bei meinem 
laienhaften Wissen nicht überprüfen, ob mein Gedankengang richtig ist. 
Vor allem das Signal qtmp, das ich eingeführt habe, um eine 
&-Verknüpfung aus den Signalen d,c,b,a zu machen, ist für mich noch 
fragwürdig - ich denke das sollte eiggggentlich so passen, oder ?
               ba
              1001
         dc   0111
              1011
              1001
   library IEEE;
   use IEEE.STD_LOGIC_1164.ALL;
   use IEEE.NUMERIC_STD.ALL;

   entity karnaughtafel is
         Port (a, b, c, d: in std_logic;
               y: out std_logic);
   end karnaughtafel;

   architecture verhalten of karnaughtafel is
   begin
      karnaugh:process(d,c,b,a)
      begin
           qtmp <= d&c&b&a;

           if qtmp = x"1" then
              y<= '0';
           elsif qtmp = x"3" then
                 y<= '0';
           elsif qtmp = x"4" then
                 y<= '0';
           elsif qtmp = x"9" then
                 y<= '0';
           elsif qtmp = x"11" then
                 y<= '0';
           elsif qtmp = x"13" then
                 y<= '0';
           else
                 y<= '1';
           end if;
      end process karnaugh;
   end verhalten;

Der Stil ist wahrscheinlich schlecht und es geht bestimmt optisch 
gesehen schöner. Mir geht es aber erstmal um den Inhalt, also ob ich die 
Logik der Karnaugh richtig wiedergegeben hab? Ich wäre sehr sehr dankbar 
für Antworten und neue Anreize :-)

von Lerninstructor (Gast)


Lesenswert?

Tobi A. schrieb:
> ich denke das sollte eiggggentlich so passen, oder ?

Nö, elseif ist wegen der essentialen Priorisierung darin die falsche 
Wahl für ne Lookup-table.

>Ich wäre sehr sehr dankbar für neue Anreize :-)

Such dir nen bezahlten Tutor an ner Bildungseinrichtung oder besorg dir 
ein brauchbares Buch wie bspw: ISBN: 0-9651934-3-8

von Dussel (Gast)


Lesenswert?

Synthetisiert das ohne Fehler und Warnung?
Wo wird qtmp definiert? Das frage ich insbesondere, weil & keine 
Und-Verknüpfung ist, sondern 'Concatenation'.

von Lerninstructor (Gast)


Angehängte Dateien:

Lesenswert?

Da mal al schnell hingetipptes template wie man das mit select macht
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.all;
3
4
entity karnaughtafel is
5
  port (a, b, c, d : in  std_logic;
6
        y          : out std_logic);
7
end karnaughtafel;
8
9
architecture verhalten of karnaughtafel is
10
11
  signal all_inputs : std_logic_vector(3 downto 0);
12
begin
13
14
  all_inputs <= a & b & c & d;
15
16
  with all_inputs select
17
    y <=
18
    '1'      when "0000",
19
    '1'      when "0001",
20
    '1'      when "0011",
21
    '1'      when "0010",
22
    --
23
    '1'      when "0100",
24
    '1'      when "0101",
25
    '1'      when "0111",
26
    '1'      when "0110",
27
    --
28
    '1'      when "1100",
29
    '1'      when "1101",
30
    '1'      when "1111",
31
    '1'      when "1110",
32
    --
33
    '1'      when "1000",
34
    '1'      when "1001",
35
    '1'      when "1011",
36
    '1'      when "1010",
37
    'X'      when others;
38
end verhalten;





> jedoch kann ich bei meinem
> laienhaften Wissen nicht überprüfen, ob mein Gedankengang richtig ist.

Dann installier dir schnellstens eine VHDL-Umgebung. Und lerne wie man 
Dateianhang und syntax highlight mit Forumsmittel nutzt.

von Tobi A. (tobi_python)


Lesenswert?

Dussel schrieb:
> Synthetisiert das ohne Fehler und Warnung?
> Wo wird qtmp definiert? Das frage ich insbesondere, weil & keine
> Und-Verknüpfung ist, sondern 'Concatenation'.

Danke für deine Antwort. Ich habe das an keiner vorherigen Stelle 
definiert. Darf ich fragen, was eine Concatenation ist?

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Tobi A. schrieb:
> Dussel schrieb:
>> Synthetisiert das ohne Fehler und Warnung?
>> Wo wird qtmp definiert? Das frage ich insbesondere, weil & keine
>> Und-Verknüpfung ist, sondern 'Concatenation'.
>
> Danke für deine Antwort. Ich habe das an keiner vorherigen Stelle
> definiert. Darf ich fragen, was eine Concatenation ist?

Konkatenation ist: '1' & '0' wird zu einem Vektor mit Inhalt "10".

von Tobi A. (tobi_python)


Lesenswert?

Lerninstructor schrieb:
> Da mal al schnell hingetipptes template wie man das mit select
> macht

Hey, erstmal vielen Dank für deine Mühe und Zeit sowie die Anreize in 
der vorherigen Nachricht. Mit select habe ich den Quellcode bereits 
richtig verfassen können. Die Aufgabenstellung verlangt von mir selbiges 
noch einmal mit der If-Then-Else Anweisung durchzuführen. Ich stimme dir 
absolut zu, dass das mit When..select deutlich charmanter ist!

von Tobi A. (tobi_python)


Lesenswert?

> Konkatenation ist: '1' & '0' wird zu einem Vektor mit Inhalt "10".

Danke dir! Ja genau das wollte ich auch machen, da habe ich mich 
fachlich inkorrekt ausgedrückt. Ich will ja quasi dem Ausgang y entweder 
eine 1 oder eine 0 zuweisen, je nachdem an welcher Stelle der Karnaugh 
Map diese auftaucht. Also z.B. um die Stelle "0001" mit einer 0 zu 
belegen.

Müsste ich dann nicht das signal qtmp zwischen architecture und begin 
definieren ? Also z.B. so

architecture verhalten of karnaughtafel is
signal qtmp: unsigned (3 downto 0);
begin
...

von Lerninstructor (Gast)


Lesenswert?

Tobi A. schrieb:
>  Die Aufgabenstellung verlangt von mir selbiges
> noch einmal mit der If-Then-Else Anweisung durchzuführen. Ich stimme dir
> absolut zu, dass das mit When..select deutlich charmanter ist!

Das ist nicht charmant, das ist in Sachen Hardware richtig, während die 
Verwendung des sequentiellen if-konstructes für eine kombinatorische 
(als 'parallel abgearbeitet' modelliert) Tabelle genaugenommen der 
unpassende Syntax ist.

es gibt in VHDL sequentielle und  es gibt paralle 'Konstrukte' das ist 
ein entschiedener Unterschied zu Programmiersprachen wie C. Und man tut 
sich als Anfänger keinen Gefallen wenn man das ignoriert.

Unf genaugenommen liegt das nicht an VHDL sondern inherent in digitale 
Schaltungstechnik. Es gibt kombinatorische (ungetaktete) Logik und es 
gibt sequentielle (getaktete Schaltungen).


Und wenn das eine Aufgabenstellung ist, da frag bitte deinen Tutor. Und 
wenn du das schon als selct hast, dann solltest du diese als Datei 
anhängen, damit man hier nicht 'from the scratch' tippen muß.

von Dussel (Gast)


Lesenswert?

Tobi A. schrieb:
> Müsste ich dann nicht das signal qtmp zwischen architecture und begin
> definieren ? Also z.B. so
>
> architecture verhalten of karnaughtafel is
> signal qtmp: unsigned (3 downto 0);
> begin
Ja. Daran hätte man dann auch gesehen, dass du wirklich die vier Bit 
'hintereinanderschalten' und nicht verUNDen willst. Deshalb habe ich 
gefragt.

von Lerninstructor (Gast)


Lesenswert?

Tobi A. schrieb:
> Müsste ich dann nicht das signal qtmp zwischen architecture und begin
> definieren ? Also z.B. so


Benutze das Syntax-Highlight des Forums! 'unsigned ist der unpassende 
Typ hier, nimm std_logic_vector. Dann brauchste auch das numeric_std 
package nicht.
1
architecture verhalten of karnaughtafel is
2
 signal qtmp: std_logic_vector(3 downto 0);
3
begin

von Tobi A. (tobi_python)


Lesenswert?

Alles klar, ich danke euch allen vielmals für eure Hilfe!

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.