Forum: FPGA, VHDL & Co. Frage zu Benutzung des CLK beim CPLD im Vergleich zu einem FPGA


von Michael F. (mifi)


Lesenswert?

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 @(negedge nRead)
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
   signal rd_sr        : std_logic_vector(2 downto 0);
2
   signal host_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
      elsif rising_edge(clk_i) then
11
         rd_sr <= rd_sr(1 downto 0) & NOT rdn_i;  
12
      end if; 
13
   end process;
14
   
15
   
16
   process(clk_i, rst_i)
17
   begin
18
      if (rst_i = '1') then
19
         host_read  <= '0';
20
   
21
      elsif rising_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
         end if;
29
      
30
      end if; 
31
   end process;

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

: Bearbeitet durch User
von Duke Scarring (Gast)


Lesenswert?

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

von Schlumpf (Gast)


Lesenswert?

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.

von Michael F. (mifi)


Lesenswert?

@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

: Bearbeitet durch User
von Schlumpf (Gast)


Lesenswert?

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.

von Michael F. (mifi)


Lesenswert?

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

von Klakx (Gast)


Lesenswert?

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"

von Schlumpf (Gast)


Lesenswert?

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.

von Michael F. (mifi)


Lesenswert?

Hallo Schlumpf,

>Eine Verletzung der Setupzeit führt beim diskreten FF genauso zu
>Metastabilität, wie beim Register im FPGA.

Das ist mir schon klar.

von Duke Scarring (Gast)


Lesenswert?

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

von Schlumpf (Gast)


Lesenswert?

Michael F. schrieb:
> Das ist mir schon klar.

Warum fragst du dann?

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.