Forsinkelse før opgave.

M

munchies

Guest
Jeg bruger VHDL og jeg ønsker at indføre en forsinkelse, før tildeling af to signaler at være lige. Min tænkning er af en kontakt, der bevæger sig fra alle nuller eller null for at wiren jeg ønsker at tage signalet fra efter x antal clk_cycles. Er det muligt? Mit problem er, at mit design udsender junk data, før alle de korrekte data udbreder sig gennem den fuldt ud, jeg ønsker at tildele output til nul eller null indtil propagation delay er færdig. Er det muligt? Tak for enhver hjælp eller diskussion.
 
gør dit kredsløb har en sekventiel del? fordi det gør du kan bruge det til at bestemme, hvornår de skal tildele til produktionen. hvad du siger, er ikke nyttigt, så vidt jeg har forstået. du siger du for eksempel har en wire, og du ønsker det skal have nogen værdi for en tid (nul), og end du vil tildele en værdi til den, når du vil. null værdi er ikke muligt i HDL. fordi hver wire og registrere have en tilfældig værdi på reset, da de er faktiske bistabile solid state-enheder. hvad du kan gøre er, at for eksempel har en cyklus tæller. og sige dit kredsløb slutter sine beregninger efter 150 ur cyklusser. og du kan have et output register, som alle nuller op til 150 cyklus tæller. og du kan indstille, at produktionen efter de 150. cyklus. og du kan have også have en lidt signal, siger "done". og du angiver dette gjort signal olnly efter overdragelsen til resultatet register er færdig. denne måde kan du fortælle det næste modul, at denne del af sytem har beregnet sit output værdi, og værdien er klar til at blive taget fra landets output register. Dette er den almindelige måde at gøre, hvad du beder om. håber dette hjælper.
 
I simulation , du kan forsinke et signal opgave ved hjælp af [FONT = Courier New] efter [/FONT], men det er nok ikke, hvad du ønsker: [url = http://www.gmvhdl.com / delay.htm] VHDL Tutorial - forsinkelsen model [/url] Du har sikkert brug for at oprette et signal, der ved, hvornår junk har skyllet gennem dit modul, og bruge den til at skifte output til eller fra. Jeg foreslår du tilføje noget som dette til slutningen af dit modul:
Code:
 finalOutput '0');
 
Okay tak for det. Jeg ved, hvad jeg ønsker at basere det på, så jeg vil bruge noget i retning af
Code:
 IF (Fire'event OG Fire = '1 '), så ...... ComputationReady = '1 ';
Hvordan får jeg derefter indstille forsinkelsen jeg ønsker? I dette tilfælde er det 4 cyklusser. Jeg går ud fra ved hjælp af en timing er ubrugeligt uden for simulering. Så jeg har brug for noget lignende:
Code:
 vente 8 * clk'event
eller sådan noget?
 
dont bruge den første idé - du opretter et ur, der vil give dig alle mulige timing problemer. Bedste er lige til at oprette en tæller og vente indtil den når en vis værdi.
 
Må ikke udløse en stigende kanten af "ild", på den måde, ville du bruge "brand" som et nyt ur, i stedet for et styresignal. I stedet, så tjek for den gamle værdi og sammenligne med den nye værdi. Så begynde at tælle 4 Ur cyklusser. Optælling 4 Ur cyklusser kan gøres ved at flytte værdierne i et skift register eller ved at oprette en stat maskine med en tæller. Lad os gøre skiftet tilmelde dig her: Hvis man antager, erklæringer, som disse:
Code:
 signal brand, fyret, aktiv: std_logic; signal tælling: std_logic_vector (4 downto 0)
Du noget der ligner dette i din synkrone proces: [CODE ], hvis rising_edge (CLK), så hvis fyret = '0 'og brand = '1' og derefter - start tælle aktiv
 
I en pipeline design, vil du ofte ønsker at have et DAV (data) pipeline, at forsinkelser et håndtryk signal sammen med dataene. Det ikke bare forsinkelser en data-klarsignal, men tillader flere nye værdier til at rejse de datasti på samme tid. Hvis dataene vasken er registrering af data i henhold til DAV-signal, behøver du ikke at maskere ugyldige output data. Hvis datasti kører sekventielt i stedet pipeline, fx en seriel skillevæg enhed, ville en simpel DAV counter være tilstrækkelig.
 

Welcome to EDABoard.com

Sponsor

Back
Top