VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
VHDL-Forum
27 Treffer gefunden
Suchdauer: 0,01 Sekunden
VHDL-Forum Anfang   zurück   weiter   Ende
   Betreff   Autor   Datum 
No new posts Re: Quartus II ignoriert "AFTER"
Hallo Ontos. Ich arbeite zwar nicht mit Quartus aber ich denke, das Verzögern von Signalen sollte funktionieren. Probiere mal folgendes aus: f <= x1 after 10 ns; f2 <= x2 after 20 ns; Das sollte eigentlich funktionieren. Vielleicht noch als Info. Der after Befehl sollte nur in Testbenches benutzt werden, da er nicht synthetisierbar ist. In der Regel wird er vom Synthetisierer ignoriert. In der Behavorial Simulation solltest Du die Verzögerungen sehen und in den Post-Translate, Post-Map und Post-Route Simulationen nicht mehr. Dort siehst Du dann die Gatter- und Routing-Verzögerungen (liegen im unteren ns Bereich). Gruß DaMicha.
DaMicha 26.02.07, 12:38
No new posts Re: Quartus II ignoriert "AFTER"
Hallo Ontos. Gut das Du mal das Bild dazu hineingestellt hast. Schau Dir mal die Periode von x1 und x2 an. Die ist 200ns und 100ns. Das sind Teiler von der Verzögerung um 200ns und 500ns. Du schiebst f2 so weit in der Zeit, dass sie sich mit der Funktion f deckt. Versuche mal kleinere Verzögerungszeiten: z.B.: [code] f <= (x1 AND NOT x2) OR (NOT x1 AND x2) AFTER 20 NS; f2 <= (x1 AND NOT x2) OR (NOT x1 AND x2) AFTER 50 NS; [/code] Gruß DaMicha.
DaMicha 22.02.07, 09:08
No new posts Re: Hilfe undeclared identifier FILE_open_status
Hallo. Versuch mal: [code] FILE readfile : text open read_mode is "dateiname.endung"; [/code] oder [code] FILE readfile : text is in "dateiname.endung"; [/code] Gruß DaMicha.
DaMicha 15.02.07, 09:38
No new posts Re: VHDL Konverter
Hallo Du könntest Dir den Quellcode als PDF ausdrucken, das dann mit dem Adobe Reader anzeigen lassen und dort den Text herauskopieren und in Word einfügen. Gruß DaMicha.
DaMicha 04.02.07, 12:06
No new posts Re: Case Anweisung
Hallo. Ich bin mir nicht ganz sicher, aber ich denke, für den Case muss der Typ bekannt sein. Also auch die Bitbreite. Versuche mal folgenden Funktionsheader: function CATANH(n: std_logic_vector(31 downto 0)) return std_logic_vector is -- ln, sqrt alternativ könntest Du eine Zwischenvariable einführen, der Du n zuweist und auf der das Case dann angewendet wird. Gruß DaMicha.
DaMicha 25.01.07, 07:52
No new posts Re: Schaltung
Hallo. Im Prinzip genauso wie bei der Statezuweisung: [code] green <= '1' when (phase = "000" or phase = "001" or phase = "010") else '0'; [/code] yellow und red dann analog nach Deiner Tabelle. Gruß DaMicha.
DaMicha 09.01.07, 07:06
No new posts Re: Xilinx Problem
Ja, kannst Du machen. Einfach untereinander schreiben. Also pro Flanke: [code] if (reset_n = '0') then ... elsif (ctxx'event and ctxx = '1') then ... end if; [/code] Gruß DaMicha.
DaMicha 28.12.06, 16:35
No new posts Re: Xilinx Problem
Hallo freshharry. Dein Code ist nicht synthetisierbar! Sobald Du eine Aktion bei einer Flanke machst, kannst Du keinen Else-Zweig mehr anhängen. Also [code] if reset_n = '0' then mem_ctup <= '1'; elsif (ctup'event and ctup = '0') then if (ctdown = '1' and cthold = '1' and ctreset = '1') then mem_ctup <= '1'; end if; end if; [/code] lässt sich synthetisieren und [code] if reset_n = '0' then mem_ctup <= '1'; elsif (ctup'event and ctup = '0') then if (ctdown = '1' and cthold = '1' and ctreset = '1') then mem_ctup <= '1'; end if; else ... irgend etwas ... end if; [/code] nicht. Es gibt (soweit ich weiß) einfach kein real existierendes Bauelement, dass diese Funktion umsetzen könnte. Vielleicht hast Du einen Takt zur Verfügung. Mit dem kannst Du Dir die Taster mit einem Register einsampeln und dann schaun, ob sich was geändert hat: Alter Wert 0, neuer Wert 1 -> Steigende Flanke. Ja, Du kannst mehrere Resetsignale verwenden. Gruß DaMicha.
DaMicha 28.12.06, 15:49
No new posts Re: P_Regler in VHDL
Hallo. Poste doch mal die Fehlermeldungen vor dem FATAL ERROR oder versuche zu beschreiben, wie es dazu kommt. Gruß DaMicha.
DaMicha 18.12.06, 08:26
No new posts Re: P_Regler in VHDL
Hallo ousmou. das sollte relativ einfach sein. Erstmal musst Dir klar sein, was ein P-Regler macht. (Hab erstmal wieder nachschaun müssen ;-). Dann solltest Du Dir Gedanken über die Ein- und Ausgangssignale machen. Von welchem Datentyp sind die vom Regler zu verarbeitenden Signale? Integer, Fixed-Point (ist einfach zu implementieren) oder Floating Point (benötigt eventuell noch zusätzliche Bibliotheken). Soll die VHDL-Komponente getaktet sein? Wenn ja brauchst Du ein Takt- und ein Reset-Signal. Du kannst ja mal die Rahmenbedingungen Posten und vielleicht schon den VHDL Componenten-Header. Gruß DaMicha.
DaMicha 15.12.06, 08:42
No new posts Re: Wie kann ich Zuweisen
Hallo Martin. Du brauchst ein Zwischensignal, mit diesem das Port Mapping und dann die Zuweisung auf Deine Signale. [CODE] signal ref : TYPE_MOD_REG(1 to NR_OF_PHASES); ... port map (i_reference => ref); i_reference_1_sg <= ref(1); ... i_reference_4_sg <= ref(4); [/CODE] Gruß DaMicha
DaMicha 30.11.06, 09:38
No new posts Re: VHDL Befehlsliste
Hallo Viktor. "Schaltungsdesign in VHDL" ist gleich ein ganzes Buch und wie ich finde ein sehr gutes. Hat auch ein Stichwortverzeichnis ;) : http://www.itiv.uni-karlsruhe.de/opencms/opencms/de/study/vhdl/book/download.html Ansonsten vielleicht: http://www.vhdlbuilder.com/index.php?page=reference oder http://tech-www.informatik.uni-hamburg.de/vhdl/doc/kurzanleitung/vhdl.pdf Gruß DaMicha.
DaMicha 28.11.06, 12:19
No new posts Re: Wann macht VHDL Sinn?
Moin Happy. [quote] [quote] * das Design schafft die geforderte Taktfrequenz (z.B. 20 MHz) [/quote] Ist damit gemeint das, wenn ich z.B. auf einen steigende Flanke beim Clock reagiere das Programm bis zur nächsten steigende Flanke einmal durchgelaufen sein muß? [/quote] Ja fast, nur das es sich nicht um die komplette Logik handeln muss, sondern auch nur eine Teilaufgabe abgearbeitet werden kann. Mal ein Beispiel: x = (a + b) + (c + d) a,b,c,d,x sind Register und die Plus Operatoren ist die Logik, die diese verknüpft. Es müssen also die drei Plus-Operatoren innerhalb eines Taktzykluses durchgeführt werden. Wobei die geklammerten parallel ausgeführt werden können. Der Takt muss also so langsam sein, dass 2 Plus Operatoren ausgeführt werden können. Man kann die Aufgabe aber auch aufteilen (mit zwei zusätzlichen Registern x1, x2): x1 = a+b x2 = c+d im ersten Takt und x = x1 + x2 im zweiten Takt. Das Ergebnis ist das gleiche nur das zwei Takte benötigt werden. Dafür benötigt man nur noch die Laufzeit von einer Addition zwischen den Registern. Der Takt kann also schneller sein. [quote:diehappy] [quote] [quote] Macht VHDL eher bei großen oder auch schon bei kleinen Projekten Sinn? [/quote] Meinst Du jetzt im Vergleich zu Verilog (andere Hardwarebeschreibungssprache) oder meinst Du den prinzipiellen Einsatz von FPGAs, die Zielhardware für VHDL. Man könnte ja auch Microkontroller benutzen. [/quote] Ich meinte damit, wann nutzt man VHDL, wann nimmt man noch Blocksymbole oder was es auch sonst noch für möglichkeiten gibt die Hardware zu beschreiben. [/quote] Blocksymbole habe ich eigentlich noch nie verwendet (außer auf nem Blatt Papier ;-) ). Habe aber schon gesehen, das auf höheren Ebene Komponenten mit Hilfe einer Blockansicht zusammengeschaltet werden (z.B.: Rechenwerk, SDRAM-Interface, IO-Schnittstellen, usw.). Ist Geschmackssache und vielleicht etwas übersichtlicher, da man ähnlich wie bei einem Leiterplattenlayout die Struktur des Designs vor Augen hat. Bei kleinen Designs (einfache logische Verküpfungen) könnte man Blöcke höchstens noch beim Lehren einsetzen, um eine Vorstellung zu vermitteln. Mfg DaMicha
DaMicha 07.11.06, 17:34
No new posts Re: LCD-Interface
Moin Mish. [quote:mish] Und um das Display im 4 Bit Modus anzusprechen setze ich erst für alle Daten-Leitungen das high Nibble, danach pulse ich den enable, setze das low Nibble für jede Daten-Leitung und pulse nochmals den enable, korrekt? [/quote] Ich sag mal JA ;). Aber wie schon gesagt, um sicher zu gehen und bei der Sequenz und dem Timing keinen Fehler zu machen, würde ich mich an den ASM-Code halten. Viel Erfolg DaMicha.
DaMicha 06.11.06, 09:01
No new posts Re: Wann macht VHDL Sinn?
Moin Happy. [quote] Wenn das soweit richtig ist, woher weiß man denn wie effektiv das Programm die gewünschten Anforderungen umsetzt? [/quote] Es gibt zwei Hauptunkte, die erfüllt sein sollten (müssen ;) ): * das Design schafft die geforderte Taktfrequenz (z.B. 20 MHz) * das Design passt in den Ziel-FPGA Zwischen der Spezifikation und dem Zieldesign stehen dann zwei Dinge. Zum einen der Designer selbst, der den größten Einfluss durch die Art und Weise seiner Umsetzung in VHDL hat; oder um es platt zu Sagen wie gut er mit Hilfe von VHDL programieren (designen) kann. Zum anderen ist dann noch der VHDL-Compiler (mit Synthese, Mapping und Place & Route), der dann seinen Job so gut oder schlecht wie möglich macht. Wenn jetzt das fertige Design schneller läuft als die geforderte Taktfrequenz und möglichst wenig Platz im FPGA benötigt, sind die Anforderungen effektiv umgesetzt. Man sollte es aber nicht übertreiben, da der Faktor Zeit ja auch nicht außer Acht gelassen werden sollte (besonders in der freien Wirtschaft, also in echt ;) ). [quote] Macht VHDL eher bei großen oder auch schon bei kleinen Projekten Sinn? [/quote] Meinst Du jetzt im Vergleich zu Verilog (andere Hardwarebeschreibungssprache) oder meinst Du den prinzipiellen Einsatz von FPGAs, die Zielhardware für VHDL. Man könnte ja auch Microkontroller benutzen. Mfg DaMicha.
DaMicha 06.11.06, 07:44
No new posts Re: LCD-Interface
Hallo Mish. Unter: http://www.sprut.de/electronic/lcd/index.htm#init steht es ja. Nach dem Power-ON-Reset ist der LCD Controller immer im 8 Bit Modus. Das ist er dann so lange, bis Du in den 4 Bit Modus gewechselt hast. Du musst also zum Anfang so tun als ob ein 8 Bit Interface vorhanden ist (nur ein Enable Puls pro Befehl) obwohl Du nur die oberen 4 Datenbits davon benutzt. Die unteren 4 Datenbit werden zum Umstellen in den 4 Bit Modus nicht benötigt! Bist Du dann im 4 Bit Modus, musst Du Low- und High-Nibble einzeln übertragen. Gruß DaMicha.
DaMicha 03.11.06, 13:35
No new posts Re: LCD-Interface
Moin. Hab mir mal kurz die Asm-Quellen unter: http://www.sprut.de/electronic/pic/programm/lcd.htm -> http://www.sprut.de/electronic/pic/programm/lcd.zip angeschaut. Scheint so zu sein, dass Du erstmal davon ausgehst, dass du im 8 Bit Modus bist (bzw. in den 8Bit Modus gewechselt wird, falls der 4 Bit Modus aktiv war). Also die 1. vier Befehle im 8Bit Modus (ohne high/low) und die restlichen im 4Bit Modus. Schau Dir mal genau die Wartezeiten zwischen und vor den Befehl an (sind auch im ASM Code). Denke mal, falls man zu schnell ist, funktioniert es nicht. Gruß DaMicha.
DaMicha 02.11.06, 12:04
No new posts Formatierung des Postings
Moin Ich würde gerne wissen, ob es möglich ist den VHDL-Code der Übersichtlichkeit wegen im Posting in Proportionalschrift darzustellen. Vielleicht mit dem HTML Tag code? [code] if risign_edge(clk) then cnt := cnt + 1; end if; [/code] jupp! jetzt fehlen aber noch die Leerzeichen von der Formatierung am Zeilenanfang... Gruß DaMicha.
DaMicha 01.11.06, 10:48
No new posts Re: blinkende led
Moin Mish [quote:Gast] [quote:DaMicha] Ach so, der Reset ist asynchron und Low-Aktiv [/quote] Low-Aktiv meint es geschieht eine Aktion wenn er 0 ist? Asynchron? Huh? :) [/quote] Es gibt prinzipiell zwei Wege einen Reset an einem Register zu realisieren: synchron oder asynchron (oder beides) zum Takt. Synchron bedeutet, dass mit dem Takt der Inhalt des Registers zurück gesetzt wird. Asynchron bedeutet, dass unabhängig zum Takt der Inhalt des Registers zurückgesetzt wird. In VHDL sieht das folgendermaßen aus: synchron: if (rising_edge(clk)) then if (reset = '0') then -- low aktiver reset ! cnt := 0; else cnt := cnt + 1; end if; end if; asynchron: if (reset = '0') then cnt := '0'; elsif (rising_edge(clk)) then cnt := cnt + 1; end if; Der Vorteil des asynchronen Resets ist, dass Du Deine Logik in einen definierten Zustand bekommst, ohne dass der Takt schon anliegt. Sobald also der Takt da ist, kann es definiert losgehen! und hier nochmal die Mischform, die sich automatisch ergibt, sobald man weitere Logik dem Prozess hinzufügt. if (reset = '0') then cnt := '0'; elsif (rising_edge(clk)) then if (set_to_0 = '1' or irgend_was_anderes = '0') then cnt := 0; elsif cnt := cnt + 1; end if; end if; Bis denn, DaMicha.
DaMicha 01.11.06, 10:28
No new posts Re: blinkende led
Moin Mish. Das geht so nicht ;). Um Deinen Counter-Wert zu halten benötigst Du ein flankengesteuertes Speicherelement. Also ein Register (Flipflops). Was Du Dir da gebaut hast sind Latche. Sind diese offen, wenn z.B. die if-Bedingung erfüllt ist, dann hast Du irgend etwas rückgekoppeltes und schwingendes... Wie wäre es mit folgendem: reg: process (clk, reset) variable cnt : integer; variable led : std_logic; begin if (reset = '0') then cnt := 0; led := '0'; elsif (rising_edge(clk)) then if (cnt = 5000000-1) then cnt := 0; led := not led; -- light on / light off else cnt := cnt + 1; end if; end if; led_1 <= led; end process; Ich habs jetzt nicht ausprobiert, aber mit den Signalnamenanpassungen sollte es so klappen. Ach so, der Reset ist asynchron und Low-Aktiv Viel Spaß, DaMicha.
DaMicha 26.10.06, 12:49
No new posts Re: Latch XY has unsafe behavior
Hallo DeLUru. Aus Latch-Sicht sieht der StateMachine-Prozess schon ganz gut aus. Du solltest Dir aber nochmal die Signale clock_reference und act_data_idx anschauen. Der Counters-Prozess geht aus meiner Sicht so nicht. Erstmal brauchen Deine Werte einen (asynchronen) Reset, wie im Trigger-Prozess. Dann solltest Du das Rücksetzen zu clock_counter und data_counter mit in den Clock-Pfad nehmen, da Du Dir hier einen intern über Kombinatorik generierten asynchronen Reset gebaut hast. Das fliegt Dir "in echt" ganz bestimmt um die Ohren. Vielleicht solltest Du mal mit dem synthetisierten Design (besser noch nach dem Place and Route) simulieren. Wenn es damit nicht geht, dann funktioniert es im FPGA auch nicht. Hierbei musst Du aber beachten, dass Du die Setup- und Hold-Zeiten aus der Testbench für das Design einhältst. Also Eingangssignal nicht mit, sondern vor der Taktflanke setzen. Gruß DaMicha.
DaMicha 27.09.06, 16:07
No new posts Re: Latch XY has unsafe behavior
Hallo. Das Problem tritt auf wenn Du ein Latch baust, dessen Enable Signal auch als Dateineingang dient. Das ist nicht gut! Ich habe leider nicht sehen können an welcher Stelle in Deinem Design das auftritt. Auf den ersten Blick sind aber im PublicProcess fast alle Signale bei Dir als Latch ausgelegt. Auch das ist nicht gut. Eigentlich sollte Dir der Synthetisierer das auch im Logfile mitteilen. Allgemein gilt, dass alle Latche, die Du nicht explizit geplant hast auch nicht ins Design gehören. Der Grund für das Vorhandensein der Latche ist, dass die betroffenen Signale nicht in jedem Zweig (if-else, case) voll beschrieben sind. Du solltest vielleicht erstmal alle Signal auskommentieren und nur mit act_state und nxt_state beginnen und mit jeden neuen Signal überprüfen (Dir darüber bewusst werden), ob es ein Latch hervorruft oder nicht. Was mir noch auffällt, Deine Counter-Values werden nicht in Registern gespeichert (sondern als Latch). Du braucht einen ähnliches Konstrukt wie bei den States. Also ein Clock-Prozess (bzw. den selben) der Speichert. Gruß DaMicha.
DaMicha 27.09.06, 12:03
No new posts Re: Suche eine art NOP Befehl
Hallo Christoph. Du kannst einfach: when others => schreiben (die Zeile nicht mit einem Semikolon abschließen). Oder when others => null; um deutlicher zu kennzeichnen, dass hier auch wirklich nichts gemacht werden soll. So mach ich's immer. Zu beachten ist, dass Du Dir so ein Latch in den MUX baust, da bei allen anderen Eingangskombinationen (101 bis 111) der alte MUX Wert gehalten wird. Musst Du Dir überlegen, ob Du das wirklich brauchst, denn eigentlich sollten Latche vermieden werden. Für einen reinen MUX würde when others => output <= "0...0"; gehen ("0...0" je nach output-Bitbreite oder when others => output <= (others => '0'); für beliebige Bitbreiten ). Gruß DaMicha. [quote] Hallo zusammen, gibt es in VHDL eine Art "do-nothing" Befehl? Es geht um folgendes: Ich habe ein Konstrukt der Form architecture behaviour of mux5 is begin process(sel) variable error : bit; begin case sel is when "000" => output <= i0; when "001" => output <= i1; when "010" => output <= i2; when "011" => output <= i3; when "100" => output <= i4; when others => error:='1'; --just a kind of NOP-Operation end case; end process; end behaviour; nun finde ich die Lösung im "others" case nicht besonders elegant. Wenn ich aber den others case weglasse, dann bekomme ich beim Übersetzen eine Fehlermeldung, daß z.B. nur 4 von 83 Fällen betrachtet wurden. Sel ist vom Typ std_logic_vector. Gruß, Christoph [/quote]
DaMicha 22.09.06, 14:24
No new posts Re: # ** Error: (vsim-3601) Iteration limit reached at time 0 ns.
Ach ja, falls Dein Modelsimproblem gelöst ist (wie auch immer ;), dann mache doch bitte ein neues Topic z.B. im Thread "Anfänger" oder "Allgemeines" auf. Gruß DaMicha.
DaMicha 19.07.06, 07:55
No new posts Re: # ** Error: (vsim-3601) Iteration limit reached at time 0 ns.
Hallo LukeS. Das neue Archiv unterscheidet sich vom Inhalt ja nun komplett von dem alten! Schreibe doch nochmal genau, welche Testbench nicht das gewünschte Verhalten liefert. Also die Testbenches an sich laufen ja... Gruß DaMicha.
DaMicha 19.07.06, 07:10
No new posts Re: # ** Error: (vsim-3601) Iteration limit reached at time 0 ns.
Hallo Leider kann ich Deinen Fehler nicht nachvollziehen. Verrate doch mal, welche der Testbenches betroffen ist... Ach ja, lösche doch mal die Waveform aus dem Archiv, dann sollte es sich merklich verkleinern. Gruß DaMicha.
DaMicha 17.07.06, 08:13
No new posts Re: Addierer aufbauen S.O.S
Falls es jemanden näher interessiert: nach "essential elements of the IPSP" googeln oder direkt www.atips.ca/research/documents/ca/dbns/1999_Trans-Computers.pdf schon etwas abgefahren...
DaMicha 15.07.06, 07:50
 
 
20 von 27 Ergebnisse Anfang   zurück   weiter   Ende
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj