Forum: FPGA, VHDL & Co. Warum ist folgende Synthese nicht möglich?


von Jörg (Gast)


Lesenswert?

Hallo,

ich wollte probeweise folgenden Code synthetisieren, dies ist mir jedoch 
nicht möglich. Warum ist das so? Die Warnung verstehe ich und ist auch 
richtig so, aber genau das möchte ich doch erreichen, eine Loop?
1
WARNING:Xst:2170 - Unit clock : the following signal(s) form a combinatorial loop: clk.
2
WARNING:MapLib:701 - Signal clk connected to top level port clk has been
3
   removed.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
entity clock is
5
  Port ( clk : out  STD_LOGIC);
6
end clock;
7
8
architecture Behavioral of clock is
9
  signal clk_i : std_logic;
10
begin
11
  clk_i <= not clk_i;
12
  clk <= clk_i;
13
end Behavioral;

von Dussel (Gast)


Lesenswert?

Das verstehe ich auch nicht und rechne mit einer Einschränkung des 
Syntheseprogramms. Was passiert denn, wenn du mehrere Stufen einbaust, 
also das Signal nicht direkt, sondern über zwei Zwischensignale 
rückkoppelst?

von Wltbester FPGA-Ponog (Gast)


Lesenswert?

Jörg schrieb:
> clk_i <= not clk_i;
>   clk <= clk_i;

was soll die erste Zuweisung ohne Takt? Ein Signal kann aus logischer 
Sicht nicht seinem interiterten Signa zugewiesen werden. Macht keinen 
Sinn.

und was soll die zweite Zuweisung ohne Takt? Damit wäre clk immer 
identisch mit clk_i

da hat jemand was Grundsätzliches nicht verstanden

Male Dir mal das Schaltwerk auf und dann beschreibe es.

von Dussel (Gast)


Lesenswert?

Wltbester FPGA-Ponog schrieb im Beitrag #5435212:
> Male Dir mal das Schaltwerk auf und dann beschreibe es.
Ein Nicht-Gatter, dessen Ausgang auf den (eigenen) Eingang und auf einen 
Ausgangspin geschaltet ist. Warum soll das nicht gehen?
Oder wie würdest du das beschreiben?

von Dussel (Gast)


Lesenswert?

Du könntest auch mal probieren, es in einem Prozess zu beschreiben. 
Eigentlich sollte es auch so gehen, aber das ist ein ziemlicher 
Grenzfall, mit dem das Syntheseprogramm nicht klarkommt.

von Nase (Gast)


Lesenswert?

Dussel schrieb:
> Ein Nicht-Gatter, dessen Ausgang auf den (eigenen) Eingang und auf einen
> Ausgangspin geschaltet ist. Warum soll das nicht gehen?
Weils eine kombinatorische Schleife gibt...
Kombinatorische Schleifen sind im Umfeld von FPGAs in der Regel Unsinn 
und/oder "Programmierfehler", und darum bemängelt das Synthesewerkzeug 
sowas.

> Oder wie würdest du das beschreiben?
Bestenfalls als Ringoszillator. Den kann man tatsächlich aufbauen, das 
hat Lothar Miller in seinem Blog mal beschrieben.

von Dussel (Gast)


Lesenswert?

Nase schrieb:
> Dussel schrieb:
>> Ein Nicht-Gatter, dessen Ausgang auf den (eigenen) Eingang und auf einen
>> Ausgangspin geschaltet ist. Warum soll das nicht gehen?
> Weils eine kombinatorische Schleife gibt...
> Kombinatorische Schleifen sind im Umfeld von FPGAs in der Regel Unsinn
> und/oder "Programmierfehler", und darum bemängelt das Synthesewerkzeug
> sowas.
In der Regel. Hier ist aber nach der Ausnahme von der Regel gefragt. Die 
Frage ist ja nicht, warum es eine Warnung gibt, sondern warum das nicht 
synthestisiert werden kann.

Nase schrieb:
>> Oder wie würdest du das beschreiben?
> Bestenfalls als Ringoszillator. Den kann man tatsächlich aufbauen, das
> hat Lothar Miller in seinem Blog mal beschrieben.
Ich weiß. Aber genau das ist ja hier gegeben. Ein Ringoszillator mit 
einem Gatter.

von C. A. Rotwang (Gast)


Lesenswert?

Dussel schrieb:
> Die
> Frage ist ja nicht, warum es eine Warnung gibt, sondern warum das nicht
> synthestisiert werden kann.

Es gibt sicher mehr als die beiden genanten Warnings, eine der 
nichtgenannten weist sicher auf die Ursache, wahrscheinlich "dead code 
elimination" oder ähnliches. Schalt mal die dafür verantwortliche Option 
aus.

Was auch helfen könnte, wäre die manuelle Instanziierung eines Negators 
nresp. LUT, die fasst der XST eher nicht an.
https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/spartan6_hdl.pdf

von Gustl B. (-gb-)


Lesenswert?

Natürlich geht das. Aus Sicht vom XST macht das aber keinen Sinn und 
wird wegoptimiert. Soll es trotzdem da bleiben, musst du das nochmal 
explizit dazuschreiben mit der KEEP Anweisung.

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


Lesenswert?

Jörg schrieb:
> ich wollte probeweise folgenden Code synthetisieren, dies ist mir jedoch
> nicht möglich.
Stichwort dazu: "kombinatorische Schleife" (siehe die Fehlermeldung).

In der Regel machen das nur Anfänger. Dann nennt man das " Fehler".
Wenn das ein Profi macht dann geht das und nennt sich (wie schon 
erwähnt) "Ringoszillator".

http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

Und jetzt die Frage schlechthin: warum willst du sowas machen? Was soll 
das werden? Welche Hardware beschreibst du damit?

: Bearbeitet durch Moderator
von Dussel (Gast)


Angehängte Dateien:

Lesenswert?

Ich wollte es jetzt mal wissen und habe es mit Quartus ausprobiert.
1
library IEEE;
2
use ieee.std_logic_1164.all;
3
4
entity Oszillator is
5
    port( clock  : out std_ulogic);
6
end entity;
7
8
architecture arch of Oszillator is
9
    signal clock_int  : std_ulogic;
10
begin
11
    clock_int<=not clock_int;
12
    clock<=clock_int;
13
end architecture;
Wie erwartet gab es eine Warnung wegen der kombinatorischen Schleife. 
Rausgekommen ist das Angehängte.
Ich weiß nicht, was das andere im Post-Fit-Plan ist, aber man erkennt, 
dass die Schleife noch wie gewünscht vorhanden ist. Anscheinend ist 
Intel mit den Programmen weiter als Xilinx (mit den Datenblättern leider 
nicht).

von C. A. Rotwang (Gast)


Lesenswert?

Dussel schrieb:

> Anscheinend ist
> Intel mit den Programmen weiter als Xilinx (mit den Datenblättern leider
> nicht).

Quatsch, der TO ist hinterher mit seiner Fachkunde bezüglich Bedienung 
der Xilinx-tools und wichtigsten Attribut wie KEEP.

Es wurde doch schon vor  Jahren gezeigt, wie so ein ring oscillator 
korrekt beschruiben wird.
http://www.lothar-miller.de/s9y/categories/29-Ringoszillator

von Cle (Gast)


Lesenswert?

Dussel schrieb:
> Wie erwartet gab es eine Warnung wegen der kombinatorischen Schleife.
> Rausgekommen ist das Angehängte.
> Ich weiß nicht, was das andere im Post-Fit-Plan ist, aber man erkennt,
> dass die Schleife noch wie gewünscht vorhanden ist. Anscheinend ist
> Intel mit den Programmen weiter als Xilinx (mit den Datenblättern leider
> nicht).

Du kannst aber auch für den Xilinx Fall mal die Fehlermeldung posten die 
zum Abbruch deiner Synthese führt, die Warnung macht das nämlich nicht. 
Und sonst können wir auch nicht riechen was das Tool macht, der Hinweis 
mit der Keep Anweisung ist aber der richtige Weg wie Lothar in seinem 
Beispiel schön vorstellt.

Wenn Quartus dir das angehängte ausspuckt würde ich sofort Vorsichtig 
werden und die Software so nicht benutzen. Eine kombinatorische Schleife 
die ohne explizite Anweisung übernommen wird ist in 99% der Fälle ein 
Fehler.

Und jetzt die andere Software "nicht so weit" zu schimpfen weil sie 
etwas eigentlich fatales macht was die andere nicht ohne explizite 
Direktive erzeugt ist doch auch eine etwas zu kurz gekommene 
Schlussfolgerung, oder?

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


Lesenswert?

Dussel schrieb:
> Anscheinend ist Intel mit den Programmen weiter als Xilinx (mit den
> Datenblättern leider nicht).
Das wissen wir derzeit noch nicht, denn wie gesagt: im ersten Post sehen 
wir nur 2 Warnungen. Und wegen einer Warnung wird keine Implementierung 
abgebrochen. Der "Fehler" muss also nach der Synthese auftreten.

Jörg schrieb:
> ich wollte probeweise folgenden Code synthetisieren, dies ist mir jedoch
> nicht möglich. Warum ist das so?
Selbst wenn du diesen einstufigen Ringoszillator implementiert bekommst, 
ist der viel (sehr viel!) zu schnell, um irgendwas damit anfangen zu 
können. Da schwingt dann im FPGA eine Logikzelle mit Frequenzen über 
1GHz vor sich hin. Diesen "Takt" bekommst du niemals nach außen und 
vermutlich funktioniert das Routen im FPGA drin schon nicht brauchbar 
oder zuverlässig. Aus diesem Grund nehme ich mehrstufige Logikketten.

von Dussel (Gast)


Lesenswert?

Cle schrieb:
> Dussel schrieb:
>> Wie erwartet gab es eine Warnung wegen der kombinatorischen Schleife.
>> Rausgekommen ist das Angehängte.
>> Ich weiß nicht, was das andere im Post-Fit-Plan ist, aber man erkennt,
>> dass die Schleife noch wie gewünscht vorhanden ist. Anscheinend ist
>> Intel mit den Programmen weiter als Xilinx (mit den Datenblättern leider
>> nicht).
>
> Du kannst aber auch für den Xilinx Fall mal die Fehlermeldung posten die
> zum Abbruch deiner Synthese führt, die Warnung macht das nämlich nicht.
Ich habe schon Quartus und Libero drauf, da werde ich nicht für so ein 
theoretisches Experiment noch Vivado installieren.

Cle schrieb:
> Wenn Quartus dir das angehängte ausspuckt würde ich sofort Vorsichtig
> werden und die Software so nicht benutzen.
Vorsichtig sollte man bei Logikbeschreibungen immer sein. Dazu gehört 
auch, die Warnungen zu beachten. Dann fällt auch auf, dass es die 
kombinatorische Schleife gibt und man kann entscheiden, ob das gewollt 
ist.

Cle schrieb:
> Und jetzt die andere Software "nicht so weit" zu schimpfen weil sie
> etwas eigentlich fatales macht was die andere nicht ohne explizite
> Direktive erzeugt ist doch auch eine etwas zu kurz gekommene
> Schlussfolgerung, oder?
Kann es sein, dass du da was vertauscht hast? ;-)
Wir reden hier von professionellen Programmen. Die können man 
nachfragen, ob man das wirklich so will, aber ich finde, die sollten 
einem nicht verbieten (oder nur auf speziellen Antrag erlauben), etwas 
zu tun.

Lothar M. schrieb:
> Dussel schrieb:
>> Anscheinend ist Intel mit den Programmen weiter als Xilinx (mit den
>> Datenblättern leider nicht).
> Das wissen wir derzeit noch nicht, denn wie gesagt: im ersten Post sehen
> wir nur 2 Warnungen. Und wegen einer Warnung wird keine Implementierung
> abgebrochen. Der "Fehler" muss also nach der Synthese auftreten.
Stimmt. Da muss ich zugeben, dass ich das verwechselt habe.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Dussel schrieb:
> Ein Nicht-Gatter, dessen Ausgang auf den (eigenen) Eingang und auf einen
> Ausgangspin geschaltet ist. Warum soll das nicht gehen?
> Oder wie würdest du das beschreiben?

Das macht aber keinen Sinn! Das ist eine analoge Rückkopplung, die 
schwingt und zwar mit undefinierter Frequenz. Das geht nur in der 
Simulation, weil dann in jedem Simuschritt was umklappt. In der Realität 
braucht es einen Takt, der rückgekoppelte Signale umklappen lässt. Das 
sollte eigentlich klar sind.

Dieser Takt kann natürlich NICHT das Signal selber sein!

Leute, lasst die Finger von FPGAs, wenn ihr das nicht versteht!

von Jörg (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #5435479:
> Dieser Takt kann natürlich NICHT das Signal selber sein!
>
> Leute, lasst die Finger von FPGAs, wenn ihr das nicht versteht!

Ich habe verstanden, dass man keine kombinatorische Rückkopplung 
erstellen soll. ABer warum das prinzipiell nicht logisch sein soll 
verstehe ich nicht. Es ist ein Taktgenerator mit undefinierter 
STabilität und Frequenz, aber: warum nicht? Für einen speziellen Fall 
evtl. will das jemand haben?

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


Lesenswert?

Jörg schrieb:
> Es ist ein Taktgenerator mit undefinierter STabilität und Frequenz
Ein einstufiges auf sich selbst rückgekoppeltes Logikelement ist dabei 
aber als Taktquelle für Flipflops völlig unbrauchbar, weil es keine Zeit 
hat, sich irgendwie zu stabilisieren und deshalb nur im linearen Bereich 
mit einem Sinus geringer Amplitude und der höchstmöglichen Frequenz vor 
sich hinschwingt.
Erst mehrere LUT hintereinander bringen da eine brauchbare Impulsform 
und annehmbare Frequenzen zuwege.

von Markus F. (mfro)


Angehängte Dateien:

Lesenswert?

Im "Altera Advanced Synthesis Cookbook" 
(https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/manual/stx_cookbook.pdf) 
ist so ein Ringoszillator als "offizielles Beispiel" für einen True 
Random Number Generator beschrieben. Dazu gibt es auch ein 
Beispieldesign (Verilog), das - wie Lothar's Version - eine Logikkette 
nutzt, um den Wobbler auf eine handhabbare Frequenz runterzubringen.
1
// baeckler - 11-14-2005
2
// counter with unstable count enable signal based
3
// on ring oscillator.
4
5
module ring_counter (clk,rst,out);
6
7
parameter DELAY = 100;
8
9
input clk,rst;
10
output [15:0] out;
11
12
wire [DELAY-1:0] delay_line /* synthesis keep */;
13
14
reg [15:0] cntr;
15
reg sync0;
16
reg wobble;
17
18
// unstable ring oscillator
19
genvar i;
20
generate
21
for (i=1; i<DELAY; i=i+1)
22
  begin : del
23
    assign delay_line [i] = delay_line[i-1];
24
  end
25
endgenerate
26
assign delay_line [0] = !delay_line [DELAY-1];
27
28
// sync it over to the input clock
29
always @(posedge clk) begin
30
  sync0 <= delay_line[0];
31
  wobble <= sync0;
32
end
33
34
// count when the wobbly oscillator is high
35
always @(posedge clk or posedge rst) begin
36
  if (rst) cntr <= 0;
37
  else if (wobble) cntr <= cntr + 1;
38
end
39
40
assign out = cntr;
41
42
endmodule

Das hier steht allerdings auch dabei:

> These designs intentionally violate good synchronous design practices.

Das Verilog-Beispiel verwendet (wie Lothar's Version) das KEEP-Attribut, 
um die Synthese davon abzubringen, delay_line wegzuoptimieren (lässt man 
es weg, verschwindet delay_line folgerichtig).

: Bearbeitet durch User
von C. A. Rotwang (Gast)


Lesenswert?

Also meiner Meinung nach gehts hier mit den begriffen drunter drüber, da 
muss man sich erst mal einigen worüber hier diskutiert wird.

M.M nach bricht die Synthese nicht ab, sondern läuft durch und einem 
späteren Implementierungsschritt wird das Schaltungsteil mit  Warnings 
weg-optimiert.

Für die Synthese (Übersetzen Hochsprache in Netzliste) wird wohl das 
Synthesetool XST aus der ISE verwendet, nicht VIVADO.

Diese Netzliste wird dann vom ImplementierungsTool map in die konkteten 
Schaltungselemente des jeweiligen FPGA-Typs (LUT's, FF's, etc) 
umtransformiert. Dabei kann
eine Optimierung erfolgen das Blöcke die augenscheinlich nichts tun als 
kontante Zustände zu halten aus der Netzliste entfernt werden 
(Wegoptimiert).
Solche Blöcke sind bspw. Componenten ohne Ausgang, (geradzahlige) 
Verkettung inverser Funktionen, etc.

map versucht also dem Entwickler die Optimierungsarbeit abzunehmen, kann 
aber dabei übers Ziel hinausschiessen. Deshalb gibt es verschiedene 
Möglichkeiten diese Optimierung gezielt auszuschalten.
Siehe:
https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_5/devref.pdf
S.84 Punkt "unused logic"

von Dussel (Gast)


Lesenswert?

Jörg schrieb:
> Weltbester FPGA-Pongo schrieb im Beitrag #5435479:
>> Dieser Takt kann natürlich NICHT das Signal selber sein!
>>
>> Leute, lasst die Finger von FPGAs, wenn ihr das nicht versteht!
>
> Ich habe verstanden, dass man keine kombinatorische Rückkopplung
> erstellen soll. ABer warum das prinzipiell nicht logisch sein soll
> verstehe ich nicht. […] aber: warum nicht? Für einen speziellen Fall
> evtl. will das jemand haben?
Genau das wollte ich auch schreiben. Und wenn es nur ist, um es mal 
probiert zu haben. Es gibt absolut keinen Grund, warum man das nicht 
machen sollte. (Oder geht das FPGA dadurch kaputt? Das würde mich sehr 
überraschen, wäre dann aber der einzige Grund.)

Markus F. schrieb:
> Das hier steht allerdings auch dabei:
>
>> These designs intentionally violate good synchronous design practices.
Aber eben 'intentionally'.

Markus F. schrieb:
> Im "Altera Advanced Synthesis Cookbook"
> 
(https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/manual/stx_cookbook.pdf)
> ist so ein Ringoszillator als "offizielles Beispiel" für einen True
> Random Number Generator beschrieben.
An den Fall habe ich auch eben gedacht. Aber warum eine Kette? Dafür 
müsste doch ein einzelnes rückgekoppeltes Element mit nachgeschalteter 
Eintaktungskette besser geeignet sein, oder? Bekommt man mit einer Kette 
nicht ein langsameres und relativ stabiles Signal?

von Markus F. (mfro)


Lesenswert?

Dussel schrieb:
> An den Fall habe ich auch eben gedacht. Aber warum eine Kette? Dafür
> müsste doch ein einzelnes rückgekoppeltes Element mit nachgeschalteter
> Eintaktungskette besser geeignet sein, oder? Bekommt man mit einer Kette
> nicht ein langsameres und relativ stabiles Signal?

Eben.

Ohne die Kette schwingt das Ding im GHz-Bereich und Du bekommst das im 
Leben nicht eingetaktet.

von Dussel (Gast)


Lesenswert?

Markus F. schrieb:
> Dussel schrieb:
>> An den Fall habe ich auch eben gedacht. Aber warum eine Kette? Dafür
>> müsste doch ein einzelnes rückgekoppeltes Element mit nachgeschalteter
>> Eintaktungskette besser geeignet sein, oder? Bekommt man mit einer Kette
>> nicht ein langsameres und relativ stabiles Signal?
>
> Eben.
>
> Ohne die Kette schwingt das Ding im GHz-Bereich und Du bekommst das im
> Leben nicht eingetaktet.
Das ist ein Grenzfall, mit dem ich mich nicht mehr auskenne. Warum 
funktioniert das nicht?
Das undefinierbare Signal geht an einen Flipflopeingang. Bei einer 
Taktflanke wird dieses Eingangssignal übernommen. Natürlich werden die 
Zeitvorgaben verletzt, aber das ist ja hier gewünscht. Das Flipflop wird 
aber doch trotzdem nach einiger Zeit einen definierten Zustand annehmen, 
oder? Warum nicht? Außerhalb der Setup- und Holdzeit ist es doch egal, 
was am Eingang passiert, oder? Noch ein Flifpflop dahinter und man 
sollte ein getaktetes (vielleicht zufälliges) Signal haben.
Wo ist der Fehler?

von C. A. Rotwang (Gast)


Lesenswert?

Dussel schrieb:
> Das Flipflop wird
> aber doch trotzdem nach einiger Zeit einen definierten Zustand annehmen,
> oder? Warum nicht?

Mal an die Eingangskapazität des FF gedacht?
Ein signal wechselt nicht schlagartig zwischen '0' und '1' pegel sondern 
steigt almählich an, weil eine (parasitäre) Kapazität umzuladen ist.
Bei sehr hohen Frequenzen ist es gut möglich, das der Ringoszillator 
schon wieder umkippt, bevor die Schaltschwelle am FF erreicht ist.

von Dussel (Gast)


Lesenswert?

C. A. Rotwang schrieb:
> Bei sehr hohen Frequenzen ist es gut möglich, das der Ringoszillator
> schon wieder umkippt, bevor die Schaltschwelle am FF erreicht ist.
Das heißt also, dass das Eingangssignal auch nach der Holdzeit noch 
Auswirkungen auf das Ausgangssignal hat. Das wusste ich zum Beispiel 
noch nicht. Aber dann ist es verständlich.

von C. A. Rotwang (Gast)


Lesenswert?

Dussel schrieb:
> C. A. Rotwang schrieb:
>> Bei sehr hohen Frequenzen ist es gut möglich, das der Ringoszillator
>> schon wieder umkippt, bevor die Schaltschwelle am FF erreicht ist.
> Das heißt also, dass das Eingangssignal auch nach der Holdzeit noch
> Auswirkungen auf das Ausgangssignal hat. Das wusste ich zum Beispiel
> noch nicht. Aber dann ist es verständlich.

?Hab ich eigentlich nicht sagen wollen, die Ausage ist eher die:

"weil es keine Zeit
hat, sich irgendwie zu stabilisieren und deshalb nur im linearen Bereich
mit einem Sinus -geringer Amplitude- und der höchstmöglichen Frequenz 
vor
sich hinschwingt"

Beitrag "Re: Warum ist folgende Synthese nicht möglich?"

Wichtig ist das die Amplitude die "minimale Sampledauer" lang über der 
Schaltschwelle liegt, das ist hier nicht gegeben.

von C. A. Rotwang (Gast)


Lesenswert?


von Dussel (Gast)


Lesenswert?

Ich habe das Gefühl, wir reden ein bisschen aneinander vorbei.

Das Nichtgatter: Das schwingt immer um die Umschaltschwelle herum. 
Natürlich nicht mit Logikpegel und schönen Flanken, sondern irgendwas 
analoges dazwischen.

Das Flipflop: Das bekommt am Eingang ein schwingendes Signal, das man 
aus digitaler Sicht als undefiniert bezeichnen kann. Bei einer 
Taktflanke des Systemstakts (also des geringen, definierten Takts) 
übernimmt das Flipflop den Eingangswert. Der ist aber unbestimmt bzw. 
instabil, also geht das Flipflop am Ausgang in einen metastabilen 
Zustand. Der ist eben nicht stabil und der Ausgang wird zufällig in 
einen stabilen Zustand kippen. Um daraus ein definiertes Signal zu 
erzeugen, schaltet man noch mindestens ein Flifpflop dahinter und 
bekommt so ein sauberes Signal.

Falsch oder was meinst du?
Oder meinst du, dass das Gatter so schwingt, dass das nachgeschaltete 
Flipflop gar nicht metastabil wird, weil das schwingende Signal immer 
als eindeutig 0 oder eindeutig 1 gelesen wird (wenn es zum Beispiel 
zwischen 0 und 0,1 V schwingt)?

von Dussel (Gast)


Lesenswert?

Ich habe mir mal ausnahmsweise nicht die Vorschau angesehen und deshalb 
deinen letzten Beitrag nicht gelesen.

Also meinst du doch das letzte? Das Signal führt nicht dazu, dass das 
Flipflop umschaltet?

von C. A. Rotwang (Gast)


Lesenswert?

Dussel schrieb:

> Also meinst du doch das letzte? Das Signal führt nicht dazu, dass das
> Flipflop umschaltet?

Ja das meine ich, das Signal am D-Input des FF ist zu niedrig/resp. zu 
hoch als das der Pegel am Q-Ausgang des FF umschaltet.

von Dussel (Gast)


Lesenswert?

C. A. Rotwang schrieb:
> Dussel schrieb:
>
>> Also meinst du doch das letzte? Das Signal führt nicht dazu, dass das
>> Flipflop umschaltet?
>
> Ja das meine ich, das Signal am D-Input des FF ist zu niedrig/resp. zu
> hoch als das der Pegel am Q-Ausgang des FF umschaltet.
Achso. Ok. Das habe ich erst nicht bedacht. Dann ist es klar. Danke.

von Andi (Gast)


Lesenswert?

In einem FPGA hat man kein direkt rückgekoppeltes Nicht-Gatter, auch 
wenn man das so beschreibt. Um das im FPGA zu implementieren, wird das 
NICHT mit einer LUT gebildet, der Ausgang der LUT geht durch einen 
Multiplexer am FlipFlop vorbei zum Ausgang. Dieser Ausgang wird über 
weitere Multiplexer der Routing-Resourcen wieder an den Eingang des 
LUT-RAMs zurückgeführt.
Da sind also viele Transistoren und Gatter mit wahrscheinlich 
unterschiedlichen Schaltschwellen beteiligt und das führt wahrscheinlich 
zu einer Hysterese in der Rückkopplung, die Amplitude und Frequenz der 
Schwingung bestimmt.

Als ich mit FPGAs angefangen habe, habe ich auch solche Versuche 
gemacht, das funktionierte am Einfachsten über zwei extern verbundene 
Pins mit einem Inverter im FPGA. Dann kann man auch etwas mit dem Osci 
messen, und mit externen R-C Gliedern Verzögerungen einbauen. Auch einen 
Quarz Oszillator kann man so bauen.

von Cle (Gast)


Lesenswert?

Dussel schrieb:
> Dussel schrieb:
> Ich habe schon Quartus und Libero drauf, da werde ich nicht für so ein
> theoretisches Experiment noch Vivado installieren.
Ah, du bist nicht der erste Poster, das hatte ich übersehen.

>
> Cle schrieb:
>> Wenn Quartus dir das angehängte ausspuckt würde ich sofort Vorsichtig
>> werden und die Software so nicht benutzen.
> Vorsichtig sollte man bei Logikbeschreibungen immer sein. Dazu gehört
> auch, die Warnungen zu beachten. Dann fällt auch auf, dass es die
> kombinatorische Schleife gibt und man kann entscheiden, ob das gewollt
> ist.
Wenn das Tool erstmal die unsinnigste aller Varianten implementiert 
würde man das sehen, aber damit wäre das Tool auf Dauer nicht für mich 
einsetzbar.
Warum die kombinatorische Schleife erlauben wenn es in 99% der Fälle ein 
Fehler ist und nicht andersherum? Damit passieren viel mehr ungewollte 
Fehler die viel zuviel Zeit kosten.

>
> Cle schrieb:
>> Und jetzt die andere Software "nicht so weit" zu schimpfen weil sie
>> etwas eigentlich fatales macht was die andere nicht ohne explizite
>> Direktive erzeugt ist doch auch eine etwas zu kurz gekommene
>> Schlussfolgerung, oder?
> Kann es sein, dass du da was vertauscht hast? ;-)
> Wir reden hier von professionellen Programmen. Die können man
> nachfragen, ob man das wirklich so will, aber ich finde, die sollten
> einem nicht verbieten (oder nur auf speziellen Antrag erlauben), etwas
> zu tun.
Nein, da ist nichts vertauscht. Wenn die Software eine erstmal unsinnige 
Variante (und das ist dies ohne explizite andere Anweisung wie in den 
schönen Beispielen von dir mit Synthesis Keep Attributen) synthetisiert 
ist das für eine anspruchsvolle Synthesesoftware falsch. Dein Weg würde 
zu viel mehr Problemen führen weil eben alle es erstmal falsch machen. 
Die 1% der Nutzer die wirklich wissen was sie tun dürfen das dann mit 
einem einfachen Attribut ohne Fehler.

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.