从胡伟武教授的计算机体系结构课,看数字电路设计思路

实话实说,作为一个基础一般的国科大研究生,想要真正的从龙芯之父身上学到很多经验和思路,我自忖能力不足,本篇文章与其说是思路,不如说是一篇课堂笔记,如有错漏,还请指摘。 

首先,数字电路的设计思路是“了解”:胡老师经常挂在嘴边的一句设计箴言是“上知天文,下知地理”,设计CPU,向上要了解跑在CPU上面的操作系统、编译器和应用程序,向下要考虑到设计模块、部件的电路和版图结构。只有理解了“天文地理”,才能精准的归纳出我们要设计的芯片或者模块的具体要求。

第二,在了解了待设计模块(或者CPU)的应用对象后,在设计本模块的功能时,采取“自顶向下、循序渐进、精准具体”的设计方式,胡老师在给我们讲述传统RISC五级静态流水线时,提出了十张图,这里面我摘两张,其中每一个模块,每一条线,乃至每一个字母,胡老师都能如数家珍一般说出其中的含义,我认为在我们进行某一个模块设计时,也应当学习这种精神,扒来一张图,里面有的部分不清楚,就开始按照图片内容进行设计,那必然是不好的。

第三,在进行某些功能的实现时,比如出现相关指令和指令冲突时(如RAW相关导致的冲突),如何实现流水线阻塞,有的朋友可能就会说,“发现了一条指令用到了前一条指令的运算结果,那么有RAW了,我们就把流水线停住,直到上一条指令WB阶段结束了以后,我们再译码执行”,对不对呢?完全没有错误,但是如果思考到这个阶段就开始写代码,我认为是远远不够的。

比如,CPU如何发现某一指令用到了尚未写回的数据?CPU发现了冲突的产生之后,又如何使流水线停下呢?

胡老师讲得十分详细:在指令译码(ID)阶段,对比被译码指令的源寄存器是不是流水线EX、MEM、WB过程中,尚未写回的目的寄存器,如果是,ID阶段的Instruction就要开始被阻塞了。那么知道这些够不够呢?还不够具体。

在判断阻塞阶段,胡老师又告诉我们,在五级流水线之间,有4层寄存器(作为缓存),其中保存着上一步操作没能用上的控制部分和目的寄存器(也就是dest部分),将后三个寄存器中的dest与IR缓存中两个RS1、RS2(操作数源寄存器)做对比,如果有一个相同,就有冲突产生。

在控制阻塞开始阶段,我们引出使能线到PC和IR,使其值保持不变,EX的输入寄存器也关闭使能,使后面进去的数据都为填充的bubble数据,这样就完成阻塞了。

总之,听了胡老师的课之后,我觉得我们以后设计数字电路的时候,也要效仿这种设计流程,即

1.搞清楚要设计的东西是什么;

扫描二维码关注公众号,回复: 13132792 查看本文章

2.绘制出模块的功能图,弄清楚每一个小结构的具体功能;

3.在实现某一个功能的时候,精确到bit;

这样才能避免模糊,在涉及到某一个部分时,大呼“天啊,这一步应该如何设计!啊,我的面积用光了,可我也没想到这部分要这么大啊!”

 

 

猜你喜欢

转载自blog.csdn.net/Mr_liu_666/article/details/109093700