現在、R5F5651EDDFP30を使用してボードを作成しています。
環境条件は、次の通りです
クロック入力 16MHz
CS1領域 4ウェイト、8Bitのバス幅で使用
下記のアセンブラで命令が並んで実行させた場合は、どういったウド気になるのでしょうか
mov.w R6,FDCMDBUF+DATASIZE[R12] ; CS1領域アクセス bclr #BUFMODE:3,P_P1DR[R9] ; P15をLOW出力
この場合、CS1領域を出力中にP15がLOWレベルになることは、あるのでしょうか?
NOP命令を挿入すれば良いと思います。
RX 系はハーバードアーキテクチャかつ各種バスは独自配線があり、異バスアクセスは同時動作するという構成なので
- 前者 MOV が外部データバスにアクセス中 (パイプラインステージ呼称 M1/M2) であっても
- 既に後者の BCLR は命令バスから IF ID EX 済み
- アクセス先バスが 外部アドレスバスと内蔵周辺回路で異なるので同時進行することが可能
- 前者 CS1 領域 4WAIT ってことは M1 ステージに 5 BCLK * 2回かかる
- 後者 PORT1.PODR のアクセスサイクルは 2 PCLKB (=4 ICLK) * 2回
- ということは普通に後者の命令が先に終了する (Out-of-Order 動作)
ってことで、おおいにありうるでしょう。あるとまずいのか、あると嬉しいのか、元発言に書いてないのでここまで。
ありがとうございます。
プログラムの処理的には、命令順で動作させたいと思っていますのでまずいです
そのため、ウェイトの投入で対応したいと思います
NOP 1個では不足すると思われます。では何個必要か、となるとパイプライン動作とバスクロック数と両者についてきっちり理解しておかないといけないです(結構難しい)絶対確実に OoO を禁止するには Renesas の出している手順に従う必要がありそう。かといって下手な書き方すると超絶遅くなる可能性があって難しいところです。
実際の命令については、[R12]の命令でウェイトがはいいているため、
実際の波形を確認してウエイト時間をコントロールしたいと思います。
ありがとうございます