e203_exu_csr模块里同时读写csr寄存器会不会有问题?

2020-10-03 02:57:05
6
255

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

用户评论 (6)
  • 哄哄

    2020-10-10 10:30:59 哄哄 1#

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

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

  • pdp11_foo

    2020-10-10 09:38:48 pdp11_foo 2#

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

  • uuty

    2020-10-10 00:07:41 uuty 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的


  • pdp11_foo

    2020-10-09 10:33:33 pdp11_foo 4#

    领主文

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

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

  • pdp11_foo

    2020-10-09 10:32:30 pdp11_foo 5#

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

  • 领主文

    2020-10-09 10:11:25 领主文 6#

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

关注我们

微信扫码登录 点击刷新二维码