正誤表
「致命傷」というべきバグは以下の通りです。
すいません。
パルテノン/SFLのインストールについては、
テキスト中のp.5のhtmlからだと現在アクセスが
できなくなっております。こちらからどうぞ。
NTT PARTHENON
のページ をご覧下さい。
3章p.29の例題3.1の解説がおかしいです。
「最初のコマンド(000)でA入力(101)が直接スルーされてaccにセットされる。
次のコマンド(110)で、セットされたaccのデータとA入力が加算され…」とありますが、
「最初のコマンド(001)でB入力(101)が直接スルーされてaccにセットされる。
次のコマンド(110)で、セットされたaccのデータとB入力が加算され…」の
誤りです。
3章p.34 図3.2, p.37 図3.3で、aluの出力がMemoryのdiに繋がれていますが、これは誤りで、
本来、accの出力であるaccoutを接続する必要があります。また、ここでadrと書いて
あるのは、addrの誤りです。
3章p.39の下から9行目の、hold enableはhold rstが正しいです。
3章p.40の上から3行目、ST命令によって格納されるのが、3番地と
書いてありますが、10番地が正しいです。
4章の表4.3(p.50)および表4.4 (p.51) NOT命令のdが抜けています。
NOT d,sと表記するのが正しいです。
4章の表4.3(p.50),表4.4 (p.51), 表5.6 (p.81)で、Add, Subの英語解説部のsとdの位置が
逆です。
4章の表4.6(p.54)のLD rd,-(rs)の解説が、「プリポストデクリメント付き」に
なっていますが、正しくは、「プリデクリメント付き」です。
4章の表4.7(p.55)のXORI 命令がなぜかOR Immediateになっていますが、
これはEx-Or immediateの誤りです。
4章のp.58のmem20の実行結果がおかしいです。
01 23 45 67 46 8a uu uuではなく、01 23 45 68 46 8b uu uuです。
p.60の図4.3でpcからaddressに到る線が描かれていないですが、命令
フェッチ時に直接アクセスするため必要です。
p.64のSFL記述の17行目、
「 addr2 == 0b111:」
は、
「 addr1 == 0b111: 」です。書き込みは全てaddr1から行われます。
5章の表5.1, 表5.2, 表5.3, 表5.5: pc <- pc-2+X と書いてありますが、
pc<-(現在実行の命令番地)+2+X(あるいは、pc+X)の間違いです。
p.75の3行目も(現在実行の命令の番地)+2(pc+2)の間違いです。つまり、
pcはIFの所で先に進めてしまっているので、現在実行の命令の番地+2が
基準になります。
5章のp.73 3行目 「IFステージで既に+2している」とありますが、
「RFステージで既に+2している」の誤りです。ちなみにパイプライン化した
後は、IFステージで+2するようになります。
5章のp.74 12行目 BPLのsfl記述の条件設定が間違っています。
^reg<15>: pc := dbus; が正しいです(今のままだとBMIと同じです)。
ちなみに、この実装だとレジスタの値0でも分岐します。プラスなんだから
0では分岐しない方が良い、と思う方はそれでもOKだと思います。
この場合、条件を変更して下さい。
5章のp.81 表5.6にANDIが上位は1にすると書いてありますが、ここでの実装では、
論理演算は全て、上位8bitは0になるようにしています。ANDIの場合、
どちらにするか迷う所ですが、とにかく実装と一致しないので
この記述は間違っています。
p.86の24行目付近、
「たデータをdregに格納する。そしてselが0でreadされた場合は、
格納されたデータ自体を出力し、selが1でreadした場合は」
は、
「たデータをdregに格納する。そして
selが1で readされた場合は、
格納されたデータ自体を出力し、 selが0
でreadした場合は」です。0の方がFlag, 1がdataです。
8.1.1の図8.1(p.105)ですが、オンチップキャッシュ、オンボードキャッシュ、
メインメモリのアクセスクロック数に-が抜けて不自然な値になっています。本当は、
オンチップは1-5 clock, オンボードは5-50 clock, メインメモリは10-100 clockと
とするつもりでした。
もちろん、この数値は目安に過ぎません。
p.120の8.3.5 キャッシュの性能評価について問題があります。この部分は、間違い
ではないのですが、残念ながらここまで設計してきたキャッシュはこの式にあて
はまりません。これはキャッシュがWrite ミスするとCWWAIT状態に遷移し、直後の
命令フェッチのReadヒットが受け付けられなくためです。つまり、このテキストで
設計したキャッシュは全てのWriteでペナルティを食ってしまい、PWM=1となります。
この設計を修正するには、メインメモリ制御部を分離する必要があり、かなり
面倒になります。
p.145のrfステージ中でelse: fregb = REG.dcout2; }は
else: reg_b := REG.dcout2; }の誤りです。
p.146の下から7行目 パイプラインに投入されてしまう(clock: 11)と
ありますが、これは(clock: 7)が正しいです。
p.166の9行目
BPLの条件がreg1<15>になっているが^reg1<15>の間違い
あとは、ちょっとした問題点です。
表紙折り返しPARTHNONになっていますが、PARTHENONの間違いです。
p.13の下から8行目、「add4.sflにというファイル…」という文がありますが、
「に」を取って下さい。
p.37の図3.3のadrはaddrが適切です。
p.46 2行目「ポインタが使えばない」は「ポインタが使えない」です。
4章の表4.3(p.50)、表4.4(p.51)などの命令の表記中にカンマ(,)があったり
なかったりして不統一です。付ける方向に統一しようと思います。
p.49 下から2行目:R0-R7 なぜかここだけ大文字になっていて変
p.54の2行目
「 LD r1, (r2,r3)と記述とr2+r3で示す」
は、
「 LD r1, (r2,r3)と記述するとr2+r3で示す」です。
p.55 図4.4 : bit順を示す番号がa)は6、b)は1,9が入っていてなんだか
不規則
p.59 R0-R7,IR,MAR,MDRが、ここもなぜか大文字になっています。一応、命令の
オペコード、状態名は大文字、レジスタ等は小文字に統一したつもりでしたが、
目が行き届かなかった部分があるようです。p.81 表5.6のJALRもなぜかここだけ
R7が大文字になっていますが、これも小文字にした方がよかったです。
p.86の下から3行目のプログラムのコメント,p.88プログラムの下から6行目、
p.93のプログラムの下から3行目が同様のミスで、
「# ST r5,(r3)」
は、
「# ST (r5),r3」 です。
p.88のプログラムは、0x30を引く前に、メモリに格納してしまっているので、
題意から考えてちょっと、不自然です(メモリに格納するデータに
関しては規定はないですが、、)。
SUBI r3,#0x30をLD命令の前に移動するのが良いと思います。
p.97の6行目
「して用いることにより、最適化を結果を」
は、
「して用いることにより、最適化の結果を」
p.100の下から8行目
「が判断することが難しい」
は、
「か判断することが難しい」
p.102の下から2行目
「往々にしてCPU、クロック周期を」
は、
「往々にしてCPI、クロック周期を」
p.202の表で左bitシフトの行がだぶっている。
p.106の下から11行目
「リフレッシュ操作が必要が必要で」
は、
「リフレッシュ操作が必要で」
p.108の下から6行目
「 この方法では、キャッシュ中の格納される」
は、
「 この方法では、キャッシュ中に格納される」
p.113の図8.5中の
cmemok の点線はPICO向きの矢印に、cpuwdとcpuadr の位置が逆
p.116の16行目tadr は、tagの間違い
p.117の14行目
「cmemokをtmweを出力する」
は、
「cmemokとtmweを出力する」
p.120の15行目
「コンフリクミスが生じ、」
は、
「コンフリクトミスが生じ、」
p.129の図9.2
ddatainとddataoutの位置が逆。
p.139の図9.7、p.151の図9.12、右側のddataoutも同じ。
p.137の13行目
「instruct en par { alt{ 」
は、
「instruct enable par { alt{ 」
p.145の3行目
「読んでが0かどうか」
は、
「読んで0かどうか」
p.205のLB d (s)の解説
「sで示す中身dの下位8bitに格納」
は、
「sで示す中身をdの下位8bitに格納」
ここに掲載されていない間違いを発見された方は、こちらまでメールをお願い致し
ます。
畠山剛さま、河野賢一さま、田中 旭さま、吉見 真聡さま、
松谷 宏紀さま、枚田優人さま、松澤 拓人さま、
ご指摘いただきありがとうございました。
戻る
天野 英晴
Last modified: Tue Jul 14 14:35:50 JST 1998