跳转到主要内容
--## 电子创新网图库均出自电子创新网,版权归属电子创新网,欢迎其他网站、自媒体使用,使用时请注明“图片来自电子创新网图库”,不过本图库图片仅限于网络文章使用,不得用于其他用途,否则我们保留追诉侵权的权利。 ##--

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
judy 提交于

N 位二进制数相加需要位宽扩展

两个 N 位二进制数相加,为防止溢出,应将和设置为 N+1 位。

1、无符号数相加

对于无符号 N 位二进制数,最大值为2^N - 1,两个无符号 N 位二进制数的最大和为2*(2^N - 1) = 2^(N+1) - 2,这个值需要 N+1 位二进制数来表示。

例如,8 位无符号数的最大值为 255,255+255=510,510 的二进制表示为111111110,需要 9 位(N+1=9)来表示。

如果不扩展位宽,相加结果会发生溢出,导致结果错误,例如 8 位无符号数 255+255=510,若用 8 位表示则会溢出为11111110(即 254),计算结果错误。

// 8位无符号数相加,结果设置为9位
wire [7:0] a, b;
wire [8:0] sum;
assign sum = {1'b0, a} + {1'b0, b};

2、有符号数相加

对于有符号 N 位二进制数(补码表示),最大值为2^(N-1) - 1,最小值为-2^(N-1),两个有符号 N 位二进制数的最大和为2*(2^(N-1) - 1) = 2^N - 2,最小和为2*(-2^(N-1)) = -2^N,这两个值都需要 N+1 位来表示,避免溢出。

// 8位有符号数相加,结果设置为9位
wire [7:0] a, b;
wire [8:0] sum;
assign sum = {a[7], a} + {b[7], b};

文章来源:FPGA入门到精通

精彩推荐

2026英伟达GTC大会专题

CES 2026(国际消费类电子产品展览会)专题

第四届南渡江智慧医疗与康复产业高峰论坛

第十五届松山湖中国IC创新高峰论坛

第四届滴水湖中国RISC-V产业论坛

Recent comments

  • 1873774516_516738
  • 2460440665_516737
  • 1457585548_516736
  • 780289498_516735
  • 2283262460_516734