Finne puls - generert puls kan ikke mottas

E

EDA_hg81

Guest
I designen min, har jeg brukt to tilstandsmaskiner.

Første stat maskinen kjører under 4MHZ som genererer en 500us puls.

Andre statlige maskinen kjører under 16MHZ, som får denne 500us puls.

Min kode for å sjekke pulsen er som følger:

Code:

prosess (refclk)

begynne

if (rising_edge (refclk)) then

fstart_reg1 <= cformat;

fstart_reg2 <= fstart_reg1;

if (fstart_reg1 = '1 'and fstart_reg2 = '0') then

... ... ... ... ... ... ... ... ... ... ....

end if;

end if;

end process;
 
Fist of all metastability kan være problemet.Den Recive filpflops kunne bli sittende fast i en meta stabil tilstand.Men hvis dette er problemet ditt da det skal fungere noen ganger bare ikke hele tiden.

Slik fjerner metastability problemer (vel redusere dem ned til somthing like 0,000001% av happening) doulbe registrere din logikk før du bruker det like nedenfor

Code:

prosess (refclk)

variabel temp: std_logic_vector (1 downto 0);

begynne

if (rising_edge (refclk)) then

fstart_reg1 <= temp (0);

fstart_reg2 <= fstart_reg1;

if (fstart_reg1 = '1 'and fstart_reg2 = '0') then

... ... ... ... ... ... ... ... ... ... ....

end if;

temp (temp'high downto 1): = cformat & temp (temp'high-1 downto 0);

end if;

end process;
 
Vennligst forklare hvordan dette kommer til å arbeide?

min ordbok er behandlet med to etapper flip-flop allerede ...

<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="Nøytral" border="0" />
 
Ja.Du har rett.

Det jeg ønsker er å bruke signalet inne 4MHZ domene å utløse en modul inne 16MHZ domene.

Jeg bruker Altera signal trykk for å se signaler, skjedde ingenting.

Hvis jeg brukte hånden riste slik:

Code:

getformat <= '1 ';

if (ackformat = '1 ') then

getformat <= '0 ';

format_state <= idle;

end if;
 
Quote:

Jeg bruker @ ltera signal trykk for å se signaler, skjedde ingenting.
 
Jeg vet hvor problemet er:

Når erkjenner signal (ackformat) inne 16MHZ domene prøve å utløse modul inne 4MHZ, pulserende erkjenner signal (ackformat) er for smalt og kan ikke bli fanget av 4MHZ domene.

Takk likevel.

 
Hvis det ikke er fase forholdet mellom klokken domenene da metastability er alltid et problem som må håndteres.Ellers koden vil alle plutselig mystiske slutter å virke til du omprogrammere den.

En måte å håndtere metastability er å sørge for at alle signaler er dobbelt flip folped før du bruker dem.Som i kode signalet krysset klokken domenet blir brukt etter at det gikk om bare én filpflop (dette er ikke recormended).

Jeg har attahced litt kode jeg laget for lenge siden.Det er bra for å få langsom endring parralell data (både med hensyn til klokker) fra en klokke domene til et annet, og garantere at det kom.Kan være verdt en titt hvis du skal gjøre flere ting som dette.

Hva koden gjør er:
- Brukere metastabil registre.
- Se etter stigende kanten til å avgjøre når dataene er gyldig
- Sender tilbake en acknolge signal til motta side (nyttig å vite når du kan sende den neste).
Det er veldig enkelt og veldig treg.

Applogise eller annen grunn ble jeg pålagt å legge til. Pdf på slutten (bare slette. Pdf)

Hvis dataene overføres raskt bare bruke en ASYNC FIFO.

Prøver bare å være hjelpsom gi meg beskjed hvis du dissagree med noe her eller kan gjøre på en bedre måte.
Beklager, men du må logge inn for å vise dette vedlegget

 
Quote:

Jeg vet hvor problemet er:Når erkjenner signal (ackformat) inne 16MHZ domene prøve å utløse modul inne 4MHZ, pulserende erkjenner signal (ackformat) er for smalt og kan ikke bli fanget av 4MHZ domene.
 
Jeg har bestemt meg feil.

Beklager for villedende deg, tenkte jeg det var metastability problemet, men til slutt fant jeg ut at det var hånd-riste problem.

Takk igjen og ha en god helg.

 

Welcome to EDABoard.com

Sponsor

Back
Top