当前位置: 首页 > news >正文

从零开始设计riscv cpu记录之五

一、在测试mulhsu不通过,其余的mul 、mulh、 mul都通过,这是为什么?

指令含义
mulh有符号 × 有符号,取高 32 位
mulhsu有符号 × 无符号,取高 32 位
mulhu无符号 × 无符号,取高 32 位
mul有符号/无符号 × 有符号/无符号,取低 32 位

二、对我来说,是认知之外的原因

三、ex.v中乘法的实现,分成散步

第一步,先取到操作数的有符号格式:

wiresigned[`DW-1:0]op1_signed=$signed(op1_i);wiresigned[`DW-1:0]op2_signed=$signed(op2_i);

第二步,按照表格中规定的计算乘积,比如mul,无符号相乘,就是op1_i * op2_i,其他的方法也一样:

wire[`DW*2-1:0]mul_result=op1_i*op2_i;wire[`DW*2-1:0]mulh_result=op1_signed*op2_signed;wire[`DW*2-1:0]mulhsu_result=op1_signed*op2_i

第三步,取32位,高32位或低32位

`INST_MUL:begin reg_wdata_o=mul_result[31:0];end `INST_MULH:begin reg_wdata_o=mulh_result[63:32];end `INST_MULHSU:begin reg_wdata_o=mulhsu_result[63:32];end `INST_MULHU:begin reg_wdata_o=mul_result[63:32];

四、思路清晰,感觉不会出错,但是忽略了verilog的乘法规则

五、mulhsu的错误原因:mulhsu要求的是有符号数 × 无符号数,但op1_signed * op2_i这种写法在 Verilog 里会被当成无符号 × 无符号来算。

六、Verilog 的混合符号乘法规则

Verilog 规定:一个表达式里只要有一个操作数是无符号的,整个表达式就按无符号运算处理。

七、正确做法:

wire[`DW*2-1:0]mulhsu_result=$signed({{32{op1_i[31]}},op1_i})*$signed({32'b0,op2_i});

含义:

  • {{32{op1_i[31]}}, op1_i}
    op1_i按有符号数符号扩展到 64 位。

  • {32'b0, op2_i}
    op2_i按无符号数零扩展到 64 位。

  • 两个 64 位数相乘,取高 32 位,就是mulhsu的正确结果。

八、改完之后测试结果PASS

http://www.jsqmd.com/news/1164652/

相关文章:

  • RK Android 10/11/12 新增分区实战:从 parameter 到 fstab 的 4 步完整流程
  • L9958与PIC18F86K22构建高性能电机控制系统
  • 苏州离婚律师哪家口碑好?朱庆帅律师为你解忧 - 品牌排行榜
  • Flutter/React Native 跨平台开发:3步配置 Android SDK 环境变量避坑指南
  • 贵阳婚纱摄影影楼和工作室区别?我对比体验后,终于知道为什么很多新人最后选择贵阳金夫人
  • Project Graph 终极指南:7个技巧重塑你的非线性思维工作流
  • Windows 配置 WSL2 + Ubuntu 24.04 完整过程记录
  • GRR 与 C# 数据验证:避免测量系统分析中的3个常见编程陷阱
  • 计算意义子几何学(Computational Semantion Geometry)(世毫九实验室原创前沿学科)
  • Microsoft Teams会议AI功能中途关闭指南与实操解析
  • Linux用户管理与文件权限深度解析
  • Java 项目开发常用注解速查表
  • Flink
  • 数据清洗的常用方法
  • Midjourney 3D建模级输出落地全链路(从线稿到PBR材质渲染的7步工业级工作流)
  • 计算机组成原理 ALU 设计:从 1 位全加器到 32 位并行加法器的 5 步演进
  • SpringBoot集成LangChain4j构建企业级AI Agent工程实践
  • SpringBoot开发中那些容易忽略的配置细节
  • OpenMV Cam H7 GPIO 实战:5V 容错与 25mA 驱动能力实测,3 种模式详解
  • NMOS/PMOS 高边/低边驱动电路:3种典型拓扑与5个选型关键参数
  • 初入车联网那些事【纯文字】
  • Sunny 网络中间件 v3.1.0 实战:5步实现HTTP/HTTPS/WS/WSS/TCP全协议拦截与修改
  • 用 MCP 协议 + x402 微支付构建 47 端点 AI 工具聚合服务
  • Sugar BI 智能问数实战:5类典型业务提问模板与图表生成效果解析
  • 小模型主动查记忆 NapMem 思路
  • TeraSort 和 AI
  • 【Azure Container Apps】Readiness Probe 配置了 15 秒,为什么日志里仍显示 1 秒超时?
  • Flink 1.13 连接 Kafka 3.7.2:配置 SASL_SSL 认证的 5 个关键步骤
  • UE5动画叠加避坑指南:Additive动画类型与骨骼空间设置详解
  • MATLAB R2025a深度解析:仿真加速、跨平台可视化与AI工作流重构