Spartan-3 FPGA系列中高效PCB布局的LVDS信号倒相

发布者:Susan苏最新更新时间:2007-09-13 来源: 赛灵思公司关键字:过孔  驱动  接收  校正 手机看文章 扫描二维码
随时随地手机看文章

提要

在比较简单的未大量使用过孔的四层或六层 PCB 上,可能很难对 LVDS 或 LVPECL 这类差分信号布线。其原因是,驱动器上的正极引脚必须驱动接收器上的相应正极引脚,而负极引脚则必须驱动接收器的负极引脚。有时迹线以错误的方向结束,这实际上是向电路中添加了一个倒相器。本应用指南说明 Spartan?- 3 FPGA 系列如何仅通过在接收器数据通路中加入一个倒相器即可避免大量使用过孔,并且在不要求 PCB 重新设计的情况下即可解决意外的 PCB 迹线交换问题。这项技术同样适用于将 FPGA 用作驱动器的情况,而且交换迹线可使得在其他器件或连接器上的 PCB 布线更容易。

简介

图1 所示为一个 PCB 示例,其中正极引脚驱动接收器的正极引脚,负极引脚驱动接收器的负极引脚。如果引脚被意外交换,那么 PCB 迹线实际上就变成了一个倒相器,这就可能需要电路板重新设计。



图2 说明 Spartan-3 FPGA 系列如何通过在接收器数据通路中加入必要的倒相器来解决这一问题。有此功能,设计人员便可以为简化布线而任意交换迹线。因此,PCB 设计人员可以为实现最大信号完整性而自由布置差分对;所发生的任何交换都可以在 FPGA 内部得到校正。如果使用 DCM (请参阅“异步输入”),则这一布线的自由仅适用于数据线,而“不”适用于时钟线。交换线路绝对不会损坏器件。

吸收倒相器示例

在两种情况下,可以向前吸收倒相器:

1. 当直接驱动触发器输入时
2. 当驱动到逻辑函数中时

在第一种情况下,Spartan-3 FPGA 系列在 CLB 触发器的直接 (D) 输入路径上有一个多路复用器(如图3 所示)。此多路复用器在真实输入信号和补充输入信号之间进行选择。它通过一个配置单元进行配置,该单元由加载到此器件中的比特流进行初始化。用户在操作过程中不能访问多路复用器。

在第二种情况下,倒相器直接就被吸收了。例如,如果一个执行“B = ~A”的倒相器后面紧跟着一个执行“D = B 与 C”的与门,那么一种简单的替代方式就是一个无倒相器的执行“D =~A 与 C”的与门;换句话说,就逻辑的利用和延迟而言,倒相器吸收永远是“自由”的。

这种倒相器吸收的机制也适用于 IOB 输出触发器。同样,如果是为简化 PCB 布局所需,这种吸收可以“自由”地在 FPGA 的输出通路中加入倒相器。如果 FPGA 驱动某接插件,而此接插件带有与此 FPGA 的 N 和 P 两个 LVDS 输出直接匹配的预定义引脚,则此机制可以起到帮助作用。

异步输入

图2 是可以考虑的最简单的示例。接收到的经过交换的 LVDS 信号将用在 FPGA 内部的组合逻辑中。在此例中,只需将一个简单的倒相器添加到代码中。此倒相器的代码以 Verilog 和 VHDL语言表述如下:

Verilog: assign rx_input_fix = ~rx_input;
VHDL: rx_input_fix <= not rx_input;

可以将此倒相器吸收到由输入信号驱动的组合逻辑中,也可以将其吸收到 FPGA 内部的某个触发器的 D 输入中,但不能将其吸收到 FPGA 的 IOB 内的触发器、DCM 或 BUFGMUX 时钟缓冲器中。因此,引脚交换的灵活性无法用到将用于数据时钟的时钟信号上。如果上述时钟只是系统的振荡器,那么可以交换线路并且不需要再倒相,这样做不会产生任何负面效应。

图4 所示示例中的输入实际上是一条由“n”个信号对组成的总线。其中某些信号对是正确的,而其他信号对则为了方便而进行了交换。此例中,在设计中最好定义一个对应这“n”个输入的掩码。该掩码用来有选择地反转(事实上不包括“与”)那些需要校正的位,但不反转接收无误的位。在图4 中,位 0 和 2 是正确的,而位 1 需要倒相。在代码中处理校正的最好方式是使用生成环,它们可以例化输入缓冲器并且有选择地逐位执行倒相。

以下 Verilog 代码用生成环来执行接收倒相:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS
#(.IOSTANDARD("LVDS_25"), .IBUF_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[i]), .IB(datain_n[i]), .O(rx_input[i]));
assign rx_input_fix[i] = rx_input[i] ^ SWAP_MASK[i];
end
endgenerate

以下 VHDL 代码用生成环来执行接收倒相:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d: ibufds generic map
(IOSTANDARD => "LVDS_25", IBUF_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map
(i => datain_p(i), iB => datain_n(i), o => rx_input(i));
rx_input_fix(i) <= rx_input(i) xor SWAP_MASK(i);
end generate;

通过修改红色的粗体字符,可以方便地将此机制扩展到不同的位宽。

IOB 输入触发器的同步使用

通常,输入信号寄存在 IOB 触发器中,因为高速数据传输是使用 LVDS 的最常见的原因。可使用下列技术之一来寄存数据:

? 单数据速率 (SDR) 技术,这种技术在 IOB 中只使用一个(通常是正沿触发的)触发器或者
? 双数据速率 (DDR) 技术,这种技术使用正沿和负沿都触发的触发器对输入数据线进行采样

在两种情况下都不可能在输入放大器和触发器之间反转输入信号,因为 IOB 模块中的触发器没有可倒相的输入。倒相器需要添加到 IOB 输入触发器后,它们可以被吸收到其后的寄存逻辑或组合逻辑中。

SDR 示例

图5 所示为 IOB 中带有一个触发器的 SDR 方案。

以下代码说明针对相同生成环示例的 SDR 寄存情况。唯一的变化是增加了触发器例示。
Verilog 语言代码:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS#(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[i]), .IB(datain_n[i]), .O(rx_input[i]));
FD fd_d (.C(clkin), .D(rx_input[i]), .Q(rx_input_reg[i]));
assign rx_input_fix[i] = rx_input_reg[i] ^ SWAP_MASK[i];
end
endgenerate

VHDL 语言代码:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d: ibufds
generic map (IOSTANDARD => "LVDS_25", IFD_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map (i => datain_p(i), iB => datain_n(i), o => rx_input(i));
fd_d: fd port map (c => clkin, d => rx_input(i), q => rx_input_reg(i));
rx_input_fix(i) <= rx_input_reg(i) xor SWAP_MASK(i);
end generate;

通过修改红色的粗体字符,可以方便地将此机制扩展到不同的位宽。

输入 DDR 示例

图 6 所示为接收 DDR 方案,其中每条输入线生成两条可能需要倒相的内部数据线。对于Spartan-3E FPGA 的 DDR 输入,推荐使用新型的 IDDR2 输入触发器结构。这种结构去除了从下降沿到下一上升沿的所有通路,从而可以使内部逻辑更容易设计。要了解有关 IDDR2 的详情,请参阅 DS312 《Spartan-3E FPGA 系列数据手册》。

以下代码说明针对相同生成环示例的 DDR 寄存接收器情况。唯一的变化是增加了 Spartan-3E FPGA 的 IDDR2 例示。原 Spartan-3 器件需要略微不同的代码,因为它不包含 IDDR2 结构。
所附 ZIP 文件包含完整细节(请参阅“设计文件”)。

Verilog 语言代码:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS#(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[i]), .IB(datain_n[i]), .O(rx_input[i]));
IDDR2 #(.DDR_ALIGNMENT("C0")) fd_ioc(.C0(clkin), .C1(notclk), .D(rx_input[i]),
.CE(1'b1), .R(1'b0), .S(1'b0), .Q0(rx_input_reg[i+3]),
.Q1(rx_input_reg[i]));
assign rx_input_fix[i] = rx_input_reg[i] ^ SWAP_MASK[i];
assign rx_input_fix[i+3] = rx_input_reg[i+3] ^ SWAP_MASK[i];
end
endgenerate

VHDL 语言代码:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d : ibufds
generic map (IOSTANDARD => "LVDS_25", IFD_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map (i => datain_p(i), iB => datain_n(i), o => rx_input(i));
fd_d : iddr2
generic map (DDR_ALIGNMENT => "C0")
port map (c0 => clkin, c1 => notclock, d => rx_input(i), ce => '1', r => '0',
s => '0', q0 => rx_input_reg(i+3), q1 => rx_input_reg(i));
rx_input_fix(i) <= rx_input_reg(i) xor SWAP_MASK(i);
rx_input_fix(i+3) <= rx_input_reg(i+3) xor SWAP_MASK(i);

通过修改红色的粗体字符,可以方便地将此机制扩展到不同的位宽。

在使用 DDR 技术时,位操作可能很重要。DDR 生成环示例生成一条总线,总线的低阶位聚集在时钟的下降沿,而其高阶位则聚集在下一个上升沿。图7 是 DDR 设计模拟运行的屏幕截图,其中显示了这种位集中现象。此模拟运行假设所有迹线都是正确的(即没有进行引脚交换),以清楚地显示具体位的结束位置。


输出 DDR 示例

图8 所示为发射器的 DDR 方案,其中每对发送数据线由 Spartan-3E FPGA 中的 ODDR2(在Spartan-3 FPGA 中是 FDDRRSE)机制进行多路复用。这种情况下,在与极性需要倒相的LVDS 输出相关联的每条线路中都增加了倒相器。因为这些倒相器在上述实现过程中被吸收到输出触发器中,所以它们不会改变电路的时序。

以下代码说明生成环示例的发射器 DDR 寄存情形。原 Spartan-3 器件需要略微不同的代码,因为它不包含 ODDR2 结构。所附 ZIP 文件包含完整细节(请参阅“设计文件”)。

Verilog 语言代码:

parameter [2:0] SWAP_MASK = 3'b010 ;
genvar i ;
generate
for (i = 0 ; i <= 2 ; i = i + 1)
begin : loop0
OBUFDS #(.IOSTANDARD("LVDS_25"))
obuf_d (.I(tx_output_reg[i]), .O(dataout_p[i]), .OB(dataout_n[i]));
ODDR2 #(.DDR_ALIGNMENT("NONE")) fd_ioc (.C0(clkin), .C1(notclk),
.D0(tx_output_fix[i+3]), .D1(tx_output_fix[i]), .CE(1'b1), .R(1'b0),
.S(1'b0), .Q(tx_output_reg[i])) ;
assign tx_output_fix[i] = tx_output[i] ^ SWAP_MASK[i] ;
assign tx_output_fix[i+3] = tx_output[i+3] ^ SWAP_MASK[i] ;
end
endgenerate

VHDL 语言代码:

constant SWAP_MASK : std_logic_vector(2 downto 0) := "010" ;
loop0 : for i in 0 to 2 generate
ibuf_d : obufds generic map (IOSTANDARD => "LVDS_25")
port map (i => tx_output_reg(i), o => dataout_p(i), oB =>
dataout_n(i));
fd_d : oddr2 generic map (DDR_ALIGNMENT => "NONE")
port map (c0 => clkin, c1 => notclock, d0 => tx_output_fix(i),
d1 => tx_output_fix(i+3), ce => '1', r => '0', s => '0', q =>
tx_output_reg(i));
tx_output_fix(i) <= tx_output(i) xor SWAP_MASK(i) ;
tx_output_fix(i+3) <= tx_output(i+3) xor SWAP_MASK(i) ;
end generate ;

通过修改红色的粗体字符,可以方便地将此机制扩展到不同的位宽。

如上所述,在使用 DDR 技术时,位操作可能很重要。DDR 生成环示例生成一条总线,总线的低阶位在时钟的下降沿上发送,而其高阶位则在下一个上升沿上发送。

设计文件

本应用指南介绍的各种接收器和发射器示例的设计文件是针对所有 Spartan-3 器件和
Spartan-3E 系列器件编写的。可从 Xilinx 网站 (xapp491.zip) 获得 Verilog 和 VHDL 两种语言的设计文件。所附 readme.txt 文件提供了最新详情。

结论

用 LVDS 进行设计时,有计划地谨慎使用 Spartan-3 FPGA 系列资源,可以大幅度降低 PCB 布局的复杂性,同时可以提高整体电路板信号的完整性。对于器件中集成的 LVDS 接收器和LVDS 发射器来说也是如此,但输入时钟引脚除外;输入时钟引脚必须具有正确的极性。

如欲了解更多赛灵思技术文档,请访问http://china.xilinx.com/china/documentation/

关键字:过孔  驱动  接收  校正 引用地址:Spartan-3 FPGA系列中高效PCB布局的LVDS信号倒相

上一篇:整合MCU和DSP优势的DSC推动绿色革命
下一篇:利用Virtex-5 器件实现QDR II SRAM 接口

推荐阅读最新更新时间:2024-05-02 20:37

针对望远镜机架的电机驱动方案
  1 引言   目前天文望远镜常用的传动方式主要为蜗轮蜗杆传动、齿轮传动、摩擦传动、和直接驱动等方式。这里采用直接驱动式望远镜机架,采用组合式弧线交流PMSM。直接驱动将电机与负载直接耦合在一起,提高了系统可靠性,但对电机本身运行平稳性及超低速提出了更高的要求。   电流环在伺服驱动系统中占有重要地位,直接决定伺服系统的好坏,很多文献都对电流采样进行了研究。电流环是望远镜驱动控制系统的内环,电流采样的精度和速度直接影响整个电流环的运算精度,从而对望远镜机架驱动跟踪性能产生重大影响,电流环的设计是保证望远镜跟踪目标的速度精度及力矩平稳性的关键部分。在此设计了基于单电源供电的电流采样电路,并采用TMS320F2812实现电流
[嵌入式]
LED电源驱动电路图
  LED电源电路大多是由开关电源电路+反馈电路这样的形式构成,反馈电路从负载处取样后对开关电路进行脉冲的占空比调整或频率调整,以达到控制开关电路输出的目的。
[电源管理]
LED电源<font color='red'>驱动</font>电路图
saa1064芯片的单片机驱动程序
main() { unsigned char a ;a =0x77;// a = N_leab_led_7 ; a = N_leab_led_7 ; a = N_leab_led_7 ; a = N_leab_led_7 ; WriteNByte(0x70,0x00,a,5); ////0X70 - 0 1 1 1 0 A1 A0 R/W A1 A0(11:ADR=VCC 10:5/8VCC 01:3/8VCC 00:VEE) R/W (1:READ 0:WRITE)//0x00 - 0 0 0 0 0 sc sb sa sc sb sa(000:control register 001:digit 1 0
[单片机]
saa1064芯片的单片机<font color='red'>驱动</font>程序
51单片机驱动数码管(LED)时的注意事项
    单片机输出驱动分为高电平驱动和低电平驱动两种方式。     所谓高电平驱动,就是端口输出高电平时的驱动能力,所谓低电平驱动,就是端口输出低电平时的驱动能力,当单片机输出高电平时,其驱动能力实际上是靠端口的上拉电阻来驱动的,实际测试表明,51单片机的上拉电阻的阻值在 330K左右,也就是说如果靠高电平驱动,本质上就是靠330K的上拉电阻来提供电流的,当然该电流是非常小的,小的甚至连发光二极管也难以点亮,如果要保证LED正常发光,必须要外接一个1K左右的上拉电阻,如果是一个led还好,要是10个、20个led的话,就要接10个、20个1K的上拉电阻,接电阻的本身是可以的,问题是接了上拉电阻以后,每当端口变为低电平0的时候,
[单片机]
基于MeeGo的电容式触摸屏驱动设计方案
   引言   随着人们对操控要求的不断提高,市场上出现了越来越多的高端手机、平板电脑,这些产品共同的特点就是给人们提供了非常便利的操控方式,尤其是电容触摸屏的使用,它能很好地实现多点触控功能。多点触控技术是当今炙手可热的技术,它让人们的生活方式得到了前所未有的改变。电容触摸屏已经成为高端手机的标配,如苹果的iPhone以及HTC Motorola的一些高端手机,虽然目前电容屏的价格较贵,但随着工艺的提高,其价格必定会下降,再加上其给用户带来的丰富体验,电容触摸屏的使用必将越来越广泛。MeeGo是Intel和Nokia公司合作开发的开源操作系统,基于Linux内核,其良好的开源性为驱动程序的开发提供了很好的基础条件。本设计在
[电源管理]
基于MeeGo的电容式触摸屏<font color='red'>驱动</font>设计方案
基于ARM9芯片的S3C2440和Linux操作系统设计SPI驱动程序
  在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷[2]。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便[3]。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现ARM与设备之间的通信。   1 硬件说明   1.1 S3C2440开发平台   采用三星公司的SoC芯片S3C2440[4]作为核心处理器,主频为400 MHz,并与64 MB SDRAM和64 MB NAND Flash共同组成核心部分。此外,该平台也为用户提供了大量的通
[单片机]
基于ARM9芯片的S3C2440和Linux操作系统设计SPI<font color='red'>驱动</font>程序
Linear LT3756高压100V 大电流LED驱动方案
Linear公司的LTR3756, LT3756-1和LT3756-2 是驱动大电流led的DC/DC控制器,输入电压力V-100V,输出电压高达100V,PWM调3000:1,恒流和恒压稳压,可调频率100kHz到1MHz,能以升压,降压,升-降模式,SEPIC或反激拓扑驱动LED,主要用于大功率LED应用,限流恒压应用和电池充电.本文介绍了LT3756主要特性,方框图,多种LED驱动应用电路,以及评估板1319B-A/1319B-B主要特性,电路图和材料清单. The LTR3756, LT3756-1 and LT3756-2 are DC/DC controllers designed to operate as a con
[电源管理]
linux下的nandflash驱动分析(1)——基于s3c6410平台
源码主要在S3c_nand.c (linux2.6.28driversmtdnand)文件中。 1、模块加载和卸载 module_init(s3c_nand_init); module_exit(s3c_nand_exit); static void __exit s3c_nand_exit(void) { platform_driver_unregister(&s3c2450_nand_driver); platform_driver_unregister(&s3c6400_nand_driver); platform_driver_unregister(&s3c6410_nand_driver); platform
[单片机]
linux下的nandflash<font color='red'>驱动</font>分析(1)——基于s3c6410平台
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved