0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx ISE14.7 LVDS的应用

FPGA技术江湖 来源:FPGA技术江湖 2024-05-07 17:17 次阅读

今天给大侠带来 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/06
NET "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:XilinxISE14.7ISE_DSISEdocusenglishisehelpspartan6里面提供了所用器件的原语。

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

补充:

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

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

794516ea-0a77-11ef-a297-92fbcf53809c.png

通信框图:

79552558-0a77-11ef-a297-92fbcf53809c.png

因为串行转成并行的时候,输出的数据无法判断哪个 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~FF
reg [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;        
end


always @(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位数据datain
s_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的接收时钟。


审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602964
  • lvds
    +关注

    关注

    2

    文章

    1043

    浏览量

    65791
  • 差分信号
    +关注

    关注

    3

    文章

    367

    浏览量

    27676
  • 欧姆电阻
    +关注

    关注

    0

    文章

    71

    浏览量

    15569

原文标题:FPGA | Xilinx ISE14.7 LVDS应用

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Win11安装ise14.7~不需要虚拟机了~

    \\nt64X:\\Xilinx\\14.7\\ISE_DS\\common\\lib\\nt64最后试了下重新编译工程,和之前编译的bit文件只是时间有差别,说明ise14.7在wi
    发表于 02-27 14:25

    FPGA | Xilinx ISE14.7 LVDS应用

    今天给大侠带来 Xilinx ISE14.7 LVDS应用,话不多说,上货。 最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用。Xilinx FPGA中,主要通过
    发表于 06-13 16:28

    哪位大哥有xilinx ise 14.7 的教程?

    哪位大哥有xilinx ise 14.7 的教程或者是官方的英文使用手册也行?谢谢拉
    发表于 03-13 21:55

    ISE14.7在win8.1上不能激活吗?

    win8.1安装ise14.7成功,最后利用configure license manager激活时点击load license,不显示加载对话框,激活无法完成同学的win8.1也遇到这问题,有高手能够解释一下吗
    发表于 09-12 18:34

    xilinx ise 14.7安装包及xilinx ise 14.7 license.lic,亲测,可用。

    本帖最后由 jzc1610 于 2016-6-15 17:56 编辑 附:xilinx ise 14.7 安装包下载地址(直接打开迅雷,新建任务,复制粘贴链接即可):https
    发表于 06-15 09:13

    Xilinx ISE14.7版本兼容的modelsim应该安装哪个版本

    本人使用的是ISE14.7这个版本,现在安装modelsim仿真软件,请问最好是下载哪个版本的啊,求大神支招!非常感谢
    发表于 10-09 21:47

    关于ISE14.7联合modelsim仿真出现的问题

    `小弟最近在使用ISE14.7和modelsim联合仿真的时候出现了一些问题,百度很久也不能解决,特来论坛求助各位大哥!!!!真心求助!!!!具体问题就是在启动仿真的时候ISE14.7会出现一个警告
    发表于 09-14 23:07

    【 泽屹电子 阿东团队】 ISE14.7软件下载链接、非常详细的安装和破解教程

    ISE14.7软件安装和破解教程 提供了非常详细的安装和破解指导,属于手把手教您学习FPGA教程。在软件安装之前,需要先准备好软件安装包,可从 Xilinx 官网上或者我们的百度网盘链接下载: 1
    发表于 10-27 11:51

    【 泽屹电子 阿东团队】 ISE14.7软件下载链接、非常详细的安装和破解教程

    ISE14.7软件安装和破解教程 提供了非常详细的安装和破解指导,属于手把手教您学习FPGA教程。在软件安装之前,需要先准备好软件安装包,可从 Xilinx 官网上或者我们的百度网盘链接下载: 1
    发表于 10-27 12:31

    Matlab2013a,ISE14.7Xilinx分频器,Xi​​linx模块库中发生内部错误

    您好我使用Matlab 2013a和ISE 14.7开发我的模型以在dSpace MicroAutboxII中运行。我可以使用库中的每个xilinx块,但是当我使用Xilinx Div
    发表于 12-27 10:58

    请问有ISE14.7或者以前版本的软件使用教程分享吗?

    求前辈分享ISE14.7或者稍微靠前版本的软件使用教程,自学Verolog,软件都还不会用
    发表于 03-19 04:46

    Xilinx ISE14.7 uart-lite 串口中断问题

    基于ISE14.7 开发SPARTAN-6,PC端通过串口助手发送多字节数据,下位机通过串口中断接收数据,按照如下代码调试没有问题,可是当把中断函数中的阴影部分代码即串口发送代码注释之后,产生的现象
    发表于 05-15 16:00

    请问具有完整的ISE14.7是否还需要Chipscope许可证?

    我有一个ISE 14.7的完整注册安装。我试图第一次使用Chipscope,它说我没有正确的许可证。如果我有完整的ISE14.7,是否需要单独的Chipscope许可证?我必须购买或者我可以评价一段时间吗?
    发表于 04-26 06:46

    请问如何安装xilinx ise 14.7破解版?

    xilinx ise 14.7破解版详细安装教程
    发表于 11-18 07:49

    ISE14.7基本介绍及安装

    使用的、首屈一指的 PLD 设计环 境 !ISE 将先进的技术与灵活性、易使用性的图形界面结合在一起,不管 您的经验如何,都让您在最短的时间,以最少的努力,达到最佳的硬件设计。 2. ISE14.7 软件安装
    的头像 发表于 11-09 09:28 1.5w次阅读
    <b class='flag-5'>ISE14.7</b>基本介绍及安装