从0到1构建计算机(3/12)--组合逻辑芯片:逻辑门、加法器、ALU

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

上篇说到:通过使用Nand门,我们可以实现任何逻辑门,进而实现可以一个CPU。后面我们就会搭建一个麻雀虽小但五脏俱全的计算机平台:hack。本篇我们开始第一步,实现搭建hack所需的一组芯片:组合逻辑芯片

组合逻辑芯片

一个最基本的CPU主要由两类芯片组成:

  • 组合逻辑芯片(Combinational Chips):与、或、非门,加法器,ALU芯片等。这些芯片主要负责逻辑计算
  • 时序芯片(Sequential Chips):寄存器,计数器,RAM等。这些芯片主要负责暂存数据

组合逻辑芯片(下面简称逻辑芯片)可以类比为一个布尔函数,它仅负责处理逻辑运算:输出结果仅依赖于其输入变量的排列组合。逻辑芯片是没有记忆能力的,它们不能维持自身的状态,当逻辑芯片的输入值改变的时候,它们的输出值也会实时地改变。

hack所需要的逻辑芯片有以下四种:基本逻辑门、多通道逻辑门、加法器、ALU(算数逻辑单元)。

基本逻辑门

基本逻辑门是一些简单的布尔函数的实现,我们需要的基本逻辑门如下,有1位和多位(16位)之分。
芯片列表

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

首先我们用Nand实现一个Not。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电路图

/**
 * 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], 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值