Last updated: "2002/10/05 23:24:53 +0900"
小松平良樹プレゼンツ
"fivaClkup" という、あまりにも安易な名前のソフトウェアをリリース していました。使う方は使ってくださっていたようで、ありがたいことです。
しかし、充分な説明をしないままだったので、なんだかよく わからんなあ、という方も多かったと思います。 でも質問がこなかったので、放置してしまっていました。ごめんなさい。
そこそこの説明をしたいと思います。
Geode の、RAM に関連するクロックは、大体次のような感じになっていると 思います。嘘を書いているかもしれませんが。
+----------+
|Geode |
|+------+ | SDRAM CLK
PCI CLK ---------->|| PLL | |-------------> SDRAM
33/30MHz |+------+ |
+----------+
大元の CLK は PCI CLK です。PCI BUS に繋がるもの達は、この PCI CLK を元に動いているはずです。たとえばなんだろうなあ、 きっとコンパニオンチップであるところの Cx5520 は、この PCI CLK を 基準に動いているんじゃないかなあ? あと、PCMCIA インタフェースとか。 よくしらんけど。
Geode は、内部に PLL を持っていて、PCI CLK を何倍かします。 コアは、この何倍かした後の CLK を基準に動いています。 この倍率は、MPC-101 では 6倍、MPC-102 では 7倍、MPC-103 では 9倍、とか、 そんな感じなのだと思います。 このページの本題とはちょっとずれますが、 この倍率を変更することもできます。次の URL をどうぞ。
SDRAM には、Geode から、CORE CLK を分周したクロックが供給されます。 Geode には SDRAM が直結できるのです。普通の Pentium 互換 CPU って、 どうなのかなあ? かなり基本的なことのような気がしますが、私は実は知りません。 恥ずかしい...。ご存知の方はお教えください。(^^;
MPC-102 では、普通は 233MHz が 3.5分周されて、66MHz 程度が供給 されているようです。
MPC-101 についてはよくわかりません。すんません。たぶん、200MHz を 3.0分周して、同じく 66MHz 程度が供給されているのだと思います。
MPC-103 はどうもちょっと速いようで、300MHz を 4.0分周して、75MHz 程度 が供給されているようです。
この分周比を設定するのが、"fivaClkup" の仕事ということになります。
うーん。いわゆる「FSB」って、Geode の場合にはドコのクロックに 相当するんでしょうねえ? 私は、SDRAM CLK と同義といってしまって いいのではないのかなあ? と思うのですが、間違っている?
SDRAM CLK は、"fivaClkup" を使って 88MHz で動かすことができています。 266MHz/3.0 です。SDRAM CLK を FSB といっていいのならば、FSB 88MHz という ことになります。FSB 88MHz っていうと、ちょっと聞こえがいいんじゃない? そうでもないか?
で、"fivaClkup" の使い方です。 複数の動作報告をいただいており、大きな問題はないと思いますが、 実行は自己責任でお願いいたします。
"fivaClkup" は、Windows2000, Windows98SE 上での動作を確認しています。 Windows2000 上では、administrator 権限が必要です。
柏野さんの PCIDBG.DLL が必要です。次のリンクからどうぞ。
"fivaClkup" 本体は次から。
pcidbg95.vxd, pcidbgnt.sys, pcidebug.dll などを、fivaClkup.exe と同じディレクトリか、\windows\system (など) に置いておいてください。
"fivaClkup" は、Windows98SE 上では MS-DOS プロンプト、Windows2000 上では コマンドプロンプトから実行します。引数で、動作を指定します。
"fivaClkup" が受け付けるオプションを、以下に説明します。
option mnemonic(?) 意味 SDRAM CLOCK -cn 'normal' MPC102 default 分周比 233/3.5→66.7MHz -cb 'bit' ちょっとだけ速く 233/3.0→77.7MHz -cm 'medium' 中庸に速く 233/2.5→93.2MHz -ch 'high' 速く (でも私の環境では動きませぬ) 233/2.0→117MHz
option mnemonic(?) 意味 -ff 'fast' 速い -fn 'normal' MPC102 default setting
-ff で、浮動小数点演算が 5% くらい速くなるみたいだよ。つつましいなあ。
option 意味 -a addr 2add -sxx xx は 10, 15, 20, 25
速い方向へ向かっての設定変更 (-cb の後に -cm とか) は うまく動きがちなのですが、 遅い方向へ向かってのソレ (-cm の後に -cb とか) は、 高い確率で失敗します。 「失敗」というのは、私の環境ではハングアップします。原因は不明です。
わかんないですが、自分自身が RAM 上で動いているのに、その RAM 制御のための設定を 変えてしまうというのは、まあ野蛮なことではありますわね。たぶんそんな関係で駄目なんじゃ ないかなあ、と考えていますが、だったらなんで速い方向には大丈夫なんだろう。 やっぱりわかりません。
DRAM は、記憶を保持するために、ある規定された時間内に「リフレッシュ」 という操作を行ってやる必要があります。これをしないと、保持されている内容を 忘れてしまいます。
リフレッシュ間隔は、デバイスによってまちまちです。でもまあありがちな 値というのがあるようです。「ありがちな値」は、 SDRAM の容量に依存していて、だいたい次のようになっているようです。
128Mbit 256Mbit 15.6μsec 7.8μsec
「SDRAM の容量に依存していて」というのは、厳密には違うかもしれません。 SDRAM の内部構成によるのだと思います。でもまあ容量と見てもいいのかなあ? 正確な値は、お使いの SOIMM に乗っている SDRAM のデータシートから 調べ出す必要があるでしょう。
MPC-102 では、default では 15.6μsec 間隔になっているようです。 これでは、256Mbit SDRAM を使うには、間隔が長すぎます。
"fivaClkup" の -r オプションを使うことにより、この間隔を設定することができます。
-r の後に 16進数で値を指定できます。これを xyz とします。
リフレッシュ間隔 ref は、次により求められます。
ref = (CPU CORE CLK PERIOD) * 64 * xyz
CPU CORE CLK PERIOD は、CPU コアクロックの周期です。 周波数の逆数ですね。
MPC-102 に 256Mbit SDRAM を使用する場合には、0x1C を指定してみると,,,
ref = 1 / 233MHz * 64 * 0x1C = 7.7μsec
となります。7.8μsec よりも短い時間間隔にする必要があるので、
fivaclkup -r1c
という感じで "fivaClkup" を実行する必要があります。266MHz ならば -r20 ですし、 300MHz ならば -r24 となります。
リフレッシュ間隔が多少長くても、実力で動いてしまってとくに問題にならない こともあるかもしれません。私の場合も、256Mbit SDRAM を使い始めたときには、 特にリフレッシュ間隔を変更しなくても問題なく動いていました。
しかし、何がきっかけかはよくわかりませんが、Windows の動作が不安定に なりました。その後、-r20 を指定するようにしていますが、-r20 では 安定動作しているように見えています。
本当は、BIOS 起動時 (という表現もちょっと変だけど)、SDRAM を
使う前に設定すべきものです。しかしそれはできないので、しょうがないですが、
Windows が起動してから "fivaClkup" で設定する、ということになります。