FPGA 实验报告:四位全加器与三八译码器仿真实现

news2025/3/9 20:25:30

目录

安装Quartus软件

四位全加器

全加器、半加器

半加器:

全加器:

四位全加器电路图

创建项目

半加器

全加器

四位全加器

代码实现

半加器

全加器

四位全加器

三八译码器

创建项目

代码展示

modelsim仿真波形图

四位全加器

三八译码器

总结与展望


安装Quartus软件

本次实验首先进行Quartus软件的安装,版本选择18.1.0.625。安装过程较为常规,依次进行安装选项选择、许可协议接受、安装路径选择(如E盘)等步骤,等待安装进度条完成后,根据驱动程序安装向导提示,选择下一页及完成,即可完成软件的正常安装并投入使用。以下是详细安装流程:

  1. 打开安装软件

这里以18.1.0.625版本为例

打开安装程序,进行安装选择,选择next,进行下一步;

选择”I accept the agreement”再进行下一步;

选择想要保存的位置,例如我所选的E盘;

默认勾选,点击下一步;

继续点击next;

随后等待进度条走完即可;

在根据驱动程序安装向导,选择下一页,然后选择完成,完成安装;

打开Quartus 正常使用。

四位全加器

全加器、半加器

半加器:

定义:半加器是指只考虑两个一位二进制数相加,而不考虑来自低位的进位的加法器。

输入输出关系:

和(Sum):当两个输入数A和B不同时,和为1;当A和B相同时,和为0。其逻辑表达式为Sum = A ⊕ B(⊕表示异或运算)。

进位(Carry):当A和B都为1时,产生进位,进位输出为1,否则为0。其逻辑表达式为Carry = A & B(&表示与运算)。

电路结构

真值表:

全加器:

定义:全加器是指不仅考虑两个一位二进制数相加,还考虑来自低位的进位的加法器。

输入输出关系:

和(Sum):当A、B和来自低位的进位Cin中1的个数为奇数时,和为1;否则为0。其逻辑表达式为Sum = A ⊕ B ⊕ Cin。

进位(Carry):当A、B和Cin中任意两个或三个都为1时,产生进位。其逻辑表达式为Carry = (A & B) | (B & Cin) | (A & Cin)(|表示或运算)。

电路结构:

真值表:

  半加器和全加器就像是两个不同级别的助手,半加器只能处理简单的两个数相加,而全加器则能处理更复杂的带进位相加的情况。它们共同构成了数字电路中实现加法运算的基础模块,为计算机等数字设备的运算能力提供了支持。

四位全加器电路图

创建项目

在Quartus中,可通过绘制原理图或编写Verilog HDL代码实现四位全加器的设计。原理图绘制需在“Block Diagram/Schematic File”中进行,选择相应的与门、异或门等元件进行连接。代码实现则更为高效,通过定义实体和架构,利用信号连接和实例化语句实现四位全加器的功能。设计过程中,将四个全加器串联,使每个全加器的输出进位连接到下一个全加器的输入进位,从而实现四位二进制数的加法运算。下面为具体实现方法:

点击软件运行,进入主界面;

点击左上角的File,选择目录下的New;

\

然后在弹出来的目录中再选择”New Quartus Prime Project”;

在下图中填写好项目名称,随后点击”Next”;

其中,顶层设计实体名称这是你的设计文件中的顶层模块的名称。这个名称必须与你的设计文件中的实体名称完全匹配,包括大小写。

然后点击”Next”,直到下图所示,然后选择标注的型号,再点击”Next”;

随后在Slmulation,选择ModeSim-Altera;(由于之前在安装的时候已经默认安装了ModeSim,所以直接下一步即可)

最后点击,Finish,创建成功。

半加器

在空白项目中,左上角选择File,点击目录下的New,然后再选择Block Diagram/Schematic File

建立好过后,选择and2、xor(即与门、异或门);

按照下图连接,就是一位半加器的原理图。

画好原理图过后,再将其保存为可调用原件。

首先点开左上角File,在根据指示进行操作;

即可保存成功。

全加器

操作同半加器,绘制原理图,然后保存;

注意:这里的half_adder为刚才我们建立并保存好的,可直接调用。

四位全加器

在元器件中搜索刚才保存的全加器full_adder,绘制四位全加器。

绘制图如下:

编译成功过后可以在TOOL目录下的Netlist Viewers的二级目录中的RTL Viewer查看电路图。

代码实现

虽然图画表达更加直观,但占用的时间较多,当涉及的内容复杂时,画图效率更是大大缩减,这个时候可以用代码实现原理图的绘制。

选择主页面左上角的File,选择目录下的New,然后在新的目录下选择Verilog HDL File;

然后根据需要生成的电路图输入代码。

半加器
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- 定义半加器实体

entity half_adder is

    port (

        A : in  STD_LOGIC;

        B : in  STD_LOGIC;

        sum : out  STD_LOGIC;

        cout : out  STD_LOGIC

    );

end half_adder;



-- 定义半加器架构

architecture Behavioral of half_adder is

begin

    sum <= A XOR B;

    cout <= A AND B;

end Behavioral;
全加器
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;



-- 定义全加器实体

entity full_adder is

    port (

        A : in  STD_LOGIC;

        B : in  STD_LOGIC;

        Cin : in  STD_LOGIC;

        sum : out  STD_LOGIC;

        Cout : out  STD_LOGIC

    );

end full_adder;



-- 定义全加器架构

architecture Behavioral of full_adder is

begin

    sum <= A XOR B XOR Cin;

    Cout <= (A AND B) OR (Cin AND (A XOR B));

end Behavioral;
四位全加器
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;



-- 定义4位全加器实体

entity four_bit_adder is

    port (

        A : in  STD_LOGIC_VECTOR(3 downto 0);

        B : in  STD_LOGIC_VECTOR(3 downto 0);

        Cin : in  STD_LOGIC;

        S : out  STD_LOGIC_VECTOR(3 downto 0);

        Cout : out  STD_LOGIC

    );

end four_bit_adder;



-- 定义4位全加器架构

architecture Behavioral of four_bit_adder is

    signal C : STD_LOGIC_VECTOR(4 downto 0);

    signal temp_S : STD_LOGIC_VECTOR(3 downto 0);



    component full_adder

        port (

            A : in  STD_LOGIC;

            B : in  STD_LOGIC;

            Cin : in  STD_LOGIC;

            sum : out  STD_LOGIC;

            Cout : out  STD_LOGIC

        );

    end component;



begin

    C(0) <= Cin;



    -- 实例化四个全加器

    G0: full_adder port map (A(0), B(0), C(0), temp_S(0), C(1));

    G1: full_adder port map (A(1), B(1), C(1), temp_S(1), C(2));

    G2: full_adder port map (A(2), B(2), C(2), temp_S(2), C(3));

    G3: full_adder port map (A(3), B(3), C(3), temp_S(3), C(4));



    S <= temp_S;

    Cout <= C(4);

end Behavioral;

 

三八译码器

输入端口:

I2、I1、I0:这三个端口是3位二进制输入信号。

这三个输入信号可以表示8种不同的状态(从 000 到 111)。

输出端口:

Y7、Y6、Y5、Y4、Y3、Y2、Y1、Y0:这8个端口是8位一热码输出信号。

每个输出端口对应一个输入状态,只有一个输出端口为高电平(1),其余为低电平(0)。

工作原理

三-八译码器根据输入的3位二进制数,选择对应的输出线,并将其置为高电平(1),而其他输出线保持低电平(0)。具体的工作原理可以参考以下真值表:

逻辑表达式

每个输出端口的逻辑表达式可以表示为输入信号的组合。例如:

  1. Y0 = NOT I2 AND NOT I1 AND NOT I0
  2. Y1 = NOT I2 AND NOT I1 AND I0
  3. Y2 = NOT I2 AND I1 AND NOT I0
  4. Y3 = NOT I2 AND I1 AND I0
  5. Y4 = I2 AND NOT I1 AND NOT I0
  6. Y5 = I2 AND NOT I1 AND I0
  7. Y6 = I2 AND I1 AND NOT I0
  8. Y7 = I2 AND I1 AND I0

创建项目

在Quartus中创建新项目后,通过编写Verilog HDL代码实现三八译码器。使用case语句根据输入信号组合设置输出信号,代码简洁且逻辑清晰。编写完成后进行编译,确保代码无误。以下是具体实现方法:

首先再刚才新建项目的Feil,选择”New Project Wizard”,与全加器半加器的创建一样的操作;

创建好空项目过后,我们就使用代码实现三八译码器;

选择主页面左上角的File,选择目录下的New,然后在新的目录下选择Verilog HDL File;

代码展示

module three_eight_decoder(a, b, c, out);

    input a;  // 输入端口a

    input b;  // 输入端口b

    input c;  // 输入端口c

    output [7:0] out;  // 输出端口out,8位宽

    reg [7:0] out;     // 声明out为寄存器类型

    // 或者可以直接写成:output reg [7:0] out;



    // always块:当a、b或c发生变化时触发

    always @(a, b, c) begin

        // case语句:根据{a, b, c}的组合值选择输出

        case ({a, b, c})

            3'b000: out = 8'b0000_0001;  // 当{a, b, c}为000时,out输出0000_0001

            3'b001: out = 8'b0000_0010;  // 当{a, b, c}为001时,out输出0000_0010

            3'b010: out = 8'b0000_0100;  // 当{a, b, c}为010时,out输出0000_0100

            3'b011: out = 8'b0000_1000;  // 当{a, b, c}为011时,out输出0000_1000

            3'b100: out = 8'b0001_0000;  // 当{a, b, c}为100时,out输出0001_0000

            3'b101: out = 8'b0010_0000;  // 当{a, b, c}为101时,out输出0010_0000

            3'b110: out = 8'b0100_0000;  // 当{a, b, c}为110时,out输出0100_0000

            3'b111: out = 8'b1000_0000;  // 当{a, b, c}为111时,out输出1000_0000

        endcase

    end

endmodule

modelsim仿真波形图

同样采用“University Program VWF”创建仿真文件,配置输入输出信号后运行仿真,查看波形图以验证译码器的正确性。通过观察波形图,可确认译码器是否能准确地根据输入信号生成对应的输出信号,如有问题可及时修改代码。具体操作如下:

四位全加器

选择主页面左上角的File,选择目录下的New,然后在新的目录下选择University Program VWF

创建好过后,会自动弹出窗口,双击左侧空白处,选择提示框中的Node Finder...;

然后会弹出窗口,先点击list,会显示四位全加器的输入输出元素,再点击双又向箭头;

配置好过后点击OK,即可得到波形图:

三八译码器

同理可得到38译码器的波形图:

总结与展望

通过本次实验,掌握了Quartus软件的安装与项目创建流程,深入理解了四位全加器和三八译码器的工作原理,并成功实现了其设计与仿真。在设计过程中,体会到了原理图绘制和代码实现两种方法的特点,以及仿真测试在验证设计正确性方面的重要性。

在未来,将继续深入学习FPGA设计,探索更复杂的数字电路,如多位乘法器、移位寄存器等,并尝试将FPGA应用于实际项目中,以提升自身的实践能力和技术水平。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win11 Visual Studio 17 2022源码编译 opencv4.11.0 + cuda12.6.3 启用GPU加速

win11 Visual Studio 17 2022 源码编译 opencv4.11.0 cuda12.6.3 启用GPU加速 配置: 生成 opencv 生成 opencv-python 1 下载源码和安装软件 win11 x64 系统 安装Visual Studio 17 2022 下载opencv4.11.0 源码 https://github.com/opencv/opencv/releases/tag/4.11.0 下载…

Ribbon实现原理

文章目录 概要什么是Ribbon客户端负载均衡 RestTemplate核心方法GET 请求getForEntitygetForObject POST 请求postForEntitypostForObjectpostForLocation PUT请求DELETE请求 源码分析类图关系 与Eureka结合重试机制 概要 什么是Ribbon Spring Cloud Ribbon是一个基于HTTP和T…

MuMu-LLaMA:通过大型语言模型进行多模态音乐理解和生成(Python代码实现+论文)

MuMu-LLaMA 模型是一种音乐理解和生成模型&#xff0c;能够进行音乐问答以及从文本、图像、视频和音频生成音乐&#xff0c;以及音乐编辑。该模型利用了用于音乐理解的 MERT、用于图像理解的 ViT 和用于视频理解的 ViViT 等编码器&#xff0c;以及作为音乐生成模型&#xff08;…

2025最新比较使用的ai工具都有哪些,分别主要用于哪些方面?

文章目录 一、AI对话与交互工具二、AI写作与内容生成工具三、AI绘画与设计工具四、AI视频生成工具五、办公与效率工具六、其他实用工具选择建议 根据2025年最新行业动态和用户反馈&#xff0c;以下AI工具在多个领域表现突出&#xff0c;覆盖对话、写作、设计、视频生成等场景&a…

在ArcMap中通过Python编写自定义工具(Python Toolbox)实现点转线工具

文章目录 一、需求二、实现过程2.1、创建Python工具箱&#xff08;.pyt&#xff09;2.2、使用catalog测试代码2.3、在ArcMap中使用工具 三、测试 一、需求 通过插件的形式将点转线功能嵌入ArcMap界面&#xff0c;如何从零开始创建一个插件&#xff0c;包括按钮的添加、工具的实…

后智能体时代的LLM和Agent

文章目录 1. 关于AI重塑的哲学体系2. 关于AI大模型体系的认知3. 关于AI大模型体系的畅想4. 关于人和AI大模型体系的共处5. 写在最后 随着OpenAI、Deepseek、Manus等等智能体的爆火&#xff0c;人们茶前饭后、插科打诨的话题都离不开这些智能体&#xff0c;现状也正如《人民日报…

景联文科技:以精准数据标注赋能AI进化,构筑智能时代数据基石

在人工智能技术席卷全球的浪潮中&#xff0c;高质量数据已成为驱动AI模型进化的核心燃料。作为全球领先的AI数据服务解决方案提供商&#xff0c;景联文科技深耕数据标注领域多年&#xff0c;以技术为基、以专业为本&#xff0c;致力于为全球客户提供全场景、高精度、多模态的数…

嵌入式L6计算机网络

Telnet不加密 socket是应用层和下面的内核

华为鸿蒙系统全景解读:从内核设计到生态落地的技术革命

华为鸿蒙系统全景解读&#xff1a;从内核设计到生态落地的技术革命 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 华为鸿蒙系统全景解读&#x…

八卡5090服务器首发亮相!

AI 人工智能领域热度居高不下。OpenAI 的 GPT - 4 凭强悍语言处理能力&#xff0c;在内容创作、智能客服等领域广泛应用。清华大学团队的 DeepSeek 大模型在深度学习训练优势突出&#xff0c;正促使各行业应用端算力需求向推理主导转变&#xff0c;呈爆发式增长 。 随着 DeepS…

基于SSM+Vue+uniapp的驾校预约管理小程序+LW示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》

导语​ "你是否想过用Python开发一款可玩性高的双人合作游戏&#xff1f;本文将分享如何从零开始实现一款类《吸血鬼幸存者》的生存射击游戏&#xff01;包含完整源码解析、角色系统设计、敌人AI逻辑等核心技术点&#xff0c;文末提供完整代码包下载&#xff01;" 哈…

ArcGIS操作:13 生成最小外接矩阵

应用情景&#xff1a;筛选出屋面是否能放下12*60m的长方形&#xff0c;作为起降场候选点&#xff08;一个不规则的形状内&#xff0c;判断是否能放下指定长宽的长方形&#xff09; 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …

manus对比ChatGPT-Deep reaserch进行研究类学术相关数据分析!谁更胜一筹?

没有账号&#xff0c;只能挑选一个案例 一夜之间被这个用全英文介绍全华班出品的新爆款国产AI产品的小胖刷频。白天还没有切换语言的选项&#xff0c;晚上就加上了。简单看了看团队够成&#xff0c;使用很长实践的Monica创始人也在其中。逐渐可以理解&#xff0c;重心放在海外产…

Python —— pow()函数

一、示例1 # 计算 2 的 3 次幂 result1 pow(2, 3) print(result1) # 输出: 8# 计算 2.5 的 2 次幂 result2 pow(2.5, 2) print(result2) # 输出: 6.25 二、示例2 # 计算 (2 ** 3) % 5 result3 pow(2, 3, 5) print(result3) # 输出: 3 三、示例3 ntxt input("请输…

开发环境搭建-完善登录功能

一.完善登录功能 我们修改密码为md5中的格式&#xff0c;那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式&#xff0c;然后进行比对。比对成功则登录成功&#xff0c;失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密&#xff0c;调用md4Dig…

STM32G431RBT6--(3)片上外设及其关系

前边我们已经了解了STM32的内核&#xff0c;下面我们来介绍片上外设&#xff0c;对于这些外设&#xff0c;如果我们弄清楚一个单片机都有什么外设&#xff0c;弄清他们之间的关系&#xff0c;对于应用单片机有很大的帮助&#xff0c;我们以G431为例&#xff1a; 这个表格描述了…

docker 安装达梦数据库(离线)

docker安装达梦数据库&#xff0c;官网上已经下载不了docker版本的了&#xff0c;下面可通过百度网盘下载 通过网盘分享的文件&#xff1a;dm8_20240715_x86_rh6_rq_single.tar.zip 链接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取码: szj9 上传到服务…

AI 驱动的软件测试革命:从自动化到智能化的进阶之路

&#x1f680;引言&#xff1a;软件测试的智能化转型浪潮 在数字化转型加速的今天&#xff0c;软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式&#xff0c;已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…

六轴传感器ICM-20608

ICM-20608-G是一个6轴传感器芯片&#xff0c;由3轴陀螺仪和3轴加速度计组成。陀螺仪可编程的满量程有&#xff1a;250&#xff0c;500&#xff0c;1000和2000度/秒。加速度计可编程的满量程有&#xff1a;2g&#xff0c;4g&#xff0c;8g和16g。学习Linux之SPI之前&#xff0c;…