-
Thread
Automatenzustände schalten willkürlich um, ich bitte um Unterstützung
Im Prinzip ja. Dann brauchst du auch keine Sensitivliste mehr, bzw. du darfst keine mehr verwenden, weil so ein wait until ja nichts anderes als eine explizit ausformulierte "Sensitivliste" ist. Es heißt aber noch viel mehr. Denn es heißt, dass dir
Ich werde mal weiterlesen bezüglich Sensitivliste usw.. Habe hier auch schon den einen oder anderen passenden Beitrag zu gefunden. Allerdings ist es interessant, wirklich mal hinter die Kulissen zu blicken. Denn in der SPS funktioniert der Automat
-
Thread
Setzen einzelner Stellen eines std_logic_vector
einem Reset "aufgerufen" werden könnte. Und deshalb ist die Betrachtungsweise, dass da über die Sensitivliste irgendwelche Prozess irgendwie "aufgerufen" werden, grundlegend falsch. Die Sensitivliste sagt lediglich dem Simulator, bei welcher Signaländerung er deiner Meinung nach(!!) den Prozess neu berechnen
Schreibeweise drin… Noch ein Tipp: der Synthesizer schert sich einen feuchten Kehrricht um die Sensitivliste. Die ist nur für den Simulator da! Die Synthese "nimmt" sich einfach alle Signale her, die sie zur Umsetzung deiner Beschreibung in Hardware braucht. Und meldet das dann hinterher lapidar in einer
-
Thread
Prozesskommunikation / Flankenerkennung
stimmen, weil das ein kombinatorischer Prozess ist, bei dem blockOccured und der edgeCounter in der Sensitivliste fehlen... > Dieser soll die Anzahl der Kanten auf diesem Signal liefern, > also mit jeder Flanke um eins erhöhen Also einfach /zählen/. Zähler werden immmer mit Flipflops aufgebaut. Flipflops
anfangen: [vhdl] signal insr : std_logic_vector(2 downto 0); : process begin -- keine Sensitivliste bedeutet: keine FALSCHE Sensitivliste wait until rising_edge(clk); -- alles hört auf den 50MHz Takt -- Schieberegister zum Einsynchronisieren insr <= insr(1 downto 0) & input;
-
Thread
4bit ladbarer Zähler
werden Mal abgesehen davon, dass dein Quelltext (immer noch) unschön formatiert ist, ist die Sensitivliste unvollständig. Eine Änderung von load bewirkt bei der Simulation daher nichts: [vhdl] count: process(clk,reset) begin -- hier fehlt load [/vhdl] Damit beschreibst du einen /asynchron/ setz
Ich hab nur mit ModelSim simuliert. Du kannst ohne weiteres dein Design (nach Erweiterung der Sensitivliste um das fehlende /load/) simulieren. Aber in der Hardware wird dann an die asynchronen Set- und Reset-Eingänge der FF Kombinatorik eingebaut. Und Kombinatorik im asynchronen Resetpfad (genauso wie
-
Thread
FSM : Prozess wird genau 2 mal getriggert
die Synthesizer können. Ich kann meine Prozesse in der Ein-Prozess-Schreibweise ganz OHNE Sensitivliste recht einfach lesen und warten: http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html Denn wenn ich /gar keine/ Sensitivliste habe, dann habe ich sicher keine /falsche/ Sensitivliste
-
Thread
Verständinsfrage bezüflich State Machine Testbench
Kombinatorische-Schleifen.html > und in der Simulation macht er den Schritt nur einmal und das wars. Dann ist deine Sensitivliste unvollständig. > Ich hoffe ihr könnt mir den Knoten auflösen. Du /musst/ *alle* Signale, die eine Neuberechunng des Prozesses nötig machen, in die Sensitivliste aufnehmen. Also alle Signale, die rechts von := oder <= oder in einer if- oder case-Abfrage stehen. Und wenn du deine Sensitivliste dann vervollständigt hast, dann kommt die kombinatorische schleife auch im Simulator zutage... ;-) Mampf F. schrieb im Beitrag #5181475: > Tipp von mir: Man kommt fast immer mit Prozessen aus
-
Thread
4 Bit Zähler
Mo schrieb im Beitrag #5694955: > Wie kann Ich mein Programm ändern ? Vorneweg: die Sensitivliste deiner Beschreibung muss hier eigentlich nur den Takt enthalten. DIR ist unnötig, denn der Prozess mus bei einer Änderung von DIR nicht neu berechnet werden: [vhdl] counter:process(ClkLeft,DIR) [/vhdl] Als Tipp: die Sensitivliste ist /ausschließlich/ für den Simulator relevant. Der Synthesizer nimmt "automatisch" fehlende signale dazu oder lässt überflüssige weg. Allerdings passt bei einer falschen Sensitivliste das Simulationsergebnis
-
Thread
Probleme VGA-Controller
Timing-Problem aus. Und was sagt die Simulation? Die Simulation wird übrigens flasch sein, denn die Sensitivliste ist unvollständig! Man mischt nicht (wie von Fpga Kuechle schon angemerkt) Kombinatorik und getaktete Abläufe in einen Megamonsterprozess hinein! [vhdl] process(clk, reset) is begin
then ---- Hoppla, da kommt noch was! ... -- counter_h fehlt in der Sensitivliste end if; if counter_v<3 then -- counter_v fehlt in der Sensitivliste ... end if; .... [/vhdl] Auch interessant: was sagt das Oszilloskop? Hast du brauchbare
-
Thread
Statemachine springt in falsche "states" warum?
aus der Sensivitätsliste entfernt Das juckt den Synthesizer natürlich überhaupt nichts. Die Sensitivliste ist nur und ausschließlich für die Simulation interessant.... Eine unvollständige Sensitivliste sorgt nur dafür, dass die Simulation falsch ist und nicht zur erzeugten Hardware passt.
mit dem input Pin versucht und hier lief es wieder > nicht. Wie Lothar schon schrieb, die Sensitivliste wird von der Synthese schlicht ignoriert. Wenn aber das Ändern eines NICHT aktivierten Externen Resets in einen nicht aktiven intern Reset eine Änderung deines Designs bringt, dann würde ich
-
Thread
Allererster Versuch - Frequenzteiler
clock_counter) begin > wait until rising_edge(clk); Ein Prozess mit einem wait darf keine Sensitivliste haben! Denn die Sensitivliste ist ja einfach eine /andere/ Schreibweise für ein /wait/. > auf "clock_all" soll der geteilte Takt ausgegeben werden. Der aber dann hoffentlich "nur" als Signal
: [vhdl] architecture behave ... begin y <= a and b; -- concurrent: implizite Sensitivliste process (a,b) begin -- sequential: explizite Sensitivliste y <= a and b; end process; end behave; [/vhdl] > Ach ja, die Denkfehler bei der Teilerei sind peinlich, das
-
Thread
Schieberegister und Latch
finde Variablen deutlich übersichtlicher. Das größte Manko: du kannst eine Variable nicht in die Sensitivliste eines Prozesses aufnehmen. Und das ist bei speichernden Variablen schlecht. Aber wiederum nur, wenn sie Latches bilden. Siehe den Klassiker: https://www.mikrocontroller.net/topic/117630
Lothar M. schrieb im Beitrag #4901693: > Das größte Manko: du kannst eine Variable nicht in die Sensitivliste > eines Prozesses aufnehmen. Und das ist bei speichernden Variablen > schlecht. Aber wiederum nur, wenn sie Latches bilden. In einem Synchronen Design steht in der Sensitivliste bei mir eh
-
Thread
Clock-Signallaufzeit
von eben diesem Prozess. Die _cs Signale werden außerdem nur gelesen und stehen in den jew. Sensitivlisten. So weit, so bekannt. SIG1_cs bis SIG100_cs stellen sehr viele FFs dar, die prinzipiell alle gleichzeitig über taktflankengesteuerte FFs mit ihren _ns Werten beschrieben werden, aufgrund ihrer
Daniel R. schrieb im Beitrag #3752839: > zu schreiben, aber nicht: Ja klar: hier ist die Sensitivliste falsch, weil unvollständig. Wir hatten das schon im https://www.mikrocontroller.net/topic/117630#1058849 > denn hier passiert die Zuweisung an tmp nebenläufig oder anders gesehen > am "Ende
-
Thread
Lockerer Counter auf VHDL
den Prozess neu, wenn sich der Zustand eines der Signale ändert. Ein fehlendes Signal in der Sensitivliste ergibt unbedingt eine falsche Simulation. Die Synthese gibt bei einer unvollständigen Sensitivliste eine Warnung/Info aus und fügt das Signal selbständig ein.
den Prozess neu, wenn sich der Zustand eines der > Signale ändert. Ein fehlendes Signal in der Sensitivliste ergibt > unbedingt eine falsche Simulation. Die Synthese gibt bei einer > unvollständigen Sensitivliste eine Warnung/Info aus und fügt das Signal > selbständig ein. Verstehe. Damit ist obige
-
Thread
Adress-Daten Latch Ansteuerung mit VHDL
zwischen SRAM-INPUT-OUTPUT-LED. Wie viel Zustände habe ich da? Wieviel Signale sollten zur sensitivliste gehören? weinige Erfahrung habe ich zur FSM Grüße
reichen zwei Zustände: 1. Daten anlegen 2. Latch-Impuls erzeugen > Wieviel Signale sollten zur sensitivliste gehören? Diese Frage ist hier fehl am Platz. Das ist wie wenn du fragst: wieviele Schrauben brauche ich für ein Auto?
-
Thread
Fehler Meldung
funktioniert das oben beschriebene Konstrukt wunderbar. Der Eintritt in den process wird überdie Sensitivliste gesteuert. Bei jeder Änderung eines der Sensitivlist-Signale wird der Prozess bearbeitet. Siehe dazu Simulationstherorie. Wie sieht's jetzt aber beim Synthetisieren aus? Ich bin da auch
kann man sagen; ein process wird zu einem Baustein. Nun besitzt dieser Baustein aber keine Sensitivliste (Nur für Simulation nötig). Sondern nur Eingänge. Diese Eingänge werden auf eine kombinatorische Logik geroutet. Der Ausgang des Bausteins ist im Prinzip nichts anderes als der Ausgang der kombinatorischen
-
Thread
Alle Signale die im Prozess gelesen werden in die sensitivity list eintragen
brauchst du NUR clk. Und bei einer fallenden Flanke? Nur zur sachlichen Richtigstellung: 1. Die Sensitivliste ist ausschließlich für die Simulation relevant! 2. In die Sensitivliste muss jedes Signal, das eine Neuberechnung des Prozesses nötig macht. 3. Die Neuberechnung eines Prozesses ist nötig, wenn
-
Thread
Sensitivity List eines Prozesses
. > Hallo ich glaub, hier geht was durcheinander. Im VHDL Code existieren, Prozesse, Sensitivlisten und z.B. Schliefen. In der Simulation des VHDL Codes werden die Schleifen sequentiell durchlaufen; so wie in C auch. Das kann man beim Debuggen in Modelsim sehr gut sehen. Man sieht auch, dass
Netzliste, deren Pfade parallel abgearbeitet werden. Ab hier sind dann die ursprünglichen Prozesse, Sensitivlisten und Schleifen nicht mehr vorhanden. Debuggen kann man das auch noch aber das macht keinen Spass ;-). Gruß DaMicha.
-
Thread
Testbenchsignale undefiniert
p1; [/vhdl] Das ist eine eher aussergewöhnliche Clock-Enable Beschreibung und din ist in der Sensitivliste unnötig. Ich würde das ohne jede Funktionseinschränkung mit korrekter Sensitivliste so schreiben: [vhdl] process (clk) begin IF clk'event AND clk='1' THEN if we='1' THEN dout
-
Thread
Schieberegister PISO Probleme mit der Ausgabe
vermurkste Designs und Anfänger brauchen sowas. BTW: deine Simulation ist /FALSCH/, weil die Sensitivliste nicht komplett ist. Da fehlen enablesync und reset_sr. Deshalb ist der Screenshot auch teilweise so schön synchron zum fallenden(!!) Taktflanke, obwohl die Signale asynchron sind...
Habe die Sensitivliste vervollständigt. Des Weiteren meinst du ich sollte den Reset heraus nehmen. Ich wusste nicht das dieser besser weggelassen wird. Ich dachte das wenn mal ein Fehler auftaucht das ein Reset gedrückt
-
Thread
Maxwert eines Integer-Ranges
begin if le='1' then dout <= din; end if; end process; [/vhdl] und die Sensitivliste durch ein /wait/ ersetzt werden könnte: [vhdl] process begin wait until le='0' or le='1' or din='0' or din='1'; -- ersetzt die Sensitivliste if le='1' then dout <= din;
-
Thread
Probleme mit Statemachine
tmp_busy ungetaktet ist und state getaktet (so > wie es sein soll). Mir fällt auf, dass in der Sensitivliste des kombinatorischen Prozesses fast alle nötigen Signale (dat_i, a und wd) fehlen... Chris schrieb im Beitrag #3408981: > Das busy-signal wird richtig gesetzt, aber der state wird nicht sofort
in der Simulation zupassen :) Bei der letzten Version sieht das gut aus, die Sensitivlisten passen. > Hoffentlich klappt dann auch die Synthese Viel Erfolg... ;-)
-
Thread
Auswahl Taktausgang
sit /keine/ gute Idee, ohne Nachzudenken einfach mal alle irgendwie beteiligten Signale in die Sensitivlisten zu schreiben. Ich würde statt des zweiten Prozesses mit der felherhafterweise überlangen Sensitivliste ("Ton" ist da zu viel) sowas "concurrent" oder "nebenläufig" schreiben: [vhdl] Ton
'; [/vhdl] Das liest sich m.E. wesentlich flüssiger und es gibt sicher kein Problem mit der Sensitivliste... Duke Scarring schrieb im Beitrag #4353084: > Wenn Du 'wait until' im process verwendest, muss die Sensitivity-Liste > leer bleiben So sagt es auch ie Fehlermeldung: >>> statement WAIT
-
Thread
Verilog for Schleife
warum? da steig ich noch > nicht ganz durch. Ich mache normalerweise VHDL, und da wäre die Sensitivliste nicht wichtig für die Synthese. Bei Verilog offenbar schon, und deshalb hast du dein Design ganz einfach mit start_compare *getaktet*: [c] always @(posedge start_compare) begin [/c]
Lothar Miller schrieb im Beitrag #2743152: > Ich mache normalerweise VHDL, und da wäre die Sensitivliste nicht > wichtig für die Synthese. Bei Verilog offenbar schon, und deshalb hast > du dein Design ganz einfach mit start_compare *getaktet*: Jein. Es gibt da nur einen sematischen Unterschied
-
Thread
ISE10.1 bemängelt schlechten VHDL-Stil
abgesehen wäre der obige Prozess nur auf den Takt sensitiv. Die beiden Reset-Signale sind in der Sensitivliste unnötig. > Was kann man da tun? Einen zweiten, dazu invertierten Takt definieren, > dessen steigende Flanke dann genutzt wird? Im Idealfall hast du in deinem Design nur 1 Mastertakt und alle
FPGA-Mastertakt: 33,333 MHz. SBYTECLK wäre die Hälfte davon. > Die beiden Reset-Signale sind in der Sensitivliste unnötig. Das dachte ich auch, hier meldet sich die ISE neuerdings auch mit Warnungen, wenn man meint, das wäre überflüssig. Ich musste die Sensitivitätslisten, die in der ISE 8.1. als einwandfrei
-
Thread
VHDL type conversion / Subtraktion
man die Vektoren entsprechend und rechnet einfach mit signed. > process (y) BTW: in diese Sensitivliste gehören a und b statt y, wenn es schon unbedingt ein Prozess sein muss...
ieee=synopsys subtraktion UUUUUUUUUUU 10000000001 [/code] >> process (y) > BTW: in diese Sensitivliste gehören a und b statt y, wenn es schon > unbedingt ein Prozess sein muss... Da hatte das Synthese-tool auch schon gewarnt, hatte aber andere Sorgen, zumal es trotzdem funktioniert hat. Ohnehin
-
Thread
VHDL InOut Ports
Ports angepasst werden müssen) und seine Simulation sicherer machen (den (Eingangs-)Record in die Sensitivliste und gut is). Der Anfänger lernt so aber gar nicht, was eine /unvollständige/ Sensitivliste bewirken kann. Wehe, wenn er dann mal ein "altes" Design in die Finger bekommt und ändern muss. Und er
-
Thread
Keine M4K Blöcke synthetisiert
= mean_val_div) then --werte sind aufaddiert und neue mux adresse liegt an [/vhdl] 1. die Sensitivliste ist überbestimmt. Es würden clk und nReset reichen. (Mir würde sogar clk alleine reichen...) 2. das ist eine noch sehr ungewöhnliche Art eines Clock-Enables, wenn in die Flankenabfrage
Eine Frage aber noch: Warum kein Async Reset? Generell oder nur beim RAM Zugriff? Und die Sensitivliste sieht so unschön aus, weil Quartus sonst beim synthetisieren meckert...
-
Thread
if-anweisung in vhdl ersetzen
auch einfach nur Latches sein. Soviel zum "kann"... :-/ Zeig mal den ganzen Prozess incl. Sensitivliste.
einfach nur > Latches sein. Soviel zum "kann"... :-/ > > Zeig mal den ganzen Prozess incl. Sensitivliste. danke für die Antworten.. hier mein process: process(valid, input_data, output_data, counter, matrix) begin if (valid(counter) = '1') then for j in 0 to 7 loop if
-
Thread
in VHDL 50MHz auf 2 Mhz runterteilen?
diesen Zähler dann in dem getakteten Prozess... Ja, und nur dort. Und sieh dir wie gesagt die Sensitivlisten nochmal an, sonst ist deine Simulation (und nur die interessiert sich dafür) schlicht falsch!
6 bis Bit 4 an AMPEL_N "gibt". Warum nicht? Was tut er denn? Wie schon erwähnt ist deine Sensitivliste unvollständig: [vhdl] UE_SN: process (ZAEHLER,ZUSTAND,FU_ANF_SET, H_ZAHL, N_ZAHL) -- hier fehlt noch AUSGANG, denn eine ÄNDERUNG von AUSGANG müsste auch AMPEL_H, AMPEL_N... ändern [/vhdl]
-
Thread
PWM Signal erzeugen
sich ganz anders. Für eine korrekte Simulation der /falschen/ Beschreibung fehlt "inp" in der Sensitivliste... Mit einem [vhdl]wait until clk='1';[/vhdl] wird das nie passieren, weil es keine Sensitivliste gibt.
-
Thread
Drehgeber (rotary encoder) - VHDL
rotary_a, rotary_b) > begin > wait untill rising_edge(clk); Ein WAIT zusammen mit einer Sensitivliste geht nicht... > > rot_ab <= rotary_a & rotary_b; Aus Versehen Glück gehabt: wenigstens 1 Flipflops zum Einsynchronisieren... > 1. Ich habe in der Sensitivitätsliste rotary_a und rotary_b
in der Sensitivitätsliste? Aber warum > gibt es dann Fälle, wo das clk nicht ausreicht? Die Sensitivliste verwendet nur der Simulator. Mit der Liste sagst du ihm, wann ein Prozess neu berechnet werden muss. Ein synchroner Prozess muss nur mit dem Takt neu berechnet werden. Ein kombinatorischer Prozess
-
Thread
Cant resolve multiple constant drivers
. Zum Thema "Eisberg": diese beiden Prozesse config und can_read haben eine komplett falsche Sensitivliste. Dadurch wird 1.) die Simulation nicht mehr zur Realität passen und 2.) nur wirres Zeug passieren. Die Sensitivliste wird nur vom Simulator beachtet. Sowas ähnliches ist auch im Thread https://
-
Thread
Sensitivity list wird ignoriert
Anweisung die zudem zu > Beginn des Prozesses stehen muss. (Bei mir der AUSLOESER Prozess) Eine Sensitivliste ist nichts anderes als ein verstecktes /wait until/ Das hier: [vhdl] PROCESS_INST : process (auswahl) begin -- warte auf beliebige Änderung von Auswahl if AUSWAHL = '0' then
'; else AUSGANG <= '1'; end if; end process PROCESS_INST; [/vhdl] Die Sensitivliste ist übrigens /ausschliesslich/ für den Simulator interessant!! Die Synthese fügt fehlende Signale selbständig dazu und meldet das mit einer knappen Info. Das wäre im ersten Codebeispiel aus dem
-
Thread
Seltsames Verhalten, Flanke wird nicht erkannt?!
reagiert. Das sieht für mich wie das normale Verhalten von Signalen in Prozessen aus: weil *keine Sensitivliste* involviert ist, wird die letzte Zuweisung erst beim nächsten wait übernommen, aber eben *nicht am Prozessende*! Deshalb hat nach der Zuweisung bei der nächsten if-Runde der Zustand der FSM
Ja, richtig, aber Sensitivliste und wait will der Simulator nicht. Bei deiner Lösung kann ich aber leider nur auf eine Flankenart von einem Signal reagieren. Ich möchte aber eben eine FSM in der ich in Abhängigkeit vom
-
Thread
Prozess-Sensivity-Liste leer lassen
das. Aber es wird dich einholen. Garantiert. In VHDL2008 gibt es auch die Möglichkeit die Sensitivliste mit (ALL) zu beschreiben.
Lothar Miller schrieb im Beitrag #2775939: > In VHDL2008 gibt es auch die Möglichkeit die Sensitivliste mit (ALL) zu > beschreiben. Danke, das hört sich gut an.
-
Thread
ISE erzeugt immerwieder andere JED Datei
Vergleicher) --> der kleinste Glitch kann takten [/vhdl] Und da fällt mir gerade noch was auf: deine Sensitivliste ist unvollständig, die Simulation ist falsch, da müsste eigentlich noch QD19 rein... Denk mal drüber nach. Und viel schlimmer: du hast einen asynchronen (Bäh), kombinatorischen (Bäbäh) Reset
Lothar Miller schrieb im Beitrag #2125680: > Und da fällt mir gerade noch was auf: deine Sensitivliste ist > unvollständig, die Simulation ist falsch, da müsste eigentlich noch QD19 > rein... > Denk mal drüber nach. Gut mach ich mal :) und werd das ganze mal überarbeiten. > Wenn schon, dann
-
Thread
VHDL Code Ausserhalb clk-process
getakteten Prozess /außerhalb/ des "getakteten" Bereichs machen. Denn sonst stimmt gern mal die Sensitivliste nicht und folglich ist die Simulation falsch: [vhdl] ARCHITECTURE Pld OF Pld_1 IS SIGNAL sig1 : std_logic; SIGNAL sig2 : std_logic; BEGIN PROCESS (clk) BEGIN led <= (sig1 OR sig2);
PROCESS; [/vhdl] Trotzdem ist in diesem Fall die Simulation /falsch/: weil sig1 und sig2 in der Sensitivliste fehlen, sieht es so aus, als ob sich led synchron zum Takt ändert. In der Realität macht der Synthesizer einfach eine kombinatorische Zuweisung... bitwurschtler schrieb im Beitrag #5399949:
-
Thread
flankenerkennung für externen takt
Zielsystem? Ist das ein FPGA oder CPLD? 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) ... > Also ich hab ein Systemtakt von 66MHZ und ein externer takt von 3kHz
glitchfrei? Gruss, 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
-
Thread
Seltsames FPGA Verhalten beim Systemstart
Werte in Variablen können dir die ganze Simulation zerhageln... Du kannst sie auch nicht in die Sensitivliste eines anderen Prozesses aufnehmen.
Variablen können dir die ganze Simulation > zerhageln... > Du kannst sie auch nicht in die Sensitivliste eines anderen Prozesses > aufnehmen. Wirklich alle? Hm, okay. Dazu hätte ich aber gleich mal eine Frage, denn bei den Signalen war ich mir bisher unsicher. Verstehe ich folgendes richtig
-
Thread
VHDL Impulszähler spinnt
nicht noch irgendwelcher kombinatorischer Klimbim, von dem ohnehin keines der Signale in der Sensitivliste auftaucht. Eine derart unvollständige Sensitivliste sorgt zuverlässig dafür, dass die Simulation nicht zur Hardware passt. Der Synthesizer sagt dir das auch, wenn du die Infos und Warnungen mal
-
Thread
Timer Prescaler
mit einem "wait" keinen asynchronen Reset beschreiben kannst. Mal überlegen: ein Prozess ohne Sensitivliste wird /ständig/ durchlaufen, bis zum nächsten "wait". Im Fall von Prescaler="00000000" oder Prescaler="00000001" kommt der Simulator aber niemals zu einem wait und rechnet sich zu Tode. Mach einfach
> funktioniert die Simulation. Sie ist aber /falsch/, weil das Signal "Prescaler" in der Sensitivliste fehlt. > funktioniert die Simulation. Aber nicht die Hardware. Man verwendet keinen asynchronen und zudem kombinatorischen Reset... > Ist das nicht praktisch das selbe? Es ist in beiden
-
Thread
Warum wird für die VGA-Darstellung mehr Verilog genommen als VHDL?
genau das muss doch der Unterricht abbilden. Warum schreibt jeder Student (clk, reset) in seine Sensitivliste? Weil er es so /gelernt/ hat. Man hätte ihm aber auch einfach das Nachdenken lernen können...
nicht gewollt, dass das jeder weiß. > Warum schreibt jeder Student (clk, reset) in seine > Sensitivliste? Ich frage lieber nicht.
-
Thread
Zählen bei Ereignis
glaube ich das gerne. Aber gilt das wirklich auch für > das synthetisierte Ergebnis? Nein! Die 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
-
Thread
Wie funktioniert dieses VHDL Programm?
nicht getaktet sein, es gibt auch Prozesse > ohne Takt. Und dann heißt es: Aufpassen bei der Sensitivliste! Denn jedes Signal, das eine Neuberechnung des Prozesses nötig macht, muss dort hinein. > Ein Prozess muss übrigens nicht getaktet sein, es gibt auch Prozesse > ohne Takt. Für den Synthesizer
nicht getaktet sein, es gibt auch Prozesse >> ohne Takt. > Und dann heißt es: Aufpassen bei der Sensitivliste! Denn jedes Signal, > das eine Neuberechnung des Prozesses nötig macht, muss dort hinein. Also praktisch *all* Signals. ;-) Lothar M. schrieb im Beitrag #6411678: >> Bestimmte Konstrukte
-
Thread
DE0nano VHDL VGA Controller
hat dein Synthesizer für diesen Prozess ausgegeben? Irgendwas mit "Simulation ist falsch, weil Sensitivliste unvollständig"? Und eines muss dir klar werden: der /hs/ ist KEIN Takt, der mit rising_edge() oder falling_edge() oder 'event verwendet werden darf!!! Und noch eins: du brauchst hier /garantiert
angehängt. Allerdings wird die Simulation immer noch /falsch/ (und damit nutzlos) sein, weil die Sensitivliste /unvollständig/ ist. Das wieht man wegen der kuriosen Schreibweise "getaktetA-kombinatorisch-getaktetB-kombinatorisch" aber sehr schlecht...
-
Thread
Entwicklung eines RAM mit Interface - Probleme mit der Synthese/Impl.
einer falschen Sensitivliste bestenfalls eine Meldung, dass die Simulation nicht mehr zur Implementation passt. Christoph Z. schrieb im Beitrag #6059507: > Hehe, ja, im Prinzip sollte das auch dein Ziel sein, keine Designs
-------------------- end if; end process; [/vhdl] Abgesehen von der falschen Sensitivliste mit unnötigem nWE und nicht verwendetem nOE sowie fehlenden data_fpga_write und ram vermischst du da im Prinzip eine getaktete Beschreibung und mit einer kombinatorischen Beschreibung dahinter.
-
Thread
Verilog Sensitivitätsliste
sieht man am IF Statement. Das ist bei VHDL auch nicht anderes. Wenn man versteht, dass die Sensitivliste in Verilog eigentlich ein Wait for Statement ist, kann man sich eine equivalente Beschreibung auch in VHDL ausdenken. Geht auch im Simulator, aber der Synthesizer erkennt nicht mehr dass es auf
statt zum Beispiel zu schreiben always@(posedge clk or reset). > Wenn man versteht, dass die Sensitivliste in Verilog eigentlich ein Wait > for Statement ist, kann man sich eine equivalente Beschreibung auch in > VHDL ausdenken. Wenn es ein wait statement ist, wäre meine Auffassung, dass auf die
-
Thread
Frequenzteiler im Zähler implementieren
[vhdl] : : -- state register for the count value P_REG : process (CLK,ARESETN) ---- Sensitivliste unvollständig!!! begin --- böse Sache, das hier: alle 3 Signale LOAD, PRE und TC fehlen in der Sensitivliste if ((LOAD = '1') and (PRE <= "11000")) then WiretoTC <= TC ; end if; -- zudem
-
Thread
Sensitivity list: Simulation vs. Synthesis
einfach so, dass der Simulator den Prozess neu berechnen muss, wenn sich eines der Signale in der Sensitivliste ändert. > Weiss das jemand genauer? Such mal hier im Forum, die Frage kommt immer wieder mal... Mit http://www.mikrocontroller.net/search?query=sensitivliste&forums[]=9 hättest du z.B. den
-
Thread
Was ist der Unterschied zwischen Process und Guarded Block in VHDL?
". Sondern ein Prozess wird vom Simulator "neu berechnet", wenn sich eines der Signale in der Sensitivliste ändert. Den Synthesizer interessiert die Sensitivliste nicht die kleinste Bohne. Mit ein wenig Glück sagt er nur, dass sie unvollständig ist und deshalb die Simulation nicht zur Hardware passen