Entwerfen Sie nun ein komplettes VHDL-Programm in „Struktureller Beschreibungsweise“, das als Ergebnis die Parität des 4-BIT-Vektors A anzeigt! Bei einer geraden Anzahl von “1‘en“ im 4-Bit Vektor A soll der Ausgang GERADE ein “1“- Signal aufweisen, ansonsten ein “0“-Signal. Bei einer ungeraden Anzahl von “1‘en“ im 4-Bit Vektor A soll der Ausgang UNGERADE ein “1“-Signal aufweisen, ansonsten ein “0“-Signal . . ich kann den Unterschied zwischen die Übergabe nach Name und nach Position im Portmap nicht . siehe Bild
Keine Ahnung. Gfs meint dein Aufgabenstelle, Funktionen definieren, in einem package ablegen und dann einmal als Variablen übergeben und einmal als Vektor. Ehrlich gesagt habe ich sowas in 20 Jahren Entwicklung nicht gebraucht. Portmapping mache ich immer explizit und zwar deshalb, damit Kollegen direkt sehen, was passiert und es nutzen können. Dein Aufgabensteller hat den falschen Fokus und weis nicht, was in der Industrie abgeht. Ich kenne aber solche Leute: Die trainieren ihre Studis auf möglichst komplizierten Sch....s, die suhlen sich dann in ihren Konstrukten und produzieren einen Haufen formellen Quark, der aber inhaltsbefreit ist. Wichtiger wäre es, die richtige Schaltungstechnik und den jeweils richtigen mathematischen Ansatz zu haben. Der fehlt diesen Leuten aber meistens! Drucke meinen Beitrag aus und lege ihn dem Prof auf ins Fach!
Dem kann ich mich nur anschließen.
Jele D. schrieb: > Entwerfen Sie nun ein komplettes VHDL-Programm in „Struktureller ^^^^^^^^^^^^^ das ist der Fehler Ansonsten:
1 | --named.
|
2 | k1 : gewurschtel port map( |
3 | Bit_1 => A(0), |
4 | Bit_2 => A(1), |
5 | even => open, |
6 | odd => s_K1toK2); |
7 | |
8 | --positional:
|
9 | k2 : gewurschtel port map(s_K1toK2, A(2), open, s_K2toK3); |
Natürlich fehlt da im VHDL-Model einiges (signal, component declaration) und Fehlerfreiheit wird nicht garantiert, aber der Unterschied zwischen named und positional assignment dürfte klar werden.
Jele D. schrieb: > ich kann den Unterschied zwischen die Übergabe nach Name und nach > Position im Portmap nicht . Diesem Satz fehlt doch was? Wenn allein die Sache mit der Portliste "by name" und "by order" (aka "by position") dein Problem ist, dann mein Vorschlag: löse die Aufgabe einfach mal so, wie es dir gefällt. Zeig dann, was du hast, und dann bauen wir diese Parameterübergabe-Geschichten mit ein. Das kann man nämlich problemlos in 1 Minute auch hinterher noch ändern.
ibrary IEEE; use IEEE.std_logic_1164.all; entity 4-BIT_VEKTOR is port ( A: in std_logic_vector (3 downto 0 ) ; GERADE , UNGERADE: out std_logic ); end entity 4-BIT_VEKTOR ; architecture VERHALTEN of 4-BIT_VEKTOR is signal C : std_logic_vector (1 downto 0 ); component 2_BIT_VEKTOR is port ( BIT_1,BIT_2 : in std_logic ; EVEN,ODD :out std_logic ); end component ZWEI_BIT_PARITY ; begin K1: ZWEI_BIT_PARITY portmap ( A(0),A(1) , C(0) , ODD ) ; K2: ZWEI_BIT_PARITY portmap ( C(0), A(2), C(1), ODD ) ; K3: ZWEI_BIT_PARITY portmap ( C(1), A(3), GERADE, UNGERADE ) ;
Dann wäre es jetzt an der Zeit das einem Simulator wie Modelsim vorzuwerfen. Der meldet dir dann auch wunderhybsch alle Fehler.
Grob gereinigt und in tags:
1 | library IEEE; |
2 | use IEEE.std_logic_1164.all; |
3 | |
4 | entity 4_BIT_VEKTOR is |
5 | port ( |
6 | A : in std_logic_vector (3 downto 0); |
7 | GERADE, UNGERADE : out std_logic); |
8 | end entity; |
9 | |
10 | architecture VERHALTEN of 4_BIT_VEKTOR is |
11 | signal C : std_logic_vector (1 downto 0); |
12 | component 2_BIT_PARITY is |
13 | port ( |
14 | BIT_1, BIT_2 : in std_logic; |
15 | EVEN, ODD : out std_logic); |
16 | end component; |
17 | |
18 | begin
|
19 | |
20 | K1 : ZWEI_BIT_PARITY portmap (A(0), A(1), C(0), ODD); |
21 | K2 : ZWEI_BIT_PARITY portmap (C(0), A(2), C(1), ODD); |
22 | K3 : ZWEI_BIT_PARITY portmap (C(1), A(3), GERADE, UNGERADE); |
23 | |
24 | end architecture; |
4_BIT_VEKTOR, 2_BIT_PARITY : Zahl am Anfang ist iirc verboten portmap : braucht ein Leerzeichen.
Das ist aber nicht das Problem hier, das motzt der Syntaxcheck dann sowieso an. Zur eigentlichen Frage: Das hier ist "by position": K3 : ZWEI_BIT_PARITY portmap (C(1), A(3), GERADE, UNGERADE); Dabei kommt es auf die Reihenfolge an. Die Zuordnung erfolgt implizit entsprechend der Signaldefinition in der Portliste. Und das hier "by name": K3 : ZWEI_BIT_PARITY portmap ( EVEN=>GERADE, ODD=>UNGERADE, BIT_1=>C(1), BIT_1=>A(3)); Hier ist die Reihenfolge egal, weil jede Zuordnung explizit erfolgt.
:
Bearbeitet durch Moderator
Lerninstructor schrieb: >> Entwerfen Sie nun ein komplettes VHDL-Programm in „Struktureller > ^^^^^^^^^^^^^ das ist der Fehler Falls wieder die alte theoretische Leier von wegen "Programm" gemeint ist: a) Texte für die Steuerung von Software (hier die Synthese-SW und den Simulator) sind IMMMER Programme, da "programma" = wörtlich "die Vorschrift" im Sinne von Beschreibung, Publikation, Bekundigung, Ankündigung, später auch Tagesordnung. b) Die Einengung auf "Ablauf" im Allgemeinen und "Softwareablauf" im Besonderen ist ebenfalls falsch. Auch bei C++ sprechen wir vom Programm, obwohl dort keine Abläufe, sondern Strukturen beschrieben werden. Auch das TCL, die UCF, DDXc und alles, was an Beschreibungen der Synthesesoftware zugeführt wird, sind "Pro Gramm(e)".
FPGA Notfallseelsorge schrieb im Beitrag #7136970: > a)..... und > b)..... Muss man halt einfach so als Postulat hinnehmen. Ich sag meinen Praktikanten immer: "mach mal eine VHDL-Beschreibung davon", er kapiert dann, was ich meine und programmiert frohgemut drauflos und zeigt mir stolz sein Programm, wenn ich frage "wie weit bist du mit der Beschreibung?" Auf diese Art sind wir beide zufrieden.
FPGA Notfallseelsorge schrieb im Beitrag #7136970: > Auch bei C++ sprechen wir vom Programm, > obwohl dort keine Abläufe, sondern Strukturen beschrieben werden. wobei zu beachten ist, dass... 1. ...ein C++-Programm, dass nur aus Strukturen besteht, vermutlich recht wenig tun wird, und 2. ... ein C++-Programm in eine Folge von Maschinenbefehlen übersetzt wird, die irgendeine arme CPU sequenziell ausführen muss, während eine VHDL-Beschreibung bis zum bitteren Ende eine Struktur bleibt, die zu keinem Zeitpunkt von irgendjemandem ausgeführt wird. @TO: Vielleicht hast du mal Python gelernt, dort gibt es so etwas ebenfalls. Du kannst die Funktion def F(a, b,c) ... aufrufen mit F(1,4,7) oder mit F(a=1, b=3, c=7)
Ich war inkonsequent in der Vergangenheit, aber hier im Thread sind FPGA NOTFALLSEELSORGE und FPGA Notfallseelsorge unterschiedliche Personen. Bis sich die kleingeschriebe auch groß schreibt. Aber egal ... das mit Programm oder nicht ist schon ein Punkt. Ein weiterer wäre Lothar M. schrieb: > Parameterübergabe-Geschichten Und das Wort "Übergabe" steht auch im Aufgabentext des TO. Und es passt eben nicht. Generics oder Parameter in Verilog werden übergeben und sind zur Synthesezeit fest. Ports werden hingegen nicht übergeben sondern verbunden. Wie Leitungen. Verdrahtet.
FPGA NOTFALLSEELSORGE schrieb im Beitrag #7137040: > "Übergabe".... passt eben nicht Ja stimmt, da hat mich ein false friend übel aufs Glatteis geführt. > Verdrahtet. Oder eben in der port map "zugeordnet" bzw. "abgebildet". https://dict.leo.org/englisch-deutsch/to%20map https://dict.leo.org/englisch-deutsch/map
FPGA NOTFALLSEELSORGE schrieb im Beitrag #7137040: > Ports werden hingegen nicht übergeben sondern verbunden. Wie Leitungen. > Verdrahtet. Eben, deshalb ist die Frage nach einem Unterschied in der Wirkung der Beschreibungsvarianten hier reichlich Sinnfrei. In einer Programmiersprachen gibt es messbare Unterschiede ob nun ein Unter-Programm per reference oder par value angesteuert wird. Oder registered, oder aligned im memspace. Oder per stack. oder ... Aber hier ist es eben eine Komponente und kein UnterProgramm und damit gibt es diese unterschiedlich wirksamen Interface resp. "Calling conventions" nicht. Es mag Unterschied bei neueren VHDL-Varianten (VHDL-2008) geben, die bspw. Negation in der Port map erlauben. Aber hier stiftet die Frage nach "Unterschied" reichlich Verwirrung, statt sie das Verständniss fördert. PS: Hilfreich swären hier IMHO auch Tipps für eine richtige Formatierung, style guide, mit der man dem positional mapping seinen Schrecke nimmt, bspw:
1 | library IEEE; |
2 | use IEEE.std_logic_1164.all; |
3 | |
4 | library work; --lib with component architecture declarazion |
5 | use work.all; |
6 | |
7 | entity E_4_BIT_VEKTOR is |
8 | port ( |
9 | A_i : in std_logic_vector (3 downto 0); |
10 | GERADE_o, UNGERADE_o : out std_logic); |
11 | end entity; |
12 | |
13 | architecture VERHALTEN of E_4_BIT_VEKTOR is |
14 | --for wiring components
|
15 | signal s_parinet : std_logic_vector (1 downto 0); |
16 | |
17 | --component e_pari_2b calcs parity from two bits fan-in
|
18 | --output even_o is '1' wenn both inputs got same value ("00" or "11") otherwise '0'
|
19 | --output odd_o is '1' wenn both inputs got different value ("01" or "10") otherwise '0'
|
20 | component e_pari_2b is |
21 | port ( |
22 | BIT_1_i, BIT_2_i : in std_logic; |
23 | EVEN_o, ODD_o : out std_logic); |
24 | end component; |
25 | |
26 | begin
|
27 | -- op1 | op2 | res_even| res_odd
|
28 | I_PARI_01 : e_pari_2b portmap (A_i(0), A_i(1), open, s_parinet(0)); |
29 | I_PARI_02 : e_pari_2b portmap (s_parinet(0), A_i(2), open, s_parinet(1)); |
30 | I_PARI_03 : e_pari_2b portmap (s_parinet(1), A_i(3), GERADE_o, UNGERADE_o); |
31 | |
32 | end architecture; |
33 | |
34 | --bei einer Beschreibungs- resp Spezifikationssprache ist es eben wichtitig das es verständlich beschrieben ist.
|
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.