Prozess hier nötig oder Signalzuweisung ausreichend?

Gast #1631158
Lesenswert?
• ▲
▼
Hallo,

in einen XC95144XL (Oszillator 66MHz, Videotakt=66MHz/12=5,5MHz) soll 
ein Videocontroller. Also SRAM als Videospeicher, der abwechselnd dem 
angeschlossenen µC und dem Videoteil zur Verfügung steht. Da der Platz 
knapp wird und ich keinen größeren Baustein verwenden möchte, werden 
einige Sync-Signale per Signalzuweisung der Form:

SPL <= '1' when (HCNTs > 72 and HCNTs < 75) else '0';

und nicht (mehr) als Prozess:

SPL_PROC : process(CLK_IN, HCNTs)
begin
  if falling_edge(CLK_IN) then
    if(HCNTs > 72 and HCNTs < 75)then
      SPL <= '1';
    else
      SPL <= '0';
    end if;
  end if;
end process SPL_PROC;

generiert.

Alles funktioniert über lange Zeit mit verschiedenen TFTs stabil. Werden 
Glitches (wenn HCNTs in einem weiteren Prozess weitergezählt wird) nur 
nicht wirksam wegen dem Tiefpass aus CPLD-Treiberwiderstand und 
parasitäre TFT-Einganskapazität? Sind die Glitches erfahrungsgemäß so 
kurz, dass sie nach draussen eh unwirksam sind?

Kurz: Bin ich auf der sicheren Seite?

Danke - Frank
Moderator (Firma: Titel) Persönliche Seite #1631214
Lesenswert?
• ▲
▼
> Werden Glitches (wenn HCNTs in einem weiteren Prozess weitergezählt wird)
> nur nicht wirksam wegen dem Tiefpass aus CPLD-Treiberwiderstand und
> parasitäre TFT-Einganskapazität?
Ja.

> Sind die Glitches erfahrungsgemäß so kurz,
> dass sie nach draussen eh unwirksam sind?
Das kannst du nur an der realen Hardware messen und beantworten.

BTW:
SPL_PROC : process(CLK_IN, HCNTs)
Dieser Prozess ist eigentlich nur auf CLK_IN sensitiv.
HCNTs ist in der Liste überflüssig.
#1631217
Lesenswert?
• ▲
▼
(Gast) == schrieb:
> Kurz: Bin ich auf der sicheren Seite?

Kurz : Nein, wenn Du dir keine Glitches erlauben kannst.

Einen <> Vergleich in einem CPLD zu machen ist ziemlich 
Resourcenfressend.
Vielleicht ist es günstiger, bei HCNT = 72 einen weiteren Zähler zu 
starten, und warten bis dieser abläuft.

SPL_PROC : process(CLK_IN)
begin
  if falling_edge(CLK_IN) then
    CNT <= CNT - 1;
    if SPL = '1' and CNT = 0 then
       SPL <= '0'
    end if;
    if(HCNTs = 72 then
      SPL <= '1';
      CNT <= 3;
    end if;
  end if;
end process SPL_PROC;
Gast #1632104
Lesenswert?
• ▲
▼
Danke für Eure Antworten. Werde das Oszi am CPLD (ohne TFT als Last) in 
der Hoffnung beobachten, möglichst wenig Unruhe zu sehen und ich mach 
einen Resourcenvergleich mit schlankerem "CNT"-Zähler.


>Einen <> Vergleich in einem CPLD zu machen ist ziemlich
>Resourcenfressend.

Damit meint Klaus nicht Ungleichheit ( x/=y ), sondern 
Kleiner-Größer-Vergleiche.
#1632348
Lesenswert?
• ▲
▼
@  (Gast) == (Gast)

>SPL <= '1' when (HCNTs > 72 and HCNTs < 75) else '0';

>und nicht (mehr) als Prozess:

Das spart effektiv nix, denn die Macrozelle brauchst du sowieso. In 
ersten Fall ist dein FlipFlop ungenutz und vergammelt.
In CPLDs sollte man das anders kodierern, die VHDL Compiler sind nicht 
unbedigt so schlau, das selber rauszufinden.
1
SPL <= '1' when (HCNTs = 72 or HCNTs = 73 or HCNs =74) else '0';

Das Ergebnis ist gleich, der Resourcenverbrauch NICHT! Probiers aus.

>Alles funktioniert über lange Zeit mit verschiedenen TFTs stabil. Werden
>Glitches (wenn HCNTs in einem weiteren Prozess weitergezählt wird) nur
>nicht wirksam wegen dem Tiefpass aus CPLD-Treiberwiderstand und
>parasitäre TFT-Einganskapazität?

Kann sein, muss nicht.
> Sind die Glitches erfahrungsgemäß so
>kurz, dass sie nach draussen eh unwirksam sind?

NEIN!!!

>Kurz: Bin ich auf der sicheren Seite?

Nein. Wenn du ein Signal SICHER glitchfrei haben willst, muss du 
entweder

* Graycode nutzen
* Ein FlipFlop nachschalten

Alles andere ist Zufall oder Glück.

MFG
Falk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren