Vraag:
Wat is een kloksnelheid en waarom kan deze negatief zijn?
Randomblue
2012-09-07 14:49:17 UTC
view on stackexchange narkive permalink

Mijn HDL-compiler (Quartus II) genereert timingrapporten. Daarin hebben de knooppunten een kolom "klok scheef". De enige definitie van klokafwijking die ik heb gevonden, is in de TimeQuest-documentatie (zie pagina 7-24):

Om handmatig klokonzekerheid of scheeftrekking voor klok- naar-klok overdrachten, gebruik het set_clock_uncertainty commando.

Dus als scheefheid "onzekerheid" is, waarom zijn sommige van mijn kloksnelheden dan negatief (bijv. -0.048)? Wat is een kloksnelheid precies?

Drie antwoorden:
davidcary
2012-09-12 18:11:05 UTC
view on stackexchange narkive permalink

Moderne digitale logische apparaten zijn meestal (*) ontworpen met 'synchrone ontwerppraktijk': een wereldwijd synchrone edge-triggered register-transfer design style (RTL): alle sequentiële circuits worden opgesplitst in edge-triggered registers die zijn verbonden met de globale kloksignaal CLK en pure combinationele logica.

Die ontwerpstijl stelt mensen in staat om snel digitale logische systemen te ontwerpen zonder rekening te houden met timing. Hun systeem zal "gewoon werken" zolang er genoeg tijd is van de ene klokflank naar de volgende om de interne toestand tot rust te laten komen.

Met deze ontwerpstijl, klokafwijking en andere timinggerelateerde problemen zijn niet relevant, behalve voor het uitzoeken "Wat is de maximale kloksnelheid voor dit systeem?".

Wat is kloksnelheid precies?

Bijvoorbeeld:

  ... R1 - register 1 R3 + - + -> | | ------ > (combinatief) + - + ...- > | | ------ > (logica) -> | | --... -> | ^ | ------ > () -> | ^ | + - + () + - + | + --- > () | CLK | + -> () CLK | | R2: | | + - + | | ... - > | | -> + | -> | ^ | -> - + + - + | CLK  

In echte hardware schakelt het "CLK" -signaal nooit echt exact tegelijk bij elk register. De klokafwijking Tskew is de vertraging van de stroomafwaartse klok ten opzichte van de stroomopwaartse klok ( a):

Tskew (bron, bestemming) = bestemming_tijd - bron_tijd

waarbij source_time de tijd is van een actieve klokflank bij het stroomopwaartse bronregister (in dit geval R1 of R2), en bestemmingstijd de tijd is van 'dezelfde' actieve klokflank op een stroomafwaarts bestemmingsregister (in dit geval, R3).

  • negatieve kloksnelheid: de CLK op R3 schakelt voor de klok op R1.
  • positieve kloksnelheid: de CLK op R3 schakelt na de klok op R1.

Wat is het effect van klokafwijking?

(misschien zou een timingdiagram hier dit duidelijker maken)

Om dingen goed te laten werken, zelfs in het ergste geval, mogen de invoer van R3 niet veranderen tijdens de insteltijd of de vasthoudtijd van R3. Aan de andere kant, erger nog, om dingen goed te laten werken, moeten we dingen zo ontwerpen dat:

Tskew (R1, R3) < Tco - Th.

Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).

waar:

  • Tcalc is de maximale worst-case afwikkelingstijd van een blok combinatorische logica waar dan ook in het systeem. (Soms kunnen we het blok combinatielogica dat zich op het kritieke pad bevindt opnieuw ontwerpen, onderdelen stroomopwaarts of stroomafwaarts duwen, of een andere fase van pijplijnleiding invoegen, zodat het nieuwe ontwerp een kleinere Tcalc heeft, waardoor we de kloksnelheid kunnen verhogen) .
  • Tclk_min is de minimale tijdsperiode van de ene actieve klokflank tot de volgende actieve klokflank. We berekenen het op basis van de bovenstaande vergelijking.
  • Tsu is de insteltijd van het register. De registerfabrikant verwacht van ons dat we een klok gebruiken die traag genoeg is om altijd aan deze eis te voldoen.
  • Dit is de houdtijd van het register. De registerfabrikant verwacht van ons dat we de kloksnelheid voldoende beheersen om altijd aan deze eis te voldoen.
  • Tco is de klok-naar-uitgangsvertraging (propagatietijd). Na elke actieve klokflank gaan R1 en R2 door met het aansturen van de oude waarden naar de combinatielogica gedurende een korte tijd Tco alvorens over te schakelen naar de nieuwe waarden. Dit wordt bepaald door de hardware en gegarandeerd door de fabrikant, maar alleen zolang we voldoen aan de Tsu en Th en andere eisen die de fabrikant stelt voor normaal gebruik.

Te veel positieve scheefheid is een regelrechte ramp. Te veel positieve scheeftrekking kan (met sommige gegevenscombinaties) 'sneakpath' veroorzaken, zodat in plaats van R3 de 'juiste gegevens' vergrendeld worden op klok N + 1 (een deterministische functie van de gegevens die eerder zijn vergrendeld in R1 en R2 op klok N) kunnen de nieuwe gegevens die zijn vergrendeld in R1 en R2 op klok N + 1 erdoorheen lekken, de combinatielogica verstoren en ervoor zorgen dat verkeerde gegevens worden vergrendeld in R3 op "dezelfde" klokflank N + 1.

Elke hoeveelheid negatieve scheeftrekking kan worden 'gefixeerd' door de kloksnelheid te vertragen. Het is alleen 'slecht' in de zin dat het ons dwingt om het systeem met een lagere kloksnelheid te laten werken, om de invoer van R3 tijd te geven aan settelen nadat R1 en R2 nieuwe gegevens vergrendelen op klokflank N, en later vergrendelt R3 het resultaat op "de volgende" klokflank N + 1.

Veel systemen gebruiken een klokdistributienetwerk die de skew tot nul probeert te verminderen. contra-intuïtief, door voorzichtig vertragingen toe te voegen langs het klokpad - het pad van de klokgenerator naar de CLK-ingang van elk register - is het mogelijk om de ap bovenliggende snelheid waarmee het klokflank golffront fysiek reist van de CLK-invoer van het ene register naar de CLK-invoer van het volgende register, sneller dan de lichtsnelheid.

De Altera-documentatie vermeldt

"Vermijd het gebruik van combinatielogica in klokpaden, omdat dit bijdraagt ​​aan klokafwijking."

Dit verwijst naar het feit dat veel mensen HDL schrijven dat wordt gecompileerd op een FPGA op een manier die er op de een of andere manier voor zorgt dat iets anders dan het globale CLK-signaal de lokale CLK-invoer van sommige registers aanstuurt (dit kan "klokpoort" -logica zijn, zodat nieuwe waarden alleen in een register worden geladen als aan bepaalde voorwaarden is voldaan; of "klokverdeler" -logica die slechts 1 van de N-klokken doorlaat, of enz.). Die lokale CLK is meestal op de een of andere manier afgeleid van de globale CLK - de globale CLK tikt, en dan verandert ofwel de lokale CLK niet, of (een korte vertraging na de globale CLK om het signaal door dat "iets anders" te verspreiden) de lokale CLK verandert één keer.

Wanneer dat "iets anders" de CLK van het stroomafwaartse register (R3) aanstuurt, wordt de scheeftrekking positiever. Wanneer dat "iets anders" de CLK van het stroomopwaartse register aanstuurt (R1 of R2), het maakt de scheefheid negatiever. Af en toe hebben wat de CLK van het stroomopwaartse register en wat de CLK van het stroomafwaartse register ook aandrijft, praktisch dezelfde vertraging, waardoor de scheefheid tussen hen praktisch nul is.

Het klokdistributienetwerk binnen sommige ASIC's is opzettelijk ontworpen met kleine hoeveelheden positieve klokafwijking op sommige registers, waardoor de combinatielogica stroomopwaarts iets meer tijd heeft om tot rust te komen en dus het hele systeem kan worden gebruikt met een hogere kloksnelheid. Dit wordt "clock skew optimiza" genoemd tion "of" clock skew scheduling ", en is gerelateerd aan" retiming ".

Ik ben nog steeds verbijsterd door het set_clock_uncertainty -commando - waarom zou ik de skew ooit "handmatig" willen specificeren?

(*) Een uitzondering: asynchrone systemen.

Ik geloof dat het idee achter het toevoegen van vertraging om klokafwijking te minimaliseren, soms inhouden dat de klok bijna een volledige cyclus wordt vertraagd. Zodra de klok loopt, kunt u deze zo instellen dat de flip-flop A klokrand 1 op exact hetzelfde tijdstip ziet. Flip-flop B ziet klokrand 2. Van buitenaf zijn het verschillende randen, maar het circuit niet Het maakt niet uit zolang de randen perfect zijn uitgelijnd.
embedded.kyle
2012-09-07 18:06:20 UTC
view on stackexchange narkive permalink

Van Wikipedia:

In een synchrone circuitklokafwijking (\ $ T_ {Skew} \ $) is het verschil in de aankomsttijd tussen twee opeenvolgende- aangrenzende registers. Gegeven twee opeenvolgend aangrenzende registers \ $ R_i \ $ en \ $ R_j \ $ met aankomsttijden van de klok op klokpinnen als respectievelijk \ $ T_ {Ci} \ $ en \ $ T_ {Cj} \ $, dan kan klokafwijking zijn gedefinieerd als:

$$ T_ {Skew i, j} = T_ {Ci} - T_ {Cj} $$

Clock skew kan positief of negatief zijn. Als de kloksignalen volledig synchroon zijn, is de kloksnelheid die bij deze registers wordt waargenomen nul.

Dus de hoeveelheid kloksignalen bij een register is relatief ten opzichte van een ander register. Omdat het relatief is, kan het positief of negatief zijn.

Enkele illustraties:

positive/negative skew leading/lagging skew

Neem bijvoorbeeld een intraclock-overdracht zoals gedefinieerd in het TimeQuest-document dat u heeft verstrekt:

Intraclock-overdrachten vinden plaats wanneer de register-naar-register-overdracht plaatsvindt in de kern van het apparaat en de bron- en bestemmingsklokken afkomstig zijn van dezelfde PLL-uitgangspen of -klok poort.

Dus als het bestemmingsregister fysiek dichter bij het klokgeneratiecircuit ligt, dan zal de klok waarschijnlijk bij het bestemmingsregister aankomen voordat het bij het bronregister aankomt, wat resulteert in een leidende klokafwijking wat eigenlijk positief is. Als het bestemmingsregister de flank van de klok na het bronregister zou ontvangen, zou de klokafwijking achterblijven of negatief zijn.

Anders gezegd, klokafwijking is de onzekerheid over hoe dicht bij elkaar in de tijd een klokrand zal zijn twee afzonderlijke registers bereiken die zijn opgegeven in tijdseenheden met betrekking tot een bronregister bij een register-naar-register-overdracht.

Het uitbreiden van die differentiatie met inter -klokoverdrachten en instel- en wachttijden wordt een beetje rommelig. Het is dus waarschijnlijk gemakkelijker om het te zien als "hoe synchroon" een edge of een hold-tijd is tussen twee registers. We hebben de neiging om "synchroon" te beschouwen als "zich tegelijkertijd voordoen". Maar dingen gebeuren zelden op exact dezelfde tijd. Dus we moeten die tijd tolereren. En toleranties worden vaak uitgedrukt in termen van positief en negatief (d.w.z. ±).

user12108
2012-09-07 17:07:34 UTC
view on stackexchange narkive permalink

klokafwijking is wanneer de klok op verschillende tijdstippen op verschillende punten van het circuit aankomt als gevolg van de afstand, capaciteit enz. waardoor deze defect kan raken. Ik denk dat het negatieve moet zijn wanneer de klok op dat punt komt voordat hij bij de referentie komt



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...