Hallo zusammen,
ich habe vorher nur FPGAs verwendet, und hier den CLK bei einem echten
CLK Eingang für ein echtes synchrones Design mit nur einem CLK. Als FPGA
wurde hier ein CycloneIV verwendet.
Nun habe ich eine Frage zu einem MAX V, CPLD.
Darf man hier ein normales Signal als CLK verwenden, Beispiel:
1
always@(negedgenRead)
2
begin
3
case(Addr)
4
.
5
.
6
.
7
endcase
8
end
Normalerweise benutz ich VHDL, und im FPGA würde ich erst mal das nRead
Signal einsynchronisieren, auf eine fallende Flanke prüfen und das mit
dem allgemeinen CLK bearbeiten:
1
signalrd_sr:std_logic_vector(2downto0);
2
signalhost_read:std_logic;
3
4
5
process(clk_i,rst_i)
6
begin
7
if(rst_i='1')then
8
rd_sr<=(others=>'0');
9
10
elsifrising_edge(clk_i)then
11
rd_sr<=rd_sr(1downto0)&NOTrdn_i;
12
endif;
13
endprocess;
14
15
16
process(clk_i,rst_i)
17
begin
18
if(rst_i='1')then
19
host_read<='0';
20
21
elsifrising_edge(clk_i)then
22
23
-- Default
24
host_read<='0';
25
26
if((host_rd_sr(2)='0')AND(host_rd_sr(1)='1'))then
27
host_read<='1';
28
endif;
29
30
endif;
31
endprocess;
host_read ist jetzt nur noch für einen Takt aktive, und synchrone mit
clk_i.
Braucht man das bei einem CPLD nicht mehr machen?
Viele Grüße,
Michael
Michael F. schrieb:> Braucht man das bei einem CPLD nicht mehr machen?
Prinzipiell gilt auf dem CPLD die gleiche Physik, wie auf dem FPGA.
Allerdings sind auf dem CPLD die Ressourcen doch echt eingeschränkt, so
das man auf 'schmutzige' Tricks zurückgreifen muss.
Die Frage ist: Was soll passieren, wenn die Host-Adresse gültig ist?
Duke
Du synchromisierst ja ein, weil das externe Signal keinen Phasenbezug
zum internen Takt hat und deswegen am Register die Einhaltung von Setup-
und Holdzeiten nicht garantiert werden kann.
Diese Tatsache ist unabhängig von der gewählten Technologie.
@Schlumpf,
davon bin ich auch ausgegangen, es konnte ja sein das es hier noch etwas
besonderes gibt.
D.h. jetzt aber, alle Regeln die man für die Entwicklung bei FPGAs
verwendet müssen auch für CPLDs angewendet werden.
@Duke,
die schmutzigen Tricks dienen hier dann aber nur zur Reduzierung der
Ressourcen mit dem Nachteil der Stabilität.
Ich bin gerade in der Softwarearchäologie" unterwegs. Und wenn ich auf
der CPU Seite Funktionen sehe die in einer FOR Schleife mehrfach auf ein
Register den selben Werte schreiben, frage ich mich warum? Wenn ich dann
aber im CPLD Source sehe das hier die Signale nicht synchronisiert
wurden, und direkte Signale als CLK benutzt wurden, kann ich mir schon
vorstellen das dies der Grund ist.
Man wußte wohl nicht warum es ein Problem gab, und hat einfach mehrfach
auf das Register geschrieben. In einer externen Schulung vor vielen
Jahren sagte der Trainer das man mit solchen Designs der Kunden viel
Geld bei der Fehlersuche und Behebung als externe "Feuerwehr" verdienen
kann...
Wenn so etwas z.B. im Flugzeug verwendet wird, möchte ich nicht damit
fliegen, Du etwa?
Danke,
Michael
Michael F. schrieb:> D.h. jetzt aber, alle Regeln die man für die Entwicklung bei FPGAs> verwendet müssen auch für CPLDs angewendet werden.
Ja wobei das jetzt hier keine Regel für CPLD/FPGA ist, sondern ein
Effekt, der in der Digitaltechnik generell auftaucht.
Also auch, wenn du deine Schaltung komplett diskret mit Transistoren
aufbauen würdest.
Hallo Schlumpf,
mit "Regeln" meine ich solche Punkte wie z.B. das Synchronisieren der
Eingänge, und wie Lothar immer so schön sagt das ein Design für den
Anfang nur einen Takt haben sollte, und das man Variablen erst mal nicht
braucht :o)
Ich sehe das Problem bei der Herangehensweise. Wenn jemand noch nicht
mit CPLDs und FPGAs gearbeitet hat, aber Kenntnisse der
Schaltungstechnik besitzt dann passiert so etwas. Es wird überlegt wie
man das mit diskreten Bauelementen aufbauen würde, und dann wird das
nRead Signal auf den Takteingang eines Latch gelegt um die Daten zu
speichern. Und wenn dieser "Jemand" dann gesagt bekommt, "CPLD" sind
doch auch nur "Dinger" wo man Logikbausteine plazieren kann, dann wird
er ohne eine entsprechenden Schulung das so machen wie ich das in dem
Design vorgefunden habe. Aber das ist ein anderes Thema...
Gruß,
Michael
Michael F. schrieb:> [..] Und wenn ich auf> der CPU Seite Funktionen sehe die in einer FOR Schleife mehrfach auf ein> Register den selben Werte schreiben, frage ich mich warum? [..]
Es gibt auch Register mit Auto-Clear. Vielleicht werden mehrere Aktionen
damit ausgelöst. Z.b. "Messe Daten und speichere diese im FIFO"
Hallo Michael,
Genau da liegst du falsch.
Denn es ist so, dass auch in diskret aufgebauter Logik die identischen
Problem auftreten, wenn man diese Regeln nicht beachtet.
Daher auch meine Aussage, dass sich diese Regeln nicht nur auf FPGA/CPLD
beschränken.
Eine Verletzung der Setupzeit führt beim diskreten FF genauso zu
Metastabilität, wie beim Register im FPGA.
Michael F. schrieb:> die schmutzigen Tricks dienen hier dann aber nur zur Reduzierung der> Ressourcen
Ja.
> mit dem Nachteil der Stabilität.
Das muß nicht zwingend sein.
Ich würde es eher so formulieren:
Tricks zur Reduzierung der Ressourcen, mit dem Nachteil beim externen
Timing viel gewissenhafter arbeiten zu müssen.
Zumal CPLD tendenziell eher die Peripherie zu 'etwas' sind, während FPGA
tendenziell eher 'Host' sind (und damit der Master über das Timing).
Duke