自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(4)
  • 收藏
  • 关注

原创 CPU设计实战:Loongarch版 实践任务9:前递技术解决相关引发的冲突

继续分析前面所举的例子,可以发现第2条指令位于译码阶段的时候,虽然它所需要的第1条指令的结果还不在寄存器中,但是这个值已经在流水线的执行阶段计算出来了,那么何必非要等着这个值沿着流水线一级一级送下去写入寄存器后再从寄存器中读出呢?ADDU r4,r3,r2”,当LW处于执行级的时候,ADDU处于译码级,那么下一拍显然ADDU不能到达执行级,只有当LW通过访存级到译码级的数据通路之后ADDU才可以到达执行级。为了支持前递,加入了从执行级、访存级到译码级的数据通路,并使用寄存器相关判断逻辑来控制如何前递。

2024-06-11 16:41:56 379 2

原创 CPU设计实战:Loongarch版 实践任务8:阻塞技术解决相关引发的冲突

这是因为如果第2条指令要使用第1条指令写回到寄存器的结果,就必须保证第2条指令读取寄存器的时候第1条指令的结果已经写回到寄存器中了,而现有的5级流水线结构如果不加控制,第2条指令就会在第1条指令写回寄存器之前读取寄存器,从而引发数据错误。并且有一个细节:保证被比较的两个寄存器号都是有效的,这体现在三个方面:1.参与比较的指令到底有没有寄存器的源操作数或者目的操作数,2.如果寄存器号为0,那么也不用进行比较,因为0号寄存器的值恒为0,3.用来比较的流水级上到底有没有指令,如果没有指令那么比较毫无意义。

2024-06-05 13:25:42 613

原创 CPU设计实战:Loongarch版 lab7:不考虑相关冲突处理的简单流水线CPU

我认为在了解了怎么将单周期分割成流水线之后最主要就是要细心了,将mycpu分成5个module之后,有时候会出现丢掉几个赋值语句(在ctrl+C和ctrl+V时)或者是数据位宽的问题,比如我就忘掉了数据ram的使能信号和读出数据的赋值,导致我卡了很久,而且在复制的时候我认为要给不同阶段之间传递的需要保持的信号附上不同的名字,这样就可以知道是哪个阶段出了问题。不过最终也是解决了问题,通过测试。我在一开始将每个需要传递到下一个阶段的信号都写在输入输出那里,发现这在我后面连线时会变得异常麻烦,参考了。

2024-06-02 12:50:35 556

原创 CPU设计实战:Loongarch版 lab6--20条指令单周期CPU

这个debug卡我时间最长的就是通用寄存器的写使能信号,当时一直没找到,甚至把golden—trace生成了一遍又一遍,对照test,检查了各种,卡了很长时间,我都以为是我之前哪一步搞错了,或者环境什么的,但是一步步做下来并没有,并且“机器永远是对的”让我终于查到了错。debug到一半才想起来写个博客,就不写过程了,下个lab再写过程。下面是两个模块的代码,运行已通过仿真验证。其他的bug就还好,如果认真跟着。就能马上找出来,,上面的每一句话都很重要。走,按逻辑检查并且查。

2024-05-27 19:51:54 923

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除