-
Thread
Sensitivity List
Hallo zusammen, ich habe ein Verständnisproblem bei der Sensitivity List in VHDL. Bisher habe ich es so verstanden, dass in die Liste alle Signale eingetragen werden, die sich innerhalb des process Blocks ändern. Nun habe ich aber vorher diesen Artikel gelesen
vhdl] Wieso wird da die Liste weg gelassen? Und welche Bedeutung bzw. Funktion hat die Sensitivity List? Weil ich habe nach dem Lesen das Gefühl gehabt, dass mein bisheriges Verständnis dieser Liste falsch war. Danke fürs aufschlauen
-
Thread
Sinn der Sensitivity List?
nun schon zum 1000. Mal, aber VHDL ist eine > SIMULATIONS-Sprache, bzw. -beschreibung und die Sensitivity List dient > dazu, Neuberechnungen von Ausgangssignalen anzustoßen. Dann hau doch mal ein reines 'SIMULATIONS'-Beispiel raus, wo man eine unvollständige Sensitivity List benötigt :-)
nun schon zum 1000. Mal, aber VHDL ist eine >> SIMULATIONS-Sprache, bzw. -beschreibung und die Sensitivity List dient >> dazu, Neuberechnungen von Ausgangssignalen anzustoßen. > > Dann hau doch mal ein reines 'SIMULATIONS'-Beispiel raus, wo man eine > unvollständige Sensitivity List benötigt :-)
-
Thread
sensitivity list
Hallo an Alle, Kann mit jemand erklären warum bei folgendem process, "sel1" mit in die sensitivity list eingetragen wird? Danke! [vhdl] process (clk, sel1) begin if rising_edge(clk) then if (sel1='1') then out1 <= inp; end if; end if; end process; [/
Beim kombinatorischen Prozess enthält die sensitivity list ALLE Eingänge der kombinatorischen Funktionen. Bei einem sequentiellen Prozess sind nur Clock- und Kontrollsignale in der sensitivity list.
-
Thread
Sensitivity list wird ignoriert
Soweit ich weis gibt es doch zwei Möglichkeiten einen Prozess zu implementieren. 1. Über die sensitivity list wie es im meinem oberen Prozess der Fall ist. 2. Ohne sens. list mit nur einer einzigen wait Anweisung die zudem zu Beginn des Prozesses stehen muss. (Bei mir der AUSLOESER Prozess) Die
Soweit ich weis gibt es doch zwei Möglichkeiten einen Prozess zu > implementieren. > 1. Über die sensitivity list wie es im meinem oberen Prozess der Fall > ist. > 2. Ohne sens. list mit nur einer einzigen wait Anweisung die zudem zu > Beginn des Prozesses stehen muss. (Bei mir der AUSLOESER Prozess
-
Thread
VHDL: Sinn der Sensitivity List
werden hier alle benutzten Signale quasi kontinuierlich und gleichzeitig verarbeitet. Dient die Sensitivity List etwa nur dazu, dem Simulator entscheidende Hinweise zu liefern? Immerhin läßt sich das Simulationsergebnis mit der Sensitivity List beeinflussen, auch im positiven Sinne. Aber in einer parallel
der emacs-Editor kamm die Sensitivity-List zumindest automatisch updaten
-
Thread
process sensitivity list
- "C:/Projekte/VHDL/B5X/BX55/BX55.vhd" line 44: One or more signals are missing in the process sensitivity list. To enable synthesis of FPGA/CPLD hardware, XST will assume that all necessary signals are present in the sensitivity list. Please note that the result of the synthesis may differ from the
oder? Der Synthese ist die Sensitivliste sowieso weitestgehend egal. Du bekommst bei einer unvollständigen Liste einfach eine freundliche Meldung. In der Simulation (und nur dort!!!) wird dein Counter aber dann einen halben (!) Takt "verspätet" kommen. Denn bei jedem Wechsel auf der Taktleitung wird
-
Thread
Ausgabe an LED's
leider schon schmerzlich selber feststellen, dass dem so ist. Der Code stimmte, allerdings war die Sensitivity-List unvollständig und nach der Implementierung auf die Zielhardware traten immer wieder äusserst seltsame Fehler auf, die dann verschwanden, sobald die Sensititivty-Liste vollständig beschrieben
>schon schmerzlich selber feststellen, dass dem so ist. >Der Code stimmte, allerdings war die Sensitivity-List unvollständig und Says who? >nach der Implementierung auf die Zielhardware traten immer wieder >äusserst seltsame Fehler auf, die dann verschwanden, sobald die >Sensititivty-Liste vollständig
-
Thread
RTL: "wait until rising_edge" oder "if rising_edge"
gespart wird > - die Simulation und die Synthese stimmen immer überein, > weil es keine unvollständigen Sensitivity-Listen mehr gibt > - der Prozess ist garantiert getaktet, > und hat nicht irgendwo einen asynchronen Teil > Und wieso sollte man etwas nicht verwenden, wenn es Vorteile bringt
> Bei der Beschreibungsform 2 hat man den (fragwürdigen) Vorteil, > dass man die sensitivity list nicht zu schreiben braucht. Ich würde gerade diesen Vorteil nicht in Frage stellen. Man muß sich nur mal in den hier (im Forum) geposteten Quellen die überdefinierten oder unvollständigen
-
Thread
Sensitvity-Liste angeblich unvollständig
ModelSIM compiliert das file mit den warnings, dass die internen Signale nicht in der Liste stehen. Warum ist das so? clk_proc : process(sen_clock, value) begin if rising_edge(sen_clock) then value <= std_logic_vector(unsigned(pixel (9 downto 2)) * unsigned(line(9 downto 2)) + unsigned(dmc)); end if; calc <= value (12 downto 0); end process; liegt das an dem calc? Dort greift er auf value zurück, das müsste ihm doch reichen, oder?
-
Thread
Sensitivity List Problem bei GENERATE-Konstrukten
Die option "check for Synthesis" liefert bei ModelSIM AE folgenden Fehler: "Signal ctrl_we is not in the s.-list" - obwohl es geclocked ist. Kann es an dem Generate Konstukt liegen? Der Code stammt vom open cores SPDIF Decoder. [c] -- control register generation CTRLREG : for k in ctrl_din'range generate -- active bits can be written to ACTIVE : if ACTIVE_BIT_MASK(k) = '1' generate CBIT : process (clk, rst) begin if rst = '1' then ctrl_internal(k) <= '0'; else if rising_edge(clk) then
-
Thread
Xilinx ISE Optimierung verhindern
Deine Liste ist immer noch unvollständig
D. I. schrieb im Beitrag #2920883: > Deine Liste ist immer noch unvollständig Wie bereits gesagt, genau so wie jetzt die VHDL-Beschreibung im Buch. Jetzt ohne Fehler. Außerdem dachte ich immer die Sensitivity-List beeinflusst die Synthese nicht
-
Thread
Lockerer Counter auf VHDL
Afach schrieb im Beitrag #2306823: >> Könnten Ihr bitte mehr erklären was die >> Limits für das Sensitivity list sind? > Die Sensitiv-Liste ist NUR für den Simulator interessant!!! Das wusste ich nicht. Ich dachte basierend auf der kompletten Prozessstruktur INKLUSIVE Sensitivity List erzeugt das Synthesetool
?query=sensitivity+list+unvollständige http://www.mikrocontroller.net/search?query=sensitivliste+unvollständige Und Xilinx (und andere auch) hat da auch Probleme z.B. mit Variablen in Prozessen und der zugehörigen
-
Thread
Seltsames Verhalten im Design
nachvollziehbares Verhalten von Synthese zu Synthese. Ähnlich, wie bei dir. Am Ende lag es an einer unvollständigen Sensitivity-Liste. Skurrilerweise war in dem Prozess ein Counter in der Sensitivity-Liste, der mit jedem Takt inkrementiert wurde und somit eigentlich auch den Prozess mit jedem Takt angestoßen
für die vielen Antworten. Schlumpf schrieb im Beitrag #3088400: > Am Ende lag es an einer unvollständigen Sensitivity-Liste. Immer wieder lese ich, dass die Sensitivity-List mehr für die Simulation seinen Zweck hat, als für die Implementierung des Designs. Aber abgesehen davon gestalte ich meine
-
Thread
VHDL falling edge bewirkt rising edge
UNABHÄNIG von falling_edge() und damit praktisch eine concurrent Zuweisung, auch wenn outs in der sensitivity list fehlt. MfG Falk
überhaupt gar nichts zu tun... Sie hilft auch nicht! > Oder wie gezeigt mit einer erweiterten Sensitivity List? Das war nur, um zu zeigen, wofür die Sensitivliste da ist, und wie man die Simulation wieder mit der Realität in Einklang bringen kann.
-
Thread
Prozess mit kombinatorischer und getakteter Logik
Okay, zurück ans Reißbrett :-) Also ich habe mir das immer so vorgestellt, dass die Sensitivity-Liste des Prozesses angibt mit welchen Signalen der Prozess ausgelöst werden soll. Bei meiner Statemachine habe ich halt nur den Status der State-Machine in der Sensitivity-Liste. Ich dachte
halt nur den Status der State-Machine >in der Sensitivity-Liste. Das ist schön, nützt dir aber wenog. Den der Synthesizer merkt, dass du ihm eine unvollständige Liste gegeben hast, schmeißt ne Warnung und synthetisiert vollständig. Aber der Simulator
-
Thread
Problem: Latches oder unkorrektes Verhalten
definieren. Den Begriff "Anfangswert" sollte mn nicht verwenden. > Zusätzliche Signale in der Sensitivity List sollten das Ergebnis der > Simulation nicht ändern. Doch! Definiere einen Zähler als Variable, die mit +1 hochzählt. Nimm in die sensitivity-Liste einen x-beliebigen Takt und der Zähler
, da kannst du in die Sensitivity List so viele überflüssige Signale reinschreiben wie du willst, es wird weder an der Simulation noch an der Synthese etwas ändern.
-
Thread
Verständnisprobleme synchron, asynchron
o.ä.? Ich kenne eins (allerdings ein älteres, 1996 oder 98), wo ein ganzes Kapitel dem Thema "unvollständige Sensitivity Liste" gewidmet ist, "Abstrakte Modellierung digitaler Schaltungen" von ten Hagen. Weiss nicht, ob eine neue Auflage erschienen ist, vielleicht hat sich inzwischen was geändert...
Eine korrekte Sensitivity List ist wichtig, und wenn man VHDL programmiert sollte man sich auch bemühen zu verstehen was passiert. Daß sich einige Synthese-Werkzeuge mit falschen oder unvollständigen Listen abfinden
-
Thread
Fehler Meldung
Erkennen bestimmter VHDL-Konstrukte. Deshalb kann man auch nicht sagen, daß die Synthese die sensitivity list ignoriert. Die sensitivity list dient dem Compiler dazu, diese Konstrukte zu erkennen, weil es z.B. der Unterschied zwischen Latch und FF sein kann, ob ein Signal in der sensitivity list steht
oder nicht. Leider sind manche Compiler zu schlau, und erkennen bestimmte Strukturen obwohl die sensitivity list nicht korrekt angeben ist. Davon entsteht dann die Meinung, daß die sensitivity list bei der Synthese ignoriert wird. Deshalb hat Du, Xenu nicht recht. Der Synthesizer ist kein Simulator
-
Thread
Vergleich von 2 code Varianten
beides in der Simulation dasselbe Verhalten zeigt. Übrigens wenn ich next_state nicht in der sensitivity list vom process B eintragen würde, sollte es an der Simulation auch nichts ändern. Man liest ja in Büchern immer, dass alle gelesenen Signale in die sensitivity list gehören, damit die kombinatorische
> Übrigens wenn ich next_state nicht in der sensitivity list vom > process B eintragen würde, sollte es an der Simulation auch nichts > ändern. Man liest ja in Büchern immer, dass alle gelesenen Signale > in die sensitivity list gehören, damit die
-
Thread
Verilog Sensitivitätsliste
Sensitivityliste um vom Synthesizer verstanden zu werden. Kleine Korrektur: der Simulator braucht die Liste. Dem Synthesizer reicht auch eine unvollständige oder falsche Liste... Aber vor allem: in VHDL erkenne ich den getakteten Teil und damit das Flipflop auf Anhieb. Und der Reset ist genauso erkennbar
Sensitivityliste um vom Synthesizer verstanden zu werden. > Kleine Korrektur: der Simulator braucht die Liste. Dem Synthesizer > reicht auch eine unvollständige oder falsche Liste... Wäre ich mir nicht so sicher, in Verilog ist das in den Codingstyles klar vorgegeben. > > Aber vor allem: in VHDL
-
Thread
spartan 3a beispielprojekt
vhdl] wird dir niemals mehr passieren. Übrigens: diesen echt üblen Fehler wirst du wegen der unvollständigen Sensitivity-List in der Simulation nicht sehen, dort sieht alles gut aus: out ändert sich nur, wenn sich clk oder reset ändern :-o Und weil [vhdl] process begin wait until rising_edge
Wie ich mir den Code angeschaut hab, ist mir auch sofort aufgefallen, dass die sensitivity-list leer ist ... Das kann nur Vorteile haben :-)
-
Thread
hilfe warum ist DIN "undefiniert"
Weiß jetzt nicht, ob es daran liegt: aber deine sensitivity list vom Prozess t_2 ist unvollständig.
auf tb ist schon drin :-) also jetzt müsste ich nur das signal full in meinem process in der sensitivity list eingeben : tb:process(full,zwischen_zustand) jetzt zumindest habe ich verstanden was diese sensitivity list macht :-) danke
-
Thread
VHDL Grundlagenverständnis
eines Prozesses gelesen werden, müssen in die > sensitivitylist! Aha, okay. Ich dachte die 'sensitivity list' ist nur dazu da, den Prozess bei entsprechen Signaländerungen der Signale in der 'sensitivity list' zu starten. Kann es zudem das Problem sein, dass man versucht 2 Treiber ('1' und '0') auf
Florian schrieb im Beitrag #3722109: > Aha, okay. Ich dachte die 'sensitivity list' ist nur dazu da, den > Prozess bei entsprechen Signaländerungen der Signale in der 'sensitivity > list' zu starten. Ja, aber nur im Simulator. Dort wird der Prozess neu berechnet wenn
-
Thread
Do's und Do Not's
kombinatorische. Erstere brauchen nur den Takt und ein evtl. vorhandenes asynchrones reset in der Sensitivity List, der Rest ist vollkommen egal und korrekt! Kombinatorische Prozesse brauchen natürlich alle Eingangsvariablen in der Sensitivity List, sonst gibts böse Simulationsfehler !!! (IIRC, Modelsim
in die Sensitivity List eintragen (während der Synthese). MfG Falk
-
Thread
warning beim Implementieren einer State Machine
z_speicher; : : [/vhdl] Die Simulation deines Codes funktioniert (scheinbar), weil die Sensitivity-List unvollständig ist. Auch ein gern gemachter Fehler bei der Mehrprozess-Schreibweise: [vhdl] ue_sn: process( RxData, zustand ) [/vhdl] Richtig wäre: [vhdl] ue_sn: process( RxData, zustand
aktiviert wird und in diesem Zustand so schnell wie möglich hochgezählt wird. Auf diese Art (unvollständige Sensitivity-List) sieht zwar die Simulation richtig aus, die real implementierte Hardware verhält sich anders :-o
-
Thread
Verständinsfrage bezüflich State Machine Testbench
Johannes H. schrieb im Beitrag #5181405: > da der Simulator, durch > die Sensitivity List im 2. und 3. Prozess nur dann neu berechnet, wenn > sich der present state ändert. Hmm ja ... Tipp von mir: Man kommt fast immer mit Prozessen aus, die so aussehen: [vhdl] process
end if; end if; end process; [/vhdl] Da sparst du dir die ganzen Überlegungen mit der Sensitivity-Liste und alles ist immer sauber taktsynchron, lässt sich synthetisieren und der Simulator macht das richtige, man kann für die Sensitivity-List kein Signal vergessen und es können sich keine Latches
-
Thread
MUX mit bidirektionalem Pin
: auch fehlt irgendwie die Zuweisung von Y nach B in deinem Code. Und das READ Signal in den Sensitivity Liste benötigst Du in Deinem Beispiel auch nicht. Aber ausprobieren und Fragen sind schonmal der beste Weg zum Erfolg! Der Besucher
> Und das READ Signal in den Sensitivity Liste benötigst Du in Deinem > Beispiel auch nicht. Richtig, zuviel vom Falschen drin: unvollständige Sensitivity-Liste [vhdl] MUX_PROCESS : process(SEL, READ, A, B, Y) begin if DIR
-
Thread
FSM - zu komplexes Ergebnis in Synthese
Außerdem ist der ganze Kram in records verpackt, so daß nichts vergessen wird (Defaultzuweisung, Sensitivity-List). > Alles > theoretisch super-sauber, aber absolut bescheuert in der Wartung Auch praktisch super und sauber. Gerade in der Wartung. Wenn man sich mit der klassischen Datenblock-Beschreibung
Außerdem ist der ganze Kram in records verpackt, so daß nichts vergessen > wird (Defaultzuweisung, Sensitivity-List). Der eigentliche Knackpunkt dieser Methode (das, was "Softies" so gut daran gefällt), ist, dass dabei in Prozessen durchgehend mit Variablen "gerechnet" wird. Dabei vergisst der "Programmierer
-
Thread
GHDL Problem
Wie oben schon mal angefragt: Vlt. eine unvollstaendige sensitivity Liste? Daraus resultierend ein Latch?
berndl schrieb im Beitrag #2488740: > Wie oben schon mal angefragt: Vlt. eine unvollstaendige sensitivity > Liste? Daraus resultierend ein Latch? Meist läuft es in der Hardware, doch für den Simulator sind die sensitiv Listen ganz wichtig. Doch hier ist es anders herum im Simulator
-
Thread
Flipflop und Latch
aber als T-Latch _synthetisiert_, zusammen mit einer dezenten Warnung: da fehle ein Signal in der Sensitivity-List und es werde ein Latch eingebaut. Das ist ein gern gemachter Fehler.
Kombinatorik im Prozess, keine Defaultzuweisung (else... bzw. when others...) --> Latch Eine unvollständige Sensitivity-Liste dazu, und das Ganze verhält sich in der Simulation grundlegend anders als in der Realität.
-
Thread
Bidirektional in_out
falsch zu sein, so wirst du ungewollt irgend ein latch einbauen, weil hilfe und b nicht in der sensitivity-list stehen. Zudem hast du das problem das du nie den Wert 'Z' auf den Ausgang zuweist. 'Z' ist ja bekanntlich high-Impedanz process (a, b, c) begin if a = '0' then b <= 'Z' c <
klar und deutlich. Das Latch wird aber nicht eingebaut... > ...weil hilfe und b nicht in der sensitivity-list stehen. Die Sensitivity-List wird *nur* von der /Simulation/ verwendet. Falls die /Synthese/ auf eine unvollständige Liste trifft, wird sie dir lediglich ein paar Warnungen servieren.
-
Thread
Variable vs Signal
Ersetzen der Variable durch ein Signal wird schon mal die Sens-List vergessen. In der Hardware werden beide Prozesse (abgesehen von einer Warnung wegen der unvollständigen Sens-List) sowieso identisch realisiert (Bild). Korrekt müsste die Sens-List vom proc2 so
Ich hab solche Prozesse mit was anderem als das Taktsignal in der Sensitivity-List eigentlich überhaupt ... Mach ich irgendwas falsch? Grüße thomas
-
Thread
Verständnissproblem sequeziell/parallel
ein asynchroner Process, z.B. ein Bus-Multiplexer: process(Select, Bus1, Bus2) Für die Sensitivity List gibt es klare Regeln. Ist der Process syncron steht da nur die Clock! Eventuell noch ein asynchroner Reset, obwohl man asynchrone Resets heutzutage eigentlich nicht mehr verwendet( XILINX hat
das in ihrem WhitePaper WP272 schön beschrieben). Ist der Process asynchron, dann müssen in der Sensitivity List alle Signale stehen, deren Wert GELESEN wird. Ansonsten produziert man da Latches und die will man nicht. Bsp: RICHIG: ------- process(Select, Bus1, Bus2) begin if Select='0' then
-
Thread
4-Bit CPU in VHDL - Synchronisationsproblem
Hi Lothar, ich danke dir für deine Hilfe, vorallem für die Tips bzgl. Sensitivity-Lists. Das Latch habe ich dann auch erkannt (bzw. das Xilinx Tool hat es mir im Report gemeldet), als ich eine Timing-Simulation durchführen wollte. Allerdings durchschaue ich noch nicht, wieso
Concurrent machen muss. Was ist so schlecht an einem eigenen Prozess (einmal abgesehen von meiner unvollständigen Sens-List ;-))? Viele Grüsse, F. P.S: Das Delay von einem halben Takt kam in der Testbench auf. Der Reset war zur fallenden Clk-Flanke beendet, und sofort startete das MemEn...
-
Thread
Was ist der Unterschied zwischen Process und Guarded Block in VHDL?
Hi, meinen Kenntnissen nach: Process: -Wird ausgeführt sobald sich etwas in der "sensitivity list" ändert. -Ist Synthetisierbar Block: -Wird immer ausgeführt. -Signalen mit dem Schlüsselwort "GUARDED" werden nur dann Werte zugewiesen, wenn die Blockabfrage TRUE liefert. -Ist nicht
KIKOKA schrieb im Beitrag #4208144: > Process: > -Wird ausgeführt sobald sich etwas in der "sensitivity list" ändert. Er wird nicht "ausgeführt". Sondern ein Prozess wird vom Simulator "neu berechnet", wenn sich eines der Signale in der Sensitivliste ändert. Den Synthesizer interessiert die Sensitivliste
-
Thread
Zählen bei Ereignis
Ich muß nochmal nachhaken ... Gerade lese ich in einem Vorlesungsskript, daß Prozesse (mit Sensitivity-Liste) nur dann ausgeführt werden, wenn sich einer der Parameter ändert: "The process doesn't run continuously! It will be started only after change (event) on any signal in its sensitivity list
Sensitivliste ist ausschließlich für den Simulator. Der Synthesizer gibt nur eine Info aus, dass bei unvollständiger Sensitivliste die Simulation nicht mehr zum Syntheseergebnis passt. > Wenn dem so wäre könnte ich mir doch die Abfrage nach rising_edge oder > falling_edge sparen?! So wie dort etwa: http
-
Thread
Frage zu VHDL Code
if Konstrukt heisst üblicherweise process heisst sensitivity list. Ist die unvollständig? sind die signale in der list gesetzt? Also dein codeschnipsel ist OK, der Fehler liegt in den anderen zeilen. [vhdl] process(clk_i,rst_i) --sensetiivizy list (Takt, async. reset) if rst_i = '1' then --synchroner reset stat_reg(4)<='0' elsif rising_edge(clk_i) then --dein code if XA_4 = '1' then stat_reg(4)<='1'; else stat_reg(4
-
Thread
FSM springt nicht in nächsten Status
Richtig, nur CLK in die Liste. Die sensitivity-list eines process ist _nur_ für die Simulation interessant. Wenn sich der Zustand eines der Signale in der Liste ändert, wird die Simulation neu berechnet. Die Synthese legt mit einer unvollständigen Liste ein paar Warnungen vor, macht aber sonst alles richtig (fügt die Signale selbständig ein). Und in dem von mir beschriebenen getakteten Prozess kann sich nur was ändern, wenn sich CLK
-
Thread
flankenerkennung für externen takt
S. PS: > BTW: die Simulation ist garantiert falsch, denn die Sensitivliste ist > unvollständig. Wenn du schon einen asynchronen Reset beschribst, dann > muß der auch mit rein: > process(RESET,CLK) ... Hmmm, ist das nicht ein synchroner Reset in dem Beispiel, und damit dann die Sensitivity Liste richtig ? :-) Aber ich nehm auch lieber Async Reset ...
-
Thread
Post-Map simulation mit ModelSim
.... ENDIF; [/vhdl] Wenn du "wait until..." verwendest, dann musst du die Sensitivity List nicht mehr angeben. Dann gibt es auch keine fehlenden Signale mehr. Grüße, Jens
dann später beim Map etwas entfernt wird. Anton K. schrieb im Beitrag #7722158: > Was die Sensitivity List anbelangt, so empfehlen die Xilinx(AMD) Leute > es soll für Kintex7 nur voll synchrone betrieb sein d.h. auch das nrst > soll voll synchron mit clk. Darum synchronisiere ich in separaten
-
Thread
Xilinx Latch Problem
aber dort soll ValuexD ja auch denselben Wert behalten. Und im naechtsen state habe ich eine unvollstaendige if-Schleife aber wenn ich nach der Bedingung "if ValuexD >= 9999 then" eine Zuweisung mache z.B. ValuexD <= 0, dann kommen die Warnungen immernoch... Gruss und Danke.
Deine Sensitivity-Liste im ersten Prozess ist kompletter Muell! Damit waere (falls hoffentlich vorhanden Simulation!=Implementierung). Und dein 'case' im ersten Prozess ist nicht vollstaendig. Wenn keiner deiner
-
Thread
VHDL Einsteigerfragen
manchmal viele Wege nach Rom... Du sparst dir dann die ganzen statements mit process und der sensitivity-Liste (die uebrigens nur fuer die Simulation relevant ist). Und weil Lothar oben schon was zu Peters Kommentaren gesagt hat: Ignoriere den Peter, das ist ein VOLLHONK!
verstanden habe, werden die Prozesse auch nur > abgearbeitet, wenn sich bei dem Item(s) in der Sensivity List etwas > ändert In der Simulation "eigentlich" ja (muss nicht streng für alle Simulatoren gelten, einige ergänzen wohl z.B. auch unvollständige Sensitivity-Listen.) In der FPGA-Hardware existieren
-
Thread
Nicht-Spezifische Latch-Warnung
"SIGNALMANIPULATION" ist doch kombinatorisch. D.h. alle signale die sich ändern müssen in die Sensitivity list, sonst wirds ein latch.
SIGNALMANIPULATION" ist doch kombinatorisch. D.h. alle > signale die sich ändern müssen in die Sensitivity list, sonst wirds ein > latch. Falsch. In die Sensitivliste müssen alle die Signale, die eine /Änderung/ eines andere Wertes bewirken. Dann berechnet der /Simulator/ bei einer Änderung des Wertes
-
Thread
verschiedene Teile von std_Ulogic_vector aus mehreren Processen zuweisen
Hallo, > Es hilft aber auch nicht, wenn ich in der Sensitivity-List des Prozesses > genau sig(2 downto 0) angebe. Dann dürfte der Prozess gar nicht mehr ausgeführt werden da sich in sig(2 downto 0) ja ohne den Prozess selber nichts ändert. Leider fehlt
dem VHDL-Standard) > einmal beim Simulationsstart und ... Das das auch für Prozesse /mit/ Sensitivity-List zutrifft wuste ich noch nicht. Danke für den Hinweis. Grüße Erik
-
Thread
Outputsignal bleibt gleich
gegateten kombinatorischen Schleifen dann gern als Latch. Ich hol mal den Prozess mit der unvollständigen Sensitivliste extra raus und kürze ihn etwas ein: [vhdl] output_logic : process(present_state) begin if (present_state = state_go) then case WIDTH is --definitions
Lothar M. schrieb im Beitrag #4971091: > Ich hol mal den Prozess mit der unvollständigen Sensitivliste extra raus > und kürze ihn etwas ein Deshalb hatte ich mir angwohnt, (nahezu) *alles* als getakteten Prozess zu schreiben ... Dann muss ich mir auch keine Gedanken um die Sensitivity-Liste
-
Thread
DCF-Signal auswerten
ein Schieberegister. Mach Zähler am besten mit /integer/, das kann man besser lesen. Die Sensitivity-List ist unvollständig, da fehlt /sig/. In einem getakteten Prozess findest du bei mir nur den Clock in der Sensitivity-Liste, oder gleich gar nichts, weils mit /wait until rising_edge/ realisiert
-
Thread
PWM Signal erzeugen
Vereinfachung. Folgendes Misverständnis sehe ich: [vhdl] process (reset,clk) begin -- Sesitivity-List unvollständig, -- weil "and clk'event" fehlt, -- müsste inp für eine korrekte Simulation mit aufgenommen werden if (reset='1') then outp <= '0'; elsif (clk='1') then
sie überhaupt nicht, weil im FPGA nicht Prozesse laufen, sondern FFs schalten. Wenn jetzt in der Sensitivity List Signale fehlen, dann werden diese vom Compiler (LEIDER) stillschweigend ergänzt, im besten Fall kommt eine Warnung. Sythese und Simulation stimmen dann nicht überein. Im obigen Beispiel
-
Thread
Signalverfolgung in der Post-Place Analyse
Probleme hast gibt es zwei Gründe die zu 90% Wahrscheinlichkeit dafür verantwortlich sind: - Deine Sensitivity-Listen sind nicht vollständig, es wird was anderes simuliert, als dann synthetisiert wird. - Deine Timing-Constraints sind nicht korrekt oder unvollständig. Wenn diese beiden Dinge korrekt
-
Thread
Zuweisung im Concurrent Statement
dass so ein Latch ungewollt entsteht, und sich das Design in der Simulation (z.B. wegen einer unvollständigen Sensitivity-List) anders verhält als in der Zielhardware. Hier ein kleines Beispiel: http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess Und nicht immer ist die Beschreibung so kompakt
-
Thread
VHDL Problem mit IF
das ab, was er beschrieben hat. Sein Problem ist, dass er seinen Prozess nur mit "clk" in der Sensitivity-List "triggert". Daher reagiert der Prozess nur bei Änderung von Clock. Seine ganzen Zuweisungen macht er aber nur dann, wenn der Takt gerade KEINE STEIGENDE FLANKE aufweist. Alles, was bei
@ Lothar wasn da nicht ordentlich eingrückt ?? Davon mal abgesehen das es ein unvollständiges Beispiel sein sollte, um ihm mal grob die Richtung zu zeigen.