上篇说到:通过使用Nand门,我们可以实现任何逻辑门,进而实现可以一个CPU。后面我们就会搭建一个麻雀虽小但五脏俱全的计算机平台:hack。本篇我们开始第一步,实现搭建hack所需的一组芯片:组合逻辑芯片
组合逻辑芯片
一个最基本的CPU主要由两类芯片组成:
- 组合逻辑芯片(Combinational Chips):与、或、非门,加法器,ALU芯片等。这些芯片主要负责逻辑计算
- 时序芯片(Sequential Chips):寄存器,计数器,RAM等。这些芯片主要负责暂存数据
组合逻辑芯片(下面简称逻辑芯片)可以类比为一个布尔函数,它仅负责处理逻辑运算:输出结果仅依赖于其输入变量的排列组合。逻辑芯片是没有记忆能力的,它们不能维持自身的状态,当逻辑芯片的输入值改变的时候,它们的输出值也会实时地改变。
hack所需要的逻辑芯片有以下四种:基本逻辑门、多通道逻辑门、加法器、ALU(算数逻辑单元)。
基本逻辑门
基本逻辑门是一些简单的布尔函数的实现,我们需要的基本逻辑门如下,有1位和多位(16位)之分。

我们所有组合逻辑芯片都是基于Nand实现的,下面是Nand的真值表:只有当两个输入都为1时输出为0,其余输出为1反,然后输出。

首先我们用Nand实现一个Not。Not很简单,对其输入取反,然后输出。下面是我自己的实现方式:

HDL实现:硬件描述语言实现。
/**
* Not HDL实现
* Not gate:
* out = not in
*/
CHIP Not {
IN in;
OUT out;
PARTS:
Nand(a=in, b=in, out=out);
}
然后我们继续用刚刚实现的Not和Nand组合使用,再实现一个And。

/**
* And gate:
* out = 1 if (a == 1 and b == 1)
* 0 otherwise
*/
CHIP And {
IN a, b;
OUT out;
PARTS:
Nand(a=a, b=b, out=nandOut);
Not(in=nandOut, out=out);
}
多位基本逻辑门是1位基本逻辑门的简单组合,以16位And为例,用16个1位And组合成16位And.
/**
* 16-bit bitwise And:
* for i = 0..15: out[i] = (a[i] and b[i])
*/
CHIP And16 {
IN a[16], b[16];
OUT out[16];
PARTS:
And(a=a[0], b=b[0], out=out[0]);
And(a=a[1], b=b[1], out=out[1]);
And(a=a[2], b=b[2], out=out[2]);
And(a=a[3], b=b[3], out=out[3]);
And(a=a[4], b=b[4], out=out[4]);
And(a=a[5], b=b[5], out=out[5]);
And(a=a[6], b=b[6], out=out[6]);
And(a=a[7], b=b[7], out=out[7]);
And(a=a[8],

本文详细介绍了如何从最基本的NAND门开始,逐步构建出复杂的CPU组件。从组合逻辑芯片如加法器、ALU,到时序芯片如寄存器和RAM,展示了计算机硬件设计的基础原理。

2235

被折叠的 条评论
为什么被折叠?



