Hallo Beim folgenden Code wird der Takt (Takt100) geteilt, indem bei der steigenden Taktflanke, das Signal für den halben Takt (Takt50) invertiert wird. Gleichzeitig wird der halbierte Takt bei der steigenden Flanke des ursprünglichen Takts einem Ausgang zugewiesen. Dazu eine Frage: Welcher Wert wird ausgabe jeweils zugewiesen ? (Der Wert von Takt50 wird ja sozusagen während der Zuweisung geändert) architecture Behavioral of code is signal Takt50: std_logic := '0'; begin process (Takt100) begin if (Takt100 = '1') and (Takt100'event) then Takt50 <= not Takt50; end if; end process; process (Takt100) begin if (Takt100 = '1') and (Takt100'event) then ausgabe <= Takt50; end if; end process; end Behavioral;
ausgabe hat immer den invertierten Wert von Takt50. Das liegt daran, dass Takt50 sich erst kurz nach der steigenden Flanke ändert. ausgabe übernimmt den Wert von Takt50, der bei der steigenden Flanke noch anliegt. ausgabe verpasst sozusagen die Änderung des Wertes von Takt50. Daniel
Und wenn man so machen würde? architecture Behavioral of code is signal Takt50: std_logic := '0'; begin process (Takt100) begin if (Takt100 = '1') and (Takt100'event) then Takt50 <= not Takt50; ausgabe <= Takt50; end if; end process; end Behavioral;
Der Takt wird sofort ausgegeben, wenn du die Ausgabe aus dem process rausnimmst: architecture Behavioral of code is signal Takt50: std_logic := '0'; begin process (Takt100) begin if (Takt100 = '1') and (Takt100'event) then Takt50 <= not Takt50; end if; end process; ausgabe <= Takt50; end Behavioral;
Nirgendswo gibts da ein Latch. Das ist doch die normale Vorgehensweise, interne Signale, wenn man die auch lesen will, und die werden mit nebenläufiger Zuweisung auf einen Ausgang gelegt. Das selbe macht man doch auch bei Zählern zB.
Das Ding hat keinen Takt, also ist es pegelgesteuert, also ist es rein hardwaretechnisch ein Latch(oder etwa nicht...wenn nicht, warum?). Macht aber in dem Fall nichts...
Nein, kein Latch. 'Takt50' wird auf auf jede steigende Flanke von 'Takt100' invertiert, also liegt nach der Flanke 'Takt50' am Ausgang des FlipFlops an. Eben dieser Ausgang wird dann noch als 'ausgabe' ausgegeben. Da wird rein gar nichts mehr gelatcht zwischendurch. Das ganze ergibt lediglich ein D-FF mit Loopback des Ausgangs invertiert auf den Eingang zurueck.
Das Latch ist hier im Takt50 zu sehen, wobei ich nicht wüsste, wo da das Problem ist und wie man es anders machen sollte und warum ... Der Ausgang ist kein Problem, kommt ja doch direkt aus einem Register. Etwas anderes wäre, wenn da noch reine Kombinatorik mit reden würde. Wenn die Ausgabe nochmal gelatched werden soll (z.B. zusätzliches Register, um es in die IO-Zelle zu packen) dann muss der Takt eben invertiert ausgegeben werden. Wenn die Flanken des 100ers und des 50ers passen sollen, dann eben nochmal durch ein FF durch: TAKT100 : 0101010101010101 TAKT 50 : 0110011001100110 nTAKT50 : 1001100110011001 (comb clocked : x1001100110011001 (clocked) Ausgabe : xxx00110011001100 (50clocked nochmal mit 100er geclocked) (Flanken passen) 2 clks delay
Warum eigentlich ist das so? zB. hier http://www.doulos.com/knowhow/vhdl_designers_guide/processes/ steht "The statements within processes execute sequentially, not concurrently." Also wenn diese beide Anweisungen in einem precess sind, sollte das auch "richtig" sein, oder? : architecture Behavioral of code is signal Takt50: std_logic := '0'; begin process (Takt100) begin if (Takt100 = '1') and (Takt100'event) then Takt50 <= not Takt50; ausgabe <= Takt50; end if; end process; end Behavioral;
Was verstehst Du unter richtig ? Es In Deinem Beispiel oben werden 2 FF erzeugt, und Ausgabe ist zu Takt50 um eine Flanke verzögert. Wenn du ausgabe <= Takt50; aus dem Process herausnimmst, dann sind "ausgabe" und "Takt50" synchron. Es hängt davon ab was man wünscht. Grüße Klaus
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.