なぜマイクロコントローラーのデータパスは常に2の累乗幅なのですか?


8

マイクロコントローラーのデータパスは常に2の累乗幅です。4ビット、8、16、32ビットなど。12ビット幅の命令を使用するPICも8ビットコントローラーです。どうして?これにはデザイン上の利点はありますか?12ビットデータバスまたは7ビットコントローラの何が問題になっていますか?

編集
7ビットはあまり意味がありませんが、それが私に質問を考えさせたものです。その答えは、8ビットの伝統に言及しています。しかし、16ビットは8ビットではなく、24ビットは16ビットだけでなく8ビットのデータも処理できます。24ビットをスキップして32ビットに移行したのはなぜですか?


7
聖職者は危機に瀕して彼を焼きます!
ケニー

@ケニーうん、私も激怒しています!:-)
m.Alin

@ m.Alinホラー!あなたがそれを知る前に、人々はビットスライス設計に戻って、彼ら自身のアセンブラを書くでしょう。
ケニー

彼は古い5ビットコードテレタイプのみを使用して3年間の刑を宣告されるべきです(これらには、他の喜びの中でも、より多くの文字にアクセスするための「シフト」用の個別のコードがありました)。
Olin Lathrop

2
...それ自体は2の累乗なので、:-P
シモフリ2012

回答:


8

伝統には強い引きがある。しかし、相互運用性も同様です。ほとんどすべての既存のファイル形式と通信プロトコルはバイトで動作します。7ビットマイクロコントローラーでこれらをどのように処理しますか?

PICは、命令空間を完全に分離し、事前に外部からプログラムすることで、それを回避します。命令セットをビットシェービングすることにはいくつかの価値があります。それは、マイクロプロセッサの設計者として自分自身を制御するために得られる1つのことだからです。

極端なアーキテクチャが必要な場合は、命令セットをハフマンコーディングして、可変長のビットを与えることができます


7

4ビットの実用的な最小値:
0〜9数値データには4ビットの
0〜9 = 10ワードが必要です。
次に大きいバイナリワードサイズ= 4ビット= 16ワード。
したがって、BCDデータ(2進化10進数)= 4ビット

8ビット論理次ジャンプ
0-9、az、AZ = 10 + 26 + 26 = 62ワード。
7ビット= 128ワードで処理できます。
8は7と同じくらい簡単で、2 x 4ビットを許可するので、数値データを8ビットバイトごとに2つパックできます。

次に12ビット(16ではない)?:
次の論理サイズ= 12ビットで、初期の非常に成功したPDP-8は12ビットを使用しました。データとプログラムに使用される12ビットは、2 ^ 12 = 4096のアドレス位置を許可します。ビルゲイツ氏はかつて「4Kのメモリで誰でも十分だ」と言ったことがあるかもしれません。

次のPDP-11ファミリは16ビットを使用しました。

互換性のために倍増。
下位レベルと上位レベルのシステムを相互運用したい場合、および同じファミリでより多くの機能を持つデバイスを使用したい場合、大きなシステムワード内で小さなシステムの2ワードを処理できることは、理にかなっています。


だが

ルールを証明する例外:

「常に」というのはとても強い言葉です:-)以下の
1ビット、12ビット、18ビット、36ビットの例。
18ビットと36ビットのマシンは決してマイクロコントローラーではありませんでした。
1&12ビットのものでした。


下記の1ビットシステムは、実際には「ランダムビット」システムです。1ビットのデータワードは、基本的には計算によって生成されるgo / no-goフラグであり、プログラムアクティビティを有効または無効にするために使用されます。プログラムカウンターは、必要に応じてコードが有効または無効にされた状態でメモリを周期的に進むアップカウンターです。確かに非常に非常に厄介です。それが市場に登場する頃には、当時の8ビットプロセッサはかなり成熟しており、1ビットプロセッサはあまり意味がありませんでした。私はそれが今までどのくらいの使用を得たかわかりません。


1ビット!!!:

Motorola MC14500Bこのデバイスの最もよい説明について、Jack Gansellから名誉ある言及を受けました:-)

データシート-PDFダウンロードのページをクリックしてください。

ここに画像の説明を入力してください


12ビット:

ハリスHM-6100別名インターシルIM6100-12ビットミニコンピューターワナビー](http://www.classiccmp.org/dunfield/other/i6100cfs.pdf

大成功を収めたDEC PDP-8 12ビットミニコンピューターに基づいています。

概観

  • プログラムメモリとデータメモリは同じメモリ空間を占有します。直接アドレス可能なメモリの合計サイズは4 Kワードです。ワードサイズは12ビットです。6100にはスタックメモリがありません。

    プログラムのメモリサイズは4 Kワードです。すべての条件付き命令により、プロセッサは次の命令のみをスキップできます。特定の条件が満たされたときに条件付きでメモリ内の任意のアドレスに移動するには、コードが最初に「条件が満たされない場合はスキップ」命令を実行し、スキップ命令の後に直接または間接の無条件ジャンプ命令を配置する必要があります。無条件命令を使用して、現在のページ(127ワード)内で直接ジャンプしたり、メモリ空間全体(4 Kワード)内で間接的にジャンプしたりできます。6100はサブルーチン呼び出しをサポートしますが、スタックメモリが不足しているため、サブルーチンの戻りアドレスはメモリに保存されます。「サブルーチンから戻る」命令はありません。サブルーチンは間接ジャンプを使用して呼び出し元に戻る必要があります。

    データメモリサイズは4 Kワードです。データは、ゼロページ内(0000h-007Fh)または現在の127ワードページ内で直接アクセスできます。データは、4 Kワードのメモリ内のどこにでも間接的にアクセスできます。

ウィキペディア-Intersil 6100

PDP-8とIntersil 6100には16の非常に豊富な命令がありました。減算命令はありません。
ADD命令はTADDという名前で、2の補数の加算であることを思い出させるため、...減算命令は必要ありません。


18ビット、36ビットその他-PDPファミリ:

ウィキペディアプログラムデータプロセッサ

PDP1-18ビット

PDP2-24ビットが生まれて死亡

PDP3、PDP6-36ビット


PDP-12ユーザーハンドブック(暫定版 -すごい。
番号付けにもかかわらず、これはpre pre PDP16-アナログI / O機能を備えたステロイド上のPDP-8-およびエンジニアリングラボマシンです。必要に応じて無料で入手できましたが、賢明な、または無感覚な場所に取り付けられなかったでしょう。
私がこれまでプレイした最初のコンピューターゲームは、これらの1つでした。
宇宙戦争です。
機械は2つの小さな部屋のサイズのキャビネットにありました。
ドアを開けて中を歩くと内部。


24ビット製品版が必要な場合は、ATIのR300 / 420 GPU(9500-X600、およびX700-850カード)で十分です。
ダンはFirelightによっていじくります

1ビットマイクロのアイデアは興味深いようですが、実際にはMC14500Bのようなチップはどれほど便利でしたか?入力データを制御するプログラムアドレスビットを(ラッチと2:1マルチプレクサーを使用して)持つほうが、命令を使用して状態を管理するよりも効果的だと思います。そのパーツの1990年代のデータシートを見つけました。これはしばらくの間残っていることを示唆していますが、そのようなチップが実際にどのように使用されるのか知りたいです。
スーパーキャット2012

@supercat-ある設計者がMC14500Bをベースにした古いワイヤーラップディスクリートデザインを使用していたとの言及が1つ見つかりました。クライアントは数年かけてそれらをいくつか購入しました。とはいえ、より機能が低下して機能しないデバイスを想像するのは難しいでしょう。
ラッセルマクマホン

私は1970年代のデザイン心理学を実際に想像することはできませんが、スティーブウォズニアックのフロッピードライブコントローラー(Appleの機能] [)は、「コンピューター」を構築するためにそれほど個別のロジックを必要としないことを示しています。そのMC14500Bのマニュアルを見て、ディスクリートロジック(PROM以外)だけを使用してPROMからコードを実行するシステムを設計する方法を考えました。私のマシンの根本は、8ビットの透過ラッチ、8ビットのフリップフロップ、およびクワッドNAND、そしておそらくRC遅延(I / Oのセットアップ/ホールド要件に依存)だと思います。サイクルごとに1つの16ビット命令。
スーパーキャット2012

フリップフロップからの7ビットはPROMの上位アドレスビットを駆動し、下位ビットはクロックによって駆動されます。各サイクルの前半では、透過ラッチが上位6つの出力ビット(I / Oアドレス)をサンプリングし、デバイスはI / O読み取りを実行します。I / O入力は7番目のトランスペアレントラッチビットを駆動し、3つのNANDはラッチされた入力を使用してマルチプレクサとして機能し、PROMからQ0またはQ1を選択して残りのトランスペアレントラッチビットに供給します。各サイクルの後半で、ラッチされたアドレスとデータを使用してI / O書き込みを実行します。
スーパーキャット2012

7

世界のほとんどが、8ビットのチャンクでのコンピューターデータの格納、通信、およびその他の処理に集中しているためです。これは公式の標準ではありませんが、非常に強力なその場限りのものです。

過去には、データパスで8ビット以外の倍数を処理するマシンがありました。例としては、CDC Cyber​​ 6000および7000シリーズ、PDP-8などがあります。CDCマシンは6ビットのバイトを使用し、PDP-8は12ビット幅のワードを備えていて、8ビットの量を処理する特別な方法はありませんでした。もちろん、このカテゴリには他のマシンもありました。あなたが今日それらについてあまり聞いていない理由は、人々が彼らの8ビットバイトをうまく処理できるマシンを望んでいると決めたからです、そしてそれはメーカーが作るものです。7ビットマイクロコントローラーはどれくらい売れると思いますか。それを作った人はだれでもばかげて、それから少数の顧客を見つけるでしょう。それは愚かな事業命題になるでしょう。

インターネットの標準を見ると、8ビット以外の「バイト」の証拠がいくつかあります。彼らが意図的に「オクテット」という用語を使用しているのは、当時はバイトが常に8ビットであるという普遍的な合意がなかったためです。現在、バイトの意味は8バイナリビットを意味するように収束しており、それを別の方法で使用しようとすると、町の外で笑われるでしょう。


2

この一般的な設計を選択する理由として、多くの後方互換性と少し効率が混在しています。

データパスの幅が7ビットの場合、そのパスの特定のラインを表すには3ビットが必要です。3ビットを無駄にするつもりなので、効率を上げるためと、クラッシュするバグにつながる可能性のあるデッドパスを排除するために、それらを完全に使い切ることもできます。

最も一般的なデータタイプは4ビットニブルに基づいており、それらのほとんどは8ビットバイトに基づいています。代替ベースを使用することを選択すると、一般的なデータ型を処理するために、奇妙で非効率的なコードに頼らなければならない場合があります。たとえば、私の7ビットコンピュータでは、今日の業界で非常に一般的な32ビットの数値(浮動小数点を含む)を処理するために5つのメモリ領域が必要になります。

私のマシンが外部データに依存していなければ、おそらくそれでうまくいくでしょうが、モーターコントローラー、エンコーダー、温度センサー、およびほとんどの実世界のインターフェイスデバイスとセンサーは、このような標準ユニットをサポートしています。

7ビットのコンピューターをUSBポートに接続するのは不可能ではありませんが、多くの追加のテストを実行し、32ビットのデータ型に対するこれらの5ユニットのトランザクションすべてを処理する多くの命令を実行することになります。データパスにもう1つ追加し、他の業界と一致しました。

ビットアドレッシングの効率のために、それは主に始まり、現在の形式に合体しました、それが根本的な原因です。たとえば、3台のコンピューターを作成する場合(ビットごとに2つの状態ではなく3つの状態)、3、9、27、81などで最も効率的なビットサイズが表示されます。バイナリシステムとのより密接な互換性を提供するために、18、24、33、および66。


1
「ほとんどの一般的なデータタイプは4ビットニブルに基づいています。」それは本当ではないと思います。テキストデータ(多くあります)はバイトベースであり、数値データ(圧縮/エンコードを含む)は多くの場合16ビットまたは32ビットベースです。私が考えることができる4ビットデータの唯一の使用はBCDですが、IMOは非常に制限されています。
stevenvh 2012

私は彼がグループのデータへのHEXの大きな使用することを意味すると思う@stevenvh ...私はそれはあなたが頻繁にこの分解参照アーキテクチャで、本当だと言うだろう
clabacchio

1

ビット数でビット数を指定できるので簡単です。これはパーラートリックのように見えるかもしれませんが、命令セットは常にそれを行います。「左シフト」命令の例を考えてみましょう:

SHL R1,4

2のべき乗であるビット数がある場合、無駄なく固定数のビットでオペランドをエンコードできます。


1
私もそれについて考えましたが、それが完全なアーキテクチャーをベースにする十分な理由かどうかはわかりません。
stevenvh 2012

1
より大きな要因は、データをビット配列に格納してアクセスする機能だと思います。このような配列の使用は、コンピューターの機能の大部分を表すものではありませんが、珍しいことではありません。たとえば8ビットバイトのマシンでは、配列の要素iは、がゼロ以外であるarr[i >> 3] >> (i & 7)かどうかをテストすることで読み取ることができarr[i >> 3] & mask[i & 7]ます(CPU によっては、一方のアプローチが他方よりも優先されます)。2のべき乗ではないワードサイズでこのようなことを行うと、はるかに困難になります。
スーパーキャット2012

@supercatそれほど難しくはなく、はるかに遅いだけです。シフトを除算に置き換えるだけです。あなたはすでに知っていると思いますが、指摘するだけの価値があると思いました。
Roman Starkov

0

私のデジタルエレクトロニクスに関する知識に関しては、その理由は明白です。問題は、すべてのデジタルシステムで2進数システムの概念を利用していることです。つまり、2つの操作レベル、つまり0または1しかありません。したがって、ハードウェアレベルで可能な組み合わせは、0と1の組み合わせでなければなりません。したがって、4つの異なるタスクを実行する必要がある場合は、2つの変数が必要です。32タスクの場合は5つの変数が必要になります(ロジックは2 ^ nで、nは変数の数です)。したがって、2つのレベルしか扱っていないので、2の累乗としての組み合わせしか持たないことになり、その結果、2、4、8、16、32、64、128、256などが含まれることになります。 ..


1
これは、語長の2のべき乗を説明していません。あなたは自分で5の長さを32の組み合わせに十分だと述べています。OPは、5ビットのコントローラーがない理由を尋ねます。
stevenvh 2012

@stevenvh:それは絶対に素晴らしい先生です。わかった。おそらく私はその質問に適切に焦点を当てなかったのでしょう。ありがとうございました。
ナビゲート

回答をコメントに移動しました。コメントは下のボックスから使用できます。回答は質問に関するコンテンツを提供することを目的としており、残りはコメント用です。
clabacchio

0

私は他の答えだけを抜粋したことを認めますが、1つの重要な詳細は間接的にしか扱われていないようです:ロジックの速度とコンパクトさ。

24ビット値を連続してパックし、バイトアドレス方式でそれらにアクセスできるようにする場合、処理ロジックはワードアクセスのために3で除算する必要があります。除算は、特に2の累乗でない限り、ロジックで実行するにはかなりコストがかかります(お気に入りのプロセッサリファレンスを確認してください-除算命令は低速です)。その場合は、最下位ビットを無視するだけです(ソフトウェアはビットシフトによって行います)。これは、アラインメントされたアクセスを好む基本的な理由と同じです。

もちろん、これらの制限の周りでプロセッサを設計することも可能です。おそらく、ワードアクセスを4番目のアドレス値としてエンコードすることもできます(3バイトから選択するために2ビットが必要なため)。 DSP(GPUなど)。しかし、それはCPUの標準ではありません。また、BCD番号と同様の処理が必要なバイト配列アクセスの奇妙な4/3ステッピングが発生します。したがって、8ビットバイトの代わりに3x8ビットベクトルの配列を処理する方がはるかに効率的です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.