mikrocontroller.net

Forum: FPGA, VHDL & Co. Frequenzteiler


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein frequenzteiler  durch 16:1 geschrieben  , es lauft alles 
in ordnung, aber beim Simulation habe ich paar Probleme die zu 
beschreiben,
Ich bitte euch um Hilfe
Im Anhang schicke ich dir Simulation, mit altera
 Danke im vorraus .

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>es lauft alles in ordnung...
Gut.

>aber beim Simulation habe ich paar Probleme
Schlecht.

Da waren schon 9 Leute da, die dir helfen wollten, oder wenigstens 
Interesse an deinem Problem zeigten. Aber für eine halbwegs brauchbare 
Aussage fehlt noch Input:
- Fehlerbeschreibung
- Zielplattform
- Enwicklungsumgebung
- Sourcecode
- Testbench


Und was die Hölle ist ein odt-File,
wer kann damit was anfangen,
wozu gibt es Screenshots?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar: odt heisst OpenDocumentText, kann man inzwischen auch mit Word 
oeffnen.
Ausser dem Screenshot zweier Clocks in der Simulation und dem Screenshot 
des Quellcodes ist da nichts zu sehen.


@Stefan:
- Screenshots bitte als Bild und nicht eingebettet in eine Textdatei 
anhaengen.
- Sourcecode bitte als Textdatei anhaengen.
- Wo liegt dein Problem?
- "rising" ist ein seltsamer Name fuer einen Takt.
- Wo liegt dein Problem?
- Warum benutzt du Variablen? Voellig unnoetig und eine moegliche 
Fehlerquelle.
- Wo liegt dein Problem?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Jan M.
Danke, man lernt nie aus ;-)
OpenOffice konnte das Ding öffnen, man ist eben schon verwöhnt mit dem 
selbstständigen interpretieren von Dateinamen. Und wehe, das allmächtige 
System kennt den Dateityp dann nicht...

@ Stefan
Also, ich würde das Dokument so auslegen, dass alles geht, und dass das 
geteilte Signal etwas verzögert (ca. 5ns) am Ausgang des FF sichtbar 
wird.

Aber kommt das nicht von dem generischen Programmieren, wenn man es 
nicht versteht? Da steht:
:
generic(n: integer := 16);
:
variable Z: integer range 0 to n-1;
:
:
if Z=n then         ---> hier gehts schief <---
:

Muss ja irgendwie schiefgehen...
Z ist definiert als range 0 to n-1 und wird auf n abgefragt.
da hätte es aber schon vorher eine warning geben sollen.

Autor: stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank für euere Hilfe  leute
Wie gesagt , ich sollte ein Programmierbareteiler  in VHDl  schreiben 
und die Simulation beschreiben, da habe ich einfach als beipiel 
Frequenzteiler durch 16:1 geschrieben,
Ich bin momentan im labor, es ist ja ein Teil von mein Projektarbeit
Sie haben es gut gesagt : in der Simulation sieht man ja nicht viel was 
man beschreiben soll, aber der Prof verlangt von mir  einen beschreibung 
!!!!!!!!!! und da liegt ja mein Porblem....
Wenn jemand noch was zu sagen von der Simlution wäre ich sehr 
dankbar!!!!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teiler durch 16:
:
signal cnt : std_logic_vector(3 downto 0);
signal div16 : std_logic;
:
process (clk) 
begin
   if rising_edge(clk) then
      cnt <= cnt+'1';       -- Überlauf automatisch, weil nur 4 Bit breit
   end if;
end process;
: 
div16 <= '1' when cnt="0000" else '0' ;
:

Ein programmierbarer Teiler ist aber einer, dessen Teilerverhältinis 
zur Laufzeit umgeschaltet werden kann. Das hat nur zum Teil mit einem 
z.B. in VHDL programmierten Teiler zu tun.

@ Stefan
Mach dich mal schlau, was du eigentlich machen sollst. Ich bin mir nicht 
sicher, dass du die Aufgabe verstanden hast...

Musst du eine Testbench schreiben, die den Zähler selbständig testet?
Falls ja, dann sollten in der Testbench ein paar Abfragen mit assert, 
report & Co auftauchen. Da hilft es dann nicht, wenn eine schöne 
Waveform auf dem Bildschirm auftaucht, das hat mit automatisiertem Test 
wenig zu tun.

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar

bei dem letzten Bespiel setzt du div16 außerhalb des Prozesses mit der 
when Abfrage.
Auf diesem Signal können meiner Meinung nach kurze Spikes entstehen, 
falls die 4FF des Counters nicht exakt gleichzeitig schalten.

Der Conter besteht aus FF3,FF2,FF1,FF0

Zustand Counter 0011 Zustand +1 ist 0100

Wenn nun FF0,FF1 einen Hauch früher auf "0" gehen als FF2 auf "1", wäre 
der Counter für einen ganz ganz kurzen Bereich auf dem Stand "0000" was 
somit für einen Spike auf dem Signal "div16" sorgen kann.

Oder bin ich da zu besorgt?

Gruß Volker

Autor: spartanne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Volker

Mach dir da mal keine Sorgen. Die kurzen Spikes bei div16 gibt es 
natürlich wenn der Counter seinen Zustand wechselt, aber bis zur 
nächsten Taktflanke ist es auf jeden Fall stabil.
Wird erst bei hohem Takt evtl. ein Problem wenn hinter div16 noch viel 
Logik vor dem nächsten FF hängt, da dann die Setup-Zeit des nächsten FF 
verletzt werden könnte. Abhilfe würde dann das hinzufügen von FF in der 
div16 folgenden Kombinatorik (Pipelining) schaffen.
Aber das ist bei dir sicher kein Problem.

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@spartanne,

danke, kommmt halt auch auf den Verwendungszweck des Signals "div16" an,
wenns nach außen auf einen Pin geführt wird und für was externes als 
Takt dienen soll, wäre das so nicht geeignet.
Also meiner Meinung nach wäre es doch besser das ganze innerhalb des 
Prozesses zu machen, da ist immer alles synchron zum Haupt-Takt.

Sehe ich das richtig?

Autor: spartanne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wenns nach außen geführt wird dann takte div16, d.h. mache das 
Signal zu einem FF. Da wackelt dann nix mehr am Ausgang.
Bei interner Verwendung kommts halt auf die Anwendung an. Bei diesem 
Beispiel sicher egal, man handelt sich durch takten von div16 halt einen 
Takt Latency ein, d.h. in Lothars Beispiel ist div16 '1' bei Zählerstand 
"0000". Wenn man nun div16 in einen getakteten Prozess mit aufnimmt dann 
ist div16 '1' bei Zählerstand "0001". Alles klor?

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, nun ist alles klor, danke vielmals

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Auf diesem Signal können meiner Meinung nach kurze Spikes entstehen,
>falls die 4FF des Counters nicht exakt gleichzeitig schalten.
Richtig, da werden Spikes entstehen.
Die FFs werden niemals zum gleichen Zeitpunkt schalten, ein paar ps sind 
da immer drin ;-)

Ok, also nochmal. Und diesesmal registriert.
Zur Ausgabe an externe Teilnehmer (aus Sicht des FPGAs)...
:
signal cnt : std_logic_vector(3 downto 0);
signal div16 : std_logic;
:
process (clk) 
begin
   if rising_edge(clk) then
      cnt <= cnt+'1';       -- Überlauf automatisch, weil nur 4 Bit breit
      div16 <= '0';
      if (cnt="1111") then  -- 1 Takt Latency beachten
         div16 <= '1'; 
      end if;
   end if;
end process;
:

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar,

an dich mal ein dickes Dankeschön, finde deine Beiträge immer sehr 
imformativ.

Gruß Volker

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.