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


8

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

编辑
7位的含义不大,但这正是让我想到这个问题的原因。答案参考了8位的传统。但是16位不是8位,而24位可以处理8位数据和16位,对吗?他们为什么跳过24位而转到32位?


7
祭祀把他烧死在火刑柱上!
肯尼

@kenny是的,我也很生气!:-)
m.Alin

@ m.Alin恐怖!在不知不觉中,人们将回到位片设计并编写自己的汇编程序。
肯尼

仅使用旧的5位代码电传打字机应将他判刑3年(这些代码有单独的“移位”代码以访问更多字母,还有其他乐趣)。
奥林·拉斯洛普

2
...因为本身就是2的幂?:-P
shimofuri

Answers:


8

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

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

如果需要极端的体系结构,则可以对霍夫曼代码集进行编码,从而获得可变长度的位


7

最低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个地址位置。正如比尔·盖茨(Bill Gates)可能曾经说过的:“ 4K内存对任何人来说都足够了”。

以下PDP-11系列使用16位。

兼容性提高一倍。
如果您希望与较低和较高级别的系统进行互操作,并且希望在同一系列中拥有功能更强大的设备,那么能够处理较大系统字中较小系统的2个字就很有意义。


证明规则的异常:

“总是”是一个很强的词:-)下面的
1位,12位,18位,36位示例。
18位和36位计算机绝不是微控制器。
1和12位的。


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


1位!!!:

摩托罗拉MC14500B我得到杰克·甘塞尔(Jack Gansell)的荣誉提名,以表彰他对该设备的最佳描述:

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

在此处输入图片说明


12位:

哈里斯HM-6100亦称Intersil IM6100-12位小型计算机wannabee](http://www.classiccmp.org/dunfield/other/i6100cfs.pdf

基于非常成功的DEC PDP-8 12位微型计算机。

总览

  • 程序存储器和数据存储器占用相同的存储空间。可直接寻址存储器的总大小为4 K个字。字长为12位。6100没有堆栈内存。

    程序存储器大小为4 K个字。所有条件指令都允许处理器仅跳过下一条指令。为了在满足某些条件时有条件地转到内存中的任意地址,代码应首先执行“如果不满足条件则跳过”指令,并在跳过指令之后放置直接或间接的无条件跳转指令。无条件指令可用于直接在当前页面内跳转(127个字),或在整个存储空间内间接跳转(4K字)。6100支持子例程调用,但是由于缺少堆栈内存,子例程的返回地址存储在memory中。没有“从子例程返回”指令-子例程应使用间接跳转来返回到调用者。

    数据存储器大小为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-以及工程实验室机器。如果我愿意的话,我本可以免费得到一个,但是它不会安装任何地方明智的-或昏迷
。我打过一电脑游戏是在其中的一个
。太空大战
。机器是在两个小房间大小的机柜
你会打开门,走在里面做的东西给它内部。


如果要生产24位部件,则ATI的R300 / 420 GPU(9500-X600和X700-850卡)非常适合。
Dan在火光中摆弄

一位微控制器的想法似乎很有趣,但是像MC14500B这样的芯片在实际中有多有用?我认为让输入数据控制程序地址位(使用锁存器和2:1多路复用器)比尝试使用指令管理状态更有效。我找到了该零件的1990年代数据表,这表明它存在了一段时间,但我很好奇如何真正使用这种芯片。
超级猫

@supercat-我找到了一个参考资料,在该参考资料中,一位设计师说,thay具有旧的绕线离散设计,您将其替换为基于MC14500B的绕线离散设计,并且几年后客户购买了其中的一些。话虽这么说,但是更残缺和无法使用的设备将难以想象。
罗素·麦克马洪

我真的无法想象1970年代的设计心理,但是史蒂夫·沃兹尼亚克(Steve Wozniak)的软盘驱动器控制器(在Apple []中提供了功能)证明了构建“计算机”并不需要太多离散逻辑。看完MC14500B的手册后,我想到了如何设计系统以仅使用离散逻辑(在PROM本身之外)从PROM运行代码。我认为我的机器的胆量是一个8位透明锁存器,一个8位触发器和一个四与非门,可能还有一个RC延迟(取决于I / O的设置/保持要求)。每个周期一条16位指令。
2012年

触发器的7位将驱动PROM的高地址位,而低位将由时钟驱动。在每个周期的前半部分,透明锁存器将对前六个输出位(I / O地址)进行采样,并且设备将执行I / O读取。I / O输入将驱动第七个透明锁存器位,而3个NAND将用作多路复用器,使用锁存的输入从PROM中选择Q0或Q1来馈送其余的透明锁存器位。在每个周期的后半段,对锁存的地址和数据执行I / O写操作。
超级猫

7

因为世界上大多数国家已经集中在以8位为块的形式存储,通信和其他方式处理计算机数据。它不是官方标准,但它是非常强大的临时标准。

过去,有一些机器在其数据路径中处理除8位以外的其他倍数。示例包括CDC Cyber​​ 6000和7000系列以及PDP-8。CDC机器使用6位字节,而PDP-8具有12位宽的字,没有仅处理8位数量的特殊方法。当然,此类别中也有其他机器。您今天对它们了解不多的原因是,人们已经决定他们想要一种可以很好地处理8位字节的机器,而这正是制造商制造的。您认为7位微控制器的销售情况如何?谁造了一个人,就会被嘲笑,然后发现很少的顾客。这将是一个愚蠢的商业主张。

如果查看Internet标准,则可以看到一些其他非8位“字节”的证据。他们故意使用术语“八位位组”,因为那时还没有统一的共识,即字节始终为8位。如今,字节的含义已汇聚为8个二进制位,如果您尝试以不同的方式使用它,您将大笑。


2

选择这种通用设计的原因是,效率有所提高,并且具有很多向后兼容性。

如果我的数据路径为7位宽,则我需要3位来表示该路径的任何给定行。由于我要浪费三位,所以我不妨充分利用它们,以提高效率并消除可能导致崩溃的bug的无效路径。

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

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

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

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


1
“大多数常见的数据类型都基于4位半字节”。我认为那不是真的。文本数据(有很多)是基于字节的,而数字数据(包括压缩/编码)通常是基于16位或32位的。我能想到的4位数据的唯一用途是BCD,但是IMO的使用非常有限。
stevenvh 2012年

@stevenvh我认为他指的是大量使用HEX分组数据...我想说的是真的,在体系结构中,您经常会看到这种分解
clabacchio

1

这更容易,因为它允许您在多个位中指定多个位。这看起来像是个骗人的把戏,但是指令集一直都在这样做。以“左移”指令为例:

SHL R1,4

如果您拥有的位数是2的幂,则可以以固定的位数对操作数进行编码,而不会造成任何浪费。


1
我也考虑过这一点,但是我不确定这是否有足够的理由在此基础上构建完整的体系结构。
stevenvh 2012年

1
我认为,更大的因素是能够以位阵列存储和访问数据。此类阵列的使用并不能代表计算机的大部分功能,但它们并不少见。在具有例如8位字节的机器上,可以通过arr[i >> 3] >> (i & 7)或通过测试是否arr[i >> 3] & mask[i & 7]为非零值来读取数组的元素i (某些CPU比另一种更喜欢一种方法)。用非2的幂的大小来做这样的事情将更加困难。
超级猫

@supercat没那么难,只有慢得多。一个只是用一个部门代替一个班次。我确定您已经知道了,但是只是认为值得指出。
罗曼·斯塔科夫

0

就我对数字电子学的了解而言,原因似乎很明显。问题是,对于所有数字系统,我们都采用二进制数系统的概念。这意味着,我们只有两个操作级别,即0或1。因此,在硬件级别可能的任何组合都必须是0和1的组合。因此,如果我们需要执行4个不同的任务,那么我们需要2个变量,对于32个任务,我们需要5个变量,依此类推(逻辑为2 ^ n,其中n是变量数)。因此,由于我们仅处理两个级别,因此我们必然将组合作为2的幂,因此导致具有2,4,8,16,32,64,128,256等。 ..


1
这不能解释单词长度的2的幂。您提到您自己的长度为5,足以应付32个组合。OP询问为什么没有5位控制器。
stevenvh 2012年

@stevenvh:先生,那绝对好。我知道了。也许我没有适当地关注这个问题。谢谢。
2012年

我已将您的答案移至评论,您可以在下面的框中使用该评论。回答的目的是提供有关问题的内容,其余的则是评论。
clabacchio

0

我承认我只是略过了其他答案,但似乎仅间接解决了一个关键细节:逻辑速度和紧凑性。

如果要连续打包24位值,并且还能够以字节寻址的方式访问它们,则处理逻辑将需要除以3以进行字访问。逻辑上的除法相当昂贵(只需检查您喜欢的处理器参考-除法指令很慢),除非它的乘方为2的幂;在这种情况下,您只需忽略最低位(该软件通过位移来完成)。这是我们更喜欢对齐访问的基本原因。

当然有可能围绕这些限制设计处理器,甚至可能将访问字词编码为第四个地址值(因为需要在三个字节中选择两位),所以我不会对此感到惊讶。 DSP(例如GPU);但这不是CPU的规范。对于字节数组访问,它还会以怪异的4/3步结束,这将需要类似于BCD编号的处理。因此,处理3x8bit向量数组而不是8bit字节变得更加有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.