FPGA开发之有无符号运算
有符号运算和无符号运算的问题
- 关于误导
在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开发之有无符号运算相关推荐
- x86架构下 CF与OF标志位 带符号和无符号运算 详解
针对能够影响OF和CF标志位的指令,一般来说是涉及到数据运算的指令,这里使用add举例,即不区分有无符号的加法指令,参与运算的数据,从二进制层级去考虑. CF标志位 对于CF,它是carry flag ...
- FPGA开发技巧备忘录——verilog系统函数做数学运算
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA开发技巧备忘录--verilog系统函数做数学运算 前言 $clog2 Real math functions $random ...
- 【正点原子FPGA连载】第一章 ZYNQ简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
- 【正点原子FPGA连载】第七章 Verilog HDL语 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子FPGA连载】第七章Verilog HDL语法 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
- 【正点原子FPGA连载】 第一章 MPSoC简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
- 三、1【Verilog HDL】基础语法快速入门(FPGA开发)
参考资料: 参考野火FPGA开发视频的基础语法:[野火]FPGA系列Xilinx Artix7教学视频,真正的手把手教学,"波形图"教学法,现场画波形图写代码,硬件基于野火FPGA ...
- FPGA开发全攻略——概念篇
原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) ...
最新文章
- Java缓存学习之五:spring 对缓存的支持
- 操作系统(二 )| 进程管理初探(前趋图、程序执行、进程的定义特征基本状态,进程的创建终止,阻塞唤醒,挂起激活)
- jQuery下的ajax【5分钟掌握】
- MySQL+Hibernate下连接空闲8小时自动断开问题解决方案
- vs2017python配置opencv_关于VS2017配置OpenCV出现无法打开文件“opencv_ml249d.lib”的解决方案...
- mysql消息订阅与发布_消息发布与订阅
- android内存泄漏MAT,利用Android Studio、MAT对Android进行内存泄漏检测
- python行业中性_燃爆!17行Python代码做情感分析?你也可以的
- 反编译工具Reflector下载
- FPN网络结构及Pytorch实现
- 深入理解Tomcat 6和Tomcat7的区别
- VS2017IIS注册
- 发票专用驱动sjz_【智能财税大讲堂】专用发票电子化的财税信息化变革
- Javascript特效之向左滚动的广告
- 软件测试的未来:2021年需要关注的15大软件测试趋势
- 航芯技术分享 | 一文读懂什么是量子密码
- TreeSet集合如何保证元素唯一
- 21年1.9c#halcon机器视觉软件系统框架源码visi onpro
- 相机拍照时预览卡顿问题
- Unity3D 批量修改模型名称