riscv - 命令的实现
问题描述
我对理解特定命令的实现有点迷茫。
在此示例中,传递了一个0x00c6ba23
二进制0000 0000 1100 0110 1011 1010 0010 0011
命令
我正在尝试为该指令查找 ALU 控制单元的输入。
从这里我可以看到
- 操作码 =
0100011
- imm[4:0] =
10100
- funct3 =
011
(不正确...) - rs1 =
01101
- rs2 =
01100
- imm[11:5] =
0000000
我正在使用此图像对其进行解码
我的问题是如何获得此功能的 ALU 控制位和 ALUOp 控制位?为什么函数 SD,即使函数 3 显示的是 011 而不是 111?
解决方案
... 为什么是函数 SD,即使函数 3 显示的是 011 而不是 111?
011 是正确的。为了成为 SD 指令,funct3 位必须为 011。根据https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf的第 105 页,SD 指令的格式如下:
| imm[11:5] | rs2 | rs1 | 011 | imm[4:0] | 0100011 |
如果funct3 位是111,那么这条指令就不是SD。
...如何获得此功能的 ALU 控制位和 ALUOp 控制位?
由于这是一条 SD 指令,您可以直接从您在问题中引用的图表中下方表格的 SD 行中读取这些位。
推荐阅读
- batch-file - RENAME 函数不在批处理脚本中重命名
- javascript - Jquery 在 td 中创建带有字典条目的 html 表
- azure - 通过 HTTP 端点触发时,带有 enqueueTimeUtc 参数的 ServiceBusTrigger 失败
- mysql - 用户'root'@'external ip'的访问被拒绝(使用密码:是)
- javascript - Azure 存储 Javascript 库“createBlobServiceWithSas”引发错误:拒绝设置不安全的标头“用户代理”
- r - 减少一棵树的节点数,以获得具有多个子节点的节点
- sql - SQL Where 查询字符串中的列值
- python - 通过应用动态地将列添加到数据框
- mysql - 如何在一列中选择具有相同值但在另一列中彼此之间必须不同的行
- php - [Dialogflow]通过 Webhook 格式更新权限(用于推送通知)