一、知识点:
1、在FPGA设计过程,尤其是算法实现时hi,有时往往需要选取某个变量的动态范围地址,而verilog中常规的向量标识方法a[MSB:LSB]往往会发生错误,在此可借用a[BASE :- WIDTH]的方式实现。
a[BASE+:(/-:)WIDTH]
BASE:基地址
WIDTH:数据宽度,固定。
2、ADC选用EV10AQ190,10bit,选用单通道模式,
传输接口:40对LVDS差分线,每个通道10对;
传输顺序:每个通道10对线中把同一时刻的第n位数据拼起来表示当前通道的10Bit数据。其实就是把ADC数据按照并行的方式传输过来(图1)。
LVDS传输时钟ADR=clk/4(图2),如果外部选用2.5GHz时钟,LVDS传输时钟=625MHz,我们选用1.2G时钟,LVDS传输时钟=300MHz,LVDS的数据速率=2ADR=600MHz,速率太快,我们系统选用的时钟肯定不能这么高,根据后面信道化要求,选用150MHz作为系统时钟,此时涉及到LVDS数据的接收和转换。实际上我们需要把600MHz速率的并行的数据转换成150MHz并行的数据。
图 1
3、LVDS传输需要的模块
串转并 流程
A 差分转单端IBUFDS
B 数据对齐 延时 IDELAYE2
C 串转并 ISERDESE2
4、LVDS串并转换并行线路数量和时钟关系
一般在确定某一个方时钟后,根据其中一方的数据位数,确定另一方的位数和时钟。
串行时钟\f1 | 串行数据位数 | 并行时钟\f2 | 并行数据位数\with2 | |
---|---|---|---|---|
300MHz | 150 | 4 | ||
450MHz | 12 | 150 | 6 |
f1*2=f2*with2,为了减少系统时钟的数量,串行或并行时钟也会根据系统中现有的时钟确定。
比如本项目中ADC数据速率是2.4GHz,在V71中将ADC数据进行16路信道化处理,此时送入信道化的数据速率是2.4G/16=150MHz,另外由于ADC通过LVDS传输时的随路时钟是300MHz,所以300*2/150=4,串行转换为并行后采用4根并行线。
二、ADC数据处理代码
代码解析,
module Serdes4chan
#(parame