顯示具有 DRP 標籤的文章。 顯示所有文章
顯示具有 DRP 標籤的文章。 顯示所有文章

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