[转载]LVDS_FPGA

来源:http://bbs.ednchina.com/BLOG_ARTICLE_1988415.HTM

http://hi.baidu.com/shouzhishi/blog/item/8a348bfabbc05c284e4aead6.html

对于Xilinx芯片而言,LVDS与BANK的连接是有要求的。因为LVDS的输出只能布局在bank0或者bank2上,而LVDS的输入并没有这个要求。所以在看Spartan6板子上的布局时,发现CN3插槽有连接到bank0但主要还是连接到bank3上。而CN4全部连接到bank3所以只能作为LVDS的输入部分。而CN5全部连接到bank0上,所以即可以作为LVDS的输入也可以作为LVDS的输出。所以做这个插槽是最好的。发现洪鸿榕好聪明。这种都能发现。 

 

 

 

LVDS输入和输出在FPGA中都是有IP core的。以7bit,4+1,时钟74.25MHz为例。说明IP core的设置

caf5c1b6-1676-4582-bae7-0476177dab83.JPG

 首先,选择你所用的器件,我用的是Cyclone 3。 再选择LVDS receiver,

what is the number of channels ?  选择4...........表示4组数据;

 what is the deserialiation factor ?   选择7...........表示每个CLK传7bit;

 

4c52308a-94ce-4e2c-962f-4f1595f5e1ce.JPG

what is the input data rate?  填519.75.................即74.25*7

选择use shared PLL..........

what is the phase ............这个选项是选择数据线与时钟的相位差,因为LVDS的相位有差别,接收IP core能调整.

 

  FPGA中IBUFDS、IBUFGDS&OBUFDS

  与全局时钟资源相关的Xilinx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等

  全局时钟资源的使用方法 全局时钟资源的使用方法(五种)

1.IBUFG + BUFG的使用方法:
IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。

2. IBUFGDS + BUFG的使用方法:
当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。

3. IBUFG + DCM + BUFG的使用方法:
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。

4. Logic + BUFG的使用方法:
BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO的输入或普通片内信号进入全局时钟布线层需要一个固有的延时,一般在10ns左右,即普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。

5. Logic + DCM + BUFG的使用方法:
DCM同样也可以控制并变换普通时钟信号,即DCM的输入也可以是普通片内信号。使用全局时钟资源的注意事项全局时钟资源必须满足的重要原则是:使用IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。

IBUFDSIBUFGDSOBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。IBUFDS 是差分输入的时候用,OBUFDS是差分输出的时候用,而IBUFGDS则是时钟信号专用的输入缓冲器。

 

 

程序LVDS_GENERATE的说明:

 

XilinxVertex系列FPGA均在IO端口集成了LVDS收发器。要采用LVDS差分标准传输信号,

 

需要对FPGAIO端口进行配置,从而使综合工具在FPGA布局布线流程中,将LVDS驱动器结合到IO端口上。

 

1、在发送端,应在IO端口配置OBUFDS模块(图6)。

OBUFDS  OBUFDS_inst(

 

.O(O),//Diff_P   output

 

.OB(OB) ,//Diff_n  output

 

.I(I) //Buffer  input

 

);

 

Defpamm  OBUFDS_inst.DRIVE=12;

 

Defparam  OBUFDS_inst.IOSTANDARD=“LVDS_25”;

 

Defparam  OBUFDS_inst.SLEW=“SLOW”;

 

 

 

2、在接收端,应配置IBUFDS模块(图7)。

 

 

IBUFDS  IBUFDS_inst (

 

.O(O) ,//buffer output

 

.I(I) ,//Diff_P buffer input

 

.IB(IB) //Diff_n buffer input)

 

//reflection the this defparam.

 

Defparam IBUFDS_inst.IOSTANDARD=LVDS_25”;

 

 

 

3IBUFGDS则是时钟信号专用的输入缓冲器

 

        IBUFGDS #(

 

             .DIFF_TERM               ("TRUE"                      ),

 

//时钟信号专用的输入缓冲器// Differential Termination

 

             .IOSTANDARD                   ("LVDS_25"                )

 

       // Specifies the I/O standard for this buffer

 

        )

 

        IBUFGDS_inst (

 

             .O  (clk74m_ibuf            ), // Clock buffer output

 

             .I  (clk74m_p                   ), // Diff_p clock buffer input

 

             .IB   (clk74m_n                )  // Diff_n clock buffer input

 

        );

 

 

Spartan-6是面向低成本的低端产品。

 

 

spartan 6里bufio2到底怎么用

来源:FPGA开发实用教程  4 Xilinx公司原语的使用方法

http://www.eefocus.com/article/08-03/37457s.html  

BUFG如果要对全局时钟,实现PLLDCM等时钟管理,则需要手动例化该缓冲器。

IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。

IBUFDS原语的例化代码模板如下所示:
// IBUFDS:
差分输入缓冲器(Differential Input Buffer
//
适用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL
库向导版本,ISE 9.1
IBUFDS #(
.DIFF_TERM("FALSE"),

//
差分终端,只有Virtex-4系列芯片才有,可设置为True/Flase
.IOSTANDARD("DEFAULT")
//
指定输入端口的电平标准,如果不确定,可设为DEFAULT
) IBUFDS_inst (
.O(O), //
时钟缓冲输出
.I(I), //
差分时钟的正端输入,需要和顶层模块的端口直接连接
.IB(IB) //
差分时钟的负端输入,需要和顶层模块的端口直接连接
); //
结束IBUFDS模块的例化过程

OBUFDS将标准单端信号转换成差分信号,输出端口需要直接对应到顶层模块的输出信号,和IBUFDS为一对互逆操作。

OBUFDS原语的例化代码模板如下所示:
// OBUFDS:
差分输出缓冲器(Differential Output Buffer
//
适用芯片:Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL
库向导版本,ISE 9.1
OBUFDS #(
.IOSTANDARD("DEFAULT")

//
指名输出端口的电平标准
) OBUFDS_inst (
.O(O), //
差分正端输出,直接连接到顶层模块端口
.OB(OB), //
差分负端输出,直接连接到顶层模块端口
.I(I) //
缓冲器输入
); //
结束OBUFDS模块的例化过程

IBUFGDSIBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。

BUFIO2:全局时钟脚输入,产生一个同频的时钟,一个整数分频和占空比可调的时钟,一个用于SERDES的控制信号;每一个GCLK连接着两个BUFIO。

BUFPLL:图1所示为BUFPLL的原语,主要用来驱动高速I/O,为ISERDES2和OSERDES2提供时钟。
它会将PLL的LOCK输出与GCLK、SERDES选通和PLL时钟对齐。其中的IOCLK仅仅是将输入时钟通过了一级缓冲的版本。LOCK输出信号其实与PLL的LOCKED信号具有相同的功能,它们的区别在于,在PLL 锁定、BUFPLL对齐SERDES选通信号之前,LOCK不会变高。

BUFPLL的原语

 

图1 BUFPLL的原语

 

Spartan-6器件每个BANK有两个BUFPLL,专用于PLL,不建议将其用作逻辑时钟。

 

 

来源:http://bbs.21ic.com/icview-274771-1-1.html 

http://xilinx.eefocus.com/yq000cn/blog/

S6时钟资源整理:
S6系列的芯片提供16个全局时钟网络,并提供40个区域时钟,用于ISERDES和OSERDES串并转化或者并串转换;全局时钟网络被BUFGMUX驱动,区域时钟被BUFIO2驱动,PLL被BUFPLL驱动;BUFIO2和BUFPLL只用于IO clock;
16个时钟网络被16个BUFGMUX驱动,BUFGMUX的时钟来源有三个:上下bank的时钟源,左右bank的时钟源和内部来自DCM/PLL的内部时钟;这些时钟源通过位于FPGA中部的时钟交换矩阵到达整个FPGA;
BUFG是用BUFGMUX做出来的,即将BUFGMUX固定选择一个时钟就是BUFG了;BUFGCE也是来自BUFGMUX,即BUFGMUX是真正的物理资源;
BUFIO2:全局时钟脚输入,产生一个同频的时钟,一个整数分频和占空比可调的时钟,一个用于SERDES的控制信号;每一个GCLK连接着两个BUFIO。BUFIO可以设定和输入时钟反向;
扩展频谱的时钟可以通过配置DCM_CLKGEN来产生;
DDR2,LVDS和ISERDES,OSERDES时钟部分的设计可以参考该文档;

 

 

posted on 2012-04-20 09:14  zlh840  阅读(6941)  评论(0编辑  收藏  举报

导航