Verilog专题(八)有符号的加法器signed adder设计

news/2025/1/25 4:26:39/

前言

    对于verilog的学习,这里推荐一个比较好的实践网站HDLBits:https://hdlbits.01xz.net/wiki/Main_Page

    本系列记录一些我觉得有价值的题目,希望通过这些题目可以对verilog更加熟练。

 

有符号的加法器signed adder设计

    题目: 假设你有两个8位有符号的输入,即a [7:0]和b [7:0]。这些数字相加产生s [7:0],还要计算是否发生溢出情况。

module top_module (    input [7:0] a,    input [7:0] b,    output [7:0] s,    output overflow); endmodule

    

    一个有符号数的最高位代表正负,最高位是0代表正数,最高位是1代表负数。那什么时候会发生溢出(overflow)的情况?只有两个正数(负数)相加才会发生溢出,相减(即一正一负)是不会发生溢出的。

    两个正数相加(符号位都为0),如果结果为负数,则发生溢出;两个负数相加(符号位都为1),如果结果为正数,则发生溢出,其他情况都为没有发生溢出。因此我的答案如下

module top_module (    input [7:0] a,    input [7:0] b,    output [7:0] s,    output overflow); //    assign s = a+b;    assign overflow = (a[7]==b[7])?((a[7])?(!s[7]?1:0):(s[7]?1:0)):0;    endmodule

 

     在其他博客看到有更简单做法,原理也是一样的,a[7] & b[7] & ~s[7]是判断两个负数的情况,当s[7]为0,即相加结果为正数,发生溢出情况,overflow为1;~a[7] & ~b[7] & s[7]是判断两个正数的情况,当s[7]为1,即相加结果为负数,发生溢出情况,overflow为1。

module top_module (    input [7:0] a,    input [7:0] b,    output [7:0] s,    output overflow);     assign s = a + b;    assign overflow = ( a[7] & b[7] & ~s[7] ) | (~a[7] & ~b[7] & s[7]);endmodule

 

微信公众号

     建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验(后期打算与csdn同步更新),做公众号的目的就是记录自己的学习过程,很多东西回过头来可能就忘记了,为了记住知识和分享知识,希望自己可以保持更新,有兴趣的朋友可以关注一下!

 

 


http://www.ppmy.cn/news/582292.html

相关文章

HDLBits 刷题笔记28:Adder-subtractor (Module addsub)

题目描述:https://hdlbits.01xz.net/wiki/Module_addsub An adder-subtractor can be built from an adder by optionally negating one of the inputs, which is equivalent to inverting the input then adding 1. The net result is a circuit that can do two o…

adder-subtractor 32位加减器

a-b相当于a加上(b的补码)也就是a加上(b取反再加1) 可以运用2个16位加法器构建32位加减器 add16接口如下: module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout ); 32位adder-su…

full adder

Question: Come up with logic that counts number of ‘1’s in a 7 bit wide vector. You can only use combinational logic. Answer: Following is one of the ways to come up with such logic. Input vector is 7 bit wide. To sum up 7 bits we need 3 bits of bina…

verilog 语言,Vivado2018 计算机组成原理实验-adder(加法器)模块的编写

实验内容: 1.adder(加法器)模块的编写。 2.建立完整的工程,工程中包括自己编写的 adder 模块,adder_display 模块(已 在群文件中提供),testbench.v(仿真文件&#xff…

Xilinx加法器IP核adder

1.加法器IP核配置 2.adder_top.v代码 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 10:20:30 07/19/2017 // Design Name: // Module Name: adder_top // Project Name: // Target Devices: // Tool versions: // Description: // // …

forahead adder 超前进位加法器

数电书上说道超前进位加法器,没有仔细讲。上网搜了这篇资料,摘抄下来 串行进位加法器需要一级一级的进位,进位延迟很大。先行进位加法器(也叫超前进位加法器)可以有效的减少进位延迟。 设二进制加法器的第i位输入为Xi,…

java add用法

add(int index, E element) 在列表的指定位置插入元素 转载javaerSir 最后发布于2013-12-03 08:55:54 阅读数 6593 收藏 展开 转载▼ void add(int index, E element) 在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果…

HDLBits 系列(11)All about Adder

目录 半加器 全加器 Binary Ripple-Carry Adder 多位加法器 有符号加法溢出 Adder100 Bcdadd4 最后想说的一些话 半加器 Create a half adder. A half adder adds two bits (with no carry-in) and produces a sum and carry-out. module top_module( input a, b,out…