为什么微控制器中的数据路径总是 2 的幂?

电器工程 微控制器 建筑学
2022-01-16 22:40:44

微控制器数据路径始终是 2 位宽的幂:4 位、8、16、32 位等。即使使用 12 位宽指令的 PIC 也是 8 位控制器。为什么?这有什么设计优势吗?12 位数据总线或7 位控制器有什么问题?

编辑
7 位没有多大意义,但这就是让我想到这个问题的原因。答案是指 8 位的传统。但是 16 位不是 8 位,而且 24 位可以处理 8 位和 16 位的数据,对吧?为什么他们跳过 24 位转到 32 位?

4个回答

传统具有强大的吸引力。但互操作性也是如此。几乎所有现有的文件格式和通信协议都对字节进行操作。您如何在 7 位微控制器中处理这些问题?

PIC 通过将指令空间与外部完全分开并预先编程来摆脱它。对指令集进行位剃须具有一定的价值,因为这是您作为微处理器设计人员可以控制自己的一件事。

如果你想要一个极端的架构,你可以霍夫曼编码指令集,给你可变长度的位数。

4 位可感知最小值:
0-9 数字数据需要 4 位
0-9 = 10 个字。
下一个最高二进制字大小 = 4 位 = 16 个可能的字。
所以 BCD 数据(二进制编码的十进制)= 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 位的是。


下面提到的一位系统实际上是一个“您认为合适的随机位”系统。一位数据字本质上是计算产生的通过/不通过标志,用于启用或禁用程序活动。程序计数器是一个递增计数器,它在内存中循环前进,并根据需要启用或禁用代码。确实非常非常非常讨厌。到它上市时,当时的 8 位处理器已经相当成熟,而 1 位处理器从来没有真正意义过。我不知道它有多少用处。


1位!!!:

摩托罗拉 MC14500B 我得到了 Jack Gansell 的荣誉奖,以对该设备进行最佳描述 :-)

数据表- 点击页面下载 PDF。

在此处输入图像描述


12 位:

Harris HM-6100 又名 Intersil 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 用户手册(初步- 哇。
尽管编号这是 PDP16 之前的 - 具有模拟 I/O 功能的类固醇 PDP-8 - 和工程实验室机器。如果我想要的话,我可以免费拥有一个,但是它不会适合任何明智或不明智的地方。
我玩过的第一个电脑游戏就是其中一个。
太空战争。
机器放在两个小房间大小的柜子里。
你会打开一扇门,走进里面做一些事情内部结构。

因为世界上大部分地区都集中在以 8 位块存储、通信和以其他方式处理计算机数据。这不是一个官方标准,但它是一个非常强大的临时标准。

过去,有些机器在其数据路径中处理 8 位以外的倍数。示例包括 CDC Cyber​​ 6000 和 7000 系列以及 PDP-8。CDC 机器使用 6 位字节,而 PDP-8 有一个 12 位宽的字,没有特殊的方法来处理仅 8 位的数量。这个类别中当然还有其他机器。您今天很少听到有关它们的原因是因为人们已经决定他们想要能够很好地处理其 8 位字节的机器,而这正是制造商制造的。您认为 7 位微控制器的销量如何?谁制造了一个,就会受到极大的嘲笑,然后就找不到顾客了。这将是一个愚蠢的商业提议。

如果您查看互联网标准,您可以看到一些非 8 位“字节”的额外证据。他们故意使用术语“八位字节”,因为当时并没有普遍同意一个字节总是 8 位。如今,字节的含义已经收敛为 8 个二进制位,如果您尝试以不同的方式使用它,您会被嘲笑。

作为这种常见设计选择的原因,混合了一些效率和许多向后兼容性。

如果我的数据路径是 7 位宽,我需要 3 位来表示该路径的任何给定行。既然要浪费三个位,那我不妨把它们全部用完,既是为了提高效率,也是为了消除可能导致崩溃错误的死路。

最常见的数据类型基于 4 位半字节,其中大多数基于 8 位字节。通过选择使用备用库,您可能不得不求助于奇怪且低效的代码来处理常见的数据类型。例如,我的 7 位计算机将需要 5 个内存空间来处理任何 32 位数字,包括浮点数,这在当今行业中很常见。

如果我的机器不依赖于外部数据,我可能会侥幸逃脱,但电机控制器、编码器、温度传感器以及大多数现实世界的接口设备和传感器都支持此类标准单元。

并不是说将 7 位计算机连接到 USB 端口是不可能的,但是您将进行大量额外的测试并运行更多的指令来处理 32 位数据类型的所有这 5 个单元事务为您的数据路径增加了一点,并与行业的其他部分保持一致。

但是,由于位寻址的效率,它在很大程度上开始并合并为当前形式,因此这是根本原因。例如,如果您要创建一台三元计算机(每个位 3 个状态而不是 2 个状态),那么您会看到最有效的位大小为 3、9、27、81 等。您还会看到效率较低的尝试18、24、33 和 66,以努力提供与二进制系统更紧密的兼容性。