Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

ビット・アクセス命令の動作と割込みとの競合について

いつもお世話になっております。

72855を採用しております。

FAQ1004533にて、V850ファミリの動作について記載がありましたが

SH7280シリーズについて同様の確認をしたく問合せさせて頂きます。

ビット・アクセス命令はリード・モディファイ・ライトの動作となるのでしょうか?

また、その実行処理中に割込みは入るのでしょうか?

  • リード・モディファイ・ライトに関しては、ソフトとCPU内部と分けて考えた方が良いです。
    一般論になりますが、ビット・アクセス命令はアセンブラで1命令です。ソフトから見ると割り込みが入るのはその命令の前か後しかありません。ソフトからはアトミック(不可分)なビット操作ができます。
    ただ、CPU内部では、リード・モディファイ・ライト相当のマイクロコードに展開されるかもしれませんが、ソフトからはアトミック操作に見えるように設計されているはずです。
    ソフトから見たリード・モディファイ・ライトとは、ロード・演算・ストアのように複数命令に展開される動作となります。この場合、間に割り込みが入ると意図した動作にならない危険が潜んでいる事になります。
  • わわいです
    あなたのいうビットアクセス命令というものを使ったコードをコンパイルして、アセンブルコードを出してみて確認されてはどうでしょう
    コンパイラのオプションでアセンブルコード出力させれます
  • tk_naraさん、こんにちは。NoMaYと申します。

    ちょっと気になったのですが、随分古い(つい最近新規採用されたとは考え難い)マイコンだと思うのですが、今、これが話題になった理由は何でしょうか?もしかして、既存開発ソフトウェアへの機能追加時のCMMIなりISO9001なりのソースコードレビューで(旧V850ユーザから?)「確認しておくこと」と指摘されてのことだったりしますか?(もしそうだとすると、かふぇルネでは「証拠能力」がちょっと弱いかな、と思ったのです。もちろん、ルネサス社から回答が無かったので「次善の策」でということならば良い(というか止むを得ない)のですが、、、)

  • tk_naraさん
    リード・モディファイ・ライトが気になるような微妙な状況がありますか?
    SHのコーディングでは分岐等に特別の注意が必要で、そう簡単に途中で割り込みを挟むのでしょうか?
    関係者でないので内部の詳しいことは分かりませんが、そこら辺りはコンパイラーが最適化なりして
    問題なきようにしているのではないでしょうか、詳しく調べて解決したいというのも、どうかと思います。

    とても興味はございます。

  • Tk_naraさん
    SHのビットアクセス(リードモディファイライト)はGBR間接アドレッシングなのでバスをつかんだまま直接メモリアクセスするので割り込みは入りません。
    アルゴリズムで演算が条件判断などにより複数命令に分割されている場合は、割り込み内で変更した値が、割り込み復帰時に割り込み直前の値に戻ることはあると思います。
    その場合は自分で get_imask()/set_imask() で所望の処理を括らないと意図しない結果になるかと思います。

  • tk_naraさん、こんにちは。NoMaYです。

    ちなみに、RXマイコンのソフトウェアマニュアルでは、以下の表で、割り込み受付タイミングが命令実行中の命令にビット操作命令が含まれていない、ことをエビデンスとすることが出来そうですが、SH-2AのソフトウェアマニュアルにもSH7280のハードウェアマニュアルにもそのような表は無いのですよね。

    RXファミリ RXv2命令セットアーキテクチャ ユーザーズマニュアル ソフトウェア編 より抜粋
    www.renesas.com/jp/ja/search/keyword-search.html#q=r01us0071
    r01us0071jj0100_rxv2sm.pdf


    SH-2A、SH2A-FPU ユーザーズマニュアル ソフトウェア編 より抜粋
    www.renesas.com/jp/ja/search/keyword-search.html#q=r01us0031
    r01us0031jj_sh-2a.pdf


    SH7280グループ、SH7243グループ ユーザーズマニュアル ハードウェア編 より抜粋
    www.renesas.com/jp/ja/search/keyword-search.html#q=r01uh0229
    r01uh0229jj_sh7280.pdf


    [リンク]

    FAQ 1004533 : ビット・アクセス命令はリード・モディファイ・ライトの動作となるのでしょうか? またその実行処理中に割り込みは入るのでしょうか? (注) V850ファミリのFAQです
    ja.na4.teamsupport.com/knowledgeBase/17795568

  • In reply to NoMaY:

    NoMaYさん

    そもそも、ビット命令(リードモディファイライト)は割り込みによってリードとライトが分離しないようにするためのものなので
    自明の事としてあえてUMなどには割り込み入りませんと書いていないのかもしれませんね。

  • In reply to Kirin:

    Kirinさん、こんにちは。NoMaYです。

    > 割り込みによってリードとライトが分離しないようにするためのものなので自明の事として

    私もそうではないかと思います。このV850のFAQは、(パイプライン動作によってロード/ストア/演算などは)基本的には1命令=1クロックなのだけれども、そんな中でもビットアクセス命令は1クロックでは無いのですよ、というのを言わんが為のFAQなのかなぁ?という気もします、、、

    このFAQに出てくるV850/SA1やV850E/MS1は初期の製品で、ハードウェアマニュアルのCopyright年から推測するに、1997年頃の製品のようです。(さすがにいつの製品だったかは覚えていないです。) ちなみに、SH-2Aが2006年のよう(en.wikipedia)なので、それよりずっと前の製品ですね。(ja.wikipediaによると、SH-2が1994年、SH2 DSPが1996年、なのですね。)

    [リンク]

    en.wikipedia.org/wiki/SuperH
    en.wikipedia.org/wiki/V850

    ja.wikipedia.org/wiki/SuperH
     

  • In reply to NoMaY:

    NoMaYさん
    いずれにしても、リードモディファイライトは読んで・書いての2クロック必要ですよねー。
    1クロックでリードモディファイライトに対応すると、
    トランジスタ数が膨大になるのでチップ屋さんとしてはやりたくない構成ですし。

    1命令(≠1クロック)でやるのに意義がある!ということで。

  • tk_naraさん、こんにちは。NoMaYです。

    必要な情報は得られましたでしょうか?

  • In reply to Kirin:

    Tk_naraさん

    SH-2A、SH2A-FPUユーザーズマニュアル ソフトウェア編にビットアクセス命令実行中は割り込みが入りませんと書いてありますね。

     

    (仮に命令実行中に割り込みが入って、実行中の命令を破棄されたとしてても、もう一度命令を先頭が実行するからリードしてビット操作してライトバックするだけなので問題なかったりしますけどねー。)

  • In reply to Kirin:

    Kirinさん、こんにちは。NoMaYです。

    今回は(汎用レジスタに対するものでは無くてメモリ/内蔵周辺機能レジスタに対するものでしょうから)、ビットアクセス命令(ビット操作命令)って、以下の命令のことになるのではないですか?

    BCLR.B #imm3,@(disp12,Rn)
    BSET.B #imm3,@(disp12,Rn)
    BST.B #imm3,@(disp12,Rn)

    でも、パイプライン動作は以下と同じですね。アドレッシングモードが違うのがミソですかね。

    AND.B #imm,@(R0,GBR)
    OR.B #imm,@(R0,GBR)

  • In reply to NoMaY:

    NoMaYさん
    そーかもしれません。
    コンパイラがどんなコードだすか分からないのですけれども、
    いずれにしてもビット操作はマルチサイクルなので問題なしですね^^

    ps
    最近NoMaYさんモデレータとしてあちこちのスレッドで大活躍ですね ♡

  • In reply to Kirin:

    Kirinさん、こんにちは。NoMaYです。

    命令レベルではKirinさんのリプライにあったマニュアルの部分でエビデンスが得られましたね。この後は、以下の最初のHigetakaさんのリプライに繋がって行きますね。そして、tk_naraさんは必要な情報が得られたかなぁ?と、、、


    ソフトから見たリード・モディファイ・ライトとは、ロード・演算・ストアのように複数命令に展開される動作となります。この場合、間に割り込みが入ると意図した動作にならない危険が潜んでいる事になります。


    [追記]

    それから、以下のKirinさんのリプライへも繋がって行きますね、です。


    アルゴリズムで演算が条件判断になどにより複数命令に分割されている場合は、割り込み内で変更した値が、割り込み復帰時に割り込み直前の値に戻ることはあると思います。
    その場合は自分で get_imask()/set_imask() で所望の処理を括らないと意図しない結果になるかと思います。

  • In reply to Kirin:

    割込失礼します。(割込の話題だけに…)
    Kirinさん最初の書込の「GBR間接アドレッシングでバスを掴んだまま」という記述がずっと引っかかっていたのですが、SH2-Aにはメモリに対する論理演算なんてRISCにあるまじき命令があるのか!
    初めて知りました。まさにルネサスの組込屋としての意地を感じますね。

    よく考えてみると、BSET・BCLRのサポート時点で命令単位のリードモディファイライトには対応してるので、あとは演算内容と即値が1bit/8bitの違いを追加するだけという風にも考えられますね。

    ※話題がズレますが、Cortex-M系ではbit-bandエイリアスというこれまた変態機能でリードモディファイライトへの解決策が提供されてますね。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page