欢迎光临散文网 会员登陆 & 注册

设计红石8086(可能弃坑的那种)(一)

2020-07-29 00:46 作者:黄禄轩电脑专用账号  | 我要投稿

这个企划其实早都有了,只是最近有进度了而已。

废话不多说,直接进入正题。

首先我做了一对异步串行收发电路,是0.25bpt,起始位10.5bit,数据16bit,停止位2.5bit。

2020-07-27_21.45.png 异步串行

时序实验传输数据为0xAA55,电路以及实验结果如图,可以推得时序规范。

这个电路目前貌似没有什么用,但是后面也许可能大概会突然觉得用0T拖总线很麻烦、这个相对就很简单,所以留下来备用。

然后就是0T中继器,是照抄百度的,留着备用

2020-07-28_10.41.27.png 0T中继器

当然,它也是一个1T的非门,只是红石火把好像更香。(pia叽)

CPU有个功能很重要,那就是运算。8086的算术运算总共有如下几种:

ADD, ADC, SUB, SBB, CMP, DAA, AAA, DAS, AAS, INC, DEC, MUL, DIV, IMUL, IDIV

仔细观察发现貌似只用实现ADC和SBB即可,毕竟渣机怕后期CPU组装不起来,那就做吧。这东西很简单,百度即可。

接下来就是实验环节了。

2020-07-28_12.53.59.png AU实验步骤1

如图,我先把0x0512送上总线,然后给操作数A锁存一个脉冲。

2020-07-28_12.54.31.png AU实验步骤2

接着我将0x2946送上总线,并给操作数B锁存一个脉冲。

然后其实已经算好了,接着输出就行。

2020-07-28_12.55.09.png AU实验步骤3

给MUX信号,使能加法结果输出,可以读出是0x2E58,0x0512+0x2946的确等于0x2E58,计算正确。

2020-07-28_12.55.25.png AU实验4

给MUX信号,使能减法结果输出,可以读出是0x1DBCC,0x0512-0x2946的确等于0x1DBCC,计算正确。

最后用CY(进位标志位,1代表进位或借位)测试并对电路计时,0xFFFF+0x0000+1=0x10000用时100tick,0x0000-0x0000-1=0x1FFFF用时104tick,忘记截图了,懒得重做了,反正就这读数。(略略略略略~)

ALU, ALU,没有LU能叫ALU吗(误)。那么就动手吧,逻辑运算共如下几种:

OR, AND, XOR, NOT, TEST

那就实现NOT, OR, XOR, AND吧。

2020-07-28_14.39.15.png 4bit LU

先简单设计一下,基本上就是对算术运算单元做了亿点点的改动,从上到下输出的是:

非A,A或B,A异或B,A且B

从右到左AB分别输入了00, 01, 10, 11。看下结果:老铁,没毛病。接下来复制粘粘粘贴就行了。

和AU一起合影一下,这下只要用胶水(误)粘起来(大雾)就是ALU了。AU和LU合影。

2020-07-28_17.40.04.png 左边是LU,右边是AU

还好他们都在两个结构方块内存下来了,没有4个已经很仁慈了。(草(双语))


在仔细回想回想指令集,有一组不好归类到逻辑或者算数运算的:

ROL, ROR, RCL, RCR, SHL, SHR, SAL, SAR

都实现吧,不过,实现一个参数为1而不是CL的好像更简单。那就实现吧,上层是右移,下层是左移。放图!

2020-07-28_22.53.32.png 位移器的外观图(?)
2020-07-28_22.41.31.png ROL 0x55AA+CY,1 = 0xAB54
2020-07-28_22.41.59.png ROR 0x55AA+CY,1 = 0xAAD5
2020-07-28_22.42.37.png RCL 0x55AA+CY,1 = 0xAB55
2020-07-28_22.43.01.png RCR 0x55AA+CY,1 = 0xAAD5
2020-07-28_22.43.22.png SHL 0x55AA+CY,1 = 0xAB54
2020-07-28_22.43.44.png SHR 0x55AA+CY,1 = 0xAAD5
2020-07-28_22.44.03.png SAL 0x55AA+CY,1 = 0xAB54 SAL和SHL功能一样
2020-07-28_22.44.22.png SAR 0x55AA+CY,1 = 0xAAD5

然后载入0xAA55+CY试试。

2020-07-28_22.45.18.png ROL 0xAA55+CY,1 = 0x54AB+CY
2020-07-28_22.45.34.png ROR 0xAA55+CY,1 = 0xD52A
2020-07-28_22.45.51.png RCL 0xAA55+CY,1 = 0x54AB+CY
2020-07-28_22.46.08.png RCR 0xAA55+CY,1 = 0xD52A+CY
2020-07-28_22.46.25.png SHL 0xAA55+CY,1 = 0x54AA+CY
2020-07-28_22.46.38.png SHR 0xAA55+CY,1 = 0xD52A
2020-07-28_22.46.56.png SAL 0xAA55+CY,1 = 0x54AA+CY
2020-07-28_22.47.09.png SAR 0xAA55+CY,1 = 0xD52A

嗯,那么就到这里……

“桥豆麻袋,SHR 0x55AA+CY,1; SAR 0x55AA+CY,1和 SHR 0xAA55+CY,1是不是算错了?”

这位朋友,如果这个是你独立发现的,恭喜你,答对了,的确算错了。因为电路仍然将CY右移了,这是不合理的。于是我稍稍修改了一下,放图!(之前有的实验由于各种原因就没有必要再做了)

2020-07-29_00.21.31.png SHR 0x55AA+CY,1 = 0x2AD5
2020-07-29_00.21.47.png SAR 0x55AA+CY,1 = 0x2AD5
2020-07-29_00.24.59.png ROR 0xAA55+CY,1 = 0xD52A
2020-07-29_00.25.17.png RCR 0xAA55+CY,1 = 0xD52A+CY
2020-07-29_00.25.35.png SHR 0xAA55+CY,1 = 0x552A
2020-07-29_00.26.14.png SAR 0xAA55+CY,1 = 0xD52A

那么再放几张图给你们看看这玩意到底长啥样。

2020-07-29_00.26.57.png 移位器图1
2020-07-29_00.27.02.png 移位器图2
2020-07-29_00.27.08.png 移位器图3
2020-07-29_00.27.12.png 移位器图4

那么就到……

“桥豆麻袋,有的时候明明不该改变CY的你输出怎么变了?”

不会吧不会吧,我随手给个CY你就真的去更新状态寄存器了????不会吧不会吧不会吧!!!(况且乘除法过程中也会用这个,不会这也想动动CY吧,不会吧不会吧不会吧)

设计红石8086(可能弃坑的那种)(一)的评论 (共 条)

分享到微博请遵守国家法律