在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: ran_newstar

[讨论] 有关《自己动手写CPU》该书的疑问(汇总)

[复制链接]
发表于 2015-1-23 16:16:27 | 显示全部楼层
AluOp为什么是8位数,根据什么得来的,为什么有的低6位与func相同,有的却不同
发表于 2015-1-24 11:14:03 | 显示全部楼层
回复 20# gxd8689233


    并不是在lwl lwr swl swr指令的前面都需要加上nop指令,此处是笔者的一个失误,在这里有一个加载指令相关,最后一条lwr指令与紧接着的swr指令存在相关,但是在9.2节还没有解决加载相关的问题,所以需要加一条nop指令,其余地方是不需要添加nop指令的,在后面章节解决这个问题后,就不需要加任何nop指令了
发表于 2015-1-24 11:16:16 | 显示全部楼层
回复 21# rbb


    Aluop是自己定义的,为的是区分每个指令的作用,只要不重复就行,对于MIPS32指令集而言,使用8bit可以涵盖所有的指令,所以此处使用8bit
发表于 2015-4-21 18:19:21 | 显示全部楼层
楼主,有2个问题
1.第九章的swl指令前面的指令说明与Verilog实现不同,前面说swl将rt地址高4-n个字节存到storeaddr处而不是storeaddr_align处,但是在mem.v中却是mem_addr_o <= {mem_addr_i[31:2], 2'b00};这个不就是storeaddr_align吗,望解答。
2.第九章第一部分的测试程序第三段的lw和lwl及lwr之间就存在load相关问题,应提前说相关问题或加NOP吧
发表于 2015-4-27 19:45:49 | 显示全部楼层
回复 24# rbb


   第一个问题:说先说的是书上没有讲错。还是以书上的例子为例,假设storeaddr为5,此时的storeaddr_align为4,要将寄存器的高3个字节存储到storeaddr为5开始的位置,这个没有疑问吧?可以参考书的第236页。代码中确实是mem_addr_o <= {mem_addr_i[31:2], 2'b00},但是在这个例子中还要设置mem_sel_o的值为4'b0111,mem_data_o为{zero32[7:0].reg2_i[31:8]},OpenMIPS对外采用的wishbone总线,并且是大端模式,所以mem_sel_o为4'b0111就表示只写低三个字节,写到mem_addr_o+1、mem_addr_o+2、mem_addr_o+3的位置,也就是第5、6、7字节处,同时mem_data_o的低三个字节正是寄存器的高三个字节,也就是要写入的值。

第二个问题:确实存在load相关,当初举这个例子的时候没有注意到这一点,感谢指出。

 楼主| 发表于 2015-7-5 15:40:24 | 显示全部楼层
能不能将光盘内容上传?比如baidu云盘 .
买了书,但是笔记本没有配光盘.
发表于 2015-7-7 22:27:42 | 显示全部楼层
回复 26# ran_newstar

可以在http://yunpan.cn/ccg286rFsUSHY (提取码:6ca1)下载
 楼主| 发表于 2015-7-19 18:27:47 | 显示全部楼层
回复 25# leishangwen

有错误的,希望能在博客上看到更新后的正确的章节。
 楼主| 发表于 2015-7-26 13:15:33 | 显示全部楼层
回复 27# leishangwen


   谢谢!已经下载。为了方便反馈书中一些内容,楼主是否能考虑建一个qq群?
发表于 2015-8-3 12:02:13 | 显示全部楼层
回复 29# ran_newstar

建群是不是要太阳级别才可以啊,我很少用,目前可能还是几个月亮,可以在开源CPU爱好者群中讨论,277505520
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-27 05:14 , Processed in 0.021487 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表