龙少精简炮灰测试版8位机(原创、纯硬件、开源)
这个做来当炮灰测试的,只做了些CPU基本的功能,很简单的,主要是验证本人YY的CPU控制器架构的实际表现,结果还可以;
架构、电路原理、制作过程后面再边整理边发上来,现在先写了段小程序驱动SD、TF卡和小液晶来展示这个CPU的简单应用,程序是汇编(指令集)写的,对ROM手工2进制编程,现在没有做RAM/IO板,只是用了一片8KB 100ns的SRAM加电容(电容用来保持SRAM数据不丢失)当做ROM,这个简单的程序用ALU寄存器就够了,不用RAM

这个CPU可在3.3V工作,供电是7805稳压,接上了有压降,现在实测电压4V  电流在400~500mA之间跳动,
最高主频未知~~~

后面我再考虑下是否做个C编译器;

龙少CPU简单编程应用展示 屏分辩率128x160   RGB为16位色模式:
点击此处查看视频
http://www.tudou.com/programs/view/Y3x2o4d_snY/


下面是CPU现在周边的配置:

CPU时钟发生和复位板  正面:
CPU时钟发生和复位.JPG
CPU时钟发生和复位板  背面:
CPU时钟发生和复位(背面).JPG

ALU寄存器数据指示LED和拨码开关(拨码开关起初是用来调试指令的)  正面:
数据指示LED和拨码开关.JPG
ALU寄存器数据指示LED和拨码开关  背面:
数据指示LED和拨码开关(背面).JPG

SRAM加电容当ROM用(用3V的电池充电了电压会变低的,后面我改成电容了)  正面:
SRAM.JPG
SRAM加电容当ROM用  背面:
SRAM(背面).JPG

硬件SPI板 正面:
硬件SPI.JPG
硬件SPI板 背面:
硬件SPI(背面).JPG

CPU板正面:
CPU板.JPG
CPU板背面:
CPU板背面.JPG    左面.JPG
后面.JPG
右面.JPG
+30  科创币    yanli12321   2012-11-11   牛人啊,今天分都给你了
+24  科创币    delete   2012-11-11   高质量发帖
+50  科创币    hefanghua   2012-11-11   大赞。LZ高超的水平续写了8位机的传奇。期待后续详解。
+40  科创币    celeron533   2012-11-11   高质量发帖
+25  科创币    cccyl   2012-11-11   厉害啊
+50  科创币    小哈_abc   2012-11-11   楼主拨了多长时间才把这个程序烧上去的啊。。。
+15  科创币    daxus   2012-11-11   碉堡了。。。
+50  科创币    10班陈大葱22号   2012-11-11   给跪了...
+25  科创币    vile_hand   2012-11-11   高质量发帖
+50  科创币    量子隧道   2012-11-12   哇靠,牛B大发了
+100  科创币    山猫   2012-11-12   龙少威武
+200  科创币    虎哥   2012-11-12   太强大了,可以上报纸了。
+1  科创币    虎哥   2012-11-12   通知其他版主:本帖已于第50830号主题合并加学术分,请勿重复加分。
+1  科创币    hx   2012-11-12   高质量发帖
+25  科创币    wenrui   2012-11-12   厉害啊
+25  科创币    delete   2012-11-12   高质量发帖
+25  科创币    l2930   2012-11-12   这是要逆天了。。。。。
+200  科创币    ehco   2012-11-12   这也忒强大了
+24  科创币    wuncle   2012-11-12   膜拜
+50  科创币    孤独的酒精灯   2012-11-12   
+200  科创币    任某人   2012-11-12   我去!!!!这个不加没道理啊。。去吧STC干爆吧!!
+50  科创币    小特斯拉圈圈   2012-11-12   NB
+50  科创币    乖乖乖   2012-11-12   我今天就这么多了。。。
+100  科创币    jrcsh   2012-11-12   高质量发帖
+40  科创币    科学人   2012-11-12   
+10  科创币    罗布   2012-11-12   这个真心强大。。。。
+25  科创币    wjwj1234xx   2012-11-12   我了个去这个太威武了
+25  科创币    冲压发动机   2012-11-13   亲!你可以移民了.恭喜.
+25  科创币    hsldlee   2012-11-13   全力顶,就这点权限,笑纳
+25  科创币    TubeChip404   2012-11-13   加,不加没道理呀      ^_^
+50  科创币    逆天   2012-11-15   看到3DMARK立马跪了。。。。
+50  科创币    jxs   2012-11-15   啥时用全模拟元件做一个。。。
+25  科创币    luo   2012-11-16   
+30  科创币    kknd   2012-11-16   不会是实时3D吧。。。那可太强大了。。。
+50  科创币    极度深寒   2012-11-17   。。这焊工太彪悍了
+25  科创币    金星凌日   2012-11-22   
+30  科创币    带火星的木条   2012-11-23   顶礼膜拜.我只剩这么多分了今天
+25  科创币    wwt3100   2012-12-12   膜拜...
+25  科创币    xusixteen   2013-07-03   必须膜拜
+10  科创币    ldfa   2014-04-25   高质量发帖
来自:计算机科学 / 计算机电子学
 
1
2012-11-12 21:04:43
神之觉醒(作者)
35楼
这个炮灰CPU的架构改了好多次,都是往简单的方向改,为了降低DIY的难度,和降低成本,没有加入堆栈和中断功能,整个CPU只有50+片74LS,IC成本就几十块钱, 原来我是想用74F的,我用74F按照门的串联延迟估计频率在30~40MHZ之间,但是手头紧 只好用了74LS,当初按照IC的MAX延迟估计实际频率也就在20MHZ左右,但是实际做出来却有点出乎意料;  不管怎样只是做来试验玩玩的,没必要太认真[s:229]   和人家INTEL、AMD、STC等等跟本不能比,对于能有这样的效果,我是用最直接的办法来控制的,所有细节我会慢慢道来,是不是这样或你对我有怀疑 等我说完你做一个出来就懂了

8位炮灰测试CPU架构图:
8位炮灰测试CPU架构图.jpg

指令集、Protel 99 SE电路、PCB文件、Multisim 11.0仿真文件:

attachment icon 指令集、Protel 99 SE电路、PCB文件、Multisim 11.0仿真文件.rar 1.68MB RAR 238次下载

下面还有很多,我要思考下以怎样的顺序给大家作祥细的介绍,并且我尽量说的通俗易懂,好让每个人都能了解CPU的工作原理,有能力自己DIY
折叠评论
加载评论中,请稍候...
折叠评论
2012-11-13 0:01:27
神之觉醒(作者)
40楼
双面制板就打好定位洞两边爆光好就OK了

菲林:
菲林1.jpg

菲林2.jpg   

暴光:
暴光.jpg
显影:
显影完成.jpg

腐蚀:
腐蚀.jpg

腐蚀2.jpg

腐蚀3.jpg

腐蚀OK:
腐蚀OK1.jpg

腐蚀OK 正面_近.jpg

腐蚀OK 背面.jpg

打洞:
打洞.jpg

打洞1.jpg

打洞OK.jpg

脱膜:
脱膜.jpg

脱膜OK.jpg

脱膜OK1.jpg
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
41楼
装上IC自我陶醉一下[s:269]:
装上IC自我陶醉一下.jpg

开焊:
开焊.jpg

开焊1.jpg

焊好:
焊好.jpg

焊好1.jpg

焊好2.jpg

焊好3.jpg

焊好4.jpg

焊好5.jpg

焊好6.jpg

焊好7.jpg

焊好8.jpg

完工:
完工.jpg

上电调试指令:
调试指令.jpg

调试指令1.jpg

调试指令3.jpg
折叠评论
1
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
49楼
下面是此CPU的使用说明;

CPU引脚:

电源插针。

CPU时钟输入和复位插针。

ROM读 和 RAM读、写 输出插针。

ROM 16位地址线输出 两排插针。

RAM 16位地址线输出 两排插针。

ROM 机器码指令数据输入插针。

RAM 数据输入输出插针。

位控制输出插针。(用来控制液晶 TF卡什么的~)

数据总线插针。

累加器和R1寄存器输出插针。

指令寄存器输出插针。

CPU电路在35楼。




炮灰CPU的寄存器(图在35楼):

1.数据寄存器,此CPU有两个数据寄存器,累加器和R1,分别由一片74LS273锁存器组成。

2.RAM地址寄存器,此CPU有两个RAM地址寄存器,为R2和R3,R2为高8位地址,R3为低8位地址,共同组成16位地址,可以寻址64KB的RAM,也是分别由一片74LS273锁存器组成。

3.程序计数器,此CPU的程序计数是16位的,可以寻址64KB的ROM,由4片74LS161二进制同步加法计数器组成。

4.状态标志,状态标志只有两位,分别为零标志位和进借位标志位,由一片74LS74组成。

5.IR,IR为CPU的指令寄存器,不可寻址的,由一片74LS273组成。








炮灰CPU的寻址方式、指令、和机器码:

这个CPU有三种寻址方式,立即数寻址,寄存器寻址,寄存器间接寻址。


后面都把累加器简称为A。


1.立即数寻址(立即数传送指令):

MOV A,7FH       //将16进制数7FH送累加器       第1字节机器码为00000000  第2字节机器码为7FH

MOV R1,7FH     ; //将16进制数7FH送R1寄存器     第1字节机器码为00000001  第2字节机器码为7FH

MOV R2,7FH     ; //将16进制数7FH送R2寄存器     第1字节机器码为00000010  第2字节机器码为7FH

MOV R3,7FH     ; //将16进制数7FH送R3寄存器     第1字节机器码为00000011  第2字节机器码为7FH

立即数传送指令为双字节指令,第一字节的高5位为操作码,低3位为寄存器地址,第二字节为立即数;其他指令都是单字节。







2.寄存器寻址(累加器传送指令和运算指令):

MOV A,A         //累加器的内容送累加器 (无聊操作- =~)   机器码为00011000

MOV R1,A       ; //累加器的内容送R1寄存器       机器码为00011001

MOV R2,A       ; //累加器的内容送R2寄存器       机器码为00011010

MOV R3,A       ; //累加器的内容送R3寄存器       机器码为00011011

MOV [R2,R3],A   //R2寄存器作为RAM高8位地址,R3寄存器作为RAM低8位地址,然后累加器的内容送RAM      机器码为00010000

ADD A,R1       ; //累加器和R1寄存器相加,结果送回累加器      机器码为00100000

INC A           //累加器加1     机器码为00101000

SUB A,R1       ; //累加器为被减数,R1为减数,相减,结果送回累加器    机器码为00110000

DEC A           //累加器减1     机器码为00111000

AND A,R1       ; //累加器和R1相与,结果送回累加器      机器码为01000000

OR A,R1         //累加器和R1相或,结果送回累加器      机器码为01001000

NOT A           //累加器取反     机器码为01010000                    

XOR A,R1       ; //累加器和R1寄存器相异或,结果送回累加器    机器码为01011000







3.寄存器间接寻址(RAM到寄存器传送指令 和 转移指令):

(1)RAM到寄存器传送指令:

MOV A,[R2,R3] ;  //R2寄存器作为RAM高8位地址,R3寄存器作为RAM低8位地址,然后RAM的内容送累加器    机器码为00001000

MOV R1,[R2,R3]; //和上面一样R2、R3内容作为RAM地址,然后RAM的内容送R1寄存器    机器码为00001001

MOV R2,[R2,R3]; //和上面一样R2、R3内容作为RAM地址,然后RAM的内容送R2寄存器    机器码为00001010

MOV R3,[R2,R3]; //和上面一样R2、R3内容作为RAM地址,然后RAM的内容送R3寄存器    机器码为00001011

(2)转移指令:

JMP [R2,R3]     ; //无条件转移到由R2、R3组成的16位地址     机器码为01100011

JNC [R2,R3]     ; //进借位标志位为0时,执行转移,转移到由R2、R3组成的16位地址    机器码为01100000

JNE [R2,R3]     ; //零标志位为0时,执行转移,转移到由R2、R3组成的16位地址    机器码为01100001

JA [R2,R3]       //零标志位或进借位标志位有一个1时,执行转移,转移到由R2、R3组成的16位地址    机器码为01100010



下面是特别的控制指令:

(1)状态标志控制指令

进借位标志位置1      机器码为01101000

进借位标志位置0      机器码为01110000

零标志位置1      机器码为01101001

零标志位置0      机器码为01110001

(2)CPU位控制输出 控制指令

位0控制输出置1      机器码为01101010

位0控制输出置0      机器码为01110010

位1控制输出置1      机器码为01101011

位1控制输出置0      机器码为01110011

位2控制输出置1      机器码为01101100

位2控制输出置0      机器码为01110100

位3控制输出置1      机器码为01101101

位3控制输出置0      机器码为01110101

位4控制输出置1      机器码为01101110

位4控制输出置0      机器码为01110110

位5控制输出置1      机器码为01101111

位5控制输出置0      机器码为01110111





运算指令对标志位的影响:

ADD加法指令,如果运算有进位,进借位标志置1,否则置0;如果运算结果为0,零标志置1,否则置0;

INC加1指令,如果运算有进位,进借位标志置1,否则置0;如果运算结果为0,零标志置1,否则置0;

SUB减法指令,如果运算有借位,进借位标志置1,否则置0;如果运算结果为0,零标志置1,否则置0;

DEC减1指令,如果运算有借位,进借位标志置1,否则置0;如果运算结果为0,零标志置1,否则置0;

AND与运算指令,不影响进借位标志;如果运算结果为0,零标志置1,否则置0;

OR或运算指令,不影响进借位标志;如果运算结果为0,零标志置1,否则置0;

NOT非运算指令,不影响标志;

XOR异或运算指令,不影响进借位标志;如果运算结果为0,零标志置1,否则置0;
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
53楼
我会以图的方式说明  CPU控制器对所有指令执行过程[的每一个时钟 门电路工作状态[s:222]
折叠评论
加载评论中,请稍候...
折叠评论
2012-11-16 00:49:16
2012-11-16 0:49:16
神之觉醒(作者)
65楼
回 64楼(daxus) 的帖子
没做汇编器,ROM程序是用机器码写的2进制文件,用C32Asm 或 WinHex打开就能看见了 (我是用C32Asm写的)

ROM二进制文件:

attachment icon 8位机测试程序.rar 1.00KB RAR 57次下载

程序结构后面我再说,不然现在SPI板和硬件连接还没说清楚; 码字很累。。。[s:221]
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
66楼
立即数传送指令执行原理  这样弄不知道大家能看得懂不~~~[s:108]  
(ROM里的机器码请参照49楼)      这个是GIF文件  是动的

立即数传送指令执行原理.gif



估计放不了GIF[s:263]
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
71楼
上面的都抛掉了 这里我全部重新开始讲:


大概是在09年的时候,我朋友发了个链接过来,他说是国外DIY CPU的,就是那个Magic-1,我把全文拜读完后,佩服得5体头地,心里面的疑惑也油燃而生,老外的这个CPU怎么装上主板去用的呢,又没有显示器,就是一堆集成电路,还是什么门电路,我那时对门电路是什么东西还不知道,但就是那一刻起,DIY CPU就像一颗种子一样种在了我的心里,其实也不是天天想着弄这玩意睡不着; (09年我还在玩音响,我朋友也是)  


2010年中,开始对木马感兴趣,主要就是玩灰鸽子木马,但是木马一放到别人电脑就被杀毒软件秒掉了,怎么办呢,就要做免杀,免杀就是让杀软认不出来,我就到网上搜啊搜,看到了一篇介绍特征码免杀的文章,大概操作方法就是把木马分成很多个文件之后用杀软杀,杀软会把某一个文件杀掉,这样就再把那个被杀掉的文件再分,再用杀软来杀,再分,再杀,再分,再杀。。。。。。。。。最后就锁定了精确的位置,只要修改那个位置,杀软就不会杀了,那个位置的长度仅为两个字节,这就是特征码,文章的作者说,修改要涉及到汇编,当时我也不知道汇编是什么东西,大概就是什么加法减法移动跳转~~~  后面反正就是看了一堆教程,就知道操作了,结果就不多说了。。。。玩木马就玩了个把月,之后就开学了;就是这次经历汇编也在我心里种下了一颗种子。


2010年10月还是11月了~  的某天, 不太记得时间了- -, 看了一偏说人类DNA的什么代码,有个老外研究发现,可能是外星人写的,说是还加了注释,没全部跑起来,全跑起来就很叼杠了 什么什么之类的,这篇文章很搞。。。同时也激发了我下决心要学编程;


2010年底到2011年之间,看教程学了易语言编程,全中文的,很好搞,也明白了程序是怎么个回事,还写了几个无聊脑残型的程序。


2011年初,我在上高二,就是这段时间开始对计算机感兴趣,YY着用继电器做个计算器(是计算器不是计算机,因为这个时候还没了解计算机的原理),不知道怎么无意间想起门电路,上课的时候用手机查,不查不知道,一查还蹦出了一大堆,什么与门 或门 非门 与非门 或非门  异或门  同或门 三态门,有点眼晕,细细看完才明白原来是高低电平输入和输出的不同对应关系,YY的用继电器做个计算器后来也没有搞, 反倒是我同桌,整天跟我费话,烦得要死,跟我说什么单片机,他想做个串口的下载器,后来他也没有搞,还没到2011年中他就走了,我闷得无聊,因为班里面的那群B整天赌钱,没人跟我有相同爱好的,后面放假了,我也打算不再读下去; 2011年6月初,想起单片机,就下了教程来看,边教C语言的,讲得很不错,有些心动,跑到了收破烂那里捡了几片回来,后面有点懒还有兴趣问题就没开工。


2011年7月~8月,这个时间发现了科创论坛, 玩高压电,玩高压电是因为我对流传的特斯拉线圈输出大于输入报有幻想,后来破灭了,就玩玩了也不玩了;


2011年9月底第一个单片机作品,那个兴奋劲~~  诶 ~不说了  现在想想那时像个傻X一样;


2011年10月初开始认真搞计算机原理,由于初步玩了单片机差不多心里就有个底了,后面当然就是下教程来看拉,同时还去图书馆借了几本书,对我帮助最大的就是<<新编微机原理及接口技术>> 和 <<数字逻辑>> 这两本,  教程就断续看了半个月,看了有10多集这样,名字叫<<微机原理>>,是个女老师讲课; 之后就明白了汇编和机器码的原理; 后面又搜到<<简单cpu的逻辑设计>>,我点进去看,进去时不懂CPU的架构和指令集,出来时就都懂了~~~


2011年底到2012年2月底就开始用Multisim 11.0画电路,是16位机,很蛋疼的电路和架构,操作系统的内存加载方案和进程切换机制都有了,后来也没完成,技术原因(硬件CPU控制器还没YY出来 想用单片机来控制)和本人太懒。


2012年3月就全部放下了,帮同学亲戚装了几台机;4月底就有计划的用单片机对鼠标试验驱动,因为我还YY着用单片机作为DIY计算机的PS/2接口转换处理,打算用键盘鼠标作为输入设备, 后面就顺便玩玩单片机; 7月还出去打了半个月工,做电脑销售员  擦的。。。后面被辞了,没工资+ +!。 8月底我抛弃了16位机,转向更简单的8位设计,就是9月底发上来的那个,可以写个简单的单任务操作系统来跑跑,因为那个架构可以靠操作系统软件在外部(内存卡和硬盘之类的)加载程序数据进ROM,之后操作系统再修改程序指针把程序入口地址转向刚加载进ROM的程序, 电路只是仿真粗略画一下,还没进行优化的。


再后面花了一个星期不到的时间来设计现在的这个炮灰小机机,想验证一下这个纯硬件CPU控制器,10月初就完成设计了,这个炮灰小机机有两个版本,第一版本是双指令控制器,也就是二级流水线版的(过后我发上来),二级流水线的最高速度为4个时钟一条指令,比现在的8个时钟一条指令的第二版本最大提升速度为两倍,不过我太懒了,又不想搞这么复杂;之后第二版本就改好后,想拿去打样,是15CM X 20CM的板子,麻弊的。。。一问打样价格两狗多(两百多),都能买好几套IC了。。。后面我问其他几家10CM X 10CM的10片能拼板不,说是能,我就把电路分割开为4个部份,分别画完了4块10CM X 10CM内的板子,一发过去,我擦,他说拼板只能在10CM X 10CM内拼,我勒个去~! 搞来搞去都10月中旬了,算了想想干脆自己做得了,后面就这样了~~~


下面是我对CPU原理的理解,好吧,我尽量通俗~   本人文笔不是很好
+25  科创币    cnacd   2012-11-19   上进少年!!励志贴!!加油!!这让大学里打DOTA的人们情何以堪啊
+15  科创币    摩比   2012-12-22   挺励志的
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
75楼
这楼讲我对计算机原理的理解(建意最好有单片机和C语言的基础):


学过C语言的人对 “x = y + z - k;” 这段语句肯定很熟悉,那么CPU是怎么实现的呢,用中文来描述,就是变量y和变量z相加 得出的结果再减变量k,最后把运算结果放到变量x ,对,CPU就是按照这个步奏来实现的,


下面我们就来虚拟一个计算机系统,详细说明CPU是怎么处理 “x = y + z - k;” 的。



现在这里的计算机系统包含有CPU、ROM、RAM;
    

1. ROM是一个存储器,用来顺序存放运算“x = y + z - k;”的步奏(程序代码).

2. RAM也是一个存储器, 和ROM不同的是,RAM是用来存放数据变量x、y、z、k的.

3. CPU是包含控制和运算功能的一个器件,现在假定CPU里面有两个数据寄存器,分别为累加器A和R1,   --------数据寄存器是什么东西有什么用,怎么用,先不用管.


首先要说明一点,变量x为RAM里的3单元,变量y为RAM里的0单元,变量z为RAM里的1单元,变量k为RAM里的2单元;



要执行“x = y + z - k;”这条C语言语句就要进行底层编程,底层编程就是像上面中文描述的过程一样,用CPU的指令来代替中文描述, 一步一步的进行运算处理, 也就是用CPU提供的指令来编程.  (这一步应该叫做C编译了)


下面是用CPU指令编好的程序(其实就是“x = y + z - k;”的编译结果):

MOV A,[0];  

MOV R1,[1];

ADD A,R1;

MOV R1,[2];

SUB A,R1;

MOV [3],A;

上面的程序一共有6行,然后,装入ROM,就像这个样子:

1.jpg


装好程序后,下面CPU开始上电~~~
CPU复位上电后程序指针是指向ROM的0地址.  (当然不也能排除某些变态脑残无敌型CPU是指向XXX%$#的)


1.执行 MOV A,[0];  此时CPU的程序指针是指向ROM的0地址, CPU把0地址里的 “MOV A,[0];” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“MOV” ,MOV也就是传送操作的意思,并且知道要把RAM “[0]”地址里的数据送往“累加器A”, CPU解读完这条指令就开始操作,这时CPU先把地址[0]送往数据指针,数据指针也就是RAM的地址,之后再把RAM里的y通过RAM数据线送往累加器A,这时累加器A的内容就为y,    最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

2.jpg


2.执行 MOV R1,[1];  此时CPU的程序指针是指向ROM的1地址, CPU把1地址里的 “MOV R1,[1];” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“MOV” ,MOV也就是传送操作的意思,并且知道要把RAM “[1]”地址里的数据送往“R1”, CPU解读完这条指令就开始操作,这时CPU先把地址[1]送往数据指针,数据指针也就是RAM的地址,之后再把RAM里的z通过RAM数据线送往R1,这时R1的内容就为z,    最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

3.jpg

3.执行 ADD A,R1;  此时CPU的程序指针是指向ROM的2地址, CPU把2地址里的 “ADD A,R1;” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“ADD” ,ADD也就是加法操作的意思,并且知道要把累加器A和R1相加, CPU解读完这条指令就开始操作,累加器A作为被加数,R1作为加数,相加,运算结果送回累加器A,覆盖累加器A的内容,最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

4.jpg

4.执行 MOV R1,[2];  此时CPU的程序指针是指向ROM的3地址, CPU把3地址里的 “MOV R1,[2];” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“MOV” ,MOV也就是传送操作的意思,并且知道要把RAM “[2]”地址里的数据送往“R1”, CPU解读完这条指令就开始操作,这时CPU先把地址[2]送往数据指针,数据指针也就是RAM的地址,之后再把RAM里的k通过RAM数据线送往R1,这时R1的内容就为k,    最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

5.jpg

5.执行 SUB A,R1;  此时CPU的程序指针是指向ROM的4地址, CPU把4地址里的 “SUB A,R1;” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“SUB” ,SUB也就是减法操作的意思,并且知道要把累加器A和R1相减, CPU解读完这条指令就开始操作,累加器A作为被减数,R1作为减数,相减,运算结果送回累加器A,覆盖累加器A的内容,最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

6.jpg


6.执行 MOV [3],A;  此时CPU的程序指针是指向ROM的5地址, CPU把5地址里的 “MOV [3],A;” 通过ROM数据线读入CPU,这一阶段称作取指令或发射指令,取完指令了,CPU分解指令,知道这条指令名为“MOV” ,MOV也就是传送操作的意思,并且知道要把累加器A的数据送往RAM的“[3]”地址, CPU解读完这条指令就开始操作,这时CPU先把地址[3]送往数据指针,数据指针也就是RAM的地址,之后再把累加器A里的数据通过RAM数据线写入RAM, 最后CPU还要做一个关键的动作,就是把程序指针加1,以指向下一条指令,结果如下图所示。

7.jpg



总之MOV、ADD神马之类的指令和机器码是等同的,机器码就是用2进制来定义表示,CPU可以读取。


这U的电路和指令集都发了,下楼将解密视频上的“播放”效果~
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
77楼
回 76楼(kknd) 的帖子
硬件乘法器是个好东西,下次有机会也一起搞上去,这东西要是有现成的IC就好[s:274]    话说我现在这U也可以实现乘法,不过要RAM做为铺助,乘法可以用移位和加法来实现,  移位可以用加法来实现,  就是做8位乘8位的乘法会很烦琐,  后面我再把此机的乘除法程序试着写出来
折叠评论
加载评论中,请稍候...
折叠评论
2012-11-17 00:10:10
神之觉醒(作者)
79楼
回 78楼(dx毁灭者) 的帖子
反正时钟就是¥¥……¥#·#%……#¥。。。。。=  =[s:275]  表达的意思多了去了   在本帖你就把时钟看成HZ得了[s:221]
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
84楼
这楼讲解视频上的“播放”效果,其实就是刷图片,后来感觉没声音很无聊,就把声音配上去了。

刷图片速度快最主要的就是靠硬件SPI,CPU只是充当控制角色。

下面是硬件SPI电路图。

硬件SPI板.jpg

控制指令和连接定义(下面以16进制代表2进制的机器码指令):

0x6A  位0控制输出置1  选液晶数据寄存器           //TFT液晶RS线,连接CPU板的BIT0_OUT(请参看电路图,此控制位有插针输出)  
0x72  位0控制输出置0  选液晶命令寄存器           //TFT的复位线接VCC,RD线接VCC,CS线接GND。

TFT我是在这里买的http://item.taobao.com/item.htm?spm=0.0.0.34.coGa6k&id=13985339513 (我和他不是一伙的~)

0x6B  位1控制输出置1  SPI寄存器为置数模式        //SPI板左移/置数选择线,连接CPU板的BIT1_OUT(请参看电路图,此控制位有插针输出)
0x73  位1控制输出置0  SPI寄存器为左移模式        

0x6C  位2控制输出置1  TF卡的MOSI为SPI寄存器输出    //连接SPI板的TF卡MOSI置1控制,连接CPU板的BIT2_OUT(请参看电路图,此控制位有插针出)      
0x74  位2控制输出置0  TF卡的MOSI置1                    

0x6D  位3控制输出置1  无
0x75  位3控制输出置0  无

0x6E  位4控制输出置1  液晶写时钟                    // TFT的WR线,连接CPU板的U53B的第10脚(请参看电路图有IC号)
0x76  位4控制输出置0  无

0x6F  位5控制输出置1  SPI寄存器置数锁存时钟          // 连接CPU板的U53A的第4脚(请参看电路图有IC号)
0x77  位5控制输出置0  SPI寄存器和TF卡左移一位时钟    // 连接CPU板的U53A的第1脚(请参看电路图有IC号)



上面的控制和单片机IO口模拟差不多。
玩过TFT的人知道用单片机IO口控制液晶的写(WR)线 完成一次液晶写操作 在C语言中要这样操作:

WR = 0;
WR = 1;

上面这样的操作在一般51核的内部大约需要几十个时钟的时间,用IO口模拟控制效率比较低; 而在本人的这个CPU中设置有特别的控制,只要执行一条机器码指令0x6E就能完成一次液晶写操作,只须8个时钟~~~ 有木有效率~

而且用SPI板只要8个时钟就能和TF卡传输一个字节的数据,1条CPU指令产生1个时钟。


程序的控制流程(TF卡和TFT的操作方法网上一大堆,这里就不细讲了):
程序流程.jpg

ROM的2进制文件在65楼发了。。。我不可能一个字节一个字节的注释,那样会挂掉的[s:221]  有兴趣的话可以参看指令集或49楼的说明来对照

下面大概讲一下ROM 2进制文件的结构:

ROM文件里的地执和ROM地址是对应的;

地址0H~2CFH为TFT的初始化部份,下图。
TFT初始化部份.jpg

地址2D0H~34FH为TF卡复位为SPI模式程序,下图。
TF卡复位为SPI模式程序.jpg

地址350H~3CFH为TF卡初始化程序,下图。
TF卡初始化程序.jpg

地址3D0H~44FH为发送CMD18读多块命令到TF卡,其中地址3E1H、3F1H、401H、411H分别为00、04、E2、00,也就是TF卡的扇区地址0004E200,为存放BIN图片文件的起始扇区地址,文件的起始扇区地址我是用WinHex查看的,下图。
发送CMD18读多块命令到TF卡.jpg

地址450H~166FH为读TF卡512字节和刷掉两个CRC(太长就不截图了。。。)。


地址1670H~1677H为SPI再接收一个字节,下图。
SPI再接收一个字节.jpg

地址1678H~1685H为判断SPI收到0xFE?,下图。
判断SPI收到0xFE?.jpg

这些16进制程序都是手工码上去的[s:221]
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
86楼
其实这个也没什么的玩玩而已。。。搞东西去~~~后面的太多,有时间再说了  先闪

最后发个71楼说的第一版的电路没优化的2级流水线CPU,纯属乱搞

attachment icon 哈佛结构2级流水线.rar 1.82MB RAR 62次下载
+7  科创币    kknd   2012-11-17   感谢分享!
折叠评论
加载评论中,请稍候...
折叠评论
2012-11-28 21:26:04
2012-11-28 21:26:04
神之觉醒(作者)
108楼
刚搞好了汇编器1.0版,      编译出来有些杀软报毒,  但我全家保证这个不是木马或病毒[s:274]
下载器现在还没弄好,过阵子才OK,搞好了下载器就方便了,只要把BIN文件通过串口送过去就OK了的
使用方法过些天再说

attachment icon 龙少炮灰8位CPU专用汇编器.rar 328.00KB RAR 62次下载
7.jpg
+5  科创币    daxus   2012-12-01   我也写了一个简单的汇编器,见110楼,有空的时候试一下?
折叠评论
加载评论中,请稍候...
折叠评论
2012-12-04 00:50:48
2012-12-4 0:50:48
神之觉醒(作者)
113楼
回 112楼(daxus) 的帖子
高手啊!支持共同开发!!!非常感谢你!!!非常感谢!!! 好感动。。。。真的[s:229]    
真是太难为你了。。。早知道就把这个CPU指令做完善一点,这个CPU很简陋,不用太较真的去弄的,当然有兴趣就当研究下随便搞搞行了;最后还是非常感谢你~~!

后面那个下载器也不难搞, 我思路是把BIN文件通过串口助手用单片机写到SRAM上去;
之前我是把BIN文件放TF卡通过单片机写上去的,很简单的

天冷了~~我有点懒~~~没啥心情搞~~先放一放了我。。[s:275]我这边暂时没什么进度[s:275]

那个源码后面还想改一下再发上来~~~ 最近太冷可能不动工了[s:220]
源码也先丢上来吧(后面有可能的话我再进一步完善):

attachment icon 8位机汇编器.rar 11.00KB RAR 50次下载

是用易语言写的~ =  =#!~
折叠评论
加载评论中,请稍候...
折叠评论
2014-11-10 18:20:15
2014-11-10 18:20:15
神之觉醒(作者)
178楼
引用 immayaren:
2012年的贴子,为什么我现在才看到
新套件正在设计中  敬请期待~![s::funk:]
折叠评论
加载评论中,请稍候...
折叠评论
2014-12-22 17:16:09
2014-12-22 17:16:09
神之觉醒(作者)
184楼
引用 分立元件:
楼主能讲一下控制器的原理吗!!!
这个贴的CPU可以开mu11文件仿真的,  放个示波器可以看信号时序,  本贴这个CPU控制器原理和这个贴的CPU本质一样的  https://www.kechuang.org/t/50830
折叠评论
加载评论中,请稍候...
折叠评论
2015-02-18 12:54:54
2015-2-18 12:54:54
神之觉醒(作者)
190楼
引用 default:
太强大了。楼主的硬件(电路原理、调试手段和焊接技术)功底已经很强大了,建议楼主直接使用FPGA和硬件描述语言来设计CPU,这样一方面可以把主要时间花费到CPU设计和调试上,另一方面价格会便宜,而性能会提高。不过用分立元件焊接会更有挑战性更有...
谢谢你的建议~
折叠评论
加载评论中,请稍候...
折叠评论
2015-05-27 19:07:58
2015-5-27 19:07:58
神之觉醒(作者)
198楼
引用 拉不达:
让我想起了大学时计算机原理的试验课程。当时就是在实验室用众多的门电路搭个简易计算机模型。
运行起来是不是很爽[s::funk:]
折叠评论
加载评论中,请稍候...
折叠评论
2015-05-29 00:57:16
2015-5-29 0:57:16
神之觉醒(作者)
200楼
引用 rudolf:
这脚好奇怪的样子,焊点旁边那个圆圈形状的是啥东西?
ic座的金属簧片
折叠评论
加载评论中,请稍候...
折叠评论
2015-07-28 21:03:18
2015-7-28 21:03:18
神之觉醒(作者)
207楼
引用 程序计数器:
RAM和ROM用同一块芯片吗?
不是,是分开的
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
208楼
引用 mGP:
楼主教我做摄像机!
嗯!
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
209楼
引用 锋电子:
做工确实牛逼,pcb打孔得好久吧
要几天..
折叠评论
加载评论中,请稍候...
折叠评论
神之觉醒(作者)
210楼
引用 星湖三文鱼:
现在看来还是很不错的开源DIY设计,只玩过上层,这下可以借此机会学学真的底层技术了。。。
底层好玩,,直接程序操作硬件
折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

神之觉醒
学者 机友 笔友
文章
67
回复
1117
学术分
4
2011/08/12注册,5 个月前活动
暂无简介
%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png