有符号运算和无符号运算的问题

  • 关于误导

在MIPS中文版指令集上提到一点,希望大家引起注意:ADDU的”U”不是无符号,而是指不考虑溢出的加法,所以ADDI和ADD和ADDU实际上在ALU用的同一个加法。

  • 为什么说ADD和ADDU是一种加法?而MULT和MULTU却不是一种乘法?

CPU不会判断参与运算的数字是否为有符号数,因为在计算机中加法是补码运算,补码做加法运算时带符号位运算,所以无符号加法和有符号加法在ALU运算里是一种加法。补码的转换已经在Mars编译的时候就做好了,比如你在Mars里如下书写:

ori $t1,$0,-1

可以看看$t1里的值是-1原码(0x80000001)还是-1的补码(0xffffffff)?

但是我们的mult与multu是两种运算,两指令令里对符号位的处理不同,所以参与乘法运算内部加法运算的补码也不一样,所以我们的mult和multu就要区别开来写。同理slt和sltu也是一样。

关于有符号数转化为无符号数的问题在MIPS指令集里有介绍,使用如下结构即可:

{1’b0,A}         (signed A变为了unsigned A)

  • 关于在ISE里书写的问题
  • 如何定义有符号数?

使用例如以下语句:

input signed [31:0] A 

或者可以这样

input [31:0] A
$signed(A) ($signed是强制类型转换为有符号数)
  • 一些常见错误

【1】

     input [31:0] A,input [4:0] Binput  Opoutput [31:0] C
assign C=(Op==1’b0)?$signed(A)>>>$signed(B):A>>B;

本意是选择C结果为算数右移或者逻辑右移,结果发现算术右移并不生效。

原因:在Verilog里如果在同一个assign语句中若同时进行有符号数的计算和无符号数的计算,算式会自动变为无符号运算,即使你的有符号数计算式使用了强制类型转换$signed。

解决方案:在外部定义一个符号变量用于存储有符号运算的值

input [31:0] A,B
input Op,
output signed [31:0] C_Signed,C
assign C_Signed = $signed(A)>>>B(这里B加不加强制转换都可以)
assign C=(Op==1’b0)?C_Signed:A>>B;

【2】

input signed [31:0] A,
input [4:0] B
input Op,
output signed [31:0] C
assign C={A[31:28],0} >>>B;

算数右移同样失效

原因:第一个虽然把A的符号位一起扩展进去了,但是经过位拼接符合成后的数是无符号数。即使是{A}这样的也会变!

解决方案:使用$signed()强制类型转化

FPGA开发之有无符号运算相关推荐

  1. x86架构下 CF与OF标志位 带符号和无符号运算 详解

    针对能够影响OF和CF标志位的指令,一般来说是涉及到数据运算的指令,这里使用add举例,即不区分有无符号的加法指令,参与运算的数据,从二进制层级去考虑. CF标志位 对于CF,它是carry flag ...

  2. FPGA开发技巧备忘录——verilog系统函数做数学运算

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--verilog系统函数做数学运算 前言 $clog2 Real math functions $random ...

  3. 【正点原子FPGA连载】第一章 ZYNQ简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  4. 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  5. 【正点原子FPGA连载】第七章 Verilog HDL语 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  6. 【正点原子FPGA连载】第七章Verilog HDL语法 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  7. 【正点原子FPGA连载】 第一章 MPSoC简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  8. 三、1【Verilog HDL】基础语法快速入门(FPGA开发)

    参考资料: 参考野火FPGA开发视频的基础语法:[野火]FPGA系列Xilinx Artix7教学视频,真正的手把手教学,"波形图"教学法,现场画波形图写代码,硬件基于野火FPGA ...

  9. FPGA开发全攻略——概念篇

    原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) ...

最新文章

  1. Java缓存学习之五:spring 对缓存的支持
  2. 操作系统(二 )| 进程管理初探(前趋图、程序执行、进程的定义特征基本状态,进程的创建终止,阻塞唤醒,挂起激活)
  3. jQuery下的ajax【5分钟掌握】
  4. MySQL+Hibernate下连接空闲8小时自动断开问题解决方案
  5. vs2017python配置opencv_关于VS2017配置OpenCV出现无法打开文件“opencv_ml249d.lib”的解决方案...
  6. mysql消息订阅与发布_消息发布与订阅
  7. android内存泄漏MAT,利用Android Studio、MAT对Android进行内存泄漏检测
  8. python行业中性_燃爆!17行Python代码做情感分析?你也可以的
  9. 反编译工具Reflector下载
  10. FPN网络结构及Pytorch实现
  11. 深入理解Tomcat 6和Tomcat7的区别
  12. VS2017IIS注册
  13. 发票专用驱动sjz_【智能财税大讲堂】专用发票电子化的财税信息化变革
  14. Javascript特效之向左滚动的广告
  15. 软件测试的未来:2021年需要关注的15大软件测试趋势
  16. 航芯技术分享 | 一文读懂什么是量子密码
  17. TreeSet集合如何保证元素唯一
  18. 21年1.9c#halcon机器视觉软件系统框架源码visi onpro
  19. 相机拍照时预览卡顿问题
  20. Unity3D 批量修改模型名称

热门文章

  1. 洛谷:P1332 血色先锋队(BFS)
  2. 末日PVE模式变丧尸吃鸡,代号:Z黎明之路今日上线就凉凉?
  3. 书友汇德天-解谜数字九宫格
  4. 2019 前端面试题 (Vue)
  5. uni-app尺寸单位
  6. 原生table:表格table中thead固定,tbody超出高度出现滚动条
  7. Matlab系列之绘图基础
  8. stm32使用红黑树
  9. yearning搭建及使用
  10. 图显系统DRM FRAMEBUFFER完全解析