Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20704 Discussions

DCFIFO and external syncronizer

Altera_Forum
Honored Contributor II
1,011 Views

hi,  

 

i'm new to ASIC design. i'm using megaWizard DCFIFO to send the data from two different clock domain. I'm designing network adapter in Network-on-chip.  

 

i want to use the DCFIFO to put the 16-bit flit(packet) that i want to send to router. router uses different clock speed.  

 

the question is, as a DCFIFO is already can handle two clock domain data transfer, do i still need to design external syncronizer?  

 

N.adapter domain | Router domain 

flit_in ------------> DCFIFO--> flit out--> syncronizer----> flit_out_R 

 

(Router domain should be located at flit_out_R, not on top of DCFIFO). 

 

i'm confused with build-in syncronizer function in DCFIFO. if yes, where i can find the reference design for simple syncronizer? like two-flops syncronizer.  

 

can someone explain to me?  

 

Thanks a lot!:)
0 Kudos
4 Replies
Altera_Forum
Honored Contributor II
325 Views

No. The whole point of the DCFIFO is to take care of the synchronization for you. There tend to be four basic synchronizers commonly used: 

1) DCFIFO - takes the most logic and has the most latency, but generally the most robust. The big thing is that it works for busses, i.e. if you're sending 8 bit data, it will remain aligned on the output. Throughput is also very high, and it can store data to handle the clock rates. 

2) Hand-shaking - Only works when the data rate is slower than the clock rates. In essence the data is presented with a valid signal, the receiving data sees the valid signal and acknowledges it got the data, and the sending domain lowers valid and prepares the next bus of data. 

3) De-metastabilizing(probably a better term). This is just double or triple registering the data in the new domain, so that the final register is never metastable. Works nicely for individual signals, but there is no alignment across the bus. 

4) Don't care. This really isn't a technique, but often sigals that cross domains are a false path, and so nothing special is done in the RTL, just the data transfers domains directly and the user puts a false_path assignment on it. This usually means the soure is either constan, or the destination really doesn't care(i.e. it might drive some LEDs) 

I'm sure there are more. DCFIFO is probably the most common.
0 Kudos
Altera_Forum
Honored Contributor II
325 Views

 

--- Quote Start ---  

No. The whole point of the DCFIFO is to take care of the synchronization for you. 

--- Quote End ---  

 

 

so, the flow will be like this :  

--> 4 flits (16 bits each) send to router 

 

NA domain(100Mhz) Router domain (200Mhz) 

data_in[16bit][3:0] ---------> data_out[16bit][3:0] 

 

signals & data synchronization process is taken care by DCFIFO.  

 

correct?  

 

thanks Guru..:)
0 Kudos
Altera_Forum
Honored Contributor II
325 Views

Correctamundo.

0 Kudos
Altera_Forum
Honored Contributor II
325 Views

ooh ok..understood. previously i thought i need to have external synchronizer to handle the data from different clock speed domain. i keep arguing with my friend. he said, we need to have external syncronizer for this DCFIFO except the clocks speed at both domain(NA and router) are the same speed.  

 

thanks.
0 Kudos
Reply