经典加法器Verilog实现

2023-11-08

简介

加法器是数字系统最基础的计算单元,用来产生两个数的和,加法器是以二进制做运算,负数是用二进制的补码来表示计算的,减法器也是加法器。

8bite并行加法器

并行加法器就是利用多个全加器实现两个操作数各位同时相加,并行加法器中全加器的个数与操作数的位数相同,常用的并行加法器有行波进位加法器,超前进位加法器,进位选择加法器,容易实现,运算速度快,但是资源耗的多

Verilog代码

module parallel_adder(
    input [7:0] din_a ,     //data in a
    input [7:0] din_b ,     //data in b
    input        cin  ,     //carry in 
    output wire [ 7:0] sum ,    //sum
    output wire cout           // carry out 
);
assign {cout , sum } = din_a + din_b +cin ;
endmodule

8 bit超前进位加法器

超前进位加法器是由全加器发展而来,目的提高运算速度,当加法器的级数提高时,高位的进位信号需要从低级逐级传递,为了缩短这个时间,我们可以从低级的输入信号确定一个组合逻辑电路,唯一确定一个高位的进位信号,从而提高运行速度,超前进位加法器也称为快速进位加法器,目的是缩短进位信号的生成时间

4bit全加器原理图

 从图中可以很好的理解加法器的组成,但是等下一级将进位计算完成传递上来,每一位都这样计算,需要时间很长。所以我们可以想可不可以不等后级把进位算完再传过来,我们直接通过输入的数据把这个进位直接算出来发给每一级不就好了。我们看看怎么实现这样的想法.

简单的一级加法器的进位信号的计算方式:

 4级的加法器进位信息如下:

module Carry_Look_ahead_adder (
	input [7:0] 		din_a 	,    	// data in a
	input [7:0] 		din_b 	, 		// data in b
	input 				cin 	, 	 	// carry in 
	output  wire 		cout 	, 		// carry out 
	output 	wire [7:0]	sum 			// summation of a ,b
);

wire [7:0]	G  	;
wire [7:0]	P 	;
wire [7:0] 	C 	;


assign G[0] 	= din_a[0] & din_b[0]	;		//bit 0
assign P[0]		= din_a[0] | din_b[0]	;
assign C[0]		= cin 					;
assign sum[0]	= G[0] ^ P[0] ^ C[0]	;


assign G[1] 	= din_a[1] & din_b[1]	;		//bit 1
assign P[1]		= din_a[1] | din_b[1]	;
assign C[1]		= G[0] | (P[0] & cin) 	;
assign sum[1]	= G[1] ^ P[1] ^ C[1]	;


assign G[2] 	= din_a[2] & din_b[2]	;		//bit 2
assign P[2]		= din_a[2] | din_b[2]	;
assign C[2]		= G[1] | (P[1] & C[1]) 	;
assign sum[2]	= G[2] ^ P[2] ^ C[2]	;


assign G[3] 	= din_a[3] & din_b[3]	;		//bit 3
assign P[3]		= din_a[3] | din_b[3]	;
assign C[3]		= G[2] | (P[2] & C[2]) 	;
assign sum[3]	= G[3] ^ P[3] ^ C[3]	;

assign G[4] 	= din_a[4] & din_b[4]	;		//bit 4
assign P[4]		= din_a[4] | din_b[4]	;
assign C[4]		= G[3] | (P[3] & C[3]) 	;
assign sum[4]	= G[4] ^ P[4] ^ C[4]	;


assign G[5] 	= din_a[5] & din_b[5]	;		//bit 5
assign P[5]		= din_a[5] | din_b[5]	;
assign C[5]		= G[4] | (P[4] & C[4]) 	;
assign sum[5]	= G[5] ^ P[5] ^ C[5]	;


assign G[6] 	= din_a[6] & din_b[6]	;		//bit 6
assign P[6]		= din_a[6] | din_b[6]	;
assign C[6]		= G[5] | (P[5] & C[5]) 	;
assign sum[6]	= G[6] ^ P[6] ^ C[6]	;

assign G[7] 	= din_a[7] & din_b[7]	;		//bit 7
assign P[7]		= din_a[7] | din_b[7]	;
assign C[7]		= G[6] | (P[6] & C[6]) 	;
assign sum[7]	= G[7] ^ P[7] ^ C[7]	;

assign cout = G[7] | (P[7] & C[7])		;
endmodule 

8bit流水线加法器

流水线设计可以调高效率

Verilog代码


module Pipeline_adder (
	input [7:0]			din_a		,   // data in a
	input [7:0]			din_b		, 	// data in b
	input 				cin 		,	// Carry in
	input 				clk 		,	// Clock
	output 	reg [7:0]	sum 		,	// Sum
	output	reg 		cout 			// Carry out	
);

	reg 	[7:0]	a_t ;
	reg 	[7:0]	b_t ;

//carry in & out
	reg 	ci_t 	;
	reg 	p1co 	;
	reg 	p2co 	;
	reg 	p3co 	;

	reg [5:0]	p1a ;
	reg [5:0]	p1b ;
	reg [1:0] 	p1s ;

	reg [3:0]	p2a ;
	reg [3:0] 	p2b ;
	reg [3:0]	p2s ;

	reg [1:0] 	p3a ;
	reg [1:0]	p3b ;
	reg [5:0]	p3s ;


always@(posedge clk) begin
		a_t 	<=   din_a 	;
		b_t 	<= 	 din_b 	;
		ci_t 	<=	 cin 	;
end


always@(posedge  clk )	begin
	{p1co,p1s}  <= a_t[1:0]	+ b_t[1:0] + ci_t	;
	p1a 		<= a_t[7:2]	;
	p1b 		<= b_t[7:2]	;
end


always@(posedge  clk )	begin
	{p2co,p2s}  <= p1a[1:0]	+ p1b[1:0] + p1co + p1s	;
	p2a 		<= p1a[5:2]	;
	p2b 		<= p1b[5:2]	;
end

always@(posedge  clk )	begin
	{p3co,p3s}  <= p2a[1:0]	+ p2b[1:0] + p2co + p2s	;
	p3a 		<= p1a[3:2]	;
	p3b 		<= p1b[3:2]	;
end

always@(posedge  clk )	begin
	{cout,sum}		<=	p3a[1:0] + p3b[1:0]	+ p3co + p3s ;
end

endmodule 

8bit级联加法器

级联加法器的结构简单,N位级联加法器的延时是一位全加器的N倍,延时主要是由于进位信号级联造成的,避免在高新能要求设计中使用。


// -----------------------------------------------------------------------------
module Cascade_adder(

	input  	[7:0] 		a 		, 	 	//data in a
	input 	[7:0]		b 		, 		//data in b
	input 				cin 	,		//carry in
	output wire  		cout 	,		//carry out
	output wire [7:0]	sum 			//sum
	);

//signal 
wire cin1 	;
wire cin2 	;
wire cin3 	;
wire cin4 	;
wire cin5 	;
wire cin6 	;
wire cin7 	;

// inst cascade desc

full_add1 f0(
	.a 		(a[0]	),
	.b 	 	(b[0]	),
	.cin  	(cin 	),
	.cout 	(cin1 	),
	.sum 	(sum[0] )
	);

full_add1 f1(
	.a 		(a[1]	),
	.b 	 	(b[1]	),
	.cin  	(cin1 	),
	.cout 	(cin2 	),
	.sum 	(sum[1] )
	);

full_add1 f2(
	.a 		(a[2]	),
	.b 	 	(b[2]	),
	.cin  	(cin2 	),
	.cout 	(cin3 	),
	.sum 	(sum[2] )
	);

full_add1 f3(
	.a 		(a[3]	),
	.b 	 	(b[3]	),
	.cin  	(cin3 	),
	.cout 	(cin4 	),
	.sum 	(sum[3] )
	);


full_add1 f4(
	.a 		(a[4]	),
	.b 	 	(b[4]	),
	.cin  	(cin4 	),
	.cout 	(cin5 	),
	.sum 	(sum[4] )
	);

full_add1 f5(
	.a 		(a[5]	),
	.b 	 	(b[5]	),
	.cin  	(cin5 	),
	.cout 	(cin6 	),
	.sum 	(sum[5] )
	);

full_add1 f6(
	.a 		(a[6]	),
	.b 	 	(b[6]	),
	.cin  	(cin6 	),
	.cout 	(cin7 	),
	.sum 	(sum[6] )
	);

full_add1 f7(
	.a 		(a[7]	),
	.b 	 	(b[7]	),
	.cin  	(cin7 	),
	.cout 	(cout 	),
	.sum 	(sum[7] )
	);

endmodule 

8bit的全加器


// -----------------------------------------------------------------------------
module full_add1 (
	input  		a 	,    	// data in a
	input  		b 	, 		// data in b
	input 		cin ,  		// carry in 
	output 		sum ,		// sum
	output 		cout 		// carry out
);

//signal 
wire 	s1 	;
wire 	m1 	;
wire 	m2 	;
wire 	m3 	;

and (m1,a,b 	),
	(m2,b,cin   ),
	(m3,a,cin 	);

xor (s1,a,b 	),
	(sum,s1,cin );

or (cout,m1,m2,m3);

endmodule 

总结:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典加法器Verilog实现 的相关文章

  • FPGA设计篇之流水线思想

    FPGA设计篇之流水线思想 一 写在前面 二 正文开始 2 1举个栗子 2 2 1情况一 组合逻辑 2 1 2情况二 流水线设计 2 1 4 小总结 2 2举第二个栗子 写在最后 一 写在前面 流水线 大家好 我是富土康三号流水线的张全蛋
  • Quartus II 安装

    本次介绍使用的 Quartus 版本为 10 1 目前 Quartus II 官网已经没有 13 1 以下版本的安装包 大家可以安装 13 1 以上版本的软件 功能都是大同小异 下载地址 FPGA Software Download Cen
  • DDR3学习总结(一)

    简介 DDR3 SDRAM常 简称 DDR3 是当今较为常见的一种储存器 在计算机及嵌入式产品中得到广泛应用 特别是应用在涉及到大量数据交互的场合 比如电脑的内存条 对DDR3的读写操作大都借助IP核来完成 本次实验将采用 Xilinx公司
  • PRBS笔记

    1 概述 PRBS 伪随机二进制序列 也称为伪随机码 通常被用来测试高速信号的信号质量 伪随机 也说明了该码流并不是真正的随机 而是具有特性属性 码流由 多项式 决定 具有重复周期 PRBS具有多种阶数 如PRBS7 PRBS15 PRBS
  • Verilog:【1】时钟分频电路(clk_divider.sv)

    碎碎念 作为Basic Verilog的第一个学习笔记 打算用这种命名方式来对博客进行命名 应该有助于检索 简单阅览了部分工程的代码 发现里面有很多嵌套关系 因此决定先从基础模块开始 也是为了整个博客内容的流畅性 读者朋友有问题的话 也可以
  • Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

    当搭建FPGA逻辑时 使用循环语句可以使语句更加简洁易懂 Verilog中存在四类循环语句 如标题 几种循环语句的具体介绍和用法如下 1 forever 连续的执行语句 语法格式 forever
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分 实现效果 第二部分 动态VGA显示的原理 1 将动态显示的区域提前进行赋值 2 图像块的移动是每张图片叠加后的效果 3 如何实现图像块位置的改变 第三部分 系统结构和驱动波形 1 系统的Top down结构 2 图像块移动的
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 数码管电子时钟

    文章目录 前言 一 回顾数码管 二 任务描述 三 系统框图 四 模块调用 五 模块原理图 六 工程源码 6 2 时钟计数模块代码 6 2 数码管驱动模块代码 6 3 顶层模块代码 七 仿真测试 7 1 测试代码 7 2 仿真结果 八 管脚信
  • 上拉电阻和下拉电阻

    一 定义 上拉电阻 将一个不确定的信号 通过一个电阻与电源VCC相连 固定在高电平 下拉电阻 将一个不确定的信号 通过一个电阻与地GND相连 固定在低电平 二 作用 提高输出信号驱动能力 确定输入信号电平 防干扰 限流 阻抗匹配 抗回波干扰
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 关于xilinx BRAM IP的延迟以及流程

    关于RAM IP的延迟 1 选择了output registers 可以在RAM输出端口添加register 也可以在core的输出添加 在primitives添加 降低clock to out到primitive的延迟 在core添加re
  • Verilog HDL——Modelsim仿真

    常用testbench语法 finish 和 stop finish任务用于终止仿真并跳出仿真器 stop任务则用于中止仿真 timescale time unit time precision time unit指定计时和延时的测量单位
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • [HDLBits] Exams/ece241 2014 q7a

    Design a 1 12 counter with the following inputs and outputs Reset Synchronous active high reset that forces the counter
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573

随机推荐

  • 初识运营,明晰运营的学习路径

    关于运营的思考 问题1 运营是什么 运营到底是做什么工作的 如题 到底什么是运营 为什么我们所接触到的很多运营都不太一样 有的运营就是每天追寻互联网热点 加班加点的写文案 有的运营每天就是在不同的群里和成千上万的人唠嗑 有的运营活跃在不同的
  • html获取text输入框中的值

    1 在head中引用jquery 2 定义一个text输入框
  • 指针用作函数参数、指针型函数和函数指针

    指针用作函数参数 以前我们学过的函数参数要么是基本数据类型的变量 要么是类的对象 又或者是数组名 前几讲学到的指针同样可以用作函数参数 指针作函数形参时 我们调用此函数将实参值传递给形参后 实参和形参指针变量将指向相同的内存地址 那么在被调
  • Linux主要命令功能

    1 dmesg 主要用来显示内核信息 使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题 另外使用dmesg可以确定你的服务器安装了那些硬件 每次系统重启 系统都会检查所有硬件并将信息记录下来 执行 bin dmesg命令可以查看
  • 第十届蓝桥杯真题-灵能传输

    题目 OJ https www lanqiao cn problems 196 learning 考点 前缀和 贪心 思路 题目意思就是希望通过灵能交换后使得不稳定度最小 假设对a i 进行灵能传输 可以发现前缀和s i 1 和s i 进行
  • Java值传递和引用传递详细说明(详细分析)

    1 形参与实参 我们先来重温一组语法 形参 方法被调用时需要传递进来的参数 如 func int a 中的a 它只有在func被调用期间a才有意义 也就是会被分配内存空间 在方法func执行完成后 a就会被销毁释放空间 也就是不存在了 实参
  • FormData同时传输多个文件和其他数据

    近日有个需求是 在web的对话框中 用户可以输入文本内容和上传附件 附件的数量不限 所有附件总和大小不超过20M 这个实现的方法不止一种 比如之前的后端同事是要求 文件和文本分开传输 文件用一个单独接口上次 上传成功后返回一个id 把这个i
  • 【论文翻译】Iterative Geometry Encoding Volume for Stereo Matching and Multi-View Stereo(CVPR 2023)

    一 论文简述 1 第一作者 Gangwei Xu 2 发表年份 2023 3 发表期刊 CVPR 4 关键词 立体匹配 MVS 几何编码体 GRU 3D卷积 5 探索动机 RAFT的全对相关体缺乏非局部几何知识 难以处理病态区域的局部模糊
  • perp系列之五:perp安装

    perp系列之五 perp安装 版本说明 版本 作者 日期 备注 0 1 ZY 2019 5 29 初稿 目录 文章目录 perp系列之五 perp安装 版本说明 目录 概要 描述 激活 升级 例子 概要 vi conf mk make m
  • Vmware虚拟机设置静态IP地址

    一 安装好虚拟后在菜单栏选择编辑 虚拟网络编辑器 打开虚拟网络编辑器对话框 选择Vmnet8 Net网络连接方式 随意设置子网IP 点击NAT设置页面 查看子网掩码和网关 后面修改静态IP会用到 二 检查宿主机VM8 网卡设置 打开网络和共
  • 欧科云链OKLink:2023年6月安全事件盘点

    一 基本信息 2023年6月REKT和RugPull事件约造成约1000万美元损失 相比上月有显著下降 但安全事件发生数量依旧不减 其中被废弃的Atlantis Loans遭受治理攻击 造成的损失超250万美元 对该协议有过授权的用户需及时
  • Faster R-CNN详解

    Faster R CNN代码实现详解参见 faster rcnn源码详解 樱花的浪漫的博客 CSDN博客 faster rcnn源码 Faster rcnn详细注释版源码地址 faster rcnn源码详细注释版 每一步均有详细批注 深度学
  • 目标检测 实践

    文章目录 0 数据标注via 一 添加图片 二 定义标记类型 Attributes 三 标注 四 导出标注文件 1 模型 1 1 数据准备 1 2 模型训练 1 3 模型使用 1 4 改进方向 0 数据标注via via工具的界面如下图所示
  • python3中多项式创建_利用 Python3 ,实现数学科学计算

    SymPy是符号数学的Python库 旨在用一套强大的符号计算体系完成诸如多项式求值 求极限 解方程 求积分 微分方程 级数展开 矩阵运算等等计算问题 虽然Matlab的类似科学计算能力也很强大 但是Python以其语法简单 易上手 异常丰
  • JDBC和数据库连接池

    JDBC 基本介绍 JDBC原理 模拟JDBC public class MysqlJdbcImp implements JdbcInterface Override public Object getConnection System o
  • 解决element ui select下拉框不回显数据问题

    最近在做一个项目 项目的后端是地址 https github com wangyuanjun008 wyj springboot security git 前端地址是 https github com wangyuanjun008 wyj
  • 用通俗易懂的方式讲解:lightGBM 算法及案例(Python 代码)

    文章目录 1 介绍lightGBM之前 1 1 lightGBM演进过程 1 2 AdaBoost算法 1 3 GBDT算法以及优缺点 1 4 启发 2 什么是 lightGBM 3 lightGBM 原理 3 1 基于Histogram
  • 开源中文大语言模型集合【2023-06-19】

    整理开源的中文大语言模型 以规模较小 可私有化部署 训练成本较低的模型为主 包括底座模型 垂直领域微调及应用 数据集与教程等 自ChatGPT为代表的大语言模型 Large Language Model LLM 出现以后 由于其惊人的类通用
  • Java利用Mybatis进行数据权限控制

    权限控制主要分为两块 认证 Authentication 与授权 Authorization 认证之后确认了身份正确 业务系统就会进行授权 现在业界比较流行的模型就是RBAC Role Based Access Control RBAC包含
  • 经典加法器Verilog实现

    简介 加法器是数字系统最基础的计算单元 用来产生两个数的和 加法器是以二进制做运算 负数是用二进制的补码来表示计算的 减法器也是加法器 8bite并行加法器 并行加法器就是利用多个全加器实现两个操作数各位同时相加 并行加法器中全加器的个数与