问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【FPGA】——verilog实现四位全加器和三八译码器

创作时间:
作者:
@小白创作中心

【FPGA】——verilog实现四位全加器和三八译码器

引用
CSDN
1.
https://blog.csdn.net/2201_75518371/article/details/145999755

一、四位全加器原理

1、半加器

半加器是一种基本的数字电路元件,用于对两个二进制数进行加法运算。它只能处理两个一位二进制数的加法,无法处理来自低位的进位。半加器具有两个输入和输出,其真值表如下图所示:

A、B表示两个输入,C表示进位,S表示和

在Quartus里面画出的逻辑电路图如下:

2、一位全加器

全加器可以对三个二进制数进行加法运算。与半加器不同,全加器能够处理来自低位的进位,因此适用于多位二进制数的加法运算。其真值表如下图所示:

它有三个输入和两个输出,Ain、Bin表示两个二进制数,Cin表示地位进位,Cout表示高位进位,Sum表示相加得到的和

使用verilog语言编写一位全加器:

module full_adder (
    // 输入信号:被加数 (ain),加数 (bin),低位进位 (cin)
    input ain, bin, cin,
    // 输出信号:和 (sum),高位进位 (cout)
    output sum, cout
);
    // 计算和与进位
    assign sum = ain ^ bin ^ cin; // 本位和
    assign cout = (ain & bin) | (bin & cin) | (ain & cin); // 进位
endmodule  

得到的仿真图如下:

3、四位全加器

四位全加器通过级联四个全加器实现,能够对两个四位二进制数进行加法运算,并处理进位。它是计算机硬件中实现算术运算的基础模块之一。其真值表如下图所示:

verilog语言

module adder_4bit (
    // 输入信号:4 位被加数 (a),4 位加数 (b),低位进位 (cin)
    input [3:0] a, b,
    input cin,
    // 输出信号:4 位和 (sum),高位进位 (cout)
    output [3:0] sum,
    output cout
);
    // 内部信号:用于存储每一位的进位
    wire c1, c2, c3;
    // 实例化四个一位全加器,级联实现四位全加器
    full_adder fa0 (
        .ain(a[0]),
        .bin(b[0]),
        .cin(cin),
        .sum(sum[0]),
        .cout(c1)
    );
    full_adder fa1 (
        .ain(a[1]),
        .bin(b[1]),
        .cin(c1),
        .sum(sum[1]),
        .cout(c2)
    );
    full_adder fa2 (
        .ain(a[2]),
        .bin(b[2]),
        .cin(c2),
        .sum(sum[2]),
        .cout(c3)
    );
    full_adder fa3 (
        .ain(a[3]),
        .bin(b[3]),
        .cin(c3),
        .sum(sum[3]),
        .cout(cout)
    );
endmodule  

生成仿真图如下所示:

二、在Quartus里实现四位全加器

  1. 创建工程过程 启动 Quartus II 软件,选择File->New Project Wizard,在出现的界面下先Next,填写工程的路径和名称,然后接着Next,直到出现下面界面并进行相应操作。接着一路Next,直到Finish,完成工程的创建。

  2. 创建Verilog文件
    首先创建一个一位全加器的Verilog HDL 文件full_adder,然后输入上面的Verilog代码,保存并编译
    然后再创建四位全加器文件adder_4bit,输入上面的Verilog代码,保存并编译
    通过tool->Netlist Viewers->RTL Viewer,可以查看电路图

  3. 创建一个向量波形文件,选择菜单项 File→New->VWF
    添加信号

  4. 编辑仿真信号并得到波形图

  5. 绑定引脚
    我们在开发板上需要用到按键去表示输入的二进制值,查询DE2-115开发板的按键引脚如下图所示:
    知道需要用到的按键之后就可以在Quartus里面绑定,通过Assignments->Pin Planner,打开引脚配置

  6. 烧录程序

实物图如下:

四位全加器

三、在Quartus里三八译码器

1、三八译码器真值表

2、七段数码管

为方便查看三八译码器的输出,我们可以将输出转化到七段数码管上查看。

本次使用开发板采用共阳极数码seg值

3、verilog代码

//利用38译码器点亮8段数码管
module yima_38(
    input wire [2:0] sw,  // 3位输入开关,用于选择数码管显示的8数字
    output reg [6:0] seg  // 8位输出,连接到数码管的段选信号(a-g + dp)
);

    // 数码管段选信号定义(共阳极)
    // seg[6:0] 分别对应数码管的  g, f, e, d, c, b, a
    // 共阳极数码管:0 点亮,1 熄灭
    always @(sw) begin
        case (sw)
            3'b000: seg = 8'b1100_0000; // 显示数字 0
            3'b001: seg = 8'b1111_1001; // 显示数字 1
            3'b010: seg = 8'b1010_0100; // 显示数字 2
            3'b011: seg = 8'b1011_0000; // 显示数字 3
            3'b100: seg = 8'b1001_1001; // 显示数字 4
            3'b101: seg = 8'b1001_0010; // 显示数字 5
            3'b110: seg = 8'b1000_0010; // 显示数字 6
            3'b111: seg = 8'b1111_1000;
            default: seg = 8'b1111_1111; // 默认全灭
        endcase
    end
endmodule  

仿真图如下:
实物效果如下所示:

三八译码器

参考
FPGA——1位全加器的实现_fpga全加器代码-CSDN博客
FPGA——1位全加器和4位全加器的实现_一位全加器电路图-CSDN博客

总结
此次FPGA的实验受益颇多,更进一步了解了四位全加器和三八译码器的原理以及verilog代码的编写。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号