控制单元
回到过去,在 .NET 之前,您实际上必须知道计算机是什么,然后才能让它做事。这个问题会得到很多答案。
除了,那时,互联网还不是真正的东西,堆栈溢出并不是一个真正的问题,因为堆栈和堆的概念并不是真正的标准..
因此,为了确保我们实际上在谈论同一件事,我将仅解释这一点..
数字计算机中的控制单元启动一系列微操作。在面向总线的系统中,指定微操作的控制信号是在多路复用器、解码器和 ALU 中选择路径的位组。
所以我们正在研究控制单元,以及使它能够实际做事的指令集。我们正在处理应该发生的步骤,当编译的程序集请求位移、清除寄存器或类似的“低级”东西时。
其中一些指令可能是硬连线的,但通常不是全部。
微程序
引用:“微编程是设计传统计算机控制单元的一种有序方法”
(http://www2.informatik.hu-berlin.de/rok/ca/data/slides/english/ca9.pdf)
控制单元的控制变量可以用一串 1 和 0 表示,称为“控制字”。微程序控制单元是一种控制单元,其二进制控制变量不是硬连线的,而是存储在存储器中的。在我们优化东西之前,我们称这个内存为微内存;)
通常,我们实际上会查看两个“内存”,一个是控制内存,一个是主内存。
控制存储器用于微程序,主存储器用于指令和数据
控制存储器的代码生成过程称为微编程。
... 好的?
处理器中寄存器之间的信息传输是通过 MUX 而不是总线,我们通常有几个寄存器,其中一些是程序员熟悉的,有些则不是。在这里最应该响起的是处理器寄存器。最常见的 4 个处理器寄存器是:
- 程序计数器 – PC
- 地址寄存器——AR
- 数据寄存器——DR
- 累加器寄存器 - AC
微码使用处理器寄存器做事的例子
Assembly instruction "ADD"
pseudo micro code: " AC ← AC + M[EA] " where M[EA] is data from main memory register
control word: 0000
Assembly instruction "BRANCH"
pseudo micro code "If (AC < 0) then (PC ← EA) "
control word: 0001
微存储器
微存储器只关心我们如何组织控制存储器中的内容。然而,当我们有大指令集时,我们可以做得比简单地存储所有指令更好。我们可以将控制内存细分为“控制内存”和“纳米内存” (因为纳米小于微米对;))
这很好,因为我们不会在微码上浪费大量宝贵的空间(芯片区域)。
纳米存储器的概念源于垂直和水平指令的组合,但也提供了它们之间的权衡。
摩托罗拉 M68k 微型计算机是具有这种纳米内存控制设计的较早和流行的微型计算机之一。这里表明,当微程序中经常出现一组微指令时,可以显着节省内存。
这里表明,通过适当地构造内存,可以使用几位来寻址指令,而无需显着的速度成本。与微地址相比,减少是为了只需要高 log_2(n) 位来指定纳米地址。
这是什么意思?好吧,让我们再看一下 M68K 示例:它有 640 条指令,其中只有 280 条是唯一的。
如果指令被编码为简单的微存储器,它将占用:
640x70 bits. or 44800 bits
然而,由于只需要 280 条独特的指令来填充所有 70 位,我们可以将纳米存储器技术应用于剩余的指令,并获得:
8 < log_2(640-280) < 9 = 9
640*9 bit micro control store, and 280x70 bit nano memory store
total of 25360 bits
或节省19440位的内存.. 可以作为程序员的主内存 :)
这表明方程:
S = Hm x Wm + Hn x Wn
where:
Hm = Number of words High Level
Wm = Length of words in High Level
Hn = Number of Low Level words
Wn = Length of low level words
S = Control Memory Size (with Nano memory technique)
在现实生活中成立。
请注意,微存储器通常是垂直设计的(Hm 大,Wm 小),纳米程序通常与 Hn 小,Wn 大相反。
回到问题
我在理解问题的措辞时遇到了一些问题 - 这可能是因为我的第一语言是丹麦语,但我仍然试图理解它并得到:
proposition 1:
1000 instructions
32 bits
450 uniques
µCode:
1000 * 32 = 32.000 bits
bit width required for nano memory:
log2(1000-450) > 9 => 10
450 * 32 = 14400
(1000-450) * 10 = 5500
32000 - (14400 + 5500) = 12.100 bits saved
这不是你的任何答案。请提供说明?
更新:
"the control word is 32 bit. we can code the 450 pattern with 9 bit and we use these 9 bits instead of 32 bit control word. reduce memory from 1000*(32+x) to 1000*(9+x) is equal to 23kbits. – Ali Movagher"
有你的问题,我们不能用 9 位编码 450 模式,据我所知,我们需要 10..