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

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

目录

安装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 isport (A : in  STD_LOGIC;B : in  STD_LOGIC;sum : out  STD_LOGIC;cout : out  STD_LOGIC);end half_adder;-- 定义半加器架构architecture Behavioral of half_adder isbeginsum <= A XOR B;cout <= A AND B;end Behavioral;
全加器
library IEEE;use IEEE.STD_LOGIC_1164.ALL;-- 定义全加器实体entity full_adder isport (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 isbeginsum <= 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 isport (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 issignal C : STD_LOGIC_VECTOR(4 downto 0);signal temp_S : STD_LOGIC_VECTOR(3 downto 0);component full_adderport (A : in  STD_LOGIC;B : in  STD_LOGIC;Cin : in  STD_LOGIC;sum : out  STD_LOGIC;Cout : out  STD_LOGIC);end component;beginC(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;  // 输入端口ainput b;  // 输入端口binput c;  // 输入端口coutput [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_00013'b001: out = 8'b0000_0010;  // 当{a, b, c}为001时,out输出0000_00103'b010: out = 8'b0000_0100;  // 当{a, b, c}为010时,out输出0000_01003'b011: out = 8'b0000_1000;  // 当{a, b, c}为011时,out输出0000_10003'b100: out = 8'b0001_0000;  // 当{a, b, c}为100时,out输出0001_00003'b101: out = 8'b0010_0000;  // 当{a, b, c}为101时,out输出0010_00003'b110: out = 8'b0100_0000;  // 当{a, b, c}为110时,out输出0100_00003'b111: out = 8'b1000_0000;  // 当{a, b, c}为111时,out输出1000_0000endcaseendendmodule

modelsim仿真波形图

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

四位全加器

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

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

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

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

三八译码器

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

总结与展望

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

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

相关文章:

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

目录 安装Quartus软件 四位全加器 全加器、半加器 半加器&#xff1a; 全加器&#xff1a; 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…...

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;…...

高效Android MQTT封装工具:简化物联网开发,提升性能与稳定性

在Android开发中&#xff0c;封装MQTT工具可以帮助简化与MQTT服务器的通信。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息传输协议&#xff0c;常用于物联网&#xff08;IoT&#xff09;设备之间的通信。 以下是一个简单的MQ…...

数据库原理7

1.“数据库系统运行与维护工具”的研究属于数据库管理系统软件 2.1970年IBM公司的高级研究员E.F.Codd提出了关系数据模型 3.每个属性的属性值是不可分解的&#xff0c;即关系的每个分量必须是一个不可分的数据项。属性值的取值应满足域完整性约束。 4.视图作用&#xff1a;简…...

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

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

什么是 MyBatis? 它的优点和缺点是什么?

一、 什么是 MyBatis&#xff1f; 定义&#xff1a; MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 Java 应用程序与数据库之间的交互。MyBatis 通过 XML 或注解 的方式&#xff0c;将 SQL 语句与 Java 代码分离&#xff0c;提供了一种灵活的、易于维护的数据访问解决方…...

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

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

Array and string offset access syntax with curly braces is deprecated

警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告&#xff08;Deprecation Notice&#xff09;&#xff0c;表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...

moodle 开源的在线学习管理系统(LMS)部署

一、Moodle 简介 Moodle&#xff08;Modular Object-Oriented Dynamic Learning Environment&#xff09;是一个开源的在线学习管理系统&#xff08;LMS&#xff09;&#xff0c;广泛应用于教育机构和企业培训。其核心功能包括课程管理、作业提交、在线测试、论坛互动和成绩跟…...

后智能体时代的LLM和Agent

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

Day6 DFS

一、跳台阶 一个楼梯共有 nn 级台阶&#xff0c;每次可以走一级或者两级&#xff0c;问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。 输入格式 共一行&#xff0c;包含一个整数 nn。 输出格式 共一行&#xff0c;包含一个整数&#xff0c;表示方案数。 数据范围 1…...

Releases(发布) 和 版本管理 是两个紧密相关的概念

在软件开发和维护中,Releases(发布) 和 版本管理 是两个紧密相关的概念,特别是在开源项目或企业软件开发中。 1. Releases(发布) Release 是指软件的一个正式发布版本,通常经过开发、测试、修复 Bug,并被认为是足够稳定和可用于生产环境的版本。 主要特点 里程碑:通…...

模型微调——模型性能提升方法及注意事项(自用)

名词补充 人为为训练数据标注的标签称为黄金标准或真实值&#xff0c;这个过程一定程度上保证训练的准确性&#xff0c;但是其人工标注的成本和时间很高&#xff0c;并且标注的标签受人的主观因素影响。 导致模型性能不佳的因素和解决办法 ①不同类别的数据不平衡&#xff1a;统…...

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

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

嵌入式L6计算机网络

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

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

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

2025最新软件测试面试八股文(含答案+文档)

1、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。 参考答案&#xff1a; 黑盒测试&#xff1a;已知产品的功能设计规格&#xff0c;可以进行测试证明每个实现了的功能是否符合要求。 白盒测试&#xff1a;已知产品的内部工作过程…...

微前端框架 Qiankun 的应用及问题分析

一、Qiankun 的核心应用场景与优势 多技术栈共存与灵活集成 Qiankun 支持主应用与子应用使用不同技术栈&#xff08;如 Vue、React、Angular 等&#xff09;&#xff0c;通过 HTML Entry 方式接入子应用&#xff0c;无需深度改造子应用即可实现集成&#xff0c;降低了技术迁移成…...

八卡5090服务器首发亮相!

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

C#类型转换基本概念

一、基本定义‌ C# 类型转换是将数据从一种类型转换为另一种类型的过程&#xff0c;分为 ‌隐式转换‌ 和 ‌显式转换‌ 两类‌。 强类型语言特性‌&#xff1a;C# 要求变量类型在编译时确定&#xff0c;类型转换需满足兼容性或显式规则‌。目的‌&#xff1a;处理不同数据类…...

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

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

关于C++数据类型char的类型是整数的思考

学习数据类型时&#xff0c;整数类型中有一个特殊的类型char&#xff0c;可以使用字符来为其赋&#xff0c;也可以用整数来为其赋值&#xff0c;这是怎么一回事&#xff1f;其实任何类型&#xff0c;在计算机的内存中&#xff0c;在最小的存储单元比特中&#xff0c;内部只有0或…...

在Spring Boot项目中分层架构

常见的分层架构包括以下几层: 1. Domain 层(领域层) 作用:领域层是业务逻辑的核心,包含与业务相关的实体类、枚举、值对象等。它是对业务领域的抽象,通常与数据库表结构直接映射。 主要组件: 实体类(Entity):与数据库表对应的Java类,通常使用JPA或MyBatis等ORM框架…...

《用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;重心放在海外产…...

android为第三方提供部分系统接口

文章目录 Settings - 亮灭屏Settings - 恢复出厂设置Settings - 数字锁屏/解锁Settings - 设置系统时间PackageInstaller - 安装/卸载第三方应用摘要:本文对系统模块进行改造,提供广播等形式的接口对外提供无法直接调用的系统级别接口,实现部分功能的集合。如果是广播形式,…...

在虚拟机上安装Hadoop

以下是在虚拟机上安装Hadoop的一般步骤&#xff1a; 准备工作 - 安装虚拟机软件&#xff1a;如VMware Workstation或VirtualBox等。 - 创建虚拟机&#xff1a;选择合适的操作系统镜像&#xff0c;如Ubuntu或CentOS等Linux发行版&#xff0c;为虚拟机分配足够的CPU、内存和磁盘…...