本文主要是介绍通过Verilog来实现全加器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通过Verilog来实现全加器
-
定义
全加器(full_adder)定义:通过门电路来实现两个二进制数相加并求出和的组合电路,成为一位全加器。一位全加器不仅可以处理低位进位,也可以输出本位加法进位。
-
真值表
全加器真值表如下,假设a,b,c0是输入,s和c1是输出,a为被加数,b是加数,c0为相邻低位的进位数,s为输出本位,c1为向相邻高位进位数。
c0 | a | b | s | c1 |
---|---|---|---|---|
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 |
-
表达式
根据真值表可以得到表达式为s=a⊕b⊕c0,c1=ab+bc+ac
经过化简s=a‘b’c+a’bc’+ab’c’+abc,c1不变还是c1=ab+bc+ac
卡诺图化简讲解:https://blog.csdn.net/hahasusu/article/details/88244155
卡诺图相邻性的特点保证了几何相邻两方格所代表的最小项只有一个变量不同。因此,若相邻的方格都为1(简称1格)时,则对应的最小项就可以合并。合并的结果是消去这个不同的变量,只保留相同的变量。这是图形化简法的依据。
综上所述,卡诺图具备以下特性:
- 卡诺图中两个相邻1格的最小项可以合并成一个与项,并消去一个变量。
- 卡诺图中四个相邻1格的最小项可以合并成一个与项,并消去两个变量。
- 卡诺图中八个相邻1格的最小项可以合并成一个与项,并消去三个变量。
-
新建项目
参考下面链接
SE14.7使用教程(一个完整工程的建立):https://blog.csdn.net/su1041168096/article/details/81449564
项目的full_adder.v文件如下:
`timescale 1ns / 1psmodule full_adder(input wire a,input wire b,input wire c0,output wire s,output wire c1);assign s = ((~a)&(~b)&c0)|((~a)&b&(~c0))|(a&(~b)&(~c0))|(a&b&c0);assign c1= (a&b)|(b&c0)|(a&c0);endmodule
项目的测试文件full_adder_tb.v如下:
`timescale 1ns / 1ps
//时间单位为baidu1ns,精度为1ps.
//如果写 #3 即延时3ns,偏差为1ps。
module full_adder_tb;// Inputsreg a;reg b;reg c0;reg clk;// Outputswire s;wire c1;// Instantiate the Unit Under Test (UUT)full_adder uut (.a(a), .b(b), .c0(c0), .clk(clk), .s(s), .c1(c1));initial begin// Initialize Inputsa = 0;b = 0;c0 = 0;clk = 0;end
always #5 clk <= !clk;//20ps=50M
always #5 a = {$random}%2;
always #5 b = {$random}%2;
always #5 c0 = {$random}%2;
endmodule
这篇关于通过Verilog来实现全加器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!