|
|
上一篇所提到的是:BIOS entry point. 它是第一個被 CPU 所抓取並執行指令之處.每家BIOS都有其相應的 file,要牢記.( J9 e, h' W# J
# B6 t' L% E6 `6 u- p
在本文中,要提及: Jumpless ! 在此要先說明Jumpless的意義.它代表:"用 s/w方式來 config clockgen generator,使之產生正確的 頻率s 來供應系統運作". 重要性在於:假如某個 frequency錯了,則將導致 system abnormal or malfunction...7 z3 g0 z4 w4 c" k
; K9 q1 a8 f0 Z& [, Z( z8 ^. W8 ~有哪些 frequencies由 clockgen 提供?
. t& G, Q/ J* t4 X6 @- CPU clock (在此指的是 : host clock, Ex. FSB800 CPU 需被 supply 200MHz clock)( m; N( l0 t; |' ~" \
- DRAM clock( depends on chipset design; Ex. DDR 533要被 supply 266MHz clock)% f! O# s( Y- h6 V$ q" `
更正 : DRAM clock現在都是由NB產生 . 外部的最多是 buffer而已. 並非 clock generator. 原因是為了保持較良好的 host clock & DRAM clock的同步.3 g; N. T6 z' I Y" o0 L
7 U/ w/ F# s( }5 m: u
補充:我舉的例子是以前的chipset design. 現在我做過的 chipset 其 DRAM clock的確由北橋來推. 北橋中有一會 register定義: CPU-DRAM ratio.* K4 Q' n0 p; f0 @- }7 D
Ex. CPU clock = 100MHz. Ratio = 3:5,則可得 DRAM clock = 166MHz, ^% M0 b0 t h8 ~7 @
7 \/ G4 Z) M- f; W$ e _8 H
- AGP clock: 標準 is 66.6MHz (= 1/2 PCI clock)1 @9 q; v: e& \ O. ~
- PCI clock: 33.3MHz R& \; K- @. U7 q
- SATA clock: 100MHz(see SATA spec,似乎還要更精確...)4 T8 j$ e7 j& Q, T
- Link clock: 即假如NB/SB中間有 link,亦由clockgen提供
. e- }7 U+ l5 e0 {' p- USB 1.1 clock: 12MHz
% ^8 }& l5 {$ g* l: b5 u, ?$ s' {更正: USB 的 clock 是 48MHz
w- s1 d) R+ U2 S* H- r! h6 a補充:我們 chipset的 design是: 由 clockgen提供 12MHz clock(或由 external crystal提供),被 PLL吃進去後,會產生 48MHz給 USB 1.1(你說的應該是這部分). 至於 USB 2.0,則是 supplied other freuencies !
! Z t( Q1 g! O# a
5 o+ V/ l4 q( _$ P- SIO clock...etc
5 q' f) o" g1 @; U' U2 w* r: K1 r- S$ [; z1 T5 D
Clock Generator的架構
% V: D* v) ~( V" {: Z( U$ r7 a( r=> ClockGen基本組成為 PLL(Phase Looked Loop) + Div. PLL 的輸入為 14.318MHz, 利用 迴授方式產生出 frequency F;之後 經過 Div 除頻,便得到 desired frequency,見下列圖示:
, d' R, H2 j5 G5 n6 R# z1 m7 X4 U5 O% X8 T) o; x
14.318MHz -> PLL -> F -> Div -> f# _9 M+ v9 U, l6 E# I$ ~
, t$ K# w* C; L T S) L* S& K2 G
Ex. F = 400MHz, 為 PLL振出來的;若 Div = 4,則 f = 100MHz
% ]: P5 t& u; B2 X
, m: E# H# E3 R# f3 U* XClockGen的 spec中,會列出許多 registers,好比是 Function 的 "contact window",透過這些 registers可以設定此clockgen !
9 j% l; o1 a: }
8 u5 e' `- `/ H& i$ Z更正:其實PLL 不是單純一個的 div. 鎖相迴路的參數是兩的divider 組成 M(VCO divider)/N(REF divider)
7 l6 S$ b1 X9 e0 @; Y- B補充:觀念上來說是 PLL所振出的頻率經 div後可得到 desired frequency. 但在 clockgen中:/ D7 v3 n* s1 ~ h# D8 C/ w6 E, v
1. 有 2 bytes(即所謂的M,N)來決定 VCO0 {( L& y6 k9 q- Z v+ D! p
2. 有幾個 bits來決定 div;一些主要的 frequency都有相對應的div* ]' g; T- T5 {* U4 G2 d
3. VCO / div = frequency
; y3 P) ?9 ~4 q8 x4 f4 W6 E# X; |, t, E" n# J, Z, h* {7 U
How to access ClockGen
* C6 S- K) u( X+ [=>現今存取 clockgen的方式,都是透過 SMBUS來達成. SMBUS 有分 1.1 and 2.0,不過大同小異. SMBUS是 2-wire protocol;由 SMBUS master(即內建在南橋內部的 SMBUS controller )來下 command 給 SMBUS device(Ex. Clockgen);Command中常用的有 Block Read/Write & Byte Read/Write 6 q" W7 q8 I6 ]$ S
3 y. K( R$ j6 A( m不同家 chipset 的 SMBUS controller implement方式不同,自然下command的方式亦不同;主要的步驟是:
6 p) P# Q& }% W `4 O8 ]' \- pre-init( clear status or ...)
( k- [: A8 \$ D- put slave address(要 access 的對象) : D9 j) o. {9 r5 ?
- decide Read or Write
~; m4 r0 e4 m$ ]" a- put command(Protocol type, Ex. Block or Byte access)
6 E/ d' o! K, e; n. R3 @: Q- put offset(要存取 自 clockgen中的哪一個 Byte開始...)
5 u. P7 r2 ?3 A- k- put data if (Write device)
2 t* N% O/ R2 h0 F2 Y- start transaction !!!) y3 X* ~0 P' N0 n! m% \
(... processing ...)
2 }2 q3 u" R6 d5 t: O1 y& `- get "Complete" status to check if transaction is done successfully8 c; C9 {% N% B3 w
(...wait for system reset...)
% Q4 I* Q4 R- O {2 d
, [4 E) e$ Q& g* ^5 h& o2 q9 N* 當 start transaction後, SMBUS controller便會將 programmer所 prepare的資訊將之轉成 SMBUS command打給 device;完成後應該在 controller端有 status register可以檢查,看看是否 transaction ok or failed,或是有其他 error conditions., r: e! b) x' g/ x; q
1 |2 o7 d/ A% a K7 Y& ~, Y透過這樣的方法,programmer便可以 config clockgen使之產生正確的 frequencies.8 O, }% t# y }! a$ ^
4 |" z/ A" ?$ j2 Z
[2 Programming ways for clockgen]
5 Y0 W& V, U q; f* ]) n3 ~5 E=> 現今的 ClockGen有提供兩種方式 for S/W config. 一為 table mode,一為linear mode. Table mode指的是: ClockGen spec 中會有一個 table,裡面說明: 要產生 ? frequency 要填 ? 值.因此,這種方式只需program 1 byte to Clockgen就行了. 若是 linear mode,則是坊間所說的無段變頻,即可以微調frequency. Ex. table mode只提供 100/133/166/200MHz,但 linear mode則可以提供類似 102.6/136.3/168.7..等的頻率. 此時,要program的 byte數就很多了.....除此之外, linear mode也可以config 所謂的 spread spectrum(%),板廠測EMI時會用到
" h* k" E7 q7 Y
, k5 X5 `, M5 z! D" l【Notes】0 o! D6 e5 F" H' ?, S% a; C4 k
1. For NB platform power-on CPU frequency 由 2 pins來決定;DT platform會由 Jumper決定.不管如何,之後做Jumpless都可以 override掉原 clock settings
0 I! L! g. B( i5 m. K/ E& s; O; S5 J3 }! ~ [( O
更正: 不是只有NB如此.不管DT 或server. CPU FSB 也是 pin(由於FSB頻率比NB多.所以是 3 pins )來決定的.不是jumper. 即使要做超頻設計會對這三pin做手腳, 也不會使用jumper; |8 ]6 E( }' Y8 p
* q/ z9 s5 k. Z% ~& r
6 Q2 V1 h$ K+ d/ n% E, p0 P2. 有些 clockgen所提供的 SS 都是 center spread. 若需要 Down spread則可以由 center spread搭配 改變後的 frequency(類似直流準位)來達成
8 b9 ?7 f4 T* G8 k5 z/ C0 N7 H9 t7 u F9 y& [# v3 @# ?
給我正確的頻率,其餘免談 ...^_^... 9 P8 T3 W3 c+ @
; }/ b4 b1 z* {0 Y B- e9 A2 M
=====================================================================
1 [% ^. F2 P! t8 x( |8 QQ&A
$ |2 [+ l2 E" c- {=====================================================================
5 |1 Y6 E. d a2 R' l) ]( L>前輩我有幾個問題要發問!
9 a$ I2 \# W& M# ]: V; f>1. 你這邊說的Table方式頻率是指供應給CPU頻率嗎? Intel網站的CPU說明,他說是固定的不可調的? 所以這不是HW固定住(Latch)設定值了嗎?
( s5 U7 H( M2 G1 ^2 [3 ~$ E( d>
' a' h$ D" C$ H! t; e>2. 可以解釋一下Down Spread/Center Spread /...所代表的意思嗎? 還有用途?
/ T) [" \( |/ O, r, ?0 x+ u>
7 J% r$ k7 e- j% `' i>3. 我目前也在嘗試Program ClcokGen(新手上路),很多專有名詞還沒搞懂,另外目前ClockGen不是可以8 ?) V, z, x2 M* Q& F- {7 `
>輸出不同頻率嗎? 為什麼Table方式只需要Program 1 byte就好 ???還是說各家廠商設定方式不同,有些廠: q7 M+ R2 T5 L0 L7 X b! a: F* C
>商只要利用1 Byte 就已經選擇好所有的頻率了(33MHZ/48MHz/DOT96MHZ/LCD27MHZ...)?+ A2 l+ W" }+ m/ A; d
4 E$ c+ ^' f& O1 X; D[For #1]
1 G, t) v! P4 s) g& x( G=> 我所謂的 "Table"方式指的是: 為了方便設定,clockgen designer會專門提供一個byte register(8-bit);此 byte的某些 bit fields(Ex. bit[4:0])可以讓programmer填一組值,例如 01001b. 此值 write 至 clockgen成功後, CPU/DRAM/AGP/PCI/...etc 都會是固定的頻率. Ex. 100/133/66/33/...etc. 所以才說只填 1 byte only !8 R) B) K. X+ p+ ?. ]$ U5 g+ ?$ `
1 N9 J2 v: }# z: S' ?4 V' _此值一旦填至 clockgen, clockgen便依據該 byte(可參考 spec前幾頁,會有一張表說明: bit[4:0] <-> frequency combinations)來產生出 frequencies.
6 W4 d( d9 P! |! O, m
: l" b8 z( s: c6 D# I9 l y不管用哪一種方式(table or linear mode),都會 supply CPU frequency !!!不過,此時的 CPU frequency is CPU的外頻 ( CPU 總頻率(core) = (外頻)*(倍頻 <-multiplier) )0 F+ x5 T$ W$ W; _
" B& O2 b5 N, c; r9 T/ EEx. 外頻 200MHz(Merom CPU, FSB 800),倍頻 = 12 -> core freq = 2.4GHz
" R& }" ?3 F" }* r
( U! z* q' j# \" [, x還有,BIOS可以調整 外頻 & 倍頻 ! 沒問題 ! 不過,若遇到鎖頻的CPU(Ex. 量產版的CPU),倍頻可能無法調整.但外頻還是可以靠 config clockgen來達到 !!!- {+ q/ w+ P2 O( ]4 `, B6 r. v5 M N
, P3 b0 g' b0 ]- h) t F
For #24 A# s7 W( D' y7 c
=> 假設要達到 100MHz 且 SS = 0.5% center spread.則: ]. I, l5 _' \& z( S9 B3 Z, x
(...想像以前學的直流與交流的訊號...)& u( i. ~. w7 L/ R3 ~: b/ f
0 S: U: F( b: Q5 z5 V# I
100MHz 相當於 直流的部分,其值不隨時間而變; 0.5% center spread好比弦波訊號(振幅是 100M * 0.005 * (1/2);所以,兩者的合成便是: 以 100MHz為中心,其值隨時間而變,振幅 is 100M * 0.005 * (1/2) 的訊號 !!!3 v1 x) z {! ? A k" o5 G/ j* F
3 J" b1 P( b% F3 c, s8 P! L
我 '猜' 要這樣測試的原因是:所產生的 clock一定不會是 perfect的 100MHz,有可能因為元件或是外部干擾而被 "改變".為了模擬這樣的情況,我們會將 clock的 spread spectrum enable,產生 "隨時間而改變"的頻率,來測試系統的穩定度...等 A9 V) F$ A* C8 C5 R
7 `6 `' N) y# K
Down spread 0.5% 指的是:距離 水平 100MHz, 最低的值是 100M-100M*0.005,最高值則是 100M本身( 等同於: 水平值 99.5 + center spread 0.5%, right ? )6 k; g, g. O; T; E! d
" t1 L. l3 L7 a7 V0 L
For #34 g5 |( N1 W. _$ o
=> 前面提過,只設 1 byte 就可以產生所有頻率是因為: clockgen公司已經把設定各頻率的功能"濃縮"在一個 byte裡面 ; programmer只要 config this byte 就可以了...
! c( e+ s4 } S: K" ^' }* `
! D0 W. A3 V' O: i- ]* `, y" |! |* 關於 EMI 測試部分,有錯請指正. ( ...我有用到 "猜" 字眼...^_^ )
; z' q' c! [+ ?' e0 R
* u: }5 |1 V" p6 ?[[EMI 測試的知識]]2 w- ^& f8 j3 i% O
由於 對clock信號來說. 鋒(peak)值是能量最強的地方. 所以peak的能量就會不斷累積, 發射出來. 因此在頻譜上就會出現能量很強的頻率. EMI 工程師的工作就是要想辦法屏閉這些電磁波的干擾.
8 [" v* s! G$ h$ G& U- z
' I( m" _9 |( i為什麼需要 spread spectrum? 由於PLL 十分精準. 也就是說 100MHz的clock, 其 peak & peak之間的距離一致(波長固定). 所以能量十分驚人. 使用展頻可以使 peak 的距離改變(由於頻率不斷的在一個範圍內改變, 這個可以用示波器累積clock信號來看) 所以累積的能量會比較低. 這樣EMI 可以比較好處理.8 w4 y' \( V8 T
# T- [9 m( h6 N: [/ J至於為什麼會有要求BIOS一開始就把展頻開著, 以確保板子的穩定? 很簡單.不開展頻clock很穩定.自然比較不會有問題. 展頻一開. 由於頻率是浮動的. 很多設計欠佳的板子就會不穩定. 及早發現才能及早修改. |
|