加法器与减法器verilog
文章目录
- 无符号加法器
- 有符号加法器
- 有符号减法器
- 加减法器
- TB
- Reference
减法器中也有类似于半减器、全减器、串行借位减法器之类的,但是为了实现简单和复用代码,计划采用加法器来实现减法器。
无符号加法器
如果两个数都是无符号的,那么可以直接相加,需要有一位作为进位。
有符号加法器
以4bit有符号数为例
大于等于0的数的情况同无符号数一致,最高位保持为0
负数与正数相加,负数的绝对值大于正数
例如-8+7=1000+0111=01111,计算结果错误(符号位舍去后无误)
负数的绝对值等于正数
-7+7=1001+0111=0=10000,计算结果错误(进位舍去后无误)
负数的绝对值小于正数
-6+7=1010+0111=0=10001,计算结果错误(进位舍去后无误)若是保持输出为4位,则输出结果无误,但是为了兼容无符号加法器,不能舍去。
处理思路是进行扩位。将4bit扩大到5bit,进位丢弃
-8+7=11000+00111=11111 correct
-7+7=11001+00111=00000 correct
-6+7=11010+00111=00001 correct
丢掉进位以后,最高位就是符号位。看似数据的范围变小了,但是本来结果就需要5位表达,所以在相加之前扩位对结果没有影响。负数与负数相加
-8+(-8)=11000+11000=10000
-8+(-7)=11000+11001=10001
结果完全正确。
有符号减法器
继承上面的思想,再运算之前先进行扩位,即,复制最高位
正数减去正数
7-6=7+(-6)=00111+11010=00001
可以看到转换为正数加上负数以后,计算十分简单问题是如何进行转换
6=00110 取反11001 加一11010,似乎没问题
7=00111 取反11000 加一11001,也没毛病正数减去负数
7-(-8)=7+8=00111+01000=01111问题是如何进行转换
-8=11000 取反00111 加一01000,没毛病
-7=11001 取反00110 加一00111,没毛病加一的操作可以当做进位
负数减去负数
-8-(-8)=-8+8=11000+01000=00000
-8-(-7)=-8+7=11000+00111=11111
-7-(-8)=-7+8=11001+01000=00001
么得问题负数减去正数
-8-7=-8+(-7)=11000+11001=10001
-8-8=-8+(-8)=11000+11000=10000
-6-7=-6+(-7)=11010+11001=10011
么得问题所有情况都已经推理完毕,下面就是代码部分了
上面废话太多。事实上,因为有符号加法器是完全没有问题的,所以只要能够顺利把减法运算换成加法运算就成功了一半。需要注意的是极端情况的-8,因为运算中没有加8的情况
加减法器
基于串行进位加法器https://blog.csdn.net/I_LOVE_MCU/article/details/126196302
超前进位加法器目前不支持任意位数
module adder_substractor #(parameter WIDTH = 4
)(input [WIDTH-1:0] in1,input [WIDTH-1:0] in2,input add_sub,output [WIDTH:0] sum
);
wire [WIDTH:0] in1_exp;
wire [WIDTH:0] in2_exp;
wire cin;assign in1_exp = {in1[WIDTH-1], in1};
assign in2_exp = add_sub? {in2[WIDTH-1], in2}: ~{in2[WIDTH-1], in2};
assign cin = ~add_sub;// 因为对输入进行了扩位,所以WIDTH需要加1,在输出的时候会被截位,但对结果无影响
serial_adder #(.WIDTH ( WIDTH+1 )) u_lookahead_carry_adder (.in1 ( in1_exp ),.in2 ( in2_exp ),.cin ( cin ),.sum ( sum )
);endmodule
TB
`timescale 1ns / 1psmodule tb_adder_substractor;// adder_substractor Parameters
parameter PERIOD = 10;
parameter WIDTH = 4;// adder_substractor Inputs
reg [WIDTH-1:0] in1 = 0 ;
reg [WIDTH-1:0] in2 = 0 ;
reg add_sub = 0 ;// adder_substractor Outputs
wire [WIDTH:0] sum ;// initial
// begin
// forever #(PERIOD/2) clk=~clk;
// end// initial
// begin
// #(PERIOD*2) rst_n = 1;
// endadder_substractor #(.WIDTH ( WIDTH ))u_adder_substractor (.in1 ( in1 [WIDTH-1:0] ),.in2 ( in2 [WIDTH-1:0] ),.add_sub ( add_sub ),.sum ( sum [WIDTH:0] )
);initial
beginin1 = -7;in2 = -7;add_sub = 1;#10;in1 = -7;in2 = -7;add_sub = 0;#10;in1 = -7;in2 = 8;add_sub = 0;#10;in1 = -7;in2 = 8;add_sub = 1;#10;in1 = 8;in2 = 8;add_sub = 0;#10;in1 = 8;in2 = 8;add_sub = 1;#10;in1 = 8;in2 = -7;add_sub = 0;#10;in1 = 8;in2 = -7;add_sub = 1;#10;// $finish;
endendmodule
Reference
浮点数的加减法器
https://www.cnblogs.com/mikewolf2002/p/10095995.html
加法器与减法器verilog相关推荐
- 数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)
加法器简介及Verilog实现 写在前面的话 经典加法器 8bit并行加法器 8bit超前进位加法器 8bit流水线加法器 8bit级联加法器 总结 写在前面的话 加法器是数字系统最基础的计算单元,用 ...
- vhdl加法器和减法器_半减法器和全减法器的设计
vhdl加法器和减法器 A Subtractor is a digital circuit which performs subtraction operation. 减法器是执行减法运算的数字电路. ...
- 运放放大倍数计算公式_电源经典运放电路,加法器,减法器,同向放大器,反向放大器...
运算放大器组成的电路五花八门,令人眼花瞭乱.工程师在分析它的工作原理时常抓不住核心,令人头大.为此小编特地搜罗天下运放电路之应用,来个"庖丁解牛",希望各位看完后有所收获. 遍观所 ...
- 两个运放制作加法器_运放基础第10讲,加法器、减法器、积分器、微分器、仪表放大器...
运放基础第10讲,加法器.减法器.积分器.微分器.仪表放大器课程介绍 <运放第2部,运放电路设计实战基础视频> 课程介绍:<运放电路设计基础视频教程>的第一部分内容有三分之一到 ...
- 4 利用逻辑门实现加法器和减法器
首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...
- c语言加法器程序代码,利用EDA设计加法器和减法器并且附有程序代码的实验报告...
满意答案 q316281484 2013.12.31 采纳率:48% 等级:12 已帮助:35577人 library ieee; use ieee.std_logic_1164.all; us ...
- 超前进位加法器(附Verilog代码)
超前进位加法器: 普通全加器(行波进位加法器)是单比特全加器的级联,高位需要低位的进位位,故位宽增大时,加法的组合逻辑不断增大,超前进位加法器解决了这一问题. 优点:不需要等待低位的进位.直接计算就可 ...
- 多路选择器,加法器原理及verilog实现
1.数据选择器是指经过选择,把多个通道的数据传到唯一的公共数据通道上.实现数据选择功能的逻辑电路称为数据选择器,它的作用相当于多个输入的单刀多掷开关.本例程以四选一数据选择器(电平触发)为例. 四选一 ...
- 加法器(减法器)运算放大电路
图三中,由虚短知: V- = V+ = 0 --a 由虚断及基尔霍夫定律知,通过R2与R1的电流之和等于通过R3的电流, 故 (V1 – V-)/R1 + (V2 – V-)/R2 = (Vo ...
最新文章
- 手把手教你使用YOLOV5训练自己的数据集并用TensorRT加速
- python100个必背知识-学Python必背的初级单词,你都背了吗?
- 串口通信模块5:串口操作自定义类(3)
- 【探究】信号槽到底能不能有返回值?
- 数据库笔记04:数据库设计
- hdu 5148 cities 树形DP
- 记录——《C Primer Plus (第五版)》第十章编程练习第二题
- [转载]Jquery mobile 新手问题总汇
- day21-2 类的派生
- 【AD】Altium Designer 原理图的绘制
- List Navision Security setting, 列出Navision相关账户的权限
- Permute 3 for mac(万能音视频转换器)
- 邮件安全防护之反垃圾邮件开源软件ASSP
- 技术人的职场晋级指南:当心“1万小时定律”毁了你!
- vs的oxc000007b错误和key valid错误
- Python预测2022世界杯1/8决赛胜负
- 探月工程总设计师:嫦娥四号探索结果具有原创性
- Winform控件开发(9)——ListBox(史上最全)
- easyx游戏编程:魔塔(C++游戏开发)
- 设计模式C++实现40讲(11)终生受益的观察者模式