Verilog加法器设计
加法器分为1位数加法器和多位数加法器,1位数加法器又可以分为半加器和全加器。
半加:两个1位二进制数相加,不考虑来自低位的进位(2个二进制数相加);
全加:两个1位二进制数与来自低位的进位三者相加(3个二进制数相加);
(1)半加器
不考虑低位的进位信号,将两个一位二进制数相加,只求本位和
二进制加法隐含条件:变量只取0和1;逢二进位;
真值表
a |
b |
co |
so |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
实现该电路的verilog代码如下:
第一种写法:
module half_add(a,b,so,co);//半加器input a,b;//定义两个输入output so,co;//so为和值的输出,co为进位数据的输出assign so=a^b;//根据真值表可得so为a,b异或逻辑后的结果assign co=a&b;//根据真值表可得co为a,b与逻辑后的结果
endmodule
综合出来的电路:
第二种写法:
module half_adder(cout,sum,a,b); output cout; output sum; input a,b; wire cout,sum ; assign {cout,sum}=a+b; //assign cout = a & b;//assign sum = a ^ b; endmodule
综合出来的电路:
用modelsim进行仿真,testbench文件为:
`timescale 1ns/10ps
//`include "adder.v"
module adder_testbench; reg a,b; wire sum,cout; integer i,j; adder adder_te(.sum ( sum ),.cout ( cout),.a ( a ),.b ( b )); initial begina=0;b=0;for(i=1;i<16;i=i+1)#20 a=i;endinitial beginfor(j=1;j<16;j=j+1)#10 b=j;endinitial begin$monitor($time,,,"%d + %d ={%b,%d}",a,b,cout,sum);#160 $finish;endendmodule
仿真结果为:
(2)全加器
在多位二进制数相加时,对每一位而言,除了考虑相加的两位数(第i位),还要考虑来自低位(i-1位)的进位。实现带低位进位的两个一位数相加的逻辑电路,称为全加器。
真值表
a |
b |
in |
sum |
cout |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
实现该电路的verilog代码如下:
第一种写法:
module full_add (a,b,cin,sum,cout); input a,b,cin; output sum,cout; reg sum,cout; always @(a or b or cin)beginsum = a ^ b ^ cin;cout = a & b |(cin&(a^b));endendmodule
综合出来的电路:
第二种写法:
module full_add (a,b,cin,sum,cout); input a,b,cin; output sum,cout; reg sum,cout; always @(a or b or cin)beginsum = a ^ b ^ cin;//cout = a & b |(cin&(a^b));cout = (a & b)|(b & cin)|(a & cin);end endmodule
综合出来的电路:
第三种写法:
module full_add (a,b,cin,sum,cout); input a,b,cin; output sum,cout; reg sum,cout;reg m1,m2,m3; always @(a or b or cin)begin{cout,sum} = a + b + cin;endendmodule
综合出来的电路:
第四种写法:
module full_add(a,b,in,sum,cout);
input a,b;//两个数据输入
input in;//进位输入output sum;//和输出
output cout;//进位输出wire sum_b;
wire in_a;
wire co1,co2;//定义网络线half_add U1(.a(a),.b(b),.so(sum_b),.co(co2));
half_add U2(.a(in),.b(sum_b),.so(sum),.co(co1));
assign cout = co1|co2;
endmodule
采用上述半加器构成一个全加器表示为:
用modelsim进行仿真,testbench文件为:
`timescale 1ns/10ps
//`include "full_add.v"
module full_add_testbench; reg a,b,cin; wire sum,cout; integer i,j,k; full_add full_adder_te(.sum ( sum ),.cout ( cout),.a ( a ),.b ( b ),.cin ( cin)); initial begina=0;for(i=1;i<16;i=i+1)#20 a=~a;endinitial beginb=0;for(j=1;j<16;j=j+1)#10 b=~b;endinitial begincin=0;for(k=1;k<16;k=k+1)#5 cin=~cin;endinitial begin$monitor($time,,,"%d + %d + %d ={%b,%d}",a,b,cin,cout,sum);#80 $finish;endendmodule
仿真结果为:
(3)其他加法器
Verilog加法器设计相关推荐
- 数字IC设计 FPGA——再谈加法器设计(使用Verilog 原语 进行四位加法器设计)
数字IC设计 FPGA--再谈加法器设计(使用Verilog 原语 进行四位加法器设计) 前面介绍了关于xilinx FPGA CLB的基本原理和结构,以及如何使用原语进行设计(在一般的设计中使用不到 ...
- 行波进位加法器设计 Verilog实现
一. 全加器 & 半加器 引用<电子技术基础(数字部分)>的说法: 1.全加器能进行被加数.加数和来自低位的进位信号相加,并根据结果给出该位的进位信号. 用逻辑表达式可描述为: S ...
- FIR滤波器设计(包括Verilog HDL设计以及MATLAB设计)
FIR滤波器设计 滤波器原理:滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中.从功能角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带 ...
- (72)加法器设计(全加器)
(72)加法器设计(全加器) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)加法器设计(全加器) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)F ...
- (23)FPGA加法器设计(第5天)
(23)FPGA加法器设计(第5天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)FPGA加法器设计(第5天) 5)技术交流 6)参考资料 2 FPGA初级课程 ...
- Verilog组合逻辑设计
一.实验项目名称: Verilog组合逻辑设计 二.实验目的: 使用ISE软件和Verilog语言进行组合逻辑的设计与实现. 三.实验内容: 1.3-8译码器的设计和实现. 2.4位并行进位加法器的设 ...
- 超前进位加法器实验报告_超前进位加法器设计报告
华东交通大学理工学院 课 程 设 计 报 告 书 所属课程名称 EDA 课程设计 题 目 分 院 专业班级 学 号 学生姓名 指导教师 2013 年 7月 2日 目录 第一章设计内容与要求 ..... ...
- 【Verilog 流水线设计】以全加器为例阐述流水线设计的影响
目录 流水线设计思想 全加器 非流水线全加器设计 Verilog设计 testbench设计 仿真波形 RTL视图 资源使用情况 流水线加法器设计 Verilog设计 testbench设计 仿真波形 ...
- 移位寄存器专题(verilog HDL设计)
目录 移位寄存器简介 分类 4位右移位寄存器工作原理 1. 16位右移位寄存器 2. 16位左移寄存器 3. 串行输入并行输出寄存器 4. 并行输入串行输出移位寄存器 移位寄存器简介 移位寄存器内的数 ...
- 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?
本博文内容来源于:<从算法设计到硬件逻辑的实现>,仅供学习交流使用! 同步时序逻辑是指表示状态的寄存器组的值只可能在唯一确定的触发条件发生时刻改变.只能由时钟的正跳沿或负跳沿触发的状态机就 ...
最新文章
- AI 算法给手画线稿自动上色指南来了
- 基础知识--:before伪元素和:after伪元素
- springside地址
- DataX在有赞大数据平台的实践
- 牛客小白月赛7 B 自杀游戏
- JavaScript表单序列化的方法详解
- android 如何 查看内存使用详情,android 查看内存使用情况
- Android 使用字符串动态获取资源ID
- 软盘镜像_软盘表示保存,还有14个其他老人图标不再有用
- php电影模板下载,【PHP源码】团啊VIP电影系统V3.7.6源码下载 带自动采集+手机版模板...
- Amazon EC2最新最全使用教程!!!
- UOS启用wayland
- window 64/32 安装配置 eclipse+jdk+mysql+tomcat+maven
- 未来的量子计算机算圆周率吗,圆周率的诡异现象,圆周率算尽了会怎么样
- --仿蓝色理想网站的导航菜单--
- 你想要的宏基因组-微生物组知识全在这(1909)
- SQL GETDATE()日期格式化函数
- 批量 汉字 转 拼音方法
- rhel6的部分版本使用intel xeon处理器时的bug
- linux各种配置笔记