<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
    +關注

    關注

    1608

    文章

    21367

    瀏覽量

    594508
  • lvds
    +關注

    關注

    2

    文章

    852

    瀏覽量

    64845
  • 差分信號
    +關注

    關注

    3

    文章

    341

    瀏覽量

    27350
  • 歐姆電阻
    +關注

    關注

    0

    文章

    70

    瀏覽量

    15500

原文標題: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

    哪位大哥有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

    找不到路徑“C:\Xilinx2\14.7\ISE_DS\ISE\bin\nt64”

    嗨,我剛剛安裝了ISE 14.7系統版本,并將System Generator鏈接到MATLAB(2014a)。但是當我嘗試打開simulink以使用Xilinx System Generator
    發表于 12-12 10:54

    Matlab2013a,ISE14.7,Xilinx分頻器,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.3w次閱讀
    <b class='flag-5'>ISE14.7</b>基本介紹及安裝
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>