找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 9274|回复: 0

[转载]我所知道的BIOS -Jumpless 4

[复制链接]
发表于 2010-7-1 11:35:07 | 显示全部楼层 |阅读模式
上一篇所提到的是:BIOS entry point. 它是第一個被 CPU 所抓取並執行指令之處.每家BIOS都有其相應的 file,要牢記.9 p5 B$ p/ E& b" }: E2 F
$ X+ A7 ]9 d: x* \! [9 i$ q
在本文中,要提及: Jumpless ! 在此要先說明Jumpless的意義.它代表:"用 s/w方式來 config clockgen generator,使之產生正確的 頻率s 來供應系統運作". 重要性在於:假如某個 frequency錯了,則將導致 system abnormal or malfunction...  b5 l) F. a+ v; h* X8 A( q

! U% J0 K# Y' k有哪些 frequencies由 clockgen 提供?
% b; _: s/ H7 H4 P- CPU clock (在此指的是 : host clock, Ex. FSB800 CPU 需被 supply 200MHz clock); Y9 X' {/ M9 K+ F0 R$ d) R9 C
- DRAM clock( depends on chipset design; Ex. DDR 533要被 supply 266MHz clock)) A7 T8 u4 s' d" A' W" Y
更正 : DRAM clock現在都是由NB產生 . 外部的最多是 buffer而已. 並非 clock generator. 原因是為了保持較良好的 host clock & DRAM clock的同步.
1 i! s* F8 _( a0 Z' C% A
2 v; n' E6 y! D補充:我舉的例子是以前的chipset design. 現在我做過的 chipset 其 DRAM clock的確由北橋來推. 北橋中有一會 register定義: CPU-DRAM ratio.- @+ f) z5 j: T5 m1 t
Ex. CPU clock = 100MHz. Ratio = 3:5,則可得 DRAM clock = 166MHz
+ E, p; z! E: ^9 @4 n$ |' q( a0 J) t/ r% e
- AGP clock: 標準 is 66.6MHz (= 1/2 PCI clock), V/ W/ P5 a2 }% t8 B+ b5 L
- PCI clock: 33.3MHz
  [: V1 u0 a7 T+ T/ k1 _  N- SATA clock: 100MHz(see SATA spec,似乎還要更精確...)
# ^# I+ y% _- K7 Z# Z0 i- Link clock: 即假如NB/SB中間有 link,亦由clockgen提供/ \  F% d+ O# q9 l) n
- USB 1.1 clock: 12MHz8 T0 U0 o$ T) I- x
更正: USB 的 clock 是 48MHz
  p) m" d; S9 J補充:我們 chipset的 design是: 由 clockgen提供 12MHz clock(或由 external crystal提供),被 PLL吃進去後,會產生 48MHz給 USB 1.1(你說的應該是這部分). 至於 USB 2.0,則是 supplied other freuencies !1 H/ u8 ]; X2 ~' J5 c. \2 `5 E; I
* `7 Z+ K- H* J
- SIO clock...etc+ \. i) x; A, z% i2 g& b; U

. R  _9 E1 H1 ^0 r+ cClock Generator的架構9 ~/ b* [6 L  Z  D% P
=> ClockGen基本組成為 PLL(Phase Looked Loop) + Div. PLL 的輸入為 14.318MHz, 利用 迴授方式產生出 frequency F;之後 經過 Div 除頻,便得到 desired frequency,見下列圖示:1 G$ k( C2 z/ Z! h6 V: `- ]& p
* f5 T3 L2 `, x2 i  |2 k: l
14.318MHz -> PLL -> F -> Div -> f/ E9 p2 T3 }; v' E' f
' N, ^0 n2 M# i. Y) P* w" }; U# n
Ex. F = 400MHz, 為 PLL振出來的;若 Div = 4,則 f = 100MHz1 \3 q$ i( x- I( @1 p
; P* P- J% J! {, i
ClockGen的 spec中,會列出許多 registers,好比是 Function 的 "contact window",透過這些 registers可以設定此clockgen !
. l6 i6 J9 M6 h2 Z: ]& B3 _  v
+ X, G+ F. o( L% ~# u更正:其實PLL 不是單純一個的 div. 鎖相迴路的參數是兩的divider 組成 M(VCO divider)/N(REF divider) 0 f2 _; N/ ?  C6 R7 w$ L2 F/ O- D
補充:觀念上來說是 PLL所振出的頻率經 div後可得到 desired frequency. 但在 clockgen中:, x6 r/ y5 s/ @0 D% ~
1. 有 2 bytes(即所謂的M,N)來決定 VCO- E6 O# T* X) U1 b, ]0 R" u* ^
2. 有幾個 bits來決定 div;一些主要的 frequency都有相對應的div
( K3 ?- t0 h' D6 f3. VCO / div = frequency
. w# ^/ h  {: G3 h% u1 J( U) M5 y/ i3 b- y" {* U8 A
How to access ClockGen/ \" w9 Q4 h( }) ~6 ]
=>現今存取 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 + q1 {, L% N9 p5 H3 d& k) A0 y

( o! b0 \1 R3 |1 K不同家 chipset 的 SMBUS controller implement方式不同,自然下command的方式亦不同;主要的步驟是:
+ ]& F: s3 N* u' K- _- pre-init( clear status or ...)
3 g1 t7 n( f' y* ]- put slave address(要 access 的對象)
- X% E) S( D1 y2 o1 Y, _. x- decide Read or Write
1 G* D4 i' r* D" U3 o+ \( B- put command(Protocol type, Ex. Block or Byte access)4 X: L* w! P8 B; S4 n
- put offset(要存取 自 clockgen中的哪一個 Byte開始...)
* p9 h- _3 V( u8 Y- B6 B+ \7 a- put data if (Write device)
+ d; H5 s8 R7 z& r- start transaction !!!3 s* }5 b$ B# U
(... processing ...)" s1 j- N% F/ }% [7 Q" A* D
- get "Complete" status to check if transaction is done successfully
3 S  B! R0 j  o- L( \& R$ S$ I(...wait for system reset...)
  u$ j4 Z, T* n! S  n2 L+ |2 X( X( p1 i) @
* 當 start transaction後, SMBUS controller便會將 programmer所 prepare的資訊將之轉成 SMBUS command打給 device;完成後應該在 controller端有 status register可以檢查,看看是否 transaction ok or failed,或是有其他 error conditions.; \, z: P" x1 a4 {5 e7 O

0 J! m0 o' S; b& M  ^透過這樣的方法,programmer便可以 config clockgen使之產生正確的 frequencies.
8 X+ `# E. B" h, m% D& E( X2 ]3 D! J) |1 n" O
[2 Programming ways for clockgen]7 P( K" p' \4 Q# r0 F5 ?
=> 現今的 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時會用到8 t  O- Q1 i& D
& I5 y% y7 I6 \/ P- k% P. J
【Notes】$ A( J0 J# |/ D% b3 }, ?
1. For NB platform power-on CPU frequency 由 2 pins來決定;DT platform會由 Jumper決定.不管如何,之後做Jumpless都可以 override掉原 clock settings
' `4 F) D7 }0 O/ o1 o
4 K7 L- [0 `& I( R  N" K! i更正: 不是只有NB如此.不管DT 或server. CPU FSB 也是 pin(由於FSB頻率比NB多.所以是 3 pins )來決定的.不是jumper. 即使要做超頻設計會對這三pin做手腳, 也不會使用jumper- O4 ~6 E5 A) v( T9 u. z

1 q& d8 x) y( _9 i
4 Q; s& [7 F, b* P/ s2. 有些 clockgen所提供的 SS 都是 center spread. 若需要 Down spread則可以由 center spread搭配 改變後的 frequency(類似直流準位)來達成
4 T5 h5 m2 U- n' h
0 O- q/ ~" o' K給我正確的頻率,其餘免談 ...^_^... ( e( h4 e3 O$ L4 ^: b% Y

' X6 n4 ]$ Q: K3 l3 H=====================================================================
, M6 e. y% z, F$ T5 gQ&A. `+ s% M6 S9 S9 X4 Q' k9 h5 d" b
=====================================================================4 x! b5 J. N4 c
>前輩我有幾個問題要發問!
/ s; }, X, _, m& P8 p6 A5 Q>1. 你這邊說的Table方式頻率是指供應給CPU頻率嗎? Intel網站的CPU說明,他說是固定的不可調的? 所以這不是HW固定住(Latch)設定值了嗎?! w' t) n: s' ?) s
>. M% o2 d  x4 z6 I
>2. 可以解釋一下Down Spread/Center Spread /...所代表的意思嗎? 還有用途?
/ p! r' W! ]) h# f5 [" z>, w  T: U2 g' l& `2 g
>3. 我目前也在嘗試Program ClcokGen(新手上路),很多專有名詞還沒搞懂,另外目前ClockGen不是可以4 r& Q+ _) R  |' s, s
>輸出不同頻率嗎? 為什麼Table方式只需要Program 1 byte就好 ???還是說各家廠商設定方式不同,有些廠
$ `( F+ ?4 c4 [5 \2 P) R5 w4 f& i>商只要利用1 Byte 就已經選擇好所有的頻率了(33MHZ/48MHz/DOT96MHZ/LCD27MHZ...)?
/ v- s/ Q) r) j. S2 {% [$ |; k4 o1 ?0 E& q& @9 r5 j1 A6 k- Q
[For #1]
1 R& A5 G* Q/ @# X=> 我所謂的 "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 !7 S" Q  r/ e3 Y4 N% a$ I; n! B  s0 Y
  n/ l9 V. ~# c: U6 P
此值一旦填至 clockgen, clockgen便依據該 byte(可參考 spec前幾頁,會有一張表說明: bit[4:0] <-> frequency combinations)來產生出 frequencies.2 Z  j+ H# W# u8 e4 f7 m9 q7 t; _& O

! f( q; a$ d  G* z, L1 _& O6 U2 f不管用哪一種方式(table or linear mode),都會 supply CPU frequency !!!不過,此時的 CPU frequency is CPU的外頻 ( CPU 總頻率(core) = (外頻)*(倍頻 <-multiplier) ): k3 o  W  ~/ _* j! V: q
8 s$ g+ ^' z8 F; e( k
Ex. 外頻 200MHz(Merom CPU, FSB 800),倍頻 = 12 -> core freq = 2.4GHz
3 U1 J, ~5 x' {; G- r8 e) m) J, t- [5 x& d0 F6 ]6 p5 J
還有,BIOS可以調整 外頻 & 倍頻 ! 沒問題 ! 不過,若遇到鎖頻的CPU(Ex. 量產版的CPU),倍頻可能無法調整.但外頻還是可以靠 config clockgen來達到 !!!2 V' o; X: t" R! c; G) V
, s( L& m4 q. o; ?" M" u
For #2
4 Y, l, J) x, l5 b. u; A=> 假設要達到 100MHz 且 SS = 0.5% center spread.則:
8 y3 L9 ?# m7 {' z(...想像以前學的直流與交流的訊號...)
$ ?  ~3 U* d4 r- l0 N& }6 P( X3 r; M- X2 @! t  k4 j
100MHz 相當於 直流的部分,其值不隨時間而變; 0.5% center spread好比弦波訊號(振幅是 100M * 0.005 * (1/2);所以,兩者的合成便是: 以 100MHz為中心,其值隨時間而變,振幅 is 100M * 0.005 * (1/2) 的訊號 !!!" f9 w( A) e. K& \

- |; H/ ~% E; l0 l6 f( M我 '猜' 要這樣測試的原因是:所產生的 clock一定不會是 perfect的 100MHz,有可能因為元件或是外部干擾而被 "改變".為了模擬這樣的情況,我們會將 clock的 spread spectrum enable,產生 "隨時間而改變"的頻率,來測試系統的穩定度...等9 p2 U/ ~, L  v0 _: e
1 j- T$ d4 K4 R* ?1 Q
Down spread 0.5% 指的是:距離 水平 100MHz, 最低的值是 100M-100M*0.005,最高值則是 100M本身( 等同於: 水平值 99.5 + center spread 0.5%, right ? )' `6 g6 w* u$ g1 y& l( \
5 P! k3 F$ S0 Y/ ^3 B3 {
For #3
. u3 k2 p' N: }4 W- ]=> 前面提過,只設 1 byte 就可以產生所有頻率是因為: clockgen公司已經把設定各頻率的功能"濃縮"在一個 byte裡面 ; programmer只要 config this byte 就可以了...
$ p" R% d6 g8 j5 t# i. Z+ O8 v' h% [: ^/ d* p8 R, ]
* 關於 EMI 測試部分,有錯請指正. ( ...我有用到 "猜" 字眼...^_^ )3 w0 H$ o/ _7 ^1 f

! X1 |2 n" P- B; J[[EMI 測試的知識]]
5 {3 T  ^* E5 S% G( W5 n& a由於 對clock信號來說. 鋒(peak)值是能量最強的地方. 所以peak的能量就會不斷累積, 發射出來. 因此在頻譜上就會出現能量很強的頻率. EMI 工程師的工作就是要想辦法屏閉這些電磁波的干擾. 
  g; ]& `# O" r8 W7 Y9 z; P3 d  G/ G% c2 c
為什麼需要 spread spectrum? 由於PLL 十分精準. 也就是說 100MHz的clock, 其 peak & peak之間的距離一致(波長固定). 所以能量十分驚人. 使用展頻可以使 peak 的距離改變(由於頻率不斷的在一個範圍內改變, 這個可以用示波器累積clock信號來看) 所以累積的能量會比較低. 這樣EMI 可以比較好處理.
, v6 ]8 \+ d, i+ p3 @& C& h
4 u  |/ a$ g/ j- \9 s+ @至於為什麼會有要求BIOS一開始就把展頻開著, 以確保板子的穩定? 很簡單.不開展頻clock很穩定.自然比較不會有問題. 展頻一開. 由於頻率是浮動的. 很多設計欠佳的板子就會不穩定. 及早發現才能及早修改.
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2024-5-19 13:51 , Processed in 0.021358 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表