【FPGA学习】FPGA入门学习即数字逻辑复习

前言:最近开始学习FPGA了,希望通过博客记录下每一次学习的过程,与大家共勉。

目录

一、组合逻辑电路的设计(工程学习引入)

二、3-8译码器设计、下载和功能演示(在的8段数码管显示)

2.1 Logsim设计的3-8译码器电路

2.2Verilog编程实现的3-8译码器 RTL电路

​编辑

​编辑

2.3完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)

​编辑

三、用Verilog设计实现一个4位全加器。

3.1一位全加器设计

3.2四位全加器设计

3.3Verilog 语言实现加法器


一、组合逻辑电路的设计(工程学习引入)

1.1组合逻辑电路设计

题目 :

题目分析:我们要设计一个电热水器水位状态显示电路,利用三个水位检测元件 A、B、C 的电平信号(水面低于元件输出高电平,高于则输出低电平 ),通过与非门逻辑,实现不同水位状态对应指示灯亮灭:水面在 A、B 间(正常)绿灯 G 亮;水面在 B、C 间或 A 以上(异常)黄灯 Y 亮;水面在 C 以下(危险)红灯 R 亮 。

结合题意,梳理不同水位场景下 A、B、C 取值及对应灯的状态:

水位状态ABCGYR
正常(A、B 间)011100
异常(B、C 间)101010
异常(A 以上)000010
危险(C 以下)111001
其他无效状态(无需关注)(略)(略)(略)000

5绘制逻辑电路图

  • 绿灯 G 支路

    • 先用一个与非门,输入接 A(同时接两个输入脚,实现 A=A⋅A )得到 A ;
    • 再将 A、B、C 输入第二个与非门(需三输入与非门,或用两个两输入与非门级联:先把 A 和 B 输入与非门,输出再和 C 输入下一个与非门 ),得到 ABC ;
    • 最后用第三个与非门,输入接第二个与非门输出,输出即为 G=ABC 。
  • 黄灯 Y 支路
    一个两输入与非门,一个输入接 B ,另一个输入接高电平(如电源 VCC​ 串电阻 ),输出 Y=B 。

  • 红灯 R 支路
    两个两输入与非门级联:第一个与非门输入 A、B、C(同样可拆分,先 A 和 B 输入,输出再和 C 输入 ),输出 ABC ;第二个与非门输入接该输出,输出 R=ABC 。

将各水位状态的 A、B、C 取值代入电路:

  • 正常状态(A=0,B=1,C=1 ):G 支路经与非门运算输出 1(绿灯亮 ),Y 因 B=1 输出 0(黄灯灭 ),R 因 A 或 B 为 0 输出 0(红灯灭 ),符合要求。
  • 异常状态(如 A=1,B=0,C=1 或 A=0,B=0,C=0 ):Y 因 B=0 输出 1(黄灯亮 ),G 输出 0(绿灯灭 ),R 输出 0(红灯灭 ),符合要求。
  • 危险状态(A=1,B=1,C=1 ):R 支路输出 1(红灯亮 ),G、Y 输出 0(绿灯、黄灯灭 ),符合要求。

通过 定义逻辑变量 → 列真值表 → 写逻辑表达式 → 转换与非门形式 → 画电路图 → 验证 ,完成了电热水器水位显示电路的与非门设计 。

二、3-8译码器设计、下载和功能演示(在的8段数码管显示)

2.1 Logsim设计的3-8译码器电路

(一)3-8译码器简介介绍:
3-8译码器是一种数字电路元件,用于将3位二进制输入信号转换为8位输出信号。这种译码器的主要功能是根据输入信号的组合,将其中一个输出线激活。每个可能的输入组合对应一个唯一的输出线,这使得3-8译码器在数字系统中的许多应用中都非常有用。

1.输入: 3-8译码器有3个输入线,每一条线都可以是逻辑0或逻辑1。
2.输出: 有8个输出线,每个输出线对应于一个可能的3位输入组合。

3. 功能:3-8译码器的主要功能是根据输入的二进制组合激活相应的输出线。只有一个输出线处于逻辑高电平状态,其余输出线处于逻辑低电平状态。

4.应用:3-8译码器在数字系统中有许多应用,其中一种主要的用途是将特定的输入模式映射到相应的输出。它常用于地址译码、显示驱动和其他需要多个输出状态的场合。

2.2Verilog编程实现的3-8译码器 RTL电路

1.verilog代码如下:

module test(data_out, data_in ) ;
input [2:0] data_in;
output [7:0] data_out;
reg [7:0] data_out;always @(data_in)begincase (data_in )3'b000: data_out=8'b11111110;3'b001: data_out=8'b11111101;3'b010: data_out=8'b11111011;3'b011: data_out=8'b11110111;3'b100: data_out=8'b11101111;3'b101: data_out=8'b11011111;3'b110: data_out=8'b10111111;3'b111: data_out=8'b01111111;default: data_out=8'bxxxxxxxx;endcaseend
endmodule

2.仿真得到RTE电路图

3.编写一个仿真测试文件,对3-8译码器进行仿真测试,输出测试波形图和Transcript结果

思考回答:

1)Verilog 综合生成的3-8译码器电路原理图与原始设计电路存在什么差异? 仿真测试生成的结果是否与真值表一致?

答:输入端与输出端,其余基本无差异。Verilog综合生成的电路图中,内部的基本门电路被封装成高层次的模块,用户只需与模块的输入和输出进行交互。

仿真测试结果与真值表一致

2.3完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)

配置引脚

DE2-115 引脚列表:【整理】DE2-115引脚列表 word版-CSDN博客

使用3个SW作为输入信号,七段数码管作为输出显示

 verilogo代码:

module decoder_3to8
(input wire A , //输入信号1input wire B , //输入信号2input wire C , //输入信号3output reg [0:7] out //输出信号 out);
​always@(*)case({A, B, C})3'b000 : out = 8'b0000_0011; 3'b001 : out = 8'b1001_1111;3'b010 : out = 8'b0010_0101;3'b011 : out = 8'b0000_1101; 3'b100 : out = 8'b1001_1001;3'b101 : out = 8'b0100_1001;3'b110 : out = 8'b0100_0001;3'b111 : out = 8'b0001_1111;endcaseendmodule


 

三、用Verilog设计实现一个4位全加器。

3.1一位全加器设计

全加器简介

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器74LS283。

1.一位全加器logsim电路图:

2.verilog语言代码:

module test(A,B,cin,sum,cout);input A,B,cin;output sum,cout;wire t1,t2,t3,t4;and U1(t1,A,B);and U2(t2,A,cin);and U3(t3,B,cin);or U4(cout,t1,t2,t3);xor U5(t4,A,B);xor U6(sum,t4,cin);
endmodule

RTL电路图:

全加器实现流程:

1.创建项目:

设置一下仿真配置(后面会用到)

新建文件:

这里我们是主要使用图中圈出的这两种文件类型:
BlockDiagram/SchematicFile:这种文件类型就是我们平时绘制原理图需要使用的文件,后缀是.bdf和.bsf
VerilogHDLFile:这种文件类型就是我们需要写verilog代码的文件类型,后缀是.v

结束文件创建。来画原理图:

与之前的逻辑门电路设计类似,此处略写。

3.2四位全加器设计


最终设计封装后 的到加法器:

3.3Verilog 语言实现加法器

半加器:

module halfadder(input wire a,input wire b,output wire cout,output wire sum
);
assign cout = a&b;
assign sum = a^b;
endmodule

全加器:

module adder(input wire a,input wire b,input wire cin,output wire cout,output wire sum
);
assign cout = (a&b)|(a&cin)|(b&cin);
assign sum = a^b^cin;
endmodule

四位全加器:

module FullAdd (cout,sum,ina,inb,cin);input  [3:0] ina,inb;input cin;output [3:0] sum;output cout;assign {cout,sum} = ina + inb + cin;
endmodule

编译烧录在板子上:

把文件设置为顶层文件,保持名称一致,才能编译

编译成功。
硬件配置:接线

1.用包装盒里的USB 电缆将PC的USB端口和DE2-115开发板的USB Blaster连接器连接 起来,为了实现主机和开发板之间的通讯,必须安装USB Blaster 驱动软件

鼠标右击“USB-Blaster”选择“更新驱动程序(P)”

2.在将12V的适配器连接到DE2-115主板前,按下红色的ON/OFF开关确保电源断开。

3.按下DE2-115主板上红色的电源开关OFF /ON重新上电,将DE2-115开发板的拨码开关SW19由PROG拨到RUN,就可以烧写程序了

引脚配置:

实现效果图:

加法器

结论:
新手刚刚起步,得到锻炼比较多,需要一步一部踏实练习。多练习,熟悉整个文件创建、运行、编译等环节,提高自己的动手能力。如文章有不妥之处,还望各位海涵,
 

参考文献:
Quartus 入门 —— 加法器 - ppqppl - 博客园

FPGA——1位全加器的实现_fpga全加器代码-CSDN博客

[FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示_de2-115数码管位选引脚-CSDN博客

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

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

相关文章

ffmpeg python rgba图片合成 4444格式mov视频,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""将BGRA四通道PNG序列转换为ProRes 4444编码的MOV视频(保留透明通道)参数:input_pattern: PNG序列路径模式(如:"/path/to/frames/fram…

Java 实现 PDF 转图片功能:实战教程 + 场景解析

作者:云起川南|专注 Java 实战与自动化集成 在 PDF 文档处理的各类业务场景中,“将 PDF 页面转为图片”是一个高频、刚需的功能,广泛应用于 预览展示、文件归档、图片加密水印、OCR 文本识别 等系统中。 本文将带你一步一步实战如何使用 Java 实现 PDF 转图片 功能,使用开…

面试题-有个对象key全部是string,值全部是number要定义他,不使用interface和type如何定义

在 TypeScript 里,若要定义一个键为string类型、值为number类型的对象,并且不使用interface和type,可以采用以下几种方式: 1. 内联类型注解(Inline Type Annotation) 直接在变量声明时使用索引签名进行类…

领域驱动设计(DDD)【3】之事件风暴

文章目录 说明一 事件风暴理论知识1.1 事件风暴的核心目标1.2事件风暴的关键步骤1.2.1 准备工作1.2.2 核心流程1.2.3 事件风暴的输出 1.3 事件风暴的优势1.4 常见问题Q1:事件风暴适合所有项目吗?Q2:事件风暴后如何落地?Q3&#xf…

Vue3中监听 Ref 类型的数字数组

在 Vue 3 中&#xff0c;监听一个 Ref 类型的数字数组&#xff08;如 ref<number[]>([])&#xff09;时&#xff0c;根据需求的不同&#xff0c;有几种监听方式&#xff1a; 1. 监听整个数组的引用变化 当整个数组被重新赋值时触发&#xff1a; typescript 复制 下载…

PoolThreadCache 类的结构和源码实现

PoolThreadCache 在 Netty 的内存池中扮演着线程本地缓存的角色。它的主要目的是减少线程在分配内存时对全局 PoolArena 的竞争&#xff0c;通过缓存一部分最近释放的内存块&#xff0c;使得同一线程后续申请相同规格的内存时能够快速获取&#xff0c;从而提高分配效率。 下面…

Linux中的阻塞信号与信号原理

在Linux操作系统中&#xff0c;信号&#xff08;Signal&#xff09;是进程间通信和进程控制的核心机制之一。信号是一种异步通知机制&#xff0c;可以向进程发送异步事件通知&#xff0c;以便进程能够处理系统级别的事件。本文将详细探讨Linux中的信号原理&#xff0c;重点讲解…

QT学习教程(三十五)

事件处理&#xff08;- Event Processingn&#xff09; 事件是视窗系统或者Qt 本身在各种不同的情况下产生的。当用户点击或者释放鼠标&#xff0c;键盘时&#xff0c;一个鼠标事件或者键盘事件就产生了。当窗口第一次显示时&#xff0c;一个绘制事件会产生告诉新可见的窗口绘…

【Dify 案例】【MCP实战】【三】【超级美食家】

接上次的超级助理,我们这一期给出一个超级美食家 首先:我的MCP要申请一个key ` 我们来看看这个MCP服务怎么使用呢。`https://modelscope.cn/mcp/servers/@worryzyy/howtocook-mcp插件里面需要配置 {"mcpServers":{"amap-amap-sse":{"url":&qu…

4.文件管理(文本、日志、Excel表)

目录 1.文本 2.日志 3.Excel表 1.文本 using System.Text;namespace (自己创建的一个类) {/// <summary>/// 配置文件*.ini读写器。/// </summary>public class IniFile{[System.Runtime.InteropServices.DllImport("kernel32")]private static ex…

Java 包装类详解

什么是包装类 Java包装类&#xff08;Wrapper Classes&#xff09;是将8种基本数据类型封装成对象的类&#xff0c;位于java.lang包中。每个基本数据类型都有对应的包装类&#xff1a; byte → Byteshort → Shortint → Integerlong → Longfloat → Floatdouble → Doublec…

阿里云ACP认证-数据仓库

数据仓库 Kappa架构&#xff1a;将实时和离线代码统一&#xff08;优化lambda架构&#xff09;&#xff0c;但是不好修正数据&#xff0c;开发周期长&#xff0c;成本浪费&#xff0c;对于历史数据的高吞吐量力不从心 原一代数据仓库&#xff1a; 离线&#xff1a;hivemaxcom…

WebRTC(五):TURN协议

TURN&#xff08;Traversal Using Relays around NAT&#xff09;协议是一个网络协议&#xff0c;旨在解决 NAT&#xff08;网络地址转换&#xff09;和防火墙 环境下的 UDP/TCP通信问题。它通常与 STUN 和 ICE 协议一起使用&#xff0c;广泛应用于 WebRTC、SIP 和视频会议等实…

Python 的内置函数 hasattr

Python 内建函数列表 > Python 的内置函数 hasattr Python 的内置函数 hasattr() 用于检查一个对象是否具有指定的属性或方法。该函数的语法为&#xff1a; hasattr(object, name)参数说明&#xff1a; object&#xff1a;要检查的对象&#xff0c;可以是任何 Python 对象…

docker使用技巧之把扩展卷命名变成有意义

背景 之前使用别人的镜像之后&#xff0c;启动docker后发出现了一堆看不懂名称的扩展卷 eg&#xff1a;集群查看 扩展卷查看 这个时候如果有很多集群需要清理扩展卷就很麻烦&#xff0c;不知道是哪个集群的 操作步骤 可以实现的分析&#xff1a;这个扩展卷的信息应该是和…

《博物通书》《博物新编》与满清历史篡改

《博物新编》作为近代西方科技输入中国的首部著作&#xff0c;其问世犹如一颗投入平静湖面的巨石&#xff0c;在 19 世纪中期的中国激起层层涟漪&#xff0c;对中国近代科学发展产生了多维度、深层次的影响。它不仅是知识传播的载体&#xff0c;更是推动中国科学从传统走向近代…

【入门】【例18.1】 睡眠

| 时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 64MB&#xff0c;其他语言 128MB 难度&#xff1a;中等 分数&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分数2难度) 出题人&#xff1a;root | 描述 一个人只有每天睡眠时间到达 8…

DAY 38 Dataset和Dataloader类

知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 作业&#xff1a;了解下cifar数据集&#xff0c;尝试获取其中一张图片 import torch import torch.nn as nn import torch.o…

【Kubernetes】以LOL的视角打开K8s

前言 对于大部分后端程序员乃至于非后端程序员来说&#xff0c;在当前的云原生时代&#xff0c;Kubernetes&#xff08;后称K8s&#xff09;都是绕不开的一项技术&#xff1b;同时&#xff0c;对于这个时代的程序员来说&#xff0c;“英雄联盟”&#xff08;后称LOL&#xff0…

UE5 游戏模板 —— FirstShootGame

UE5 游戏模板 —— FirstShootGame 前言一、GameMode二、组件1.ShooterPickUpComponent单播多播 2.ShooterWeaponComponent附着武器开火 3.小结4.ShooterProjectile初始化碰撞受击检测 三、Character初始化输入移动 总结 前言 有了前两个俯视角游戏的基础让我们来看看相对复杂…