FPGA 实验报告:四位全加器与三八译码器仿真实现
目录
安装Quartus软件
四位全加器
全加器、半加器
半加器:
全加器:
四位全加器电路图
创建项目
半加器
全加器
四位全加器
代码实现
半加器
全加器
四位全加器
三八译码器
创建项目
代码展示
modelsim仿真波形图
四位全加器
三八译码器
总结与展望
安装Quartus软件
本次实验首先进行Quartus软件的安装,版本选择18.1.0.625。安装过程较为常规,依次进行安装选项选择、许可协议接受、安装路径选择(如E盘)等步骤,等待安装进度条完成后,根据驱动程序安装向导提示,选择下一页及完成,即可完成软件的正常安装并投入使用。以下是详细安装流程:
- 打开安装软件
这里以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)。具体的工作原理可以参考以下真值表:

逻辑表达式:
每个输出端口的逻辑表达式可以表示为输入信号的组合。例如:
- Y0 = NOT I2 AND NOT I1 AND NOT I0
- Y1 = NOT I2 AND NOT I1 AND I0
- Y2 = NOT I2 AND I1 AND NOT I0
- Y3 = NOT I2 AND I1 AND I0
- Y4 = I2 AND NOT I1 AND NOT I0
- Y5 = I2 AND NOT I1 AND I0
- Y6 = I2 AND I1 AND NOT I0
- 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软件 四位全加器 全加器、半加器 半加器: 全加器: 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…...
动态规划详解(二):从暴力递归到动态规划的完整优化之路
目录 一、什么是动态规划?—— 从人类直觉到算法思维 二、暴力递归:最直观的问题分解方式 1. 示例:斐波那契数列 2. 递归树分析(以n5为例) 3. 问题暴露 三、第一次优化:记忆化搜索(Memoiza…...
前端学习——HTML
HTML VSCode常用快捷键HTML标签文本标签列表标签表格Form表单表单元素 块元素与行内元素新增标签 VSCode常用快捷键 代码格式化:ShiftAltF 向上或向下移动一行:AltUp或AltDown 快速复制一行代码:ShiftAltUp或者ShiftAltDown 快速替换&#x…...
12.【线性代数】——图和网络
十二 图和网络(线性代数的应用) 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间,求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间,电流总结电流图结论 …...
[环境搭建篇] Windows 环境下如何安装repo工具
Windows 环境下如何安装repo工具 1. 安装前置依赖2. 配置Repo引导脚本方法一:通过Gitee镜像安装(推荐)方法二:通过清华镜像安装 3. 解决依赖问题4. 初始化Repo仓库5. 常见问题解决 前言: 在Windows环境下安装Repo工具需…...
LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)
LeetCode 热题 100_字符串解码(71_394) 题目描述:输入输出样例:题解:解题思路:思路一(栈): 代码实现代码实现(栈):以思路一为例进行调…...
「DataX」数据迁移-IDEA运行DataX方法总结
背景 业务需求希望把Oracle数据库中的数据,迁移至MySql数据库中,因为需要迁移全量和增量的数据,所以希望想用数据迁移工具进行操作。 经过一些调研查询,最终打算使用DataX进行数据的迁移。 DataX简单介绍 DataX 是阿里云 DataW…...
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、过滤器&…...
DeepSeek与浏览器自动化AI Agent构建指南
文章使用到的模型可以用硅基流动中的: 注册链接:硅基流动统一登录 邀请码:FytHp9Xa 一、技术选型阶段 1. 基础组件选择 AI模型:DeepSeek-R1开放API(对话/推理)或DeepSeek-Coder(代码生成&#…...
面试中常问的mysql数据库指令【杭州多测师_王sir】
数据库中的修改表结构、增删改查、用户权限操作DDL 》数据库定义语言 create database,create table drop tableDML 》数据库操作语言 insert into,delete from,update set,DQL 》数据库查询语言 select .... from....crea…...
深度学习驱动的智能化革命:从技术突破到行业实践
第一章 深度学习的技术演进与核心架构 1.1 从浅层网络到深度学习的范式转变 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代的端到端…...
基于编译器特性浅析C++程序性能优化
最近在恶补计算机基础知识,学到CSAPP第五章的内容,在这里总结并且展开一下C程序性能优化相关的内容。 衡量程序性能的方式 一般而言,程序的性能可以用CPE(Cycles Per Element)来衡量,其指的是处理每个元素…...
服务器上通过ollama部署deepseek
2025年1月下旬,DeepSeek的R1模型发布后的一周内就火了,性能比肩OpenAI的o1模型,且训练成本仅为560万美元,成本远低于openAI,使得英伟达股票大跌。 下面我们来看下如何个人如何部署deepseek-r1模型。 我是用的仙宫云的…...
Android Coil总结
文章目录 Android Coil总结概述添加依赖用法基本用法占位图变形自定义ImageLoader取消加载协程支持缓存清除缓存监听 简单封装 Android Coil总结 概述 Coil 是一个用于 Android 的 Kotlin 图像加载库,旨在简化图像加载和显示的过程。它基于 Kotlin 协程࿰…...
《安富莱嵌入式周报》第351期:DIY半导体制造,工业设备抗干扰提升方法,NASA软件开发规范,小型LCD在线UI编辑器,开源USB PD电源,开源锂电池管理
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV16C95YEEZs 《安富莱嵌入式周报》第351期:DIY半导体…...
Redis在人员管理系统中的应用示例
用户会话管理 场景:用户登录后存储会话信息,支持多服务器共享 实现: 用户登录成功后,生成唯一Token(如JWT),作为Redis的Key Value存储用户ID、角色、权限等信息,设置过期时间&…...
The Wedding Juicer POJ - 2227
采取从外层边界,一步一步向内部拓展的策略,具体来说,一开始将最外面一层的点加入队列,并标记这些点的坐标已经被访问 取出队列中高度最低的点,将其弹出,查看其上下左右的点,如果新点没有被访问…...
# 深入理解RNN(一):循环神经网络的核心计算机制
深入理解RNN:循环神经网络的核心计算机制 RNN示意图 引言 在自然语言处理、时间序列预测、语音识别等涉及序列数据的领域,循环神经网络(RNN)一直扮演着核心角色。尽管近年来Transformer等架构逐渐成为主流,RNN的基本原理和思想依然对于理…...
分布式锁—6.Redisson的同步器组件
大纲 1.Redisson的分布式锁简单总结 2.Redisson的Semaphore简介 3.Redisson的Semaphore源码剖析 4.Redisson的CountDownLatch简介 5.Redisson的CountDownLatch源码剖析 1.Redisson的分布式锁简单总结 (1)可重入锁RedissonLock (2)公平锁RedissonFairLock (3)联锁MultiL…...
同步 Fork 仓库的命令
同步 Fork 仓库的命令 要将您 fork 的仓库的 main 分支与原始仓库(fork 源)同步,您可以使用以下命令: 首先,确保您已经添加了原始仓库作为远程仓库(如果尚未添加): git remote add…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
