Skip to the content
2 layers100 × 100 mmALU1, the printed circuit board in 3D

An logic gate computer made of 74 gates

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
75
Nets
138
Pads
430
Tracks, vias
1,650, 205
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
11 Nov 2018
Updated
8 Jul 2020

Overview

ALU1 is an open-source printed circuit board by Left-Hand, from the Left-Hand/74-gate-computer repository on GitHub. It is a 2-layer board of 100 × 100 mm with 75 parts on 138 nets, routed with 1,650 tracks and 205 vias.

It is built around the 74LS240DC, 74LS04PC and 74LS10PC, with the 74LS273PC and 74LS74PC among its other parts. Its parts include 19 resistors, 18 diodes, 14 capacitors, 13 ICs and 9 connectors.

Main components

5

README

readme.md

本文档用于帮助您快速理解本微型计算机的构成

特征及功能

  • 核心频率期待值为16Mhz,保守预估为8Mhz(暂未测试,待实体机研制出来后测试)

  • 绝大多数指令为1T,不使用微指令 *部分另外说明

  • 使用冯·诺伊曼架构(最初是使用哈佛架构)

  • 使用74门作为本计算机的核心组件,并且不使用其他可编程组件(单片机,FPGA,CPLD等)

  • 支持VGA显卡,分辨率为256*240。为4片is62c256分为两组乒乓工作,能够硬件上下回滚,自动修改地址为下一个字符

  • 包含2个16位定时器,可屏蔽计时器信号,产生7位权中断

  • PC(program counter)程序计数器为24位,能够寻址宽度为2M,前一半分配给AT28系列或是W27C系列芯片作为引导程序,后半部分为单片8Mbit的 sram,用于储存数据和运行程序

  • 支持硬件ALU加速乘除操作,需要配置ALU相关寄存器,核心运算部分在16个时钟内完成(不包括配置寄存器及载入读出)


动机及声明

本人在16年左右看了commdore64的测评,认为非常新奇,于是整天幻想做一个自己的计算机,于17年开始构思(但是当时想的都是一些怪点子,比如用FR储存器作为Vram,使用摇摇棒作为显示屏等),直到下半年到18年出才正式开始用74构造切实可行的电路,并且陆续发布相关文章(黑历史bushi),最后在digital软件下逐步仿真出我想要的电路

主页:https://space.bilibili.com/28690875

专栏:https://www.kechuang.org/t/83193

本项目为开源项目,可能会出相关套件,请勿盗用。 由于我是一名在校高一年级高中生,因学业原因可能进度推展缓慢


文件

主目录下有一个POB.dig文件,为项目的主文件。使用hneemann的digtial作为仿真的ide(需要安装java),可以在 https://github.com/hneemann/Digital 中找到

作者的提供的库并不适合本项目,我将example/lib下的文件做了替换,解压主目录下的lib.zip文件并替换,方可使用本项目

ES目录下为旧的模块测试用文件,曾有模块化的打算,但是因无法看到底层电路的状态而放弃这一方案


原理

本计算机与其他微机不同,没有微指,例如C语言中的

text
A = B;

在大部分微机中,这条指令包括数个微指令:

text
1. 使B寄存器输出总线使能
2. 控制A载入总线中的数据
3. B寄存器输出结束
4. 检查其他操作...

但是,在本机中,绝大多数指令(不涉及修改返回PC值)为1T指令,即一条指令只花费一个周期

此机中,花费两个指令:

text
1. 切换为B寄存器输出到总线
2. 向A寄存器发出载入脉冲

再比如一个稍微复杂的(A,B分别为ALU内部的两个寄存器):

text
C = A + B;

执行操作如下(对应一个周期):

text
1. 切换为立即数寄存器输出到总线
2. 输出加法的ALU控制码(使用74181作为ALU,有多位控制译码线,无法简单操作)
3. ALU载入控制码
4. 切换为ALU输出到总线
5. C寄存器载入总线中的内容

故而,在本机中大部分操作使用译码器实现。有两种选通通道,P以及O,均为6位,各自可选通64个不同的脉冲,其区别在于

  • P中只会在CLK主时钟发出脉冲时发出脉冲
  • O会一直保存为上次载入之后的内容,且持续输出

这样,我们需要操作诸如A = B的操作,先修改O的指针以使B输出,再是P指向A载入的脉冲并放出脉冲,即可完成这样的操作


指令结构

单个指令为8bit,如果后缀了操作数,那么则为16bit单个操作的字节这样分配

76543210
下一位数据有无是否为O指令P5/O5P4/O4P3/O3P2/O2P1/O1P0/O0

需要说明的是,数据必须在指令之前给出,这使我们的汇编码写起来似乎有点反人类,但是这样做也是合情合理的

例如,A寄存器载入的指令为001(前包含一位0表示8进制) 下面是一段实现"A = 0x19"的汇编代码(此处为方便没有配置A寄存器,实际需要):

text
BUSO 0x19
ACP

这里我们的BUSO指使总线上的立即数寄存器输出(为000(八进制中的0,八进制不使用如0x,0b的前缀,而是0)),它的出现同时为了引入0x19这样一个操作数,我们把它编译出来

text
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | //BUSO指令,下接操作数
| 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | //操作数0x19
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | //A寄存器载入控制符

这样,我们的A寄存器就可以载入0x19这样的数字了其背后的逻辑控制稍显复杂,我们不做讨论


操作符

下面列出所有操作符(空为未定)

P操作符:

序列号汇编助记符说明
000000NON不做任何操作
000001ACP向A寄存器输出脉冲,视当前操作状态而定
000010AMRA寄存器清零
000011STL使A寄存器操作状态为左移
000100STR使A寄存器操作状态为右移
000101LDM使A寄存器操作状态为载入
000110BLLD使BL寄存器载入
000111BHLD使BH寄存器载入
001000AILD使A寄存器右侧移位寄存器载入
001001MLD使M寄存器载入(硬件乘法加速相关)
001010STC使ALU进位输入清零
001011CLC使ALU进位输入制位
001100REC使ALU进位输入为进位输出
001101NF第一次移位操作禁止(硬件除法加速相关)
001110CAI清除A寄存器右移移入数据(硬件乘法加速相关)
001111ACLDALU控制符载入
010000PCLLD程序计数器最低字节预载入
010001PCMLD程序计数器中字节预载入
010010PCHLD程序计数器高字节预载入
010011FBK强制备份当前程序计数器至备份0
010100RD读写储存器操作为读
010101WT读写储存器操作为写
010110RET返回备份0的程序地址
010111GED程序计数器备份至备份1,读写预载入的地址数据并返回
011000JMP无条件跳转预载入的地址
011001HLT宕机
011010JC在ALU状态寄存器输出情况下,有进位输出跳转
011011JNC在ALU状态寄存器输出情况下,无进位输出跳转
011100JZ在ALU状态寄存器输出情况下,ALU得数为0时跳转
011101JNZ在ALU状态寄存器输出情况下,ALU得数不为0时跳转
011110JV在ALU状态寄存器输出情况下,ALU得数溢出跳转
011111JNV在ALU状态寄存器输出情况下,ALU得数未溢出跳转
100000T0LLD定时器T0低位载入
100001T0HLD定时器T0高位载入
100010T1LLD定时器T1低位载入
100011T1HLD定时器T1高位载入
100100CTC设置定时器中断许可
100101CTI设置中断许可
100110INT3强制中断3
100111INT1强制中断1
101000IO0IO0载入
101001IO1IO1载入
101010CLDC寄存器载入
101011DLDD寄存器载入
101100IOLDIO口控制数据流寄存器载入
101101
101110
101111
110000
110001
110010
110011
110100
110101
110110
110111
111000SAM设置A组屏幕输出
111001IVS切换为另一组屏幕输出
111010WVGA写VGA数据
111011YP设置Y偏转
111100LXB准备载入X地址
111101LXX地址载入
111110LYB准备载入Y地址
111111LYY地址载入

O操作符:

序列号汇编助记符说明
000000BUSO总线立即数寄存器输出
000001UOALU输出
000010DO除法寄存器输出
000011AOOA寄存器右侧输出寄存器输出
000100ACOALU状态输出
000101PCLO程序计数器低位预输入输出
000110PCMO程序计数器中位预输入输出
000111PCHO程序计数器高位预输入输出
001000RDTO读取的储存器数据输出
001001INTO中断信号编码输出
001010CROC寄存器输出
001011DROD寄存器输出
001100IO0OIO0输出
001101IO1OIO1输出

汇编器及烧录

主目录下的asm.py文件,使用python写了一个简易的汇编器,用于将类似汇编代码更为底层的代码转换为机器码,省去人力编写的痛苦,写完之后将文档(txt格式)的地址修改进python代码中,在命令行的输出中可以找到编译出的机器码,将这段文本修改进入POB.dig文件下(实质上是xml文件),在ROM的data属性中替换为该段文本


各个寄存器逻辑详解

待补充


其他

koishi赛高

Parts

75
QtyValueFootprintReferences
19RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4, R5, R6, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19 +3
18LEDLED_THT:LED_Rectangular_W5.0mm_H2.0mmD1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15, D16 +2
13CCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
6Conn_01x08Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ2, J3, J5, J6, J7, J8
374LS138Package_DIP:DIP-16_W7.62mmU2, U6, U11
374LS240Package_DIP:DIP-20_W7.62mmU10, U12, U13
274LS181Package_DIP:DIP-24_W15.24mmU3, U7
174LS04Package_DIP:DIP-14_W7.62mmU1
174LS10Package_DIP:DIP-14_W7.62mmU4
174LS244Package_DIP:DIP-20_W7.62mmU9
174LS273Package_DIP:DIP-20_W7.62mmU5
174LS74Package_DIP:DIP-14_W7.62mmU8
1CCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC15
1Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ9
1Conn_01x28Connector_PinHeader_2.54mm:PinHeader_1x28_P2.54mm_VerticalJ1
1LOGOValve:cuteG***
1LOGOValve:meG***
1USB_B_MicroConnector_USB:USB_Mini-B_Lumberg_2486_01_HorizontalJ4

More from Left-Hand/74-gate-computer

2
  • 2 layers99.7 × 99.7 mmALU1 - 副本, the printed circuit board in 3D

    ALU1 - 副本

    Left-Hand/74-gate-computer

    An logic gate computer made of 74 gates

    73 parts19
  • 2 layers100 × 100 mmALU0, the printed circuit board in 3D

    ALU0

    Left-Hand/74-gate-computer

    An logic gate computer made of 74 gates

    68 parts19

Similar boards

  • 2 layers249.9 × 140.7 mmGIMIX DMA SASI, the printed circuit board in 3D

    GIMIX DMA SASI

    roberto314/GIMIX_reproduction

    Reproducing SS-50 and SS-30 cards and GIMIX Ghost Case and Mainboard

    89 parts1BSD-2-Clause
  • 2 layers364 × 203 mmCPU6S, the printed circuit board in 3D

    CPU6S

    Meisaka/CenMiniCom

    Centurion Minicomputer Schematics

    240 parts8
  • 2 layers279.4 × 203.2 mmZ180GDC, the printed circuit board in 3D

    Z180GDC

    lynchaj/rhyophyre

    Single Board Computer featuring Zilog Z180 processor and NEC µPD7220 Graphics Display Controller

    249 parts12
  • 6 layers244 × 244 mmRetroslop, the printed circuit board in 3D

    Retroslop

    CPTforever/8088-MicroATX-Computer

    A 8088 based, IBM 5150 like computer compatible with the MicroATX motherboard form factor.

    193 parts
  • 2 layers213.5 × 79.1 mmApple2Card, the printed circuit board in 3D

    Apple2Card

    patdie421/A2-scsi-card-rebuild

    62 parts
  • 2 layers125.7 × 97.8 mmQL CST FLoppyController V3, the printed circuit board in 3D

    QL CST FLoppyController V3

    alvaroalea/QL_CST_FLoppyController

    A clone of the CST's Floppy Disk Interface for Sinclair QL (PCB version 3 & 4)

    25 parts8
  • 2 layers232.8 × 204.2 mmTIM-011B, the printed circuit board in 3D

    TIM-011B

    Board-Folk/TIM011B

    TIM-011 B Replica Board

    162 parts8
  • 2 layers244 × 244 mm6809PC-6U, the printed circuit board in 3D

    6809PC-6U

    danwerner21/6809PC

    6809 PC

    167 parts2

Questions

How big is the ALU1 PCB?

It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ALU1 use?

75 parts, built around the 74LS240DC, 74LS04PC, 74LS10PC and 74LS273PC. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ALU1 KiCad files?

From the Left-Hand/74-gate-computer repository on GitHub, at the commit this page was made from: the board is kicad/ALU1/ALU1.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the ALU1 design in my own project?

Its repository states no licence, so its author keeps all rights: ask Left-Hand before reusing the design.