当前位置: 首页 > article >正文

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

目录

一、四位全加器原理

1、半加器

2、一位全加器

3、四位全加器

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

三、在Quartus里三八译码器

1、三八译码器真值表

2、七段数码管

3、verilog代码

总结

一、四位全加器原理

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,完成工程的创建。

img

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,打开引脚配置

img

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代码的编写。


http://www.kler.cn/a/570307.html

相关文章:

  • 使用shell脚本读elasticsearch,写msyql
  • 系统架构设计师—计算机基础篇—计算机网络
  • 对比 ThinkPHP 中间件 和 Java AOP
  • 《论云原生架构及其应用》审题技巧 - 系统架构设计师
  • Django 5实用指南(十三)安全性与防护
  • 字符串--子串匹配
  • 【Linux学习笔记】Linux基本指令及其发展史分析
  • 人工智能大模型在物联网应用层上的应用
  • MCP与RAG:增强大型语言模型的两种路径
  • 【星云 Orbit • STM32F4】04.一触即发:GPIO 外部中断
  • 网络问题排查基本命令
  • Android Studio 新版本Gradle通过JitPack发布Maven仓库示例
  • SpringBoot读取properties中文乱码解决方案
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(三)
  • element-push el-date-picker日期时间选择器,禁用可选中的时间 精确到分钟
  • 迷你世界脚本游戏接口:Game
  • 【C语言】联合体妙用之:数据类型转换
  • 聊聊学习之数据-信息-知识-洞见-智慧-影响力
  • Django 项目模块化开发指南:实现 Vue 风格的组件化
  • Lasso回归、Ridge岭回归