1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
标准版 DJS-08 电子计算机
简介:采用74LS系列和PLD器件组成的简易8位CPU,采用哈佛架构,64K ROM + 64K RAM,外部总线为标准8080时序
开源协议: GPL 3.0
此项目是一个DIY 简易8位CPU的工程。
CPU基本性能:
速度:1Hz-2.048MHz,3T-5T单周期,大部分指令是5T,少部分3T(折合每秒钟40万次加法)
ROM:64KB(或32KB)
RAM:64KB
总线和ALU位宽:8
指令长度(带立即数):16
指针栈:4级16bit
硬件中断:单级、255向量半中断(注:中断函数中不支持某些指令)
显卡:无
键盘:无
外部总线:8080时序、64KB
结构框图如下:
该架构参考了1972年由英特尔发布的8008 CPU,采用单内部总线,指令集基本参考8008,运算和逻辑指令类同,有4个flag寄存器。
由于原版的8008采用了CDIP-18封装,时序刁钻,因此本设计首先把外部总线的地址线和数据线分离,然后把16KB寻址范围扩大到64KB+64KB的哈佛结构,但程序执行时不支持跳转到RAM内执行。
该设计主要由以下几个部分:
1.时钟振荡器和复位电路
时钟源部分采用了四种来源,分别是:7556产生的1Hz低频、25Hz低频、手动按钮信号、8224产生2.048MHz高频时钟源,在硬件电路上做任意切换。复位电路带有上电复位功能。由于指令中有HLT(停机),因此板上自带一个READY按钮方便调试。
2.算数运算部分(ALU)
ALU采用西格尼蒂克公司的N8260运算单元,拥有全加、与门、同或三种运算功能,在外加的74LS86异或门和74LS153 MUX的辅助下,拥有减法、异或、逻辑位移、比较等功能。ALU设立单独的AB寄存器,与主寄存器堆上的AB寄存器没有任何联系。有四个FLAG,分别是:CF SF ZF PF ,当有加法进位或减法借位时,CF<=1,;当输出的数为0x00/00000000时,ZF<=1;当输出的最高位/符号位为1时,SF<=1;当输出的8个字节中有偶数个1时,PF<= 1。
3. 寄存器堆
ABCDEFXY 8个通用无特殊功能寄存器,P寄存器(内部RAM指针)、内RAM映射、DPTRH、DPTRL、INDEX三个寄存器,指向外部RAM单元,指针计算公式:256*DPTRH + DPTRL + INDEX 、外部RAM映射(读写操作同内部寄存器)、PC暂存器(两个寄存器但一个映射,通过阻塞串联实现两个8位写入16位操作)、只输入口映射、AF寄存器双向IO口映射(和51单片机的IO口同地址映射类似)
4. PC程序计数器和指针栈
可以实现0000-FFFF的寻址操作,每取得一个8bit程序指令,PC+1 。 在JMP指令执行时,PC寄存器中的高低8位数据压入PC,原16位进程舍弃。在CAL中,将PC中高低8位压入PC,同时原PC中16位进程压入指针栈。在RET指令中,将指针栈顶16bit数据压入PC,PC中原进程舍弃。
5. 外部中断控制器
一个很不完善的中断机制,只能做一些简单的操作,没有寄存器状态恢复,没有PSW保存与恢复,很不推荐使用
6. 控制器
由4片GAL16V8/ATF16V8组成的控制器,结构简单,详情略
指令集:
NOP 空跑
HLT 停机
HLTDMA (DMA可控停机)
ADD/ADC/ADDI/ADCI (带/不带立即数的加/全加)
SUB/SBC/SUBI/SBCI (带/不带立即数的 减法/带借位减法)
NXR/NXRI 同或
XOR 异或
AND /ANDI 按位与
CMP/CMPI 比较
RR/RL 补0的右移/左移
RRC/RLC 补进位的右移/左移
JMP/JMC/JNC/JMZ.... (跳转/当CF= 1时跳转/当CF=0时跳转.... 其他flag类同)
CAL/CLC/CNC/CLZ.... (子函数调用/当CF= 1时调用/当CF=0时调用.... 其他flag类同)
RET/RTC/RNC/RTZ.... (子函数返回/当CF= 1时返回/当CF=0时返回.... 其他flag类同)
目前暂时没有汇编器,机器码结构如PDF和上图所示,该指令集对手写汇编非常友好
注:
1.目前项目还在进行中,并没有测试完所有的硬件功能和指令集。今后会继续完善该开源
2.该项目虽然标注为标准版,但是画的PCB文件在专业版中(见附件的备份压缩包),因此请使用立创EDA专业版导入并打开,该文件是最后的成品PCB文件!!!
3.目前版本使用了很多停产40多年的器件,部分器件很难购买,请谨慎参考!
PCB预览图:
实物图:通电测试中
示例代码:
实现在LCD1602上显示“HELLO WORLD!”,具体映射地址如下
write cmd 0xff00
write data 0xff02
read cmd 0xff01
read data 0xff03
LCD写命令的启动代码如下:
0x38
0x0c
0x06
0x01
需要写入的数据和地址如下(地址--该地址写入的数据),每写一个数据前,都需要输入地址,写地址用写指令操作,写数据用写数据操作
80--48
81--45
82--4c
83--4c
84--4f
85--20
86--57
87--4f
88--52
89--4c
8a--44
8b--21
(这些ASCII码合起来是“HELLO WORLD!”包括空格)
下面是代码: ****时钟频率1.33MHz(使用12MHz晶振)*****
MOVI H 0xff // 1C FF
MOVI L 0x00 // 1C 00
---------------------------------------
MOVI A , 0x38 // 10 38
MOVI PC 0x01 // 19 01
MOVI PC 0x40 // 19 40
CAL // E1 FF
MOVI A , 0x0c // 10 0C
MOVI PC 0x01 // 19 01
MOVI PC 0x40 // 19 40
CAL // E1 FF
MOVI A , 0x06 // 10 0C
MOVI PC 0x01 // 19 01
MOVI PC 0x40 // 19 40
CAL // E1 FF
MOVI A , 0x01 // 10 01
MOVI PC 0x01 // 19 01
MOVI PC 0x40 // 19 40
CAL // E1 FF
--------------------------------------------
MOVI A 0x80 // 10 80
MOVI B , 48 // 11 48
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 45 // 11 45
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 4c // 11 4C
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 4c // 11 4C
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 4f // 11 4F
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
------------------------------------
MOVI B , 00 // 11 00
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
------------------------------------
MOVI B , 57 // 11 57
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 4f // 11 4F
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 52 // 11 52
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 4c // 11 4C
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 44 // 11 44
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
MOVI B , 21 // 11 21
MOVI PC 0x01 // 19 01
MOVI PC 0x00 // 19 00
CAL // E1 FF
--------------------------------------------------------
HLT // FFFF
(.org 0x0100) 写数据子函数
MOVI PC 0x01 // 19 01
MOVI PC 0x40 // 19 40
CAL // E1 FF
MOVI IDX , 0x02 // 18 02
MOV RAM , B // 90 F1
ADDI A , 0x01 // 20 01
MOVI PC , 0x01 // 19 01
MOVI PC , 0x20 // 19 20
CAL // E1 FF
RET // E2 FF
(.org 0x0120) 写读忙+等忙子函数
MOVI IDX 0x01 // 18 01
MOV D , RAM // 90 3F
ADDI D , 0x80 // 23 80
JMPC // E0 80
RET // E2 FF
(.org 0x0140) 写命令子函数
MOVI IDX 0x00 // 18 00
MOV RAM , A // 90 F0
MOVI PC , 0x01 // 19 01
MOVI PC , 0x20 // 19 20
CAL // E1 FF
RET // E2 FF
未完待续...
展开
加载中...
是否需要添加此工程到专辑?