Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

STM8S Discoveryその2

今週は、海外から外人が来ていて、彼らをつれてお客さん廻りで東へ西へと忙しいです。信じられないこととかも起きて「こいつらいつか殺してやる」と思ったりして、いい感じに珍道中になっています。


それはともかく、STM8S Discoveryの続きです。

 

プログラミングマニュアル(インストラクションセット)PM0044はここ
http://www.st.com/stonline/products/literature/pm/13590.pdf
にドキュメントがあります。ざっと眺めてみると、結構速い。アドレッシングモードは豊富。

72h,90h,91h,92hで始まる命令は(多くの場合)アドレッシングモードの変更のプレフィックスになっている。Z-80みたい。コードのコンパクションにはあまり向かない感じです。
ほとんどの命令は1クロックで実行できるけど間接アドレッシングを使うと4クロック程度まで落ちる。データバスが8ビットだから、仕方ないか。
ハーバードアーキテクチャで、インストラクションバスの幅は32ビット、命令長は最大5バイトなので、命令のコンパクションをするより、インストラクションバスのバンド幅を大きくし、相対的に大き目のコードメモリを積めばよい、という考え方のようです。

最大命令長が5バイトなので、8バイト分(2回分)を先読みすると考えると、分岐命令の際は2クロック分余計かかるのが、ストールサイクルになっているのでしょう。1クロック余計でもいいような気がするけど、なんでだろう。

乗除算命令がある。除算は可変サイクルで最大サイクル数が17と長いけど、実行中に割り込みを受け付けることができるので、大体アルゴリズムの想像はつくな・・・。
メモリーtoメモリーのMOV命令が1サイクルで実行できるということは、データメモリはR/Wで別にアドレッシングできるということかな(ゴージャス)

 あー、違うみたい。3ステージのパイプラインかな。1ステージ目は命令のデコードとインデックスまでのアドレス計算、2ステージ目で、データメモリのフェッチ、3ステージ目でデータメモリの書き込みをやるんじゃないかな…
分岐命令がいわゆるディレイドブランチになってないから、分岐の実施も3ステージ目になっているんじゃなかろうか?だとすると、分岐命令が3クロックなのも納得がいくような気がする。

1サイクルで実行できても不思議ない、インデックスレジスタをいじる命令も、2サイクルになっているのは、(次の命令の)2ステージ目に結果を反映させるため、1サイクル分はストールと考えるとだいたい納得がいく。

なかなか、面白い。ISSでも作ってみようかな… 



コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/752-6ea0e077
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。