ML605 GTX DRP TEST
target ML605, ISE 14.4
GTX 實在是太強大了,如果不學會用它就向跟不上流行似的!!!!!
PLL Output Divider 在generate gtx的時候會自動寫入attribute 不用自己改
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
每一個quad的GTX都可以使用自己或是上面下面quad的refclk0,refclk1
其他GTX得設定先照預設的,產生完了以後打開ipcore_dir裡面的gtx
project
裡面有範例的Frame
generator 與
Frame check,分別輸入gtx與檢查從gtx出來的資料是正確
我做了幾個小實驗來體會一下gtx
- 自動產生的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;
- 把ipcore裡面的REFCLK0改成REFCLK1讓外接的SMA REFCLK 來動態改變 lane rate,refclk與lanerate的比例會根據在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;
- 測試DRP的register, 將ml605上的200 MHz osc拉近來,用來當DRP的inour clk拿掉系統預設的DRP_CLK_IN
並將下列加入top
level的code中,用chipscope來改變DRP的register,用來改變頻率
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
根據address
table 有兩個address
0x1F 與 0x20
PLL 公式如下,fPLLClkin為Refclk
現在設定的Lanerate為1G,refclk
125 Mhz,在code裡面看到的attribute為
125x(4x4/1)x(2/4) = 125*8 = 1G check沒錯
讀DRP
- DWE 設 0
- DADDR 設 1F or 20
- DEN 設1
drdy為high表示讀成功,由drpdo可以算出其他register的值
由ipcore_dir
generate出600MHz的register值
N2 2
D 4
M 1
N1 5
推算出register
value
address:0x1F drpdo:0xb8c0
address:0x20 drpdo:0x0020
寫入DRP
- DWE 設1
- DADDR 設 0x1F or 0x20
- DI 設入相對drpdo值
- DEN 設1
可以看到scope上為624
mbps,我猜是因為600
mhz的 refclk
不為125
,所以會有誤差
所以動態改變GTX的方式有兩種,改變refclk或是改變DRP
Register
沒有留言:
張貼留言