Forum: FPGA, VHDL & Co. Takt selbst erzeugen


von Thomas (Gast)


Lesenswert?

Hallo,

nur eine Verständnisfrage.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity keinQuarz is
6
    Port
7
    (
8
        clk    : in  STD_LOGIC := '0';
9
        clkOut : out STD_LOGIC := '0'
10
    );
11
end keinQuarz;
12
13
architecture Behavioral of keinQuarz is
14
    signal clkCounter : unsigned(31 downto 0) := (others=>'0');
15
begin
16
    process (clkCounter) begin
17
        clkCounter <= clkCounter + 1;
18
    end process;
19
    
20
    process begin
21
        wait until rising_edge(clk);
22
        ...
23
    end process;
24
    
25
    clkOut <= clkCounter(15);
26
end Behavioral;

Wenn die Genauigkeit des Takts keine Rolle spielt, könnte man dann sowas 
machen?
Der clk-Pin wird auf dem PCB mit dem clkOut-Pin verbunden.

Jittert wahrscheinlich ohne Ende, und die ersten 1-2 FFs werden 
wahrscheinlich ständig in irgendwelchen metastabilen Zuständen 
verbringen, müsste aber doch eigentlich gehen, oder?

von Achim S. (Gast)


Lesenswert?

Thomas schrieb:
> die ersten 1-2 FFs werden
> wahrscheinlich ständig in irgendwelchen metastabilen Zuständen

dummerweise sehe ich in deinem Counter überhaupt keine (getakteten) 
Flipflops:

Thomas schrieb:
> process (clkCounter) begin
>         clkCounter <= clkCounter + 1;
>     end process;



Es werden nicht nur ein paar LSB Unsinn anzeigen, sondern alle Stellen 
deines Zählers: die niederwertigsten bits werden ja auch direkt für die 
Berechnung der höchstwertigen Bits verwendet.

von bko (Gast)


Lesenswert?

Falls du mit FPGA von Xilinx arbeitest, ginge evtl. dies da:
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator
Bei anderen Herstellen heisen die "keep"Attribute möglicherweise
anders.

Hier nochwas:
Beitrag "Re: Selbstlaufende Clock im FPGA"

von Edi M. (Gast)


Lesenswert?

So richtig geht das nur mit einem Bit, dass selber toggelt. Danach kommt 
gfs ein Zähler.

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


Lesenswert?

Thomas schrieb:
1
 process (clkCounter) begin 
2
     clkCounter <= clkCounter + 1; 
3
 end process;
Das könnte abgekürzt genauso auch so beschrieben werden:
1
 -- process (clkCounter) begin 
2
     clkCounter <= clkCounter + 1; 
3
 -- end process;
Und damit auch so:
1
  clkCounter <= clkCounter + 1;
Und das alles ist letztlich nichts anderes als eine in der Praxis meist 
nutzlose kombinatorische Schleife: 
http://www.lothar-miller.de/s9y/archives/42-Kombinatorische-Schleifen.html

von high tec ing (Gast)


Lesenswert?

Würde es denn laufen???

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


Lesenswert?

Welches es denn?

Ein Zähler basierend auf einer kombinatorischen Schleife würde schon 
"laufen", nur würde er nicht zählen, sondern irgendwas tun. Am ehesten 
könnte man das als "Rauschgenerator" bezeichnen (wenn auch die Qualität 
des erzeugten Rauschens sehr schlecht wäre)...

von Christian R. (supachris)


Lesenswert?

high tec ing schrieb:
> Würde es denn laufen???

Willst du jetzt deinen verrauschten externen Takt mit einem intern 
erzeugten aufbessern?

von berndl (Gast)


Lesenswert?

Christian R. schrieb:
> high tec ing schrieb:
>> Würde es denn laufen???
>
> Willst du jetzt deinen verrauschten externen Takt mit einem intern
> erzeugten aufbessern?

:o)))))))))))))

von Dr. Schnaggels (Gast)


Lesenswert?

Gemeint ist wahrscheinlich
1
process (clk)
2
begin
3
   if rising_edge(clk) then
4
        clkCounter <= clkCounter + 1;
5
   end if;
6
end process;

Dann kann man in der Tat das MSB von clkCounter abgreifen.

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


Lesenswert?

Dr. Schnaggels schrieb:
> Gemeint ist wahrscheinlich
Du hast den Thread nicht gelesen? Es ist wirklich so gemeint, wie es 
ohne Takt dasteht...
Ich erinnere an die Zeile, die Thomas schrieb:
>>>> Der clk-Pin wird auf dem PCB mit dem clkOut-Pin verbunden.

von Edi M. (Gast)


Lesenswert?

Ich habe mir gerade überlegt: Eigentlich könnte es doch laufen. Die 
Zählerei = Addition um 1 wird ja immer mittels JK-FFs realiert. 
Abgebildet auf DFFs braucht es nur einen Übergriff zwischen einem FF und 
seinem Nachbarn. Das ist auch asynchron Hazardfrei. Bleibt nur das 
Problem des Umspringens. Ohne ausdrücklichen Reset und nur mit den FF 
könnte es gehen.

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


Lesenswert?

E. M. schrieb:
> Die Zählerei = Addition um 1 wird ja immer mittels JK-FFs realiert.
Es gibt in einem FPGA keine JK-Flipflops.

von Edi M. (Gast)


Lesenswert?

Lothar Miller schrieb:
> Es gibt in einem FPGA keine JK-Flipflops.
Klar, deshalb sprach ich ja davon, dass man sie auf DFFs abbilden muss. 
Ausschlaggebend ist mit Bezug auf das Thema, dass ein FF immer nur von 
einem Vorgänger gespeist wird und es damit keine diskrepanten 
Interpretationen von Zuständen gibt / geben muss - bis eben auf einen 
Resetfall, den man aber nicht unbedingt braucht.

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


Lesenswert?

DFF als JKFF?
Kannst du da mal ein funktionsfähiges Beispiel zeigen. Oder wenigstens 
ein Funktionsmodell vorstellen. Ich probiere das dann aus...

von Edi M. (Gast)


Lesenswert?

Bitte? Du weisst, wie ein JK-FF funktioniert? Das lässt sich mit etwas 
Logik abbilden.

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


Lesenswert?

E. M. schrieb:
> Du weisst, wie ein JK-FF funktioniert?
Ja. Du meinst die "Schwingungen", die ein JK-FF (theoretisch) machen 
wird, wenn J=K=1 sind.
> Das lässt sich mit etwas Logik abbilden.
Ja, mach doch. In einem FPGA. Mit LUTs und DFFs. So, dass dahinter ein 
verwertbarer Takt rauskommt (darum geht es letztlich) und nicht 
irgendein "halbanaloges" Signal (das bekommst du nämlich mit üblichen 
kombinatorischen Schleifen)...

Ich habe das nur mit dem Ringoszillator geschafft. Und das war schon mal 
soweit nachvollziehbar, dass Andere das auch hinbekommen haben: 
http://dangerousprototypes.com/docs/CPLD_ring_oscillator

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.