YY了一个单周期自动机(独家原创含讲解)
神之觉醒2013/10/15计算机电子学 IP:上海
本帖最后由 神之觉醒 于 2013-10-15 18:38 编辑

基本结构:
7.png

这个东西的作用就是给个开关开关的信号(主时钟)然后就会执行ROM里面的指令,以往的自动机,要开关N次才执行完一条指令; 指令就是二进制数据, 打个比方,你可以定义00000001是自毁指令,00000010是核爆指令, 设计好之后就做电路, 然后开始运行,机器从ROM里取出为00000001的指令并执行后就机器就爆掉了,取出00000010并执行后城市就消失了= =~;  好了 不吹这么多牛逼, 实际上机器执行的指令大多只是对数据的加工, 反正就是执行指令,很简单.

在上图这个最基本的简单结构中, 可以实现只用开关一次就可以执行完一条指令, 这里没有时序发生部件,也没有时序操作的控制部件,没有指令寄存器,没有取指令阶段,在时钟上升沿执行当前指令并锁存下条指令的控制信号,计数器、锁存器、寄存器的时钟线直接连接主时钟, 然后给主时钟输入开关信号(主频),就可以工作了。


上电:
首先接通电源,这时计数器、锁存器、寄存器的数据是混乱的,要做的第一件事就复位暂存器件的状态为全0或为全1或是指定的数据,寄存器的数据可以不复位,计数器、锁存器的数据一定要复位,在这里复位为全0,复位完成后,计数器、锁存器的数据就是0;

为了方便讲解执行过程,我在这里只定义2条指令,寄存器A到寄存器B传送指令(B = A指令)、寄存器B到寄存器A传送指令(A = B指令);然后把指令放进ROM,0地址放A = B指令,1地址放B = A指令,2地址放A = B指令;


复位后的状态图示:

8.png
填流水线:
启动机器运行,需要输入开关信号(主时钟、主频),这里的开信号是上升沿,关信号是下降沿,开和关就是一个时钟周期; 现在的状态是复位后的状态(如上图所示),开始分析......锁存器输出的控制信号是全0(空操作),锁存器的输出端操作三态门的控制信号,在这里,三态门是高电平接通,低电平高阻,所以现在三态门B、C、E、F为高阻,三态门A、D接通,寄存器A寄存器B的输入端数据为其本身,计数器的数据是0,计数器指向的是ROM的0地址,ROM输出的指令是A = B指令,然后指令经过译码器译出控制信号,OK 现在A = B指令的译码信号已经送到锁存器的输入端; 这时主时钟来了一个开关信号,由于受到上升沿作用,计数器加1,指向第2条指令,锁存器锁存A = B指令的译码控制信号,寄存器A寄存器B锁存自己的数据;第1个时钟信号没有使寄存器A寄存器B的数据改变,这是因为刚开始上电复位,锁存器的数据为全0,指令还没进入流水线的缘故,第1个时钟信号的作用是填充流水线,做无用功,消耗了第1个时钟之后,后面的时钟就开始做有用功了。然后状态如下图~



9.png
执行第1条指令:
(如上图所示)锁存器已经锁到了第1条指令A = B指令的译码信号,并且通过控制总线接通三态门B、F,三态门C、E不通,三态门A、D的状态你懂得。。。 计数器的状态现在是1,指向第2条指令B = A指令,ROM输出B = A指令,经过译码器译出B = A指令译码控制信号送到锁存器输入端,这时主时钟来一个开关信号(第2个时钟),卡擦一下。。。寄存器A锁住了寄存器B的数据(执行A = B),同时锁存器也锁住了B = A指令译码控制信号,同时计数器+1,指向第3条指令,然后状态如下图~


10.png
执行第2条指令:
(如上图所示)锁存器已经锁到了第2条指令B = A指令的译码信号,并且通过控制总线接通三态门C、E,三态门B、F不通,三态门A、D的状态你懂得。。。 计数器的状态现在是2,指向第3条指令A = B指令,ROM输出A = B指令,经过译码器译出A = B指令译码控制信号送到锁存器输入端,这时主时钟来一个开关信号(第3个时钟),卡擦一下。。。寄存器B锁住了寄存器A的数据(执行B = A),同时锁存器也锁住了A = B指令译码控制信号,同时计数器+1,指向第4条指令,然后状态如下图~


11.png
执行第3条指令:
(如上图所示)锁存器已经锁到了第3条指令A = B指令的译码信号,并且通过控制总线接通三态门B、F,三态门C、E不通,三态门A、D的状态你懂得。。。 计数器的状态现在是3,指向第4条指令,ROM输出第4条指令,经过译码器译出第4条指令译码控制信号送到锁存器输入端,这时主时钟来一个开关信号(第4个时钟),卡擦一下。。。寄存器A锁住了寄存器B的数据(执行A = B),同时锁存器也锁住了第4条指令译码控制信号,同时计数器+1,指向第5条指令。。。然后就执行下去~~~

实际的机器结构肯定不会像第1张图那么简单,那个只是基本结构,讲解用

单周期传送指令、运算指令 、转移指令等都已经YY运行成功,目前在YY中断;

还有那台炮灰机器现在正在写程序。。。

未完待续....那个旧贴子也是
+80  科创币    zx-16533    2013/10/15 又一NB大作,给力
+1  学术分    admin    2013/10/16 颇有研究价值的东西
来自:计算机科学 / 计算机电子学
20
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
fuwen0202
11年3个月前 IP:未同步
649328
看lz这图,这是准备用fpga?还有那个自动机是什么自动机?
新人求问。。
+34
科创币
神之觉醒
2013-10-15
(CPU)+(内存)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年3个月前 IP:未同步
649385
本帖最后由 神之觉醒 于 2013-10-15 22:49 编辑

类似2级流水线效果图:
时序.png
取指令和译码步奏合为一体,就是取控制信号,然后就是锁存,锁存的同时取控制信号,取控制信号的同时锁存.....
很简单的一个结构, 很容易就搞出电路然后DIY出来.

如果把ROM的位数括宽...译码都不用译了...只是不经济~

我看了网上好多单周期CPU的文章, 里面都有控制器和指令寄存器, 还有数据寄存器的锁存信号必须控制器操作,这样做增加了DIY难度 而且降低了主频,  我这里没有专门设计的控制器, 明显的特征是数据寄存器一系列暂存器件直接连接主时钟,不用经过控制器[s:427]    
寄存器堆不需要数据输入的时候,会接通数据回路(寄存器输出端和输入端回路),所以寄存器不会因为上升沿到来丢失数据;  其实上面演示的是寄存器堆间数据传送的过程,数据经过ALU运算器本质上就是数据传送, 只是目标数据按规则产生了变化

我知道有人迫切的想了解单周期条件转移怎么操作, 这个后面会讲;  期间还脑残的设计了个动态分支预测机制,后来才想明白,这个机制是对CISC复杂指令的条件转移效率过低发明的~  然后又看到ARM9里面也有分支预测.. 好无语,
未完待续....... 可能有说得不对的地方,发现的话请板砖送上~切莫被洗脑~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
磕创论坛
11年3个月前 IP:未同步
649397
最好写个软件模拟一下,才能确认行得通。
+16
科创币
神之觉醒
2013-10-15
电路仿真就行了 目前逻辑上还没发现BUG, 实际结果我会进行验证
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
磕创论坛
11年3个月前 IP:未同步
649399
三态门如果能直接改成multiplexer 看起来简单一些。
+7
科创币
神之觉醒
2013-10-15
对..应该弄个漏斗型MUL看起来萌一点
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年3个月前 IP:未同步
649403
本帖最后由 神之觉醒 于 2013-10-15 23:03 编辑

磕创论坛 发表于 2013-10-15 22:48
三态门如果能直接改成multiplexer 看起来简单一些。


评分说错...是MUX...[s:10]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
磕创论坛
11年3个月前 IP:未同步
649480
电路仿真没有用C仿真方便。后者速度也快。将来架上编译器可以直接跑程序。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
冲压发动机
11年3个月前 IP:未同步
649564
又见大神.....膜拜......
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
老A
11年2个月前 IP:未同步
652582
有没有考虑ALU单元放在哪儿?还有ROM查表指令怎么处理?
我做过一个处理器,所有指令单时钟周期,唯一的例外是:ROM查表指令(类似movc  reg, [ROM_ADDR]),需要2个时钟周期完成。
样片、编程器、仿真器、集成开发环境(包涵编译器、下载、全速运行、断点、单步调试、寄存器观察和修改、RAM数据观察修改等等)都有,呵呵[s:9]
是不是有机会量产?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653211
老A 发表于 2013-11-7 15:19
有没有考虑ALU单元放在哪儿?还有ROM查表指令怎么处理?
我做过一个处理器,所有指令单时钟周期,唯一的例 ...


运算器接之简单,寄存器输出送多路器送ALU,ALU输出带高阻送数据总线,  指令译码出来的控制信号一锁马上就作用多路器或ALU或RAM或程序指针下条指令地址, 这里不打算把表放ROM了, 表放在RAM,  ROMRAM分开哈佛结构吧, 这里定长指令,指令长度为看情况位,立即数也放指令里了, 堆栈指令也废掉, 我看看...暂时还没发现实现某常规程序的瓶颈,  外面有中断来的话进入中断程序,马上关中断然后保存断点地址,之后再看情况开中断....

实现某些复杂指令可以多条精简指令组合..这个交给编译器得了.


我现在这样想...
设计结构灵巧精简的硬件处理结构
适合常用指令的硬件结构
按照硬件的结构特性设计指令
设计指令的时候又反馈微调硬件结构
调硬件必须要保证延迟在范围内
绝对不会为了实现某条很少用,又比较复杂操作的指令而使硬件结构变得臃肿
通过精简指令组合实现复杂指令集的处理效果
这样程序执行就不会出现瓶颈

最终目的就是做出很简单,可以DIY得起的单周期CPU,用74HC门电路实现性能>10MHZ.....要是情况好的话最高估计应该可以勉强上到20MHZ吧,   简简单单实现吧, 小玩意[s:12]


看样子你应该是用FPGA,要是投片的话~一定要弄好点噢!!!   .........~智斗土豪~


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653218
本帖最后由 神之觉醒 于 2013-11-10 23:43 编辑

想弄出很牛X的效果...体会到什么叫眼高手低了,  脑子不好使,   很佩服工作在高端前沿的工作人员, 正是他们超高的智慧带来了惊人的科技的发展....    现在自我评估一下..... 他们快到山顶了,我还在找登山工具....   脑子不好使,有时候想东西真的转不过弯[s:4]    可能鲁多了...   目前走"玩具规模"的路线[s:427]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
老A
11年2个月前 IP:未同步
653233
本帖最后由 老A 于 2013-11-11 00:23 编辑

神之觉醒 发表于 2013-11-10 22:51
运算器接之简单,寄存器输出送多路器送ALU,ALU输出带高阻送数据总线,  指令译码出来的控制信号一锁马上就 ...


ALU的问题还好解决。表放RAM我觉得不好办:表怎么初始化?总不能一条指令一条指令填充RAM表的内容吧。除非RAM ROM统一编址,否值ROM查表基本上是必须要的。

用FPGA做也很便宜啊,完全DIY得起的,跑个10M应该还是可以做出来的。



这是我做的那颗,Layout版图的局部,蓝色方框里是内核,包括指令、ALU、寄存器
内核.jpg

硬件仿真器,灰尘好多,都不敢清理,怕出问题,独苗啊。
仿真器.jpg
逻辑全在FPGA里,右边整整齐齐排列的那些芯片,是用来仿真IO输入输出的

下次有空了,发个详细点的
+200
科创币
虎哥
2013-11-11
鼓励讨论
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653235
本帖最后由 神之觉醒 于 2013-11-11 01:09 编辑

老A 发表于 2013-11-11 00:20
ALU的问题还好解决。表放RAM我觉得不好办:表怎么初始化?总不能一条指令一条指令填充RAM表的内容吧。 ...


各人架构不同,  我认为 ,如果是小表可以一条指令一条指令初始化, 大表的话直接从外存调进来或固化在ROM然后放RAM的某段地址上, 不然有时候为了某条指令~ 需要牺牲频率增加功耗, 你的板子看起来也挺拉风的!!!   现在实现的指令可以列出来看看不, IO操作是有独立的指令和地址空间  还是RAM映射IO?   个人认为单周期影响频率的主要瓶颈在ALU、ROM、RAM    如果上缓存的话。。。  用FPGA实现最划算,  缓存、多核、硬件多任务管理有没有研究  希望能得到一点启发...
灰尘这么多  板子放多久了![s:14]
其实我用74实现的原因。。。就像现在有人喜欢玩电子管功放一样
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
老A
11年2个月前 IP:未同步
653238
本帖最后由 老A 于 2013-11-11 01:10 编辑

神之觉醒 发表于 2013-11-11 00:44
各人架构不同,  我认为 ,如果是小表可以一条指令一条指令初始化, 大表的话直接从外存调进来或固化在ROM ...


板子倒不算什么,都是常规的东东
我的意思是,用74做会规模很大,容易出问题,不好查。而且修改电路会很痛苦滴,呵呵呵

实现的指令主要又几类:

数据传送:包括立即数到寄存器,寄存器之间,RAM和寄存器之间,ROM到寄存器,IO等是地址映射
运算:   加法,减法,移位
无条件转移
条件转移
函数调用
中断跳转与返回
。。。。

贴一段代码作为例子,寄存器是16位的
汇编例子.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653239
老A 发表于 2013-11-11 01:08
板子倒不算什么,都是常规的东东
我的意思是,用74做会规模很大,容易出问题,不好查。而且修改电路会 ...


我的指令和你差不多  95%一样!~
函数调用硬件真的是要拐大弯了。。。。我是用编译器实现函数调用的,编译器自动计算返回地址并存到RAM,函数返回时把保存到RAM的地址写程序指针。。。  然后硬件消耗就下来了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653240
本帖最后由 神之觉醒 于 2013-11-11 01:24 编辑

老A 发表于 2013-11-11 01:08
板子倒不算什么,都是常规的东东
我的意思是,用74做会规模很大,容易出问题,不好查。而且修改电路会 ...


逻辑运算不能少的  我想你漏写了,  还有一招~~~ 只做加法指令, 算减法时把被减数取反+减数,然后结果再取反。。     编译器实现~~~   这样一来可以降功耗拉频率
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653241
老A 发表于 2013-11-11 01:08
板子倒不算什么,都是常规的东东
我的意思是,用74做会规模很大,容易出问题,不好查。而且修改电路会 ...


先上床了[s:427] ...改天聊   很高兴能一起研究[s:427]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
老A
11年2个月前 IP:未同步
653412
神之觉醒 发表于 2013-11-11 01:21
逻辑运算不能少的  我想你漏写了,  还有一招~~~ 只做加法指令, 算减法时把被减数取反+减数,然后结果 ...


对的,逻辑运算漏写了[s:9]

减法指令用编译器取反+减数的方法,会造成减法不是单周期指令了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒作者
11年2个月前 IP:未同步
653424
本帖最后由 神之觉醒 于 2013-11-12 04:22 编辑

老A 发表于 2013-11-12 00:27
对的,逻辑运算漏写了

减法指令用编译器取反+减数的方法,会造成减法不是单周期指令了。


确实,从性能角度考虑,减法指令不能少。
未来有没有打算用自制的cpu做一套属于自己的完整计算机[s:447]
我现在还在给那台炮灰机器写程序,到时搞定跑起来就很嗨了,现在弄程序发现~编译器必须要下功夫,最好是能搞个c,不然写起来有点费劲[s:16]  目前我这个编译器偷懒乱搞的,然后写着写着自己就晕了 不由得感叹。。c是多么的顺手

程序搞得查不多了,就开始搞单周期,
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
老A
11年2个月前 IP:未同步
653483
神之觉醒 发表于 2013-11-12 04:14
确实,从性能角度考虑,减法指令不能少。
未来有没有打算用自制的cpu做一套属于自己的完整计算机{:398 ...


芯片性能不够,搞个完整的计算机估计不行。我只做了核心部分,就是多个任务的调度和运行。图形界面没做了,芯片资源不够用。

编译器的确要花功夫写的。C编译器不好写,我尝试一下,觉得要花太多精力,放弃了。C编译器有专业的公司在做,大概在几万到10几万。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
上级专业
同级专业
神之觉醒
学者 机友 笔友
文章
71
回复
1163
学术分
4
2011/08/12注册,1年11个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}