我正在 Logisim 中构建一个简单的 16 位 CPU,并准备好 ALU 和我想要的操作码。现在我发现很难为命令找到正确的编码,以便不同的子电路(例如逻辑、算术)不需要所有控制线(构建编码)作为输入,但尽可能少。是否有任何有助于高效操作码设计的策略或方法?
提前谢谢
我正在 Logisim 中构建一个简单的 16 位 CPU,并准备好 ALU 和我想要的操作码。现在我发现很难为命令找到正确的编码,以便不同的子电路(例如逻辑、算术)不需要所有控制线(构建编码)作为输入,但尽可能少。是否有任何有助于高效操作码设计的策略或方法?
提前谢谢
我认为这是学习其他一些指令集的好方法。
一个小的可能是 TI 的 MSP430,它是一个 16 位处理器,大约有 22 条指令。
http://www.physics.mcmaster.ca/phys3b06/MSP430/MSP430_Instruction_Set_Summary.pdf
您还可以查看 Atmel AVR,它们也有一个非常小的指令集。
在我的一个小项目中,我尝试用一个小指令集(14 条指令)用 VHDL 开发一个简单的 32 位处理器:
由于我目前的空闲时间,它还没有完全完成。指令已实现,但有两个未测试,可能缺少一些状态标志。
研究(但不要复制)ARM 的指令编码方法。它高度以前缀为导向(如 Dzarda 推荐的 Huffman 树方法),并且在指令的寄存器选择部分的位置方面高度统一。
缺乏想象力但可靠的方法是枚举您拥有的所有控制信号,这些信号可能超过 16 位,然后尝试对它们进行卡诺图式逻辑最小化。
有一次我尝试在 Logisim 中使用 8 位指令长度的内核做一个 4 位 CPU。最终得到了一个简单的状态机,而不是一个 CPU,真的。
随机寻找的东西
关于 Huffman 树的 Computerphile 上的精彩视频:
我为课堂编写的 ISA 曾经有一个 4 位操作码,如下所示:
1XXX ALU instructions
01XX jump, jump register, call etc
001X branch not equal, branch equal zero
000X 0 - load, 1 - store
这不是最佳的,而是一种更容易构建/设计门的样式,因为单个位的输入信号可以完全控制采用的逻辑路径。或者,您可以对您最常用的符号进行Huffman 编码并将它们补零以获得固定长度的操作码。