今天给大侠带来 Xilinx ISE14.7 LVDS应用,话不多说,上货。

最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用。Xilinx FPGA中,主要通过原语实现差分信号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BUF)。

注意在分配引脚时,只需要分配SIGNAL_P的引脚,SIGNAL_N会自动连接到相应差分对引脚上;若没有使用差分信号原语,则在引脚电平上没有LVDS的选项(IO Planning PlanAhead)。

测试代码:

module lvds_test(   sys_clk,                    sys_rst,                                        signal_in_p,                    signal_in_n,                    signal_out_p,                    signal_out_n,                                        led_signal                );  input sys_clk,sys_rst;  input signal_in_p,signal_in_n;  output signal_out_p,signal_out_n;  output led_signal;  wire signal_out_temp;  reg[31:0] clk_cnt;  always @ (posedge sys_clk) begin      if(!sys_rst) clk_cnt <= 32'd0;      else begin          if(clk_cnt == 32'd10_000_000) clk_cnt <= 32'd0;          else clk_cnt <= clk_cnt+1'b1;      end  end    assign signal_out=(clk_cnt >= 32'd5_000_000) ? 1 : 0;    OBUFDS signal_out_diff(    .O(signal_out_p),                                  .OB(signal_out_n),                                  .I(signal_out)                              );    IBUFDS signal_in_diff(    .O(led_signal),                                  .I(signal_in_p),                                  .IB(signal_in_n)                              );  endmodule

约束文件:

NET "signal_out_p" IOSTANDARD = LVDS_33;NET "signal_out_p" LOC = U16;NET "sys_clk" IOSTANDARD = LVCMOS33;NET "sys_rst" IOSTANDARD = LVCMOS33;NET "led_signal" LOC = D18;NET "led_signal" IOSTANDARD = LVCMOS33;#Created by Constraints Editor (xc6slx45t-csg324-3) - 2016/06/06NET "sys_clk" TNM_NET = "sys_clk";TIMESPEC TS_sys_clk = PERIOD "sys_clk" 50 MHz HIGH 50 %;NET "signal_in_p" LOC = T12;NET "signal_in_n" LOC = V12;NET "sys_clk" LOC = G8;NET "sys_rst" LOC = U3;# PlanAhead Generated IO constraints NET "signal_in_p" IOSTANDARD = LVDS_33;

约束文件IO Planning PlanAhead产生,原语的使用可参考:E:\Xilinx\ISE\14.7\ISE_DS\ISE\doc\usenglish\isehelp\spartan6里面提供了所用器件的原语。

同时,Xilinx器件内部信号内部还提供了100欧姆电阻匹配,可参考Spartan-6 FPGA SelectIO Resources(UG381)

补充:

若要实现高速通信的场合,可以利用FPGA内部自带的SelectIO资源,利用ISERDESE2、 OSERDESE2,实现串-并,并-串的转换,理论速度可达到750Mbs,

参考资料:Spartan-6 FPGA Data Sheet: DC and Switching Characteristics(UG162)

通信框图:

因为串行转成并行的时候,输出的数据无法判断哪个 Bit 是高位,哪个 bit 是低位,因此,对于 ISERDESE2 可以利用bitslip 信号来重新对齐串行数据以获得正确的字节数据;代码实现时,也需要先进行数据对齐,才能进行数据的正常接收。

`timescale 1ns / 1ps////module lvds_test(  input clk_50m,//全局时钟  input rstn, //复位    input clk_in_from_pin_p,         //lvds时钟输出P  input clk_in_from_pin_n,         //lvds时钟输入N  input data_in_from_pin_p,        //lvds输入数据P  input data_in_from_pin_n,        //lvds输入数据N    output clk_out_to_pin_p,         //lvds时钟输出P  output clk_out_to_pin_n,         //lvds时钟输出N  output data_out_to_pin_p,        //lvds输出数据P  output data_out_to_pin_n         //lvds输出数据N      );wire clk_div_out_1;      //低速时钟1,串行发送时钟的8分频wire clk_div_out_2;      //低速时钟2,串行接收时钟的8分频wire [7:0] datain;       //LVDS输入的8位并行数据//产生LVDS发送的测试数据,0~FFreg [7:0] dataout;always @(posedge clk_div_out_1) begin   if (~rstn)      dataout <= 0;   else if (dataout == 8'hff)     dataout <= 0;    else      dataout <= dataout + 1'b1;     end//产生BITSLIP信号,用于修改串转并的Bit的起始位置wire [7:0] data_delay;reg BITSLIP=1'b0;reg slip_check;reg equal=1'b0;assign data_delay=datain;always @(posedge clk_div_out_2)begin        if (~rstn)              slip_check <= 1'b0;        else if(data_delay==8'h80)      //当串转并的输入的数据为0x80的时候,检测开始              slip_check <= 1'b1;              else              slip_check <= 1'b0;        endalways @(posedge clk_div_out_2)begin        if (~rstn) begin              BITSLIP <= 1'b0;           equal<=1'b0;                end              else if((slip_check==1'b1) && (equal==1'b0))          if (data_delay ==8'h81) begin  //如果检测到数据0x80后面的下一个时钟的数据为0x81时             BITSLIP <= 1'b0;            //BITSLIP不为高           equal<=1'b1;                   //数据正确信号为高                  end          else begin             BITSLIP <= 1'b1;           //BITSLIP产生一个高脉冲,改变串转并的数据排列           equal<=1'b0;                  //数据正确信号为低        end             else begin             BITSLIP <= 1'b0;           equal<=equal;          end              end          //并转串,8位数据dataout转换成串行数据,并通过lvds差分信号输出p_to_s p_to_s_inst   (  // From the device out to the system    .DATA_OUT_FROM_DEVICE(dataout), //Input pins    .DATA_OUT_TO_PINS_P(data_out_to_pin_p), //Output pins    .DATA_OUT_TO_PINS_N(data_out_to_pin_n), //Output pins    .CLK_TO_PINS_P(clk_out_to_pin_p), //Output pins    .CLK_TO_PINS_N(clk_out_to_pin_n), //Output pins    .CLK_IN(clk_50m),        // Single ended clock from IOB    .CLK_DIV_OUT(clk_div_out_1),   // Slow clock output    .IO_RESET(~rstn)  //system reset);//串转并,LVDS差分信号转换成单端信号再通过串转并,转换为8位数据datains_to_p s_to_p_inst   (  // From the system into the device    .DATA_IN_FROM_PINS_P(data_in_from_pin_p), //Input pins    .DATA_IN_FROM_PINS_N(data_in_from_pin_n), //Input pins    .DATA_IN_TO_DEVICE(datain), //Output pins    .BITSLIP(BITSLIP), //Input pin    .CLK_IN_P(clk_in_from_pin_p),      // Differential clock from IOB    .CLK_IN_N(clk_in_from_pin_n),      // Differential clock from IOB    .CLK_DIV_OUT(clk_div_out_2),   // Slow clock output    .IO_RESET(~rstn)  //system reset);endmodule

其中,clk_div_out_1和clk_div_out_2是8分频得到的(ISERDESE2、 OSERDESE2核实现),OSERDESE2输出的LVDS 差分时钟可作为ISERDESE2的接收时钟。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

往期精选

电子版资料获取方式正确流程

FPGA开发板,初学小白必备!

Signal tap 逻辑分析仪使用教程

基于FPGA的实时图像边缘检测系统设计(下)

时序分析理论和timequest使用_中文电子版

SANXIN-B01 Verilog教程-郝旭帅团队

FPGA工程师就业班,11月份开课!

FPGA | Xilinx ISE14.7 LVDS应用相关推荐

  1. FPGA udp纯逻辑编写,Xilinx ise14.7平台,工程验证千兆无丢包 加200k128通道采集

    FPGA udp纯逻辑编写,Xilinx ise14.7平台,工程验证千兆无丢包 加200k128通道采集 ID:221000630637522274gaoisgod

  2. FPGA XILINX SPARTAN6 ISE14.7 LED流水灯实验

    文章目录 前言 1 ISE安装调试遇到的问题 1.1 关于ISE的license无法导入的问题解决方法 1.2 解决Xilinx_ISE 14.7在Win10下选择"open project ...

  3. Xilinx 差分信号 LVDS传输实战

    目录 1.LVDS的概念 2.XILINX FPGA 差分信号解决方案 (1)IBUFDS (2)OBUFDS (3)IOBUFDS(三态差分输入输出) 3.LVDS中的终端电阻 4.LVDS 电气特 ...

  4. FPGA Xilinx 7系列高速收发器GTX通信

    Xilinx 7系列高速收发器GTX 说明: FPGA: TX端_zynq(7z035) RX端_zynq(7z100). 两个FPGA通过SFP(光纤)接口相连进行GTX的通信. 环境:Vivado ...

  5. 2018.9.1 初识FPGA --xilinx zynq为例

    –文中参考xilinx datasheet 以及百度百科,如有错误之处还请不吝赐教!  1.什么是FPGA  FPGA(Field-Programmable Gate Array),即现场可编程门阵列 ...

  6. FPGA初探-ise14.7

    FPGA部分语法 { }变成了begin和and <位宽><进制><数字>这种描述方式. 重点是位宽指的是二进制位宽,如果16进制一个数占4个位宽. 用" ...

  7. [Xilinx]Xilinx ISE14.2中调用文本编辑器NotePad++设置方法

    1.NotePad++官网:Notepad++插件风格包 2.复制QuickText.dll到Notepad++安装目录下的plugins文件夹中:复制QuickText.ini到Notepad++的 ...

  8. Win10 64位使用Xilinx ISE14.7点击Open Project崩溃的解决方法

    Win10 64位使用Xilinx ISE点击Open Project崩溃的解决方法,此方法同样适用于选择烧写的bit文件时崩溃的情况,所以可以推测只要在有弹窗需要选择文件时崩溃,此方法都可以解决 1 ...

  9. FPGA Xilinx 7系列XADC学习

    XADC介绍 外部模拟输入 XADC例化 时钟与复位 连续采样时序 捕获阶段 Acquisition Phase 转换阶段 Conversion Phase 触发采样时序 XADC工作模式 极性 单极 ...

最新文章

  1. logrus学习笔记
  2. window.open的小技巧分享(转)
  3. 8个计算机视觉深度学习中常见的Bug
  4. C语言实验大纲2010答案,C语言试验大纲(2010年修订).doc
  5. 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )
  6. 模块化数据中心有什么优势?
  7. javaweb项目启动后自动查询数据库并刷新数值
  8. TFS与Eclipse、Microsoft Visual Studio等客户端以webservice进行交换。
  9. 继承(instanceof :比较运算符;不仅运行父类方法,也运行子类独有的方法)
  10. Slim Span UVA - 1395 (并查集)
  11. 老外的一个用的SQLite的例子,看起来比较初级
  12. unity 运行时间问题
  13. 老罗Android开发 视频教程
  14. arcgis怎么压缩tif文件_PDF文件怎么压缩?这个方法一看就会!
  15. GitHub上最全中华古诗词数据库又火了
  16. 未名down了,人生无趣
  17. Java 秒换算成,天,小时,分钟,秒
  18. 微信小程token_微信小程序-携带Token无感知登陆的网络请求方案
  19. 哎,开发又被骗了……
  20. 网络强国:网络安全+大数据

热门文章

  1. HP DL388 G9升级微码
  2. 去中心化和非去中心化的区别?
  3. HTML网页设计基础概念
  4. DNS扫盲系列之八:关于域名解析的授权
  5. C语言 获取网页内容
  6. w10用计算机卸载,Win10专业版电脑里的软件如何卸载干净?
  7. 【Python爬虫案例学习9】python爬取免费优质IP归属地查询接口
  8. 2018年电赛A题(电流检测设备)的复刻
  9. opencv去除印章痕迹
  10. 2018年“京东好店”排行榜发布 这100家店凭什么上榜