scutfanyu 发表于 2013-3-29 09:45:49

FPGA 高速读取数据

路过的大神们,我现在要用FPGA 读取ADC的数据,现在的问题是ADC出来的读取数据的时钟的上升沿和下降沿数据都会变化,并且读数据的时钟频率是360M,这么算那数据的频率就是720M,直接就这么来读会不会很危险,产生竞争冒险和亚稳态哇~时序图如下

wildone 发表于 2013-3-29 10:34:22

为什么要在上升沿跟下降沿都读数据呢?上面的图你在上升沿读就可以了。

sme 发表于 2013-3-29 11:11:21

上升沿、下降沿各用一组移位寄存器,最后再组合。

wildone 发表于 2013-3-29 11:21:17

噢看错了,确实是上下沿。

40130064 发表于 2013-3-29 11:55:01

什么型号FPGA?

NJ8888 发表于 2013-3-29 12:18:39

本来高速ADC应当是并行输出的提高数据输出能力,不知为何你用的的串行的,确实不很好做

verilog 发表于 2013-3-29 12:25:48

用SERDES,不难做

scutfanyu 发表于 2013-3-29 12:41:23

sme 发表于 2013-3-29 11:11 static/image/common/back.gif
上升沿、下降沿各用一组移位寄存器,最后再组合。

这个想法我也有想过,可是这样做和你在同一个always里同时检测上升沿和下降沿效果貌似是一样的,因为都是要在上升沿和下降沿更新数据

scutfanyu 发表于 2013-3-29 12:45:10

NJ8888 发表于 2013-3-29 12:18 static/image/common/back.gif
本来高速ADC应当是并行输出的提高数据输出能力,不知为何你用的的串行的,确实不很好做 ...

嗯~这个是要输出8路数据的,然后每一路数据在一个时钟内串行传出12bits,所以我现在要用FPGA在一个时钟内将这串行的12bits转换为并行的数据,可是数据的频率又太高,无从下手,高手有没有什么好办法啊

scutfanyu 发表于 2013-3-29 12:46:46

40130064 发表于 2013-3-29 11:55 static/image/common/back.gif
什么型号FPGA?

cyclone iv的,有没什么好办法

scutfanyu 发表于 2013-3-29 12:48:31

verilog 发表于 2013-3-29 12:25 static/image/common/back.gif
用SERDES,不难做

刚才百度 了一下你说的这个东西,貌似不太适合我吧,现在就只能通过FPGA来读

scutfanyu 发表于 2013-3-29 12:50:37

wildone 发表于 2013-3-29 11:21 static/image/common/back.gif
噢看错了,确实是上下沿。

嗯!!对哇,上下沿不是主要问题,现在是数据频率720M太快,不知道FPGA 能不能读出来

wildone 发表于 2013-3-29 13:24:17

scutfanyu 发表于 2013-3-29 12:50 static/image/common/back.gif
嗯!!对哇,上下沿不是主要问题,现在是数据频率720M太快,不知道FPGA 能不能读出来 ...

你采样多久后,进行数据处理?还是一直都在处理?

loywong 发表于 2013-3-29 13:35:31

如果是A家的
你需要用 ALT_DDIO,或ALT_LVDS_RX,并配合锁相环。时序问题,需要结合PCB写约束文件,静态分析不报critical warning就行。
时钟的话,最好用温补晶振和专门的时钟芯片,fpga的pll输出时钟jitter比较大,比如a家的cyclone,300ps,在100MHz的频点上,这个300ps会对snr有20*log((2*pi*100M*300ps)约15dB的劣化。
时钟芯片出两路lvds时钟,给ad和fpga的pll输入。
pll给lvds_rx的bclk可能需要根据静态时序分析的报表调整相位。

a家官网上有lvds的user guide和配套示例。

verilog 发表于 2013-3-29 14:55:46

scutfanyu 发表于 2013-3-29 12:48 static/image/common/back.gif
刚才百度 了一下你说的这个东西,貌似不太适合我吧,现在就只能通过FPGA来读 ...

说的就是用FPGA里的SERDES core,A家的FPGA就google ug_altlvds.pdf看看吧。

gaoyukun 发表于 2013-3-31 15:48:42

mark. LVDS,高速ADC,SERDES core

wszyjsw2 发表于 2013-3-31 17:20:04

mark. LVDS,高速ADC,SERDES core

Fourier00 发表于 2013-3-31 20:46:11

这个看上去需要用到锁相环 然后LVDS,不过也没有做过,

skyxjh 发表于 2013-3-31 20:54:49

用乒乓操作!

mcuprogram 发表于 2013-3-31 21:19:41

{:smile:}      

jay007 发表于 2013-4-1 14:44:03

loywong 发表于 2013-3-29 13:35 static/image/common/back.gif
如果是A家的
你需要用 ALT_DDIO,或ALT_LVDS_RX,并配合锁相环。时序问题,需要结合PCB写约束文件,静态分 ...

真是高手啊,研究得这么细。

这个东西我只知道用serdes,上下沿的问题,有没有支持上下沿的serdes呢,没有的话,真的要pll倍频了

到底叫什么才好 发表于 2013-4-1 15:59:15

使用LVDS收发器实现lvds的传输,一般要用到altlvds强函数,分频后串并转换。

loywong 发表于 2013-4-4 23:55:01

jay007 发表于 2013-4-1 14:44 static/image/common/back.gif
真是高手啊,研究得这么细。

这个东西我只知道用serdes,上下沿的问题,有没有支持上下沿的serdes呢,没 ...

不敢当~

上下沿正是ALT_DDIO* 的事情,ALT_LVDS*是包含DDIO和SERDES的。

你只需要时钟频率等于数据率一般的时钟送给ALT_LVDS*即可。

当然如果数据率一半之后内部普通逻辑就可以处理了,只用ddio*也行(比如cyc4,200Msps的LVDS,ddio之后数据率减半(位宽增倍)到100Msps就可以只用ddio了)。

http://www.altera.com/literature/ug/ug_altlvds.pdf,还有配套工程文件官网可下。

starsboy 发表于 2013-4-4 23:57:13

本帖最后由 starsboy 于 2013-4-5 00:00 编辑

难道用的是AD9228?好眼熟 呵呵
正如sme所说 “上升沿、下降沿各用一组移位寄存器,最后再组合。”

newbier 发表于 2013-4-5 00:43:03

360MHz。。。楼主直接换片子吧,什么ADC啊,居然支持这么高速度的串行。

pocker5200 发表于 2013-4-5 15:11:16

我觉得撸主得换器件了……
页: [1]
查看完整版本: FPGA 高速读取数据