在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 4013|回复: 1

[求助] 《自己动手写CPU》问题求职

[复制链接]
发表于 2017-8-5 10:46:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
1、在(第7章 算术操作指令)的实现中对于有符号加法操作符,为什么测试程序 add 80000010 80000001会溢出呢,按照有符号加法,不应该是-16+(-1)等于-17吗?2、第165页,在计算有符号数的补码时,为什么是32位全部取反加一,补码的运算不应该是最高位表示符号,其余剩下的31位取反加一吗?
 楼主| 发表于 2017-8-6 21:14:35 | 显示全部楼层
仔细思考了两天,自己来回答:
发现书中的代码并没有错误。
书中的操作数都是默认是补码形式。
三句话完成加法与减法,有符号数和无符号数的操作,感觉很奇妙。
之所以很简洁,主要还是因为电脑中将数字(正数/负数)按照补码形式来存储的,加法与减法得到统一。
下面是我摘出来用来单独理解写出的程序:
module alu_comp(a,b,add_sel,signed_sel,c,overflow);
input [3:0] a,b;//两个输入数
input add_sel,signed_sel;//两位选择信号:加法/减法 有符号数/无符号数
output [3:0] c;//输出数,对于输出数,如果是负数,比如-3,它会显示1101(-3的补码),而不是1011
output overflow;//当为有符号数时,是否出现溢出
wire [3:0] b_mux;

assign b_mux=(!add_sel)?(~b)+1:b;
assign c=a+b_mux;
assign overflow=((a[3])&&(b[3])&&(!c[3])&&(signed_sel)) || ((!a[3])&&(!b[3])&&(c[3])&&(signed_sel));
endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 09:50 , Processed in 0.015750 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表