Hi, darf eine Architectur mehrere Prozesse haben? Ich habe eine mit zwei Prozessen und wenn bei da stehen passiert nichts, nur wenn eine auskommentiert ist. Finde das alles sehr seltsam... Bin über jede Antwort dankbar. TIM:)
Hallo, eine arcitecture kann so viele process(sensitve list) haben wie man will, vielleicht hast du in der sensitve list vergessen deine Signale anzugeben. Wenn sich ein Signal aus der sensitve list ändert, wird der Process duchlaufen. chris
>Finde das alles sehr seltsam...
Wenn Du Deinen Code posten würdest, könnte man Dir besser helfen.
Hi, hier kurz der Code: ENTITY DFF is Port ( D : in STD_LOGIC; Reset : in STD_LOGIC; Clk: in STD_LOGIC; Q : out STD_LOGIC; NQ : out STD_LOGIC); end ENTITY DFF; architecture Behavioral of DFF is signal temp: STD_LOGIC; begin Kill: process (Reset) begin if(Reset = '0') then Q <= '0'; end if; end process Kill; Status: process (Clk) begin if (Clk'event and Clk = '1') then Q <= D; end if; end process Status; -- process (Clk, Reset) -- begin -- if ( Reset = '0') then -- Q <= '0'; -- elsif ( Clk'event and Clk = '1') then -- Q <= D; -- end if; -- end process; end Behavioral; Der auskommentierte Code ist eine Zusammenfassung von den beiden anderen Prozessen, was auch funktioniert. Sind Status und Kill beide aktiv funktioniert es nicht, kommentiere ich noch einen der beiden aus funktioniert der andere. Könnt ihr mir sagen, womit das zu tun haben könnte? TIM :)
Hi, du darfst nicht aus 2 verschiedenen Prozessen auf einen Ausgang schreiben. Hier beschreibst du Q aber aus KILL und aus STATUS. Gruß
Moin... ...was eine einfache Angabe der Fehlermeldung übrigens auch erbraht hätte. Der auskommentierte Teil ist übrigens die "klasissche" Version des asynchronen Reset. Nur noch rising_edge(clk) statt clkevent und clk=1 und ab dafür. -- SJ
Hi, danke für die schnelle Antwort. Darf ich denn auf ein Signal aus zwei Prozessen schreiben, welches ich vorher in der Architectur deklariert habe? TIM :)
Man darf von 2 Prozessen auf ein Signal schreiben, aber man sollte dies nur in Testbenches machen. Bei entities, welche man synthetisieren will, sollte man es nicht tunlichst nicht. Du kannst Dir überlegen daß es zu einem Konflikt kommt, wenn der eine Prozess eine '1' schreiben will, der andere aber eine '0'. Manche Compiler können den Konflikt auflösen, indem sie die beiden Werte oder-, bzw. und- verknüpfen. Normalerweise ist es nicht notwendig, aus 2 Prozessen ein Signal zu schreiben.
Hallo Tim, http://www.carookee.de/forum/VHDL/14/Unterschied_zwischen_Prozee.10877964-0-01105 scheint dasselbe Posting zu sein :-) > Darf ich denn auf ein Signal aus zwei Prozessen > schreiben, welches ich vorher in der Architectur > deklariert habe? Ja schon. Du musst das Signal aber als resolved deklarieren. z.B. ist std_logic und std_logic_vector als resolved definiert. Normalerweise verwendet man sowas, wenn man Tristate- Busse beschreiben möchte. (Ich würde es in keinem anderen Fall verwenden, und bei Tristate auch sehr "explizit" beschreiben, do dass die Tristatebuffer vom Rest der Schaltung irgendwie separiert sind.) Achtung, Du musst selber dafür sorgen, dass das Signal nur "sinnvoll" getrieben wird, z.B. im einen Prozess Tristate ist (oder zumindest H, L oder W), während´ der andere darauf schreibt. Wenn nicht, passiert das, was Du in deinem Beispiel beschreibst ... ;-) Der Wert des Signals wird über die sogenannte Resolution Function bestimmt. Hierbei ergibt z.B. 0 und 0,Z,L,H,W = 0, 0 und 1,X,- = X, 0 und U = U, analog für 1 usw ... Schau einfach mal in die IEEE std_logic-Library (ist normalerweise irgendwo unter Soucre Code, IEEE bei der Installation des Simulators. > ...was eine einfache Angabe der Fehlermeldung > übrigens auch erbraht hätte. Nicht unbedingt. Wenn das Signal als std_logic definiert ist, dann ist dies aus Sicht von VHDL zulässig (std_logic ist resolved std_ulogic). Bei std_ulogic oder bit hätte es ne Fehlermeldung gegeben. Normalerweise bekommt man während der Synthese auch ne Warning oder ne Note (zumindest machen manche Synthesetools das so). Gruss, Alex
Hi, @Klaus Falser: Hast recht, braucht ein bisschen länger um die Logik zu verstehen. Ist mir aber nun klar wieso es nicht funktionieren kann. @Alex: Jep ist auch mein Eintrag. Da dort keine aktuelle Nachricht war, wusste ich nicht wie aktiv das Board noch ist. Hätte sonst nicht doppelt gepostet. Sorry. Grüsse, TIM :)
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.