一、功能介紹
1.1 ODT
ODT是On Die Termination的縮寫,又叫片內端接,顧名思義,就是將端接電阻放在了芯片內部,這個功能只有在DDR2以上的數據信號才有,其他信號無此寵幸!所謂的終結(端接),就是讓信號被電路的終端吸收掉,而不會在電路上形成反射,造成對后面信號的影響有了這個功能,原本需要在PCB板上加串阻的數據信號就不用再額外添加端接了,因為芯片內部可以打開這個ODT端接功能,而且端接還可調。當數據讀操作的時候,主控(FPGA或CPU)讀取Memory顆粒的數據,此時主控為接收端,可以根據需要選擇是否打開ODT;當數據寫操作的時候,主控(FPGA或CPU)將數據寫入到Memory顆粒,此時顆粒為接收端,也可以根據需要選擇是否打開ODT,這種操作可以在寄存器內部實現控制。(參考高速先生:https://mp.weixin.qq.com/s/ZhN5G_ECgz6gkiEGkGEk-A)
1.2 CK/CKN
差分時鍾是DDR的一個重要且必要的設計,但大家對CK#(CKN)的作用認識很少,很多人理解為第二個觸發時鍾,其實它的真實作用是起到觸發時鍾校准的作用。
由於數據是在CK的上下沿觸發,造成傳輸周期縮短了一半,因此必須要保證傳輸周期的穩定以確保數據的正確傳輸,這就要求CK的上下沿間距要有精確的控制。但因為溫度、電阻性能的改變等原因,CK上下沿間距可能發生變化,此時與其反相的CK#(CKN)就起到糾正的作用(CK上升快下降慢,CK#則是上升慢下降快),如下圖一所示。
1.3 數據選取脈沖(DQS)
Data Stroe(DQS):就像時鍾信號一樣,DQS也是DDR中的重要功能,它的功能主要用來在一個時鍾周期內准確的區分出每個傳輸周期,並便於接收方准確接收數據。每一顆8bit DRAM芯片都有一個DQS信號線,它是雙向的,在寫入時它用來傳送由主控芯片發來的DQS信號,讀取時,則由DRAM芯片生成DQS向主控發送。完全可以說,它就是數據的同步信號。
在讀取時,DQS與數據信號同時生成(也是在CK與CK#的交叉點)。而DDR內存中的CL也就是從CAS發出到DQS生成的間隔,數據真正出現在數據I/O總線上相對於DQS觸發的時間間隔被稱為tAC。實際上,DQS生成時,芯片內部的預取已經完畢了,由於預取的原因,實際的數據傳出可能會提前於DQS發生(數據提前於DQS傳出)。由於是並行傳輸,DDR內存對tAC也有一定的要求,對於DDR266,tAC的允許范圍是±0.75ns,對於DDR333,則是±0.7ns,其中CL里包含了一段DQS的導入期。
DQS 在讀取時與數據同步傳輸,那么接收時也是以DQS的上下沿為准嗎?不,如果以DQS的上下沿區分數據周期的危險很大。由於芯片有預取的操作,所以輸出時的同步很難控制,只能限制在一定的時間范圍內,數據在各I/O端口的出現時間可能有快有慢,會與DQS有一定的間隔,這也就是為什么要有一個tAC規定的原因。而在接收方,一切必須保證同步接收,不能有tAC之類的偏差。這樣在寫入時,DRAM芯片不再自己生成DQS,而以發送方傳來的DQS為基准,並相應延后一定的時間,在DQS的中部為數據周期的選取分割點(在讀取時分割點就是上下沿),從這里分隔開兩個傳輸周期。這樣做的好處是,由於各數據信號都會有一個邏輯電平保持周期,即使發送時不同步,在DQS上下沿時都處於保持周期中,此時數據接收觸發的准確性無疑是最高的,如下圖二所示。
1.4 數據掩碼技術(DQM)
不是DDR所特有的,但對於DDR來說也是比較重要的技術,所以一並介紹下。
為了屏蔽不需要的數據,人們采用了數據掩碼(Data I/O Mask,簡稱DQM)技術。通過DQM,內存可以控制I/O端口取消哪些輸出或輸入的數據。這里需要強調的是,在讀取時,被屏蔽的數據仍然會從存儲體傳出,只是在“掩碼邏輯單元”處被屏蔽。
DQM由主控芯片控制,為了精確屏蔽一個P-Bank位寬中的每個字節,每個64bit位寬的數據中有8個DQM信號線,每個信號針對一個字節。這樣,對於4bit位寬芯片,兩個芯片共用一個DQM 信號線,對於8bit位寬芯片,一個芯片占用一個DQM信號,而對於16bit位寬芯片,則需要兩個DQM引腳。SDRAM 官方規定,在讀取時DQM發出兩個時鍾周期后生效,而在寫入時,DQM與寫入命令一樣是立即生效,如下圖三和四分別顯示讀取和寫入時突發周期的第二筆數據被取消。
所以DQM信號的作用就是對於突發寫入,如果其中有不想存入的數據,就可以運用DQM信號進行屏蔽。DQM信號和數據信號同時發出,接收方在DQS的上升與下降沿來判斷DQM的狀態,如果DQM為高電平,那么之前從DQS中部選取的數據就被屏蔽了。
有人可能會覺得,DQM是輸入信號,意味着DRAM芯片不能發出DQM信號給主控芯片作為屏蔽讀取數據的參考。其實,該讀哪個數據也是由主控芯片決定的,所以DRAM芯片也無需參與主控芯片的工作,哪個數據是有用的就留給主控芯片自己去選擇。
1.5 VREFCA & VREFDQ
對於內存系統工作非常重要的參考電壓信號VREF,在DDR3系統中將VREF分為兩個信號。一個是為命令與地址信號服務的VREFCA,另一個是為數據總線服務的VREFDQ,它將有效的提高系統數據總線的信噪等級
1.6 ZQ校准
ZQ也是一個新增的引腳,在這個引腳上接有一個240歐姆的低公差參考電阻。這個引腳通過一個命令集,通過片上校准引擎(ODCE,On-Die Calibration Engine)來自動校驗數據輸出驅動器導通電阻與ODT的終結電阻值。當系統發出這一指令之后,將用相應的時鍾周期(在加電與初始化之后用512個時鍾周期,在退出自刷新操作后用256時鍾周期、在其他情況下用64個時鍾周期)對導通電阻和ODT電阻進行重新校准。
1.7 片外驅動調校OCD(Off-Chip Driver)
OCD是在DDR-II開始加入的新功能,而且這個功能是可選的,有的資料上面又叫離線驅動調整。OCD的主要作用在於調整I/O接口端的電壓,來補償上拉與下拉電阻值,從而調整DQS與DQ之間的同步確保信號的完整與可靠性。調校期間,分別測試DQS高電平和DQ高電平,以及DQS低電平和DQ高電平的同步情況。如果不滿足要求,則通過設定突發長度的地址線來傳送上拉/下拉電阻等級(加一檔或減一檔),直到測試合格才退出OCD操作,通過OCD操作來減少DQ、DQS的傾斜從而提高信號的完整性及控制電壓來提高信號品質。
1.8 CAS和RAS
CAS:列地址選通
RAS:行地址選通
1.9 容量計算
上圖為X8data的單顆DDR3架構圖,行(Row)地址線復用14根,列(Column)地址線復用10根,Bank數量為8個,IO Buffer通過8組數位線(DQ0-DQ7)來完成對外的通信,故此單顆DDR3芯片的容量為2的14次方乘2的10次方乘8乘8,結果為1Gbit,因為1B包含8bit,1GB/8=128MB。
如果我們要做成容量為1GB的內存條則需要8顆這樣的DDR3內存芯片,每顆芯片含8根數位線(DQ0-DQ7)則總數寬為64bit,這樣正好用了一個Rank。
假果還用128MB的DDR3芯片去做2GB內存條,結果就會有所不同。我們最好選用4根數位線(DQ0-DQ3),數量是16顆,這樣也是用了一個Rank。
二、關鍵技術
2.1 Write leveling功能與Fly_by拓撲
Write leveling功能和Fly_by拓撲密不可分。Fly_by拓撲主要應用於時鍾、地址、命令和控制信號,該拓撲可以有效的減少stub的數量和他們的長度,但是卻會導致時鍾和Strobe信號在每個芯片上的飛行時間偏移,這使得控制器(FPGA或者CPU)很難保持tDQSS、tDSS 和tDSH這些參數滿足時序規格。因此write leveling應運而生,這也是為什么在DDR3里面使用fly_by結構后數據組可以不用和時鍾信號去繞等長的原因,數據信號組與組之間也不用去繞等長,而在DDR2里面數據組還是需要和時鍾有較寬松的等長要求的。DDR3控制器調用Write leveling功能時,需要DDR3 SDRAM顆粒的反饋來調整DQS與CK之間的相位關系,具體方式如下圖一所示。
Write leveling 是一個完全自動的過程。控制器(CPU或FPGA)不停的發送不同時延的DQS 信號,DDR3 SDRAM 顆粒在DQS-DQS#的上升沿采樣CK 的狀態,並通過DQ 線反饋給DDR3 控制器。控制器端反復的調整DQS-DQS#的延時,直到控制器端檢測到DQ 線上0 到1 的跳變(說明tDQSS參數得到了滿足),控制器就鎖住此時的延時值,此時便完成了一個Write leveling過程;同時在Leveling 過程中,DQS-DQS#從控制器端輸出,所以在DDR3 SDRAM 側必須進行端接;同理,DQ 線由DDR3 SDRAM顆粒側輸出,在控制器端必須進行端接;
需要注意的是,並不是所有的DDR3控制器都支持write leveling功能,所以也意味着不能使用Fly_by拓撲結構,通常這樣的主控芯片會有類似以下的描述:
2.2 DBI功能與POD電平
DBI的全稱是Data Bus Inversion數據總線反轉/倒置,它與POD電平密不可分,它們也是DDR4區別於DDR3的主要技術突破。
POD電平的全稱是Pseudo Open-Drain 偽漏極開路,其與DDR3對比簡單的示例電路如下圖二所示。
從中可以看到,當驅動端的上拉電路導通,電路處於高電平時(也即傳輸的是“1”),此時兩端電勢差均等,相當於回路上沒有電流流過,但數據“1”還是照樣被傳輸,這樣的設計減少了功率消耗。
正是由於POD電平的這一特性,DDR4設計了DBI功能。當一個字節里的“0”比特位多於“1”時,可以使能DBI,將整個字節的“0”和“1”反轉,這樣“1”比“0”多,相比原(反轉前)傳輸信號更省功耗
2.3 DDR系列對比
三、電壓及時序
3.1 VREF Tolerances
看圖說話,一般Vref電源表現為如圖所示的Vref(t),Vref(DC)就是Vref(t)的平均電壓,也就是我們仿真中用到的Vref參考電壓,對於這個壓值,也有一定要求,就是VDD/2±1%VDD。在此基礎之上,還要求Vref(t)偏離Vref(DC)不能超過±1%VDD,所以關於容限的要求,有兩個點 :VREF(AC noise)的容限為±2%VDD,VREF(DC )為±1%VDD。
對於Vref對於信號的影響,重點是兩個方面:一是時序方面,影響setuptime、holdtime的測量以及derating取值,會造成時序錯亂或者DDR運行不到額定頻率等很多結果。二是電平判斷方面,可能會造成高低電平誤判。因為Vref偏移VDD/2,影響的不僅僅只是Vref(DC)會有偏移,還會對VIH(AC)、VIH(DC)、VIL(AC)和VIL(DC)造成影響。因為這些參數的取值都和Vref(DC)有着密切的聯系。
以DDR2為例,電氣標准為SSTL_18,VREF和VTT為900mV。 VREF+AC noise=936mV,VREF-AC noise=864mV,VREF+DC error=918mV,VREF-DC error=882mV。 VREF的電壓噪聲或偏差會導致潛在的時鍾誤差,抖動和內存總線錯誤判定。例如如果VREF噪聲較大或者偏離VDDQ/2較多,接收端的會檢測到不期望的邏 輯電平,輸入信號斜率將會變大,抓取數據點改變。還有可能影響接收端的 DRAM時序。
3.2 差分信號電壓
對於做為差分線的CK信號和DQS信號而言,判定的要求又分為單根和差分模式,單根模式的判定標准和地址數據線基本一致,如下圖三所示。它的判定標准只有VSEH和VSEL。實際這兩個值對應的就是VIH.AC和VIL.AC。
差分模式如圖所示,數據見表格
而且同時對兩個單根的交點也有一定的要求,如下圖五所示,兩個單根的交點位置要在VSEH(最高點)和VSEL(最低點)之間,否則的話差分模式下,正半周期和負半周期可能會有比較大的一個比例差異。
四、關鍵時間參數
4.1 傳輸速率與時鍾頻率
DDR3-800/DR3-1600:后綴數字的單位是MT/S,指每秒傳輸多少個數據(Mega-transfer per second),和時鍾頻率是兩個不同的概念。
DDR(dual data rate)是雙邊沿傳輸數據。因此MT/S是時鍾頻率的兩倍,即DDR3-800的始終頻率是400KMHz,DDR3-1600的始終頻率是800KMHz,
4.2 tRCD
首先,我們先了解一下內存的大體結構工作流程,這樣會比較容量理解這些參數在其中所起到的作用。
DDR3的內部是一個存儲陣列,將數據“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Column),我們就可以准確地找到所需要的單元格,這就是內存芯片尋址的基本原理。對於內存,這個單元格可稱為存儲單元,那么這個表格(存儲陣列)就是邏輯 Bank(Logical Bank,下面簡稱Bank)。
DDR3內部Bank示意圖,這是一個NXN的陣列,B代表Bank地址編號,C代表列地址編號,R代表行地址編號。
如果尋址命令是B1、R2、C6,就能確定地址是圖中紅格的位置
目前DDR3內存芯片基本上都是8個Bank設計,也就是說一共有8個這樣的“表格”。
尋址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最終的確尋址單元。
tRCD 全稱是 RAS-to-CAS Delay,也就是行尋址到列尋址之間的延遲。 DDR 的尋址流程是先指定 BANK 地址,然后在指定行地址,最后指定列地址確定最終要尋址的單元。 BANK 地址和行地址是同時發出的,這個命令叫做“行激活” (Row Active)。行激活以后就發送列地址和具體的操作命令(讀還是寫),這兩個是同時發出的,因此一般也用“讀/寫命令”表示列尋址。在行有效(行激活)到讀寫命令發出的這段時間間隔叫做 tRCD
4.3 CL參數
相關的列地址被選中之后,將會觸發數據傳輸,但從存儲單元中輸出到真正出現在內存芯片的 I/O 接口之間還需要一定的時間(數據觸發本身就有延遲,而且還需要進行信號放大),這段時間就是非常著名的 CL(CAS Latency,列地址脈沖選通潛伏期)。CL 的數值與 tRCD 一樣,以時鍾周期數表示。如 DDR3-800,時鍾頻率為 100MHz,時鍾周期為 10ns,如果 CL=2 就意味着 20ns 的潛伏期。不過CL只是針對讀取操作。
4.4 AL參數
在 DDR 的發展中,提出了一個前置 CAS 的概念,目的是為了解決 DDR 中的指令沖突,它允許 CAS 信號緊隨着 RAS 發送,相當於將 DDR 中的 CAS 前置了。但是讀/寫操作並沒有因此提前,依舊要保證足夠的延遲/潛伏期,為此引入了 AL(Additive Latency),單位也是時鍾周期數。 AL+CL 組成了 RL(Read Latency),從 DDR2 開始還引入了寫潛伏期 WL(Write Latency),WL 表示寫命令發出以后到第一筆數據寫入的潛伏期。
4.5 tRC 參數
tRC 是兩個 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之間的周期, DDR3L 數據手冊會給出這個值,比如 NT5CC256M16EP-EK 的 tRC 值為 47.91ns
4.6 tRAS 參數
tRAS 是 ACTIVE 命令到 PRECHARGE 命令之間的最小時間, DDR3L 的數據手冊同樣也會給出此參數, NT5CC256M16EP-EK 的 tRAS 值為 34ns
4.7 tRP
在數據讀取完之后,為了騰出讀出放大器以供同一Bank內其他行的尋址並傳輸數據,內存芯片將進行預充電的操作來關閉當前工作行。還是以上面那個Bank示意圖為例。當前尋址的存儲單元是B1、R2、C6。如果接下來的尋址命令是B1、R2、C4,則不用預充電,因為讀出放大器正在為這一行服務。但如果地址命令是B1、R4、C4,由於是同一Bank的不同行,那么就必須要先把R2關閉,才能對R4尋址。從開始關閉現有的工作行,到可以打開新的工作行之間的間隔就是tRP(Row Precharge command Period,行預充電有效周期),單位也是時鍾周期數。
五、PCB設計
5.1 布局
https://mp.weixin.qq.com/s/N7XG6JhwAG9p5L99PHPPNw
5.2 布線
參考自:https://mp.weixin.qq.com/s/dyB7wCgJ0DvnMeV0TUz84g
DDR的不限拓撲結果主要有T型和Fly-by,如下圖所示:、
主要的布線步驟大致為:
第一步,確定拓補結構(僅在多片DDR芯片時有用)
第二步,元器件擺放
第三步,設置串聯匹配電阻的仿真模型
第四步,設置線寬與線距
第五步,走線
第六步,設置等長規則
第七步,繞等長
第一步,確定拓補結構(僅在多片DDR芯片時有用)
首先要確定DDR的拓補結構,一句話,DDR1/2采用星形結構,DDR3采用菊花鏈結構。
拓補結構只影響地址線的走線方式,不影響數據線。
星形拓補就是地址線走到兩片DDR中間再向兩片DDR分別走線,菊花鏈就是用地址線把兩片DDR“串起來”,就像羊肉串
第二步,元器件擺放
確定了DDR的拓補結構,就可以進行元器件的擺放,有以下幾個原則需要遵守:
原則一,考慮拓補結構,仔細查看CPU地址線的位置,使得地址線有利於相應的拓補結構
原則二,地址線上的匹配電阻靠近CPU
原則三,數據線上的匹配電阻靠近DDR
原則四,將DDR芯片擺放並旋轉,使得DDR數據線盡量短,也就是,DDR芯片的數據引腳靠近CPU
原則五,如果有VTT端接電阻,將其擺放在地址線可以走到的最遠的位置。一般來說,DDR2不需要VTT端接電阻,只有少數CPU需要;DDR3都需要VTT端接電阻。
原則六,DDR芯片的去耦電容放在靠近DDR芯片相應的引腳
以下是DDR2的元器件擺放示意圖(未包括去耦電容),可以很容易看出,地址線可以走到兩顆芯片中間然后向兩邊分,很容易實現星形拓補,同時,數據線會很短。
以下是DDR3元器件擺放示意圖,請注意,這里使用的CPU支持雙通道DDR3,所以看到有四片(參考設計是8片)DDR3,其實是每兩個組成一個通道,地址線沿着圖中綠色的走線傳遞,實現了菊花鏈拓補。地址線上的VTT端接電阻擺放在了地址線可以到達的最遠的地方。同樣地,數據線上的端接電阻也放置在了靠近DDR3芯片的位置,數據線到達CPU的距離很短。同時,可以看到,去耦電容放置在了很靠近DDR3相應電源引腳的地方。
第三步,設置串聯匹配電阻的仿真模型
擺放完元器件,建議設置串聯匹配電阻的仿真模型,這樣對於后續的布線規則的設置是有好處的。
第四步,設置線寬與線距
-
DDR走線線寬與阻抗控制密切相關,經常可以看到很多同行做阻抗控制。對於純數字電路,完全有條件針對高速線做單端阻抗控制;但對於混合電路,包含高速數字電路與射頻電路,射頻電路比數字電路要重要的多,必須對射頻信號做50歐姆阻抗控制,同時射頻走線不可能太細,否則會引起較大的損耗,所以在混合電路中,本人往往舍棄數字電路的阻抗控制。到目前為止,本人設計的混合電路產品中,最高規格的DDR是DDR2-800,未作阻抗控制,工作一切正常。
-
DDR的供電走線,建議8mil以上,在Allegro可以針對一類線進行物理參數的同意設定,我本人喜歡建立PWR-10MIL的約束條件,並為所有電源網絡分配這一約束條件,如下圖。
PWR-10MIL
- 線距部分主要考慮兩方面,一是線-線間距,建議采用2W原則,即線間距是2倍線寬,3W很難滿足;二是線-Shape間距,同樣建議采用2W原則。對於線間距,也可以在Allegro中建立一種約束條件,為所有DDR走線(XNET)分配這樣的約束條件,如下圖。
DDR-2W
- 還有一種可能需要的規則,就是區域規則。Allegro中默認的線寬線距都是5mil,在CPU引腳比較密集的時候,這樣的規則是無法滿足的,這就需要在CPU或DDR芯片周圍設定允許小間距,小線寬的區域規則,
第五步,走線
走線就需要注意的內容比較多,這里只做少許說明。
所有走線盡量短
走線不能有銳角
盡量少打過孔
保證所有走線有完整的參考面,地平面或這電源平面都可以,對於交變信號,地與電源平面是等電位的
盡量避免過孔將參考面打破,不過這在實際中很難做到
走完地址線和數據后,務必將DDR芯片的電源腳,接地腳,去耦電容的電源腳,接地腳全部走完,否則在后面繞等長時會很麻煩的
第六步,設置等長規則
對於數據線,DDR1/2與DDR3的規則是一致的:每個BYTE與各自的DQS,DQM等長,即DQ0:7與DQS0,DQM。等長,DQ8:15與DQS1,DQM1等長,以此類推。
地址線方面的等長,要特別注意,DDR1/2與DDR是很不一樣的。對於DDR1/2,需要設定每條地址到達同一片DDR的距離保持等長,對於DDR3,地址線的等長往往需要過孔來配合,具體的規則均綁定在過孔上和VTT端接電阻上,CPU的地址線到達過孔的距離等長,過孔到達VTT端接電阻的距離也等長。
第七步,繞等長
完成等長規則的設定后,最后一步也是工作量最大的一步:繞等長。
在這一步,我認為只有一點規則需要注意:盡量采用3倍線寬,45度角繞等長
5.3 DDR走線分類
1、為滿足DDR3時序,需要將DDR3信號分組走線。數據線每八根一組,外加相應的DQS和DQM(如:DQ0-DQ7,DQS0,DQS0#,DQM0分為一組,依次類推),走線必須同組,一組線之間不能有其他信號線,且保證同層,換層次數一致,長度誤差控制在±10mil內;地址線、控制線、時鍾線分為一組,長度誤差控制在±25mil內,如果速率很高的話,等長規則可以控嚴格點。
GROUP0:
DQ0-DQ7,DQM0,DQS0P/DQS0N;
GROUP1:
DQ8-DQ15,DQM1,DQS1P/DQS1N;
2、而對於控制線、地址線、時鍾線 分組如下:
GROUP2:Address ADDR0-ADDR14 共15根地址線;
GROUP3:Clock CLK、CLKN差分對;
GROUP4:Control 包括WE、CAS、RAS、CS0、CS1、ODT0、ODT1、BA0、BA1、BA2等;
5.4 注意事項
而對於FLY-BY的拓撲結構 ,要注意以下幾點:
1. 間距 組內按3H(說明:H指的是到主參考平面的高度,中心間距3H,)原則;組間間距要5H以上;CLK和ADD/CMD等的間距按5H設計;
2.盡量同組同層完成走線且有完整參考平面(GND/power);
3.各個DDR顆粒間的走線,盡量用COPY,長度誤差在20mil以內(推薦5mil);若因結構限制,最大不能超過100mil;
4. 時鍾線推薦帶狀線布線以(GND/POWER為參考平面); 時鍾要緊耦合設計,對內等長控制在5MIL以內;源端和終端匹配的走線,長度不要太長(推薦300 mil以內)
5.終端(上拉)電阻要放在最后一個DDR顆粒(末端),且走線長度小於500mil;
6.在有多個負載時,為了減少串擾和加大負載容性補償,到第一個顆粒(主干道)的走線阻抗可以比到后面的走線阻抗偏小點,5-8歐姆左右。
7.Add/Com/Ctrl/Clk網絡從控制器到第一個DDR顆粒的走線長度不要超過6000mil,到最后一個DDR顆粒不要超過12000mil。
8.在多個考慮表底貼時分支的節點走線長度小於200mil且盡量等長.
9.濾波電容一個引腳放置一個,如DDR在頂層,電容可放置在頂層,電源的走向:電源-電容-過孔-DDR3引腳
參考資料:
https://blog.csdn.net/wshini7316/article/details/8508836?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
https://blog.csdn.net/monkea123/article/details/103281127