Forum: FPGA, VHDL & Co. Frequenzteiler im Zähler implementieren


von Yasin Y. (yasin_y)


Angehängte Dateien:

Lesenswert?

Hallo,
Im Anhang ist der Code als txt.Datei und ein Bild dazu


ein internes Signal WiretoTC welches mit dem Wert 1 deklariert ist, 
sollte mit dem Ausgang TC verbunden werden, wenn PRE kleiner gleich 
MAXVAL und LOAD = '1' ist..
TC sollte vom Wert 0 zur 1 übergehen.
Verstanden habe ich, dass laden von PRE mit einer großen Zahl, TC einen 
höheren Takt bekommt aber ich meine ich habe irgendwas missverstanden.



Danke für die Hilfe

von Cle (Gast)


Lesenswert?

Was ist die Frage?


Unabhängig davon:
1. Formatiere mal deinen Code lesbar, ich blicke direkt nichts
2. Was soll das Bild denn? Soll man da ernsthaft was erkennen?
3. Ist heute schon Freitag?

von yasin (Gast)


Lesenswert?

Hier ist ein Modulo 24 Zähler zusehen
LOAD ist high wenn eine Zahl 0-24 vorgeladen ist
sonst auf LOW
PRE ist für geladene Zahl welche  5bit sind jedoch ist die MAXVALUE := 
in Dezimal = 24
DIR ist für die Zählrichtung 1 = inkrementieten
0 dekrementieren
Meine Frage ist wie realisiert man diesen Zähler damit die Frequenzen 
teilen kann
Die Zeichnung ist von unserem Prof er meinte eine Lösung wäre wenn man 
den Pfad umleitet auf TC wie beim mealyautomat..
Ich habe den Code an txt. Datei weil bin neu hier und weiß nicht ob man 
das auch so direkt einfügen kann.
Danke

von Gustl B. (-gb-)


Lesenswert?

Das ist alles reichlich wirr. Wie wäre es mal sauber zu erklären was der 
Zähler machen soll und was die einzelnen Signale bedeuten? Auch dieses 
hingeschmierte Bild könntest du mal sauber neu zeichnen oder ordentlich 
erklären.

Ja, es gibt Zähler, die kann man laden und hoch- bzw. runterzählen 
lassen. Das hier ist einer 
https://assets.nexperia.com/documents/data-sheet/74HC_HCT193.pdf eben 
nur 4 Bits. Kann man aber kaskadieren. Wie der aufgebaut ist sieht man 
auch, den kann man wunderbar in HDL nachschreiben.

Aber vermutlich ist dein Problem, irgendwas mit Taktteilung, deutlich 
einfacher zu lösen. Erkläre doch mal genau was du erreichen möchtest. 
Zur Taktteilung muss man nicht hoch- und runterzählen können, also sage 
am besten nur was du wirklich brauchst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

yasin schrieb:
> Meine Frage ist wie realisiert man diesen Zähler damit die Frequenzen
> teilen kann
Ich würde da einfach einen 5 Bit breiten Zähler realisieren, der bei 
einem bestimmten Vergleichswert zurückgesetzt wird. Ein besserer 
Dreizeiler ist das.

Warum bei dem Ding die Zählrichtung umgeschaltet werden muss, kann ich 
aber nicht nachvollziehen...

In deinem Code ist noch ein üblicher Anfängerfehler:
1
:
2
:
3
-- state register for the count value
4
P_REG : process (CLK,ARESETN)     ---- Sensitivliste unvollständig!!!
5
begin
6
7
--- böse Sache, das hier: alle 3 Signale LOAD, PRE und TC fehlen in der Sensitivliste
8
if ((LOAD = '1') and (PRE <= "11000")) then WiretoTC <= TC ;
9
end if;
10
-- zudem schreibt man in einen synchronen Prozess nicht irgendwelche nebenläufige Zuweisungen
11
12
13
 if ARESETN ='0' then
14
 Q <= (others => '0') after 5 ns;
15
 elsif CLK'event and CLK='1' then
16
 Q <= Q_NEXT after 5 ns;
17
 end if;
18
end process P_REG;
19
:
20
:
Sieh dir an, wie synchrone, getaktete Prozesse geschrieben werden. Da 
kommt kein asynchroner Code drin vor.

yasin schrieb:
> Ich habe den Code an txt. Datei weil bin neu hier und weiß nicht ob man
> das auch so direkt einfügen kann.
Du kannst einfach eine *.vdh oder *.vdhl Datei anhängen oder wie über 
jeder Texteingabebox hier bei "Antwort schreiben Wichtige Regeln- erst 
lesen, dann posten!" beschrieben den Quellcode einfach einfügen und dann 
mit den [vhdl] Tags umrahmen.

Gustl B. schrieb:
> Auch dieses hingeschmierte Bild könntest du mal sauber neu zeichnen oder
> ordentlich erklären.
Allein das könnte den nötigen Anstoß geben, denn dann muss man sich mal 
mit der Struktur des Problems beschäftigen.

BTW:
Ich bekomme Augenkrätze, wenn ich sowas wie "after 5 ns" in einem 
synthetisierbaren Modul sehe. Wer das hinter Zuweisungen schreibt, der 
zeigt, dass er das Prinzip eines synchronen Designs grundlegend nicht 
verstanden hat.

: Bearbeitet durch Moderator
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Bei der Schaltung, Terminal-Count-Ausgang mit einem Load-Eingang 
verbunden, fällt mir der 8-Bit-Zähler 74HC40103 ein. Der kann allerdings 
nur abwärts zählen. In Fig. 15 ist diese Rückführung TC-LD gezeigt. Ohne 
Zusatzlogik kann man so einen einstellbaren Teiler bauen:
https://assets.nexperia.com/documents/data-sheet/74HC40103.pdf

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
Noch kein Account? Hier anmelden.