CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

计算机中如何比较数的大小?

已有 14732 次阅读 2010-9-25 06:31 |个人分类:教学笔记|系统分类:科研笔记| EDA, CPU设计

姜咏江
 
计算机的位长是固定的,在使用硬件描述语言进行CPU设计时要特别注意。假如你定义了16位数据长度的运算器,要比较两个数的大小,用EDA语言描述时就会出现预想不到的结果。
 
例如,要比较有符号数16’he0a0与16’h60a0的大小,显然前者是一个负数,会小于后者。但当你用Verilog HDL进行比较时,就会得出前者大于后者的结论。这是为什么?原来我们使用的计算机是32位的,不论你设计的位长是多少,都要变成32位数到处理器中进行比较。因而比较之前要先将这两16位数扩充成32位数。由于Verilog HDL认定扩充位数前面“添0”,故而会得出有符号的16’he0a0 > 16’h60a0的结论。
 
此例在32位Verilog HDL中做减法,会得到差为32’h00008000,其中的变化过程是:
 
16’he0a0 - 16’h60a0 => 32’h0000e0a0 – 32’h000060a0
 =>32’h0000e0a0+32’hffff9f60 =>32’h00008000
 
依据最高位是“0”,因而判断出有符号数16’he0a0 > 16’h60a0。
 
按着限位数正负数判断和扩充位数方法,16’he0a0是负数,因而扩充成32位应是32’hffffe0a0。所以用32位计算机比较这两个16位正负数大小用减法应是:
 
16’he0a0 - 16’h60a0 => 32’hffffe0a0 – 32’h000060a0
=>32’hffffe0a0+32’hffff9f60 =>32’hffff8000
 
用这种方法才能正确地比较出不足32位正负数的大小。
 
2010-9-25
 


https://blog.sciencenet.cn/blog-340399-366592.html

上一篇:精确浮点运算需要监控的信号
下一篇:好想有一个真正的计算机核心科技讨论会
收藏 IP: .*| 热度|

1 杨华磊

发表评论 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-27 07:28

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部