自制了一个简易的8位CPU,由74LS系列和PLD器件组成。 采用哈佛架构,64KROM64KRAM,外部总线为标准8080时序。 PS:本项目学习价值较高,且设计图代码都是完全分享开源的哦。 CPU基本性能速度:1Hz2。048MHz,3T5T单周期,大部分指令是5T,少部分3T(折合每秒钟40万次加法)硬件中断:单级、255向量半中断,中断函数中不支持某些指令外部总线:8080时序、64KB指令长度(带立即数):16总线和ALU位宽:8指针栈:4级16bitROM:64KB(或32KB)RAM:64KB显卡:无键盘:无 结构框图 该架构参考了1972年由英特尔发布的8008CPU,采用单内部总线,指令集基本参考8008,运算和逻辑指令类同,有4个flag寄存器。 由于原版的8008采用了CDIP18封装,时序刁钻,因此本设计首先把外部总线的地址线和数据线分离,然后把16KB寻址范围扩大到64KB64KB的哈佛结构,但程序执行时不支持跳转到RAM内执行。 设计图 电路设计图一共12张。 用嘉立创EDA专业版设计的PCB图 用嘉立创EDA专业版导出的3D图 实物图:通电测试中 由于文件格式原因,PCB设计文件无法上传,需要获得设计图的伙伴可在评论区滴滴,无偿分享的哈 设计解说 本章节共7个部分,包含了:时钟振荡器和复位电路,算数运算,寄存器堆,PC程序计数器和指针栈,外部中断控制器,控制器,其他说明。 1。时钟振荡器和复位电路 时钟源部分采用了四种来源,分别是:7556产生的1Hz低频25Hz低频手动按钮信号8224产生2。048MHz高频时钟源,在硬件电路上做任意切换。 复位电路带有上电复位功能。由于指令中有HLT(停机),因此板上自带一个READY按钮方便调试。 2。算数运算部分(ALU) ALU采用西格尼蒂克公司的N8260运算单元,拥有全加、与门、同或三种运算功能,在外加的74LS86异或门和74LS153MUX的辅助下,拥有减法、异或、逻辑位移、比较等功能。 ALU设立单独的AB寄存器,与主寄存器堆上的AB寄存器没有任何联系。 有四个FLAG,分别是:CFSFZFPF。当有加法进位或减法借位时,CF1;当输出的数为0x0000000000时,ZF1;当输出的最高位符号位为1时,SF1;当输出的8个字节中有偶数个1时,PF1。 3。寄存器堆 ABCDEFXY8个通用无特殊功能寄存器PC暂存器:两个寄存器但一个映射,通过阻塞串联实现两个8位写入16位操作,只输入口映射;INDEX三个寄存器:指向外部RAM单元,指针计算公式:256DPTRHDPTRLINDEX;P寄存器:内部RAM指针、内RAM映射、DPTRH、DPTRL;AF寄存器:双向IO口映射和51单片机的IO口同地址映射类似;外部RAM映射:读写操作同内部寄存器。 4。PC程序计数器和指针栈 可以实现0000FFFF的寻址操作,每取得一个8bit程序指令,PC1。 在JMP指令执行时,PC寄存器中的高低8位数据压入PC,原16位进程舍弃。 在CAL中,将PC中高低8位压入PC,同时原PC中16位进程压入指针栈。 在RET指令中,将指针栈顶16bit数据压入PC,PC中原进程舍弃。 5。外部中断控制器 一个很不完善的中断机制,只能做一些简单的操作,没有寄存器状态恢复,没有PSW保存与恢复,很不推荐使用。 6。控制器 由4片GAL16V8ATF16V8组成的控制器,结构简单。 7。说明 目前版本使用了很多停产40多年的器件,部分器件很难购买,请谨慎参考! 指令集 目前暂时没有汇编器,机器码结构如下所示,该指令集对手写汇编非常友好。NOP空跑HLT停机HLTDMA(DMA可控停机)ADDADCADDIADCI(带不带立即数的加全加)SUBSBCSUBISBCI(带不带立即数的减法带借位减法)NXRNXRI同或XOR异或ANDANDI按位与CMPCMPI比较RRRL补0的右移左移RRCRLC补进位的右移左移JMPJMCJNCJMZ。。。。(跳转当CF1时跳转当CF0时跳转。。。。其他flag类同)CALCLCCNCCLZ。。。。(子函数调用当CF1时调用当CF0时调用。。。。其他flag类同)RETRTCRNCRTZ。。。。(子函数返回当CF1时返回当CF0时返回。。。。其他flag类同) 示例代码 实现在LCD1602上显示HELLOWORLD!,具体映射地址如下:writecmd0xff00writedata0xff02readcmd0xff01readdata0xff03 LCD写命令的启动代码如下:0x380x0c0x060x01 需要写入的数据和地址如下(地址该地址写入的数据),每写一个数据前,都需要输入地址,写地址用写指令操作,写数据用写数据操作:80488145824c834c844f85208657874f8852894c8a448b21(这些ASCII码合起来是HELLOWORLD!包括空格)下面是代码:时钟频率1。33MHz(使用12MHz晶振)MOVIH0xff1CFFMOVIL0x001C00MOVIA,0x381038MOVIPC0x011901MOVIPC0x401940CALE1FFMOVIA,0x0c100CMOVIPC0x011901MOVIPC0x401940CALE1FFMOVIA,0x06100CMOVIPC0x011901MOVIPC0x401940CALE1FFMOVIA,0x011001MOVIPC0x011901MOVIPC0x401940CALE1FFMOVIA0x801080MOVIB,481148MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,451145MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,4c114CMOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,4c114CMOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,4f114FMOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,001100MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,571157MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,4f114FMOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,521152MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,4c114CMOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,441144MOVIPC0x011901MOVIPC0x001900CALE1FFMOVIB,211121MOVIPC0x011901MOVIPC0x001900CALE1FFHLTFFFF(。org0x0100)写数据子函数MOVIPC0x011901MOVIPC0x401940CALE1FFMOVIIDX,0x021802MOVRAM,B90F1ADDIA,0x012001MOVIPC,0x011901MOVIPC,0x201920CALE1FFRETE2FF(。org0x0120)写读忙等忙子函数MOVIIDX0x011801MOVD,RAM903FADDID,0x802380JMPCE080RETE2FF(。org0x0140)写命令子函数MOVIIDX0x001800MOVRAM,A90F0MOVIPC,0x011901MOVIPC,0x201920CALE1FFRETE2FF 视频演示 视频加载中。。。 25Hz主频点亮 视频加载中。。。 1MHz主频点亮 文章所有资料参考来源:立创开源硬件平台《DJS08电子计算机》作者:BH2VGM。 https:oshwhub。comking134785091158bitciscP2