FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
6666 Discussions

Avalon Streaming Dual Clock FIFO

K606
New Contributor III
3,846 Views

Hi,

I am trying to connect the AV DC FIFO as followed:

K606_0-1753363607389.png

The idea being that the main clock is running at 100MHz and is connected to the mSGDMA which reads from the FIFO, and iopll is outputting a 200MHz clock and is connected to the oscillator which writes to the FIFO.

The above design compiles, but on boot I am given this error:

..Error sending bitstream!
Command 'load' failed: Error -110
FPGA not ready. Bridge reset aborted!

Note that this design works when there is no PLL, and everything is clocked from the same source (although this causes boot to take a long time).

I have looked through the docs here however these docs seems not to match the IP interfaces.

The docs here here seem to match but don't explain the interface.

Could someone help point me in the correct direction?

Thanks!

 

0 Kudos
1 Solution
ShengN_Intel
Employee
2,387 Views

Hi,


Understood that. Could you try to use the simple adapter ST handshake clock crosser under the bridges and adapters section? I think you're connecting it correctly previously. Instead of using dual clock fifo under on-chip memory section, as it's embedded peripheral I'm not sure is there anything needs to take note when using it.


Regarding why booting slow when using 200mhz, you need to open a new thread target pcie to get the related pcie expert helps.


Thanks,

Regards,

Sheng




View solution in original post

14 Replies
ShengN_Intel
Employee
3,786 Views

Hi,


Seems like a cdc problem where msgdma read from fifo at 100mhz but oscillator write to fifo at 200mhz.

If you make the clock frequency same does the problem resolved? If yes, I would suggest you to add one Avalon® -ST Streaming Pipeline Stage IP in between the msgdma and fifo reading to increase the reading frequency to 200mhz


Thanks,

Regards,

Sheng


K606
New Contributor III
3,722 Views

Hi @ShengN_Intel 

Many thanks for the reply!

Could you tell me, is this the only Avalon® -ST Streaming Pipeline Stage IP Docs?

In fact, if the design you suggest is this one:

K606_1-1753427052620.png

Am I correct? If so would I be correct to say that if this IP would be placed in between the oscillator and the FIFO, then the read speed would stay at 100 MHz?

Many thanks!

0 Kudos
ShengN_Intel
Employee
3,764 Views

Hi,


Another one will be using Avalon Streaming Handshake Clock Crosser IP.


K606
New Contributor III
3,723 Views

Hi there @ShengN_Intel 

 

Thanks for this suggestion!

Do you know where the docs are for this IP - all I can seem to find is this?

May I ask if this is to be used as followed:

K606_0-1753426342205.png

And if so - how does this IP manage data transfer?

0 Kudos
ShengN_Intel
Employee
3,693 Views

Hi,


I just realised you use st dual clock fifo ip already, that ip will handle cdc already.

Not sure is that the lock reset problem of the pll, could you signal tap the pll to the osillator?

Also try replace that iopll with another clock source does the problem resolved?


Thanks,

Regards,

Sheng


K606
New Contributor III
3,689 Views

The issue is that during boot I cannot actually load the initial design onto the fpga, and so cannot use signal tap!

0 Kudos
ShengN_Intel
Employee
3,663 Views

Hi,


Understood that. Could you replace that iopll with clock source to check whether the problem is on the pll?

If the problem is on pll, then would need pll folk to look into this.


Thanks,

Regards,

Sheng


K606
New Contributor III
3,586 Views

Hi @ShengN_Intel,

I can confirm that with the 50MHz clock this design works:

K606_2-1753473429238.png

With a verilog defined for the clock:

...
// Qsys Top module
assign                 sys_clk_50      = REFCLK_50;
qsys_top soc_inst (
...
.clk_50_clk                           (sys_clk_50),
...
);
...

I would note, however, that I do not have another clock going faster than my main system clock to test with - which is why my application will be relying on a PLL.

What would you suggest to try now?

0 Kudos
ShengN_Intel
Employee
2,696 Views

Hi,


You mean you change the pll frequency to 50mhz or connect the oscillator to 50mhz?


Does the device got 100mhz clock?


Thanks,

Regards,

Sheng


0 Kudos
ShengN_Intel
Employee
2,572 Views

Hi,


Could you try test case below:

Test1: Main clock(50mhz) -> pll (50mhz) -> all peripherals

Test2: Main clock(50mhz) -> pll (100/200mhz) -> all peripherals


Are both tests pass?


K606
New Contributor III
2,469 Views

Main clock(50mhz) -> pll (200mhz) -> all peripherals did work! Thanks.

K606_0-1753696284741.png

However - the system boot is now much much slower. Maybe 10x slower.

Do you know why this could be??

Many thanks.

0 Kudos
ShengN_Intel
Employee
2,459 Views

Hi,


May I know why at the beigning you feed the oscillator to 200mhz while msgdma to 100mhz? Is that to increase the booting speed? Seems like even feed all peripherals to 200mhz, the booting speed even slower as you mentioned.

Your ultimate goal is to increase the booting speed?


Thanks,

Regards,

Sheng


K606
New Contributor III
2,457 Views

Because mSGDMA is connected to HPS, which operates at a slower rate (100MHz).

 

Eventually, we want to clock the oscillator at 300+ MHz, so we cannot feed this to mSGDMA, right?

0 Kudos
ShengN_Intel
Employee
2,388 Views

Hi,


Understood that. Could you try to use the simple adapter ST handshake clock crosser under the bridges and adapters section? I think you're connecting it correctly previously. Instead of using dual clock fifo under on-chip memory section, as it's embedded peripheral I'm not sure is there anything needs to take note when using it.


Regarding why booting slow when using 200mhz, you need to open a new thread target pcie to get the related pcie expert helps.


Thanks,

Regards,

Sheng




Reply