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 :-)
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
Synthetisiert das ohne Fehler und Warnung? Wo wird qtmp definiert? Das frage ich insbesondere, weil & keine Und-Verknüpfung ist, sondern 'Concatenation'.
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.
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?
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".
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!
> 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
...
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ß.
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.
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
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.