🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/开源蜂鸟E203/e203_exu_csr模块里同时读写csr寄存器会不会有问题?
e203_exu_csr模块里同时读写csr寄存器会不会有问题?
开源蜂鸟E203 作者 哄哄 发布于 2020-10-03 02:57(2198 天前) 6354 浏览

模块里的寄存器是用的sirv_gnrl_dfflr,同时读写的话,读到的是新写进去的值。csrrw这种指令会有问题吧 可能csrr csrw这种用法把这个问题掩盖了。我没环境验证这个问题,只是自己在做csr寄存器的时候遇到了这个问题,所以想问下

全部回复 6
哄哄
哄哄2191 天前 · 1 楼

多谢(o^^o) 看了你发的文章,又回去看了下代码,是我弄错了。没跟到底,后面csr读出来后转了几个模块,最后写回rf了。

这个论坛我用不好,uuty也是我 登不上去了……

p
pdp11_foo2191 天前 · 2 楼

这个问题我也晕乎过。我写了个笔记记录这个问题,可以参考一下。 http://www.riscv.cn/d/6

u
uuty2191 天前 · 3 楼

dnxt和qout对应的是写和读吧,在csr模块里用在处理csrrw指令时,对应的就是read_csr_dat和wbck_csr_dat。

我还没全读懂整个core,还在学习,所以说的可能不准确。在e203_exu_csr模块里读写csr寄存器应该是同一个周期。拿mepc来说,寄存器只有一份,

read_csr_dat应该得到是wbck_csr_dat的值。dnxt和qout在上升延过后值是一样的。read_csr_dat后面也没有寄存器存,进了exu_alu


比如csrrw x2 mepc x1

rd x2会变成x1的值,而不是原来mepc的


p
pdp11_foo2192 天前 · 4 楼
回复 领主文:

csrrw是伪指令,编译出来是相当于多条指令,应该不是单纯的同时读写

csrrw是单独的指令,不是伪指令。

p
pdp11_foo2192 天前 · 5 楼

sirv_gnrl_dfflr,同时读写的话,读到的是新写进去的值?这个理解应该是不对的。csrrw没有问题。

领主文
领主文2192 天前 · 6 楼

csrrw是伪指令,编译出来是相当于多条指令,应该不是单纯的同时读写

💡 请 登录 后参与讨论(微信扫码即登录/注册)