已发布
从与非门开始搭逻辑门
从与非门出发,在《Turing Complete》里搭出非门、与门、或门、或非门、异或门、同或门和三路门,每一步都用真值表核对,并讲传播延迟:输入变了,输出为什么会晚一点。后半篇做五道组合逻辑练习,从真值表推出接线,最后看布尔代数在 CPU 里起什么作用。
- Turing Complete
- NAND
- Logic gates
项目 02
《Turing Complete》沙盒模式里的三个长期学习目标,不是固定进度:先做 16 位 Hack 处理器,再做 32 位的 RV32I 和 Armv6-M 核心。每颗核心都有明确的指令集架构(ISA),具体电路怎么实现,要在设计过程中继续探索。
做一颗指令 ROM 与数据 RAM 分开(哈佛架构)的 16 位 Hack 核心,最终运行 Add、Max 等 Hack 机器语言程序;先做无流水线的 RV32I 核心,再逐步覆盖完整的基础整数指令集,五级流水线留作后续挑战;再以 Cortex-M0+ 为参考,挑战 Armv6-M/Thumb 核心,逐步实现异常、中断和两级流水线,并参考它共享系统总线的组织方式。只有经过充分验证,才称其兼容 Cortex-M0+。
从与非门搭出非门、与门、或门、或非门和异或门,把双输入门组合成多输入门,并了解传播延迟怎样决定最长路径。
把一位信号扩展成多位数据:先弄清二进制怎么读、怎么算,再搭加法器、锁存器和寄存器,让电路算出结果以后还能保存下来,继续参与下一次运算。
遵循 Hack 指令集的 16 位核心,指令 ROM 与数据 RAM 分开,运行 Add、Max 等 Hack 程序。
32 位 RV32I 核心:先做无流水线版本,再覆盖完整的基础整数指令集;五级流水线作为后续挑战。
以 Cortex-M0+ 为参考的 32 位 Armv6-M/Thumb 核心,逐步实现异常、中断和两级流水线。
项目推进后,我会把每个阶段遇到的问题、实现过程和验证结果补充在这里。
已发布
从与非门出发,在《Turing Complete》里搭出非门、与门、或门、或非门、异或门、同或门和三路门,每一步都用真值表核对,并讲传播延迟:输入变了,输出为什么会晚一点。后半篇做五道组合逻辑练习,从真值表推出接线,最后看布尔代数在 CPU 里起什么作用。
已发布
逻辑门之后,先看一个简单 CPU 核心由哪些部件组成、ALU 里先认识哪些电路,再用一次加法把取指令、译码、计算和保存串起来,说明结果算出来以后为什么还要存下来。最后把后面要学的内容和《CS:APP》的章节对应起来。
已发布
按无符号整数整理二进制怎么读、怎么算:位权与位宽,二进制和十进制互换,加减法的进位与借位,乘除法,按位运算与奇偶,以及几个速算方法和固定位宽的限制。文末有一个交互练习:点选 128 到 1 的位权,凑出目标数。
已发布
通过六道电路练习,从逻辑判断走到二进制运算:至少两个输入为真、奇数计数、四路信号计数、半加器、全加器,以及通过逐位接线把字节翻倍。用接线图和真值表逐步核对,也说明最后一种接法为什么只在输入为 0~127 时实现翻倍。
已发布
从单字节 NOT、NAND 开始,把八个全加器用进位串起来,再用补码表示负数、搭出数值取相反数的电路。通过接线图和逐步计算,区分按位取反与算术取负、输出进位与有符号溢出,并说明 −128 的特殊边界。
持续更新
持续记录电路怎样保留和更新状态:反馈环、用 OR 留住信号、两周期延迟、锁存器、触发器与逐周期翻转。目前写到用二进制开关搭出 XOR,说明高阻态和数据选路;后续继续补充数据控制电路。