2014年5月14日 星期三

ML605 GTX DRP TEST

ML605 GTX DRP TEST
target ML605, ISE 14.4

GTX 實在是太強大了,如果不學會用它就向跟不上流行似的!!!!!

PLL Output Divider generate gtx的時候會自動寫入attribute 不用自己改


generate gtx 之後可以使用ipcore裡面的範例來了解一下gtx內部結構
可參考LogiCORE IP Virtex-6 FPGA GTX Transceiver Wizard v1.12 User Guide http://physics.bu.edu/~wusx/download/AMC13/HTR/doc/ug516_v6_gtxwizard.pdf


line rate 可以自己輸入需要的值,如果想要在scope上面看到輸出的值,encoder要選none,refclk 會有固定的幾個頻率可以選,規則如下,可以選擇最適合的除數來進行頻率的調整,紅色是在ipcore裡面不提供的頻率範圍

因為要在ML605上經由Tx Rx SMA來測試,依照spec 要選refclk 125 MHz且在GTX_X0Y18 



每一個quadGTX都可以使用自己或是上面下面quadrefclk0,refclk1
其他GTX得設定先照預設的,產生完了以後打開ipcore_dir裡面的gtx project
裡面有範例的Frame generator Frame check,分別輸入gtx與檢查從gtx出來的資料是正確

我做了幾個小實驗來體會一下gtx
  1. 自動產生的ucf不會自動把輸出的pin設到GTX TX SMA
    所以把下列加入ucf , 並把gtx0_txdata 改成0xaa方便觀察頻率,
    bit file燒入板子後可以在scope上看到頻率500MHz , 1Gbps
NET TXN_OUT LOC=B2;
NET TXP_OUT LOC=B1;
ML605 上與GTX相關的SMA如下
NET SMA_TX_P LOC=B1;
NET SMA_TX_N LOC=B2;
NET SMA_RX_P LOC=D5;
NET SMA_RX_N LOC=D6;
NET SMA_REF_CLK_P LOC=F6;
NET SMA_REF_CLK_N LOC=F5;

  1. ipcore裡面的REFCLK0改成REFCLK1
    讓外接的SMA REFCLK 來動態改變 lane rate,refclklanerate的比例會根據在ipcore裡面的設定來改變
    ucf
    NET TXN_OUT LOC=B2;
    NET TXP_OUT LOC=B1;
    ####################### GTX reference clock constraints #######################
    NET Q4_CLK1_MGTREFCLK_PAD_N_IN LOC=F5;
    NET Q4_CLK1_MGTREFCLK_PAD_P_IN LOC=F6;
    
    ################################# mgt wrapper constraints #####################
    ##---------- Set placement for gtx0_gtx_wrapper_i/GTX_DUAL ------
    INST gtx_i/gtx0_gtx_i/gtxe1_i LOC=GTXE1_X0Y18;
    

    1. 測試DRPregister, ml605上的200 MHz osc拉近來,用來當DRPinour clk
      拿掉系統預設的DRP_CLK_IN

並將下列加入top levelcode,chipscope來改變DRPregister,用來改變頻率
signal DRP_CLK_IN : std_logic;

--------------------------------------------------------
osc_freqgen_in : IBUFGDS
port map (
O => DRP_CLK_IN, -- Clock buffer output
I => OSC_P, -- Diff_p clock buffer input
IB => OSC_N -- Diff_n clock buffer input
);
--------------------- chipscope ------------------------
gtx0_daddr_i <= tx_data_vio_sync_out_i(31 downto 24);
gtx0_den_i <= tx_data_vio_sync_out_i(23);
gtx0_di_i <= tx_data_vio_sync_out_i(22 downto 7);
gtx0_dwe_i <= tx_data_vio_sync_out_i(6);

gtx0_tx_data_vio_sync_in_i(31) <= gtx0_drdy_i;
gtx0_tx_data_vio_sync_in_i(30 downto 15) <= gtx0_drpdo_i;
gtx0_tx_data_vio_sync_in_i(14 downto 0) <= "000000000000000";

---------------------------------------------------------

產生bit file以後打開chipscope, 打開chipscope file\ipcore_dir\gtx\implement\chipscope_project.cpj

燒入bit file以後將設定的drp register拉到VIO Console


根據address table 有兩個address 0x1F 0x20


PLL 公式如下,fPLLClkinRefclk

現在設定的Lanerate1G,refclk 125 Mhz,code裡面看到的attribute


125x(4x4/1)x(2/4) = 125*8 = 1G check沒錯



DRP
  1. DWE 0
  2. DADDR 1F or 20
  3. DEN 1



drdyhigh表示讀成功,drpdo可以算出其他register的值




ipcore_dir generate600MHzregister
N2 2
D 4
M 1
N1 5
推算出register value
address:0x1F drpdo:0xb8c0
address:0x20 drpdo:0x0020


寫入DRP

  1. DWE 1
  2. DADDR 0x1F or 0x20
  3. DI 設入相對drpdo
  4. DEN 1   

可以看到scope上為624 mbps,我猜是因為600 mhzrefclk 不為125 ,所以會有誤差
所以動態改變GTX的方式有兩種,改變refclk或是改變DRP Register



沒有留言:

張貼留言