Skip to the content.

如何设计一个成功的指令集架构

显然我的功力不足以真正的指导一个指令集架构的设计,感觉 10 年前是 X86 一家独大,但是如今指令集又有一种百家争鸣,工作学习中时不时和不同的指令集打交道,用这篇 blog 来整理一下自己在学习不同架构中的内容。 同时欢迎大家的批评指正。

实现一个简单的 CPU 是不难的,如果仅仅包含运算指令,跳转指令,访存指令,其强度大约是本科生的大作业,但是能够跑起来 Linux 操作系统,就开始有点麻烦了,不过还好。 但是如果你的 CPU 可以:

这些要求让躺在 linux/arch 和 QEMU/target 下架构,除了 X86,ARM 和 RISC,大多死得悄无声息。

软件支持

基础库

硬件虚拟化加速

能够支持 hyerpv, kvm, zen 等,也就是至少需要考虑:

参考 Intel 的 VT-x

编译器

需要以下的编译器的支持:

需要有:

高性能计算

QEMU

主要是 tcg 和 machine 的定义。

Linux 内核

让 MacOS 或者 Windows 这种大公司持有的闭源操作系统支持你的新架构,可能性实在是太小了。

Firmware

UEFI

已经存在开源的 edk2 ,但是需要架构的支持。

ACPI

将开源的 acpica 支持上。

硬件设计

IOMMU

IOMMU 可以实现 irq remapping 和 dma remapping 进而:

具体可以参考 Intel 的 VT-d

错误检测

例如 ECC,需要考虑实现 edac

SOC

参考 Intel PCH

memory model

懂的都懂,很关键。

cache coherence

NUMA

NUMA 总线协议,更多的总线,更加复杂的 irqbalance 要求,需要内核,ACPI 和用户态工具特殊处理 NUMA .

总线协议

外设

调试

没有硬件支持,类似 gdb 中的 watch 和 breakpoint 的效率非常低。

很多虚拟机中也是支持对于 guest 调试的,也是需要硬件支持的。

参考:

硬件性能计数器

参考 Intel PCM

物理层设计

没有搞过,不是特别懂,但是是存在这一个步骤的。

编译器

加速

二进制翻译

存在特殊的指令来加速二进制翻译

操作系统

兼容性

功耗

运行功耗控制

功耗对于嵌入式设备或者移动设备极其重要,如果不小心考虑,相同性能,几十倍的功耗是很容易搞出来的。

https://www.zhihu.com/question/26655435/answer/1825719171

动态功耗调整

参考: https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

可靠性

成本

应该主要体现在面积上

TODO

其他的思考

参考资料

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。

  1. Power Struggles: Revisiting the RISC vs. CISC Debate on Contemporary ARM and x86 Architectures 

  2. One-instruction set computer 

  3. https://en.wikipedia.org/wiki/No_instruction_set_computing 

  4. A reconfigurable heterogeneous multicore with a homogeneous ISA