概述

本文利用了硬件行为描述、数据流描述、结构描述三种方法分别写了几个加法器

一位半加法器

即两个一位的二进制数相加,得到其正常相加的结果的最后一位。

仿真波形图

硬件行为描述

设计文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module bjqxw(a,b,sum,cout);
input a,b;
output sum,cout;
reg sum,cout;
always @(a or b)
begin
case({a,b})
2'b00:begin
sum=0;cout=0;
end
2'b01:begin
sum=1;cout=0;
end
2'b10:begin
sum=1;cout=0;
end
2'b11:begin
sum=0;cout=1;
end
endcase
end
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
module bjqxwsimu;
reg a,b;
wire sum,cout;
bjqxw sl(a,b,sum,cout);
initial
begin
a=0;b=0;
end
always #10 {a,b}={a,b}+1;
endmodule

结构描述

设计文件

1
2
3
4
5
6
module add(a,b,sum,cout);
input a,b;
output sum,cout;
xor(sum,a,b);
and(cout,a,b);
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
module add1;
reg a,b;
wire sum,cout;
add ul(a,b,sum,cout);
initial
begin
a=0;b=0;
end
always #10 {a,b}={a,b}+1;
endmodule

数据流描述

设计文件

1
2
3
4
5
6
7
endmodulemodule add3(a,b,sum,cout);
input a,b;
output sum,cout;
wire sum,cout;
assign sum=a^b;
assign cout=a&b;
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module add1;
reg ain,bin;
reg clk;
wire sum1,cout1;
initial
begin
ain=0;bin=0;clk=0;
end
always #50 clk=~clk;
always @(posedge clk)
begin
ain={$random}%2;
#3 bin={$random}%2;
end
add3 ul(.a(ain),.b(bin),.sum(sum1),.cout(cout1));
endmodule

一位全加器

仿真波图

硬件行为描述

设计文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module qjq(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
reg sum,cout;
always @(a or b or cin)
begin
case ({cin,a,b})
3'b000:begin
sum=0;cout=0;
end
3'b001:begin
sum=1;cout=0;
end
3'b010:begin
sum=1;cout=0;
end
3'b011:begin
sum=0;cout=1;
end
3'b100:begin
sum=1;cout=0;
end
3'b101:begin
sum=0;cout=1;
end
3'b110:begin
sum=0;cout=1;
end
3'b111:begin
sum=1;cout=1;
end
endcase
end
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
module qjq1;
reg a,b,cin;
wire sum,cout;
qjq ul(a,b,cin,sum,cout);
initial
begin
a=0;b=0;cin=0;
end
always #10 {a,b,cin}={a,b,cin}+1;
endmodule

结构描述

设计文件

1
2
3
4
5
6
7
8
9
10
module qiq(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
wire q1,q2,q3;
xor(sum,a,b,cin);
or(q1,a,b);
or(q2,b,cin);
or(q3,a,cin);
and(cout,q1,q2,q3);
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
module qjq1;
reg a,b,cin;
wire sum,cout;
qiq ul(a,b,cin,sum,cout);
initial
begin
a=0;b=0;cin=0;
end
always #10 {a,b,cin}={a,b,cin}+1;
endmodule

数据流描述

设计文件

1
2
3
4
5
module qjq(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
assign {sum,cout}=a+b+cin;
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
module qjqsimu;
reg a,b,cin;
wire sum,cout;
qjq sl(a,b,cin,sum,cout);
initial
begin
a=0;b=0;cin=a&b;
end
always #20 {a,b}={a,b}+1;
endmodule

四位全加器

数据流描述

设计文件

1
2
3
4
5
6
7
module qjq(a,b,cin,sum,cout);
input [3:0] a,b;
input cin;
output [3:0] sum;
output cout;
assign {sum,cout}=a+b+cin;
endmodule

仿真结构图

仿真文件

1
2
3
4
5
6
7
8
9
10
11
12
module qjqsimu;
reg [3:0] a,b;
reg cin;
wire [3:0] sum;
wire cout;
qjq sl(a,b,cin,sum,cout);
initial
begin
a=4'b0000;b=4'b0000;cin=0;
end
always #20 {a,b}={a,b}+4'b0001;
endmodule

仿真波图

ps:将上述输入输出的字段长度对应修改,可得到相应数位的全加器数据流描述

verilog设计加法器的更多相关文章

  1. verilog流水线加法器

    四位加法器 两级加法实现 verilog code module pipeliningadder( output reg [3:0] s, output reg co, input [3:0] a, ...

  2. Verilog设计Valid-Ready握手协议

    转自http://ninghechuan.com 我不生产知识,我只是知识的搬运工. Handshake Protocol握手协议!为了保证数据传输过程中准确无误,我们需要加上握手信号来控制信号的传输 ...

  3. Verilog设计技巧实例及实现

    Verilog设计技巧实例及实现 1 引言 最近在刷HDLBits的过程中学习了一些Verilog的设计技巧,在这里予以整理.部分操作可能降低代码的可读性和Debug的难度,请大家根据实际情况进行使用 ...

  4. 数字逻辑实践3->EDA技术与Verilog设计

    本文属于EDA技术概述类文章 1 EDA技术及其发展 概念 EDA(Electronic Design Automation),指的是以计算机为工作平台,以EDA软件工具为开发环境,以PLD期间或者A ...

  5. 硬件描述语言Verilog设计经验总结

    一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...

  6. verilog 实现加法器

    半加器 如果不考虑来自低位的进位将两个1二进制数相加,称为半加. 实现半加运算的逻辑电路称为半加器. 真值表 逻辑表达式和 \begin{align}\notag s = a{b}' + {a}'b ...

  7. 全数字锁相环(DPLL)的原理简介以及verilog设计代码

    随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁 ...

  8. 基于basys2驱动LCDQC12864B的verilog设计图片显示

    话不多说先上图 前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在 ...

  9. 基于basys2用verilog设计多功能数字钟(重写)

    话不多说先上图         前言 自从学习FPGA以来,唯一做过的完整系统就是基于basys2得多功能数字表.记得当时做的时候也没少头疼,最后用时间磨出来了一个不是很完整的小系统,当时还是产生了满 ...

随机推荐

  1. 【故障公告】docker swarm 集群问题造成新版博客后台故障

    非常抱歉,今天下午 16:55~17:05 左右,由于 docker swarm 集群的突发不稳定问题造成新版博客后台(目前处于灰度发布阶段)无法正常使用,由此给您带来麻烦,请您谅解. 出故障期时,新 ...

  2. ubantu删除源码安装文件

    1.在安装目录下执行 make uninstall (如安装目录为/opt/software/opencv3.1.0/release) 2.删除系统相关文件 cd /usr sudo find . - ...

  3. 如何通过swoole加速laravel的问题?

    这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首 ...

  4. Hadoop之HDFS文件系统

    概念 HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件:其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色. HDFS的设计适合一次写入,多次读出的场景,且不 ...

  5. IDEA连接Redis

    1.创建一个Maven项目 2.在src下的pom.xml文件里,添加相关包引用 <?xml version="1.0" encoding="UTF-8" ...

  6. k8s 获取 Pod ip 添加到环境变量

    0x00 事件 有一个需要将 Pod 自身的 ip 地址添加到环境变量的需求,可以在 yaml 文件的 env 中这样设置: env: - name: POD_OWN_IP_ADDRESS value ...

  7. python的匿名函数

    在Python,有两种函数,一种是def定义,一种是lambda函数. lambda函数是Python一种生成函数对象的表达式形式.匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函 ...

  8. python网络爬虫之入门[一]

    目录 前言 一.探讨什么是python网络爬虫? 二.一个针对于网络传输的抓包工具fiddler 三.学习request模块来爬取第一个网页 * 扩展内容(爬取top250的网页) 后记 @(目录) ...

  9. LESSON 3- Discrete Memory-less Sources

    1.     Entropy H[X] - bounds on Lmin 2.      Huffman’s algorithm for optimal source code

  10. Rust中的RefCell和内部可变性

    RefCell Rust在编译阶段会进行严格的借用规则检查,规则如下: 在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用. 引用必须总是有效. 即在编译阶段,当有一个不可变值时,不能可 ...