• ベストアンサー

メインクロック

すみません、V850について質問です。 1.WDT機能でカウンタにメインクロックを使用しているため 信頼性が低いとあるのですが、なぜでしょうか。 2.ADD命令にIF,ID,EX,DF,MEM(T1,T2),WBとありますが   それぞれどのような意味でしょうか. 特にDFが知りたいです。 3.レジスタが16ではなく32ビットが主流なのは   なぜでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.3

>V850は外部から供給するクロックや電圧を、CKCレジスタを変更することで動作時と待機時で動的に変化させることが可能なので、信頼性が低いということでしょうか。  単純なループ処理(カウンタの回数だけ回すような)の場合は、当然クロックの変化を気にせず処理がされる為、当初期待していた時間の「待ち」がされないから当然そうならざるを得ないと思いますが。  レジスタを弄ってクロックダウンするのであれば、プログラム側はそのタイミングを知っている筈です。  という事は、やる気になればそのタイミングでループ処理に外部から干渉してやれば、クロックダウンされることを前提としたループ処理を事前に組んでおけば対処も不可能でないような気がします。  若しくはループ処理の中で、今どちらのモードでMPUが動いているのかをチェックしながらループ処理するという方法で、です。  (CKCレジスタが読み込み可のレジスタである事が前提になるが)

その他の回答 (2)

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.2

>1.WDT機能でカウンタにメインクロックを使用しているため >信頼性が低いとあるのですが、なぜでしょうか。  MPU自体には Speedstep や Coolin'Quiet のような機能は無いようだが、もしも外部から供給するクロックや電圧を動作時と待機時で動的に切り替えているなら、WDT機能は動作時のクロックを前提にしているのでそうならざるを得ないという事ではないかと。 #動作電圧が3.5V~5.5Vになっている事とか以下のURLの情報から、多分そういうことではないかと推測  【サブクロックから通常クロックへの切り替え時間について】   http://www.necel.com/ja/faq/mi800/__v85clock.html#0001  【消費電力低減のためにクロックを動的に変更したい】   http://www.necel.com/ja/faq/mi800/__v85clock.html#0010

masa_ki
質問者

補足

ご回答ありがとうございます。 再度質問させてください。 V850は外部から供給するクロックや電圧を、CKCレジスタを変更することで動作時と待機時で動的に変化させることが可能なので、信頼性が低いということでしょうか。

  • jx-word
  • ベストアンサー率40% (38/94)
回答No.1

V850と一言で言っても、バリエーションが多くてなんとも・・・・ 1. どこにその記載があるのでしょうか? 一般的にCPU単体で見た限り、クロックソースによる信頼性の差はありません。 2. IF - インストラクション・フェッチ ID - インストラクション・デコード EX - エグゼキューション DF - データ・フェッチ MEM - メモリアクセス WB - ライトバック 3. V850が32ビットアーキテクチャだからです。 とりあえず、該当CPUのユーザーズマニュアルとアーキテクチャマニュアルを読むことをお薦めします。

関連するQ&A

  • 情報処理概論

    今情報処理概論という勉強をしています。教科書をよんでもわからないので2つ質問です。 1.プログラムカウンタと命令レジスタ  例えばプログラムカウンタが”2256040”であるとき、次のフェッチサイクルではこの番地からはじまる命令が命令レジスタに移され移された命令が4バイト命令であれば、プログラムカウンタには4が加えられる。、と教科書に書いてあるのですがチンプンカンプンです。誰かわかりやすいように説明していただけますか? 2.演算装置について  例えば”01001010 11001101”と表記されている命令は、あるコンピュータでは”1010 11001101”にある16ビット符号付整数を演算装置のレジスタ(アキュムレーター)の内容に加え、その結果(和)をアキュムレーターにセットすることを意味する。、と教科書に書いてあります。まったく意味不明なので誰かわかりやすく説明できる人回答お願いします。 ながくなりましてすいません。よろしくお願いします。

  • アセンブラで割り算

    アセンブラ記述で割り算を実現させたいのですがよくわかりません。 下記条件でどのように実現すればよいでしょうか。 ・8ビット÷4ビット ・命令セットは  LDL, LDH, MOV, ADD, SUB, SRA, SR, SL, AND, OR, JE, JMP, CMP, LD, ST, HLT ・レジスタは16ビット ・レジスタは8個 です。 「被除数の上位4ビットと除数を比較して商を求めて、余りに被除数の次ビットを連接する」 の繰り返しでできると思っているのですが、アセンブラ表記がわかりません。 よろしくお願いします。

  • 複数バイト命令実行のタイミング

    1バイト単位でメモリの各アドレスにデータが保存されているコンピューターにおいて、複数のバイトで表される命令がどのように実行されるのか教えて下さい。 メモリには一つのアドレスごとに8ビット(1バイト)のデータが入っており、CPUはプログラムカウンタで示されたメモリ上のアドレスにあるデータや命令を一つずつ順番に読み込んで、それをデコーダーが解釈し各回路への指令に変換することでプログラムを実行していくということは理解しています。 しかし現在の32ビットコンピューターなどにおいてアセンブリの命令、例えば「MOV A,B」(Bレジスタの内容をAレジスタにコピーする)といった命令は、「B90001」などの3バイトのマシン語で表されるとすると、メモリ上では アドレス  内容 0000  0xB9 0001  0x00 0002  0x01 のように3つの連続するアドレスにまたがってデータが存在し、CPUが「MOV A,B」を読み込み、それを順次デコーダーに送るまでには「MOV」、「A」、「B」の3クロックを要すると思います。 その際、デコーダーが命令を解釈し各回路に指令の信号を送るタイミングというのは、最後の「B」のデータを読み込んだ時点になるのでしょうか?もしそうならば、3クロック目に最後の「B」のデータがデコーダーに到着するまでの間、「MOV」と「A」のデータというのはCPUにメモリから読み込まれた後はどのように扱われるのでしょうか? 少し質問が分かりにくく恐縮ですが、情報工学を独学で勉強しており、プログラムが実際の回路でどのように実行されるのか理解したいと思っています。 どうぞご回答よろしくお願い致します。

  • 命令

    lw r1,0(r4) 上記のような命令を実行したとします。レジスタ群r4には32ビット00000000000000000000000000100100が入っています。これは10進数にすると36なので0(r4)=0+36=36になります。 そしてメインメモリのアドレス36番地には10000001111111111111111111111111が入っていてこれをレジスタ群r1に移動します。 けれどもレジスタ群r1には00000000000000000000000000011000が最初から入っています。 ここで質問なんですがこの場合アドレス36番地の値と最初から入っていたレジスタ群r1の値は足さなければならないのですか? それともアドレス36番地の値をそのままレジスタ群r1につっこんでもいいのでしょうか?

  • アセンブリ言語の問題です。

    長い内容になっていますがご了承ください 演算命令の動作 以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,8 addi $s1,$zero,8 addi $s2,$zero,3 addi $s3,$zero,11 add $t0,$s0,$s1 add $t1,$s2,$s3 sub $v0,$t 論理演算命令の動作 以下のプログラム実行後のレジスタ$v0の値を書け,16進の数値には0xをつけること 問題0: addi $s0,$zero,0x8 addi $s1,$zero,0x8 addi $s2,$zero,0xd addi $s3,$zero,0x2 and $t0,$s0,$s1 and $t1,$s2,$s3 or $v0,$t0,$t1 以上です。この問題が分かる方がいましたら回答お願いします。

  • パイプライン制御(ハザード検出の仕組み)

    最近独学で計算機アーキテクチャーについて勉強しております。 本を読んでいたらパイプラインのところで「データハザードはパイプライン・インターロックというハードウェアで検出される」という記述があったのですが、これについてもう少し詳しく知りたいです。 具体的には、例えば以下のような命令列があった場合、 i1: ADD R4=R1+R2 i2: ADD R5=R4+R3 データハザードの検出により、(バイパスがなければ)以下のようにストール(ST)が挿入されます。 i1: ADD R4=R1+R2 IF ID EX MA WB i2: ADD R5=R4+R3   IF ST ST ST ID EX MA WB この「データハザードの検出(テスト)」というのはどのようなタイミングで行われるのでしょうか? (a)1回テストして検出された場合すぐに上のような対処(STを3つ挿入)が行われるのでしょうか? それとも (b)1回テストして検出された場合、STが1つ挿入される。再度テストしてまた検出された場合、STがもう1つ挿入される... という具合にして正しい対処にたどりつくのでしょうか? あるいは (c)他の仕組みによるのでしょうか? どうぞよろしくお願いいたします。

  • バイナリ指定で複数レジスタを順次リセットするラダ…

    バイナリ指定で複数レジスタを順次リセットするラダーシーケンス ラダー(シーケンス)回路の組み方を教えてください。 入力が1点:リセットPB 出力が4点:リセット入力 :レジスタ#1 :レジスタ#2 :レジスタ#3 出力先(相手機器)は7ヶのレジスタを持っており レジスタ#1~レジスタ#3の 3ビットでレジスタを指定し同時に リセット入力 をonすることによって所定のレジスタがリセットされます。 1回 リセットPB を押すだけで複数のレジスタをリセットする回路を作らなければいけません。話しを簡単にするために7ヶすべてのレジスタを1プッシュでリセットする回路と考えてけっこうです。 順次指定を変えてリセットを繰り返す方法がわかりません。 失礼しました。入力がもう1点 リセット確認:RSTACKがありました, レジスタは1ビットと考えてください。 入力: XO:PB押しボタン X1:RSTACK 出力: Y0:RST Y1:#1(2-0) Y2:#2(2-1) Y3:#3(2-2) 途中まで考えてみましたが M2~M7 をたてる方法がわかりません。 RSTACKは1個のレジスタをリセットするごとに1パルス同一信号が返ってきます。 X0 --||----------[PLS M0] X1 --|/|---------(M99) | M0 M99 --||--+--|/|---(M1) M1 | --||--+ M1 --||-----------(Y0) M2 | --||--+ M3 | --||--+ M4 | --||--+ Mn | --||--+ ** M5~M7 すべてパラ M1 --||--+--------(Y1) M3 | --||--+ M5 | --||--+ M7 | --||--+ M2 --||--+--------(Y2) M3 | --||--+ M5 | --||--+ M7 | --||--+ M4 --||--+--------(Y3) M5 | --||--+ M7 | --||--+ レジスタとの表現が誤解を招きました。外部機器(カウンタ)です。 カウンタを255ヶ持っており。そのカウントのリセットのための入力が,リセット信号:1ビット,カウンタ指定信号:8ビットです。リセット完了応答が"RSTACK"1ビットです。 PLC側はmov命令他たいていのコマンドは使えます。ラダー表記の他にニモニックでもプログラムできますがラダーの方が解釈しやすいです。 タイミングパルスとカウンタを使う等して順次作動する回路は作れそうな気がしますがいかにも複雑です。もっと単純スマートな方法がありそうな気がします。 "PB"入力を保持して, ラダー図上段から1かたまり(1段)ずつ作動し(2回以上作動しない), 最下段が作動完了で保持を解除でよいと思うのですが。 応答が"RSTACK"1本なので・・?。 1段目は"RSTACK"でリセットするとして, 2段目は PB(M0)and"RSTACK(a)" でonしてよいか,保持offを"RSTACK(b)"でよいか(a),(b)が同ブロックに存在? 最終段リセット完了(M99)はどうやって作るか?

  • PIC12F675 ウォッチドッグタイマーの使い方

    最近趣味でPICアセンブラを初めた者です。 WDTの実験をするため以下のプログラムでリセットのかかるまでの時間を比べてみました。 私の考え違いかもしれませんが、WDTポストスケーラの値によってリセットするまでの時間は違うと思ったからです。 675のGP0~GP3の入力をOPTION_REG のbit0~bit3に割り当てました。 GP3はHに固定してあるのでOPTION_REG bit3(PSA)は常にHです。 プログラムは一秒間のLED点灯後消灯し、WDTリセットのかかるまでループします。 WDTリセットからのリスタートはLEDを点滅後、同じことを繰り返します。 このときGP0~GP2の端子を切り替えることにより、OPTION_REGのWDT分周比を変え、 LED消灯後、リスタートし、点滅するまでの時間が変わると思ったのですが、変化しません。 正確な時間はわかりませんが、GP0~GP2を変えても、リスタートまでの時間は三秒程度一定です。 OPTION_REGのbit0~bit2がすべて立ってるのではと思われるのですが、 私のWDTの設定に対する考え方が間違ってるのか、テスト用のプログラムにミスがあるのかわかりません。 お暇な時で結構ですので、お教えくださるよう、どうぞよろしくお願いいたします。 title WDT list p=12f675 #include <p12f675.inc> errorlevel -302 __CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT org 20h work RES 1 ; ワーク counter RES 1 ; 回数カウンター cnt10m RES 1 ; 10ms時間稼ぎ用ワーク cnt500u RES 1 org 0 goto start start bsf STATUS, RP0 ; レジスタバンク1を選択 call h'3ff' movwf OSCCAL ; 書き込む movlw b'00001111' ; GP0~GP3を入力設定 movwf TRISIO clrf ANSEL ; すべてデジタルI/O bcf OPTION_REG, NOT_GPPU ; プルアップ使用する bcf STATUS,RP0 ; バンクゼロ btfsc STATUS,NOT_TO goto start2 movlw d'5' ; LED 点滅回数を5回にして call led_on_off start2 bsf GPIO,GP5 ; 一秒間LEDを点灯し call tm1000 movf GPIO,w ; 入出力ピンを読んで b3は一番ピンに直結し常時 H andlw b'00001111' ; 下位4ビットだけ選び bsf STATUS,RP0 ; バンク 1 選択 iorwf OPTION_REG,f ; ウォッチドッグの分周比とする bcf STATUS,RP0 ; バンク 0 loop bcf GPIO,GP5 ; LED消灯し goto loop ; リセットがかかるまでループ ; LED を0.1秒ごとにWレジスタの回数点滅 led_on_off movwf work led_loop decfsz work goto led_loop2 return led_loop2 bsf GPIO,GP5 call tm100 bcf GPIO,GP5 call tm100 goto led_loop ;-------------- 1000ms,100ms 遅延ルーチン tm1000 movlw D'100' goto lp200 tm500 movlw D'50' goto lp200 tm100 movlw D'10' ;10ms遅延を10回で100ms lp200 movwf counter ;カウンターをセットし lp201 decfsz counter,f ;カウンターはゼロ ? goto lp202 ;いいや return lp202 call t10m goto lp201 ; 10msec 遅延ルーチン for 4Mz t10m movlw d'8' movwf cnt10m tm10lp1 movlw d'249' movwf cnt500u tm10lp2 clrwdt ; ウォッチドッグタイマーをクリア nop decfsz cnt500u,f goto tm10lp2 decfsz cnt10m,f goto tm10lp1 return END

  • 高性能パソコンを自作してみたんですが

    一昨日パソコンを自作してみようと思い買出しに行き作ってみたんですがOSを入れてすぐはいいんですが、ドライバを入れてみたり再起動を数回するとブルースクリーンが出てきて全く進まなくなります・・・ OSはXP64bit vista64bit vista32bitと10回ぐらいは色々入れてみたんですが結果は同じですぐにフリーズしたりブルースクリーンで動かなくなります スペックは CPU Core2 Quad 6700 グラボ ZOTAC GeForce8800 メモリ CORSAIR TWIN2X4096-8500C5DF (オーバークロック仕様らしいですがオーバークロックしていません) マザボ ASUS P5N-T Delux 電源は600Wです ハードディスクとDVDドライブはバルク品です ブルースクリーンのエラーメッセージは色々ありました Ox000000D1 0X000000F4 0X00000001 0X0000007e ここまでエラーが連発すると相性の問題なんですかね もうお手あげです・・・ 結構お金を掛けてとても出来るのを楽しみにしていたのですが 動かなくてとても焦っています どなたか力を貸してくれませんか

  • CPU振り切りっぱなしクでロック動きません、何がいけないのでしょうか?

    ガジェットにCPUとクロックの モニターが出るように設定していますが PCを立ち上げて、そのモニターをみると CPUは90%以上を常に使っている状態で クロックは0.80GHzを示したまままったく動かずです。 それがずっとです。 ガジェットのモニターはフリーのソフトです。 (CPU & MEM meter IIなるものです) 表示だけの問題かというとそうでもなく、 動作が遅くなってしまいます。 タスクマネージャーのパフォーマンスを見ても CPUは同じ様に90%以上と表示されています。 アプリケーションの表示では何も動いていない事も確認済みです。 この状況が常に起こるかというとそうでもなく、 たまになのですが、1回このような状況が起きると 何回再起動しても症状はかわりません ある時(次の日など)に起動すると通常に戻ります。 通常といっているのは 起動している当初は CPUは確かに高い数値ですが クロックも2.0を示したり1.2を示したりと 最終的に全ての準備が整うとCPUは10%前後を推移し クロックも0.8GHzでたまにポンっと上がるような感じです。 何か作業すればCPUもクロックもクッと上がり、 PC頑張って動いてくれてるなと感じる表示がされます。 どこかおかしいのでしょうか? ちなみに、今現在、上記状況でPC動かしてます・・・。 PC情報です  モデル  :Dell Inspiron  プロセッサ:インテル Core2 Duo T7300 2.0GHz  メモリ  :2.00 GB  システム :32ビット  OS    :WINDOWS VISTA