Gast
#251036
Guten Tag! Ich habe hier in diesem Forum schon einige Threads über die Generierung eines Takts mittels FPGAs gelesen. Doch dies waren zumeist nur einfache Taktteiler. Wenn ich nun aber einen Takt brauche, welcher z.B. 17,5Hz beträgt, was kann ich dann machen? Ok, zugegeben, ich werde wohl nie einen solchen Takt brauchen. Aber nun auf was ich hinaus will: Bei allen Taktteilern, die ich bisher gesehen habe wurde mit Zählern gearbeitet, welche hoch- bzw. heruntergezählt werden, sodass dadurch ein neuer Takt entsteht. Dabei ist mir aufgefallen, dass solche Zähler sehr viele Ressourcen im FPGA verbrauchen und eigentlich nicht effektiv sind. Deshalb habe ich einmal versucht, eine Taktgenerierung mittels Zeitkonstanten zu verwirklichen. Hier erst einmal der Code: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity test is port(clk: in Std_Logic; takt: inout Std_Logic); end test; architecture Behavioral of test is constant zeit: time := 1000 ms; begin takt <= not takt after zeit/2; -- 1 Hz ......... ......... end Behavioral; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Dieser Code lässt sich zwar synthetisieren, aber in ModelSim sowie auf meinem Xilinx Spartan3 Starter Board(takt hängt an einer LED) tut sich gar nichts. Nun habe ich gehört, dass diese Methode nur in einer TestBench funktioniert. Doch andererseits habe ich folgenden synthetisierbaren Code gefunden: Der Code stellt ein einfaches NOR-Glied dar, welches nur auf Impulse die größer als 5 ns sind reagiert: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< .. Architecture Norglied of norgl is C <= a NOR b AFTER 5 ns; End Norglied; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Der Code mit dem NOR-Glied sollte ja wohl kaum etwas in einer TestBench verloren haben, deshalb schließe ich darauf, dass der Code so auch funktioniert. Da ich Anfänger bin und mit ModelSim noch nicht wirklich umgehen kann weiß ich aber nicht zu 100%, ob der Code funktioniert. Laut Autor funktioniert er auf jeden Fall. d.h. wenn dieser Code funktioniert, müsste mein Code doch auch funktionieren, oder? Könnt ihr mir nun sagen, warum meine Methode, einen Takt zu generieren, nicht funktioniert? Ist das überhaupt möglich, oder muss man solche Sachen wirklich immer mit Zählern erledigen? Wenn es nicht möglich ist, warum gibt es dann überhaupt die AFTER- Anweisung? Ich freue mich schon auf eure Antworten. Vielen Dank schon einmal im Voraus! Mit freundlichen Grüßen Daniel!