FPGA - 240102 - FPGA期末速成

  • TAG - F P G A 、期末、速成 FPGA、期末、速成 FPGA、期末、速成

  • // – 习题1 – //
  • CPLD(Complex Programmable Logic Device)是 Complex PLD 的简称,一种较 PLD 为复杂的逻辑元件。
  • CPLD 逻辑资源多寄存器少,FPGA 逻辑弱而寄存器多,这正好与控制密集型系统与数据密集型系统相对应。
  • CPLD 是基于乘积项结构的可编程逻辑器件,FPGA 是基于查找表结构的可编程逻辑器件。
  • //
  • 在 FPGA(Field-Programmable Gate Array —— 现场可编程门阵列)中,使用 LUT(查找表)来实现组合逻辑电路的功能。
  • 在 FPGA 器件中,LUT 主要用于实现组合电路,在实现结构上一个 4 输入的查找表相当于一个 16 位的RAM。
  • 通常而言,FPGA 逻辑块之间是分布式互连,其特点是等延时,而 CPLD 逻辑块之间是集中式的互连,其延时与系统布局有关。
  • FPGA 一般是基于 SRAM 的配置方式,配置方法相对灵活。
  • 基于SRAM(Static Random-Access Memory)的 FPGA 器件之所以需要在每次上电后进行一次配置,是因为 SRAM 是一种易失性存储器,其存储的配置信息会在断电时丢失。
  • //
  • ASIC(Application-Specific Integrated Circuit)是指应用特定集成电路,是一种定制化设计的集成电路,专为特定应用领域或任务而设计。
  • //
  • GAL 是比 FPGA 逻辑规模更小的可编程逻辑器件。
  • GAL(Generic Array Logic)是一种可编程逻辑器件,属于复杂的数字集成电路(IC)家族。它是一种与FPGA(Field-Programmable Gate Array)类似的可编程逻辑设备,但规模相对较小。
  • //
  • PLA(Programmable Logic Array):PLA 包含一个可编程的 AND 阵列和一个可编程的 OR 阵列。
  • PAL:在 PAL 中,用户主要通过编程 AND 阵列来实现逻辑功能,而 OR 阵列是固定的,无法由用户直接编程。
  • SPLD(Simple Programmable Logic Device)
  • PLA、PAL、GAL 等 SPLD 器件更适合于实现大规模的组合逻辑而不是时序逻辑电路。
  • //
  • RTL 是 Register Transfer Level(寄存器传输级)的缩写,它是数字电路设计的一种抽象级别。RTL 描述了数字电路中的数据流和控制流,强调在时钟周期内数据是如何从一个寄存器传输到另一个寄存器的。
  • //
  • 若 Verilog HDL 模块中的输入/输出信号类型缺省,则该信号为 wire 型,具有无数据存储特性。
  • 在数字电路设计中,双向信号通常用于特定情况,如总线或双工通信,但在模块级别的设计中,一般使用单向信号来更好地控制信号的流向。
  • //
  • = 阻塞赋值:顺序执行
  • <= 非阻塞赋值:并行执行
  • //
  • A. 系统级描述 B. 算法级描述 C. 门级描述 D. RTL级描述
    用Verilog语言,四种描述分别描述一位全加器
// A. 系统级描述:
module full_adder (input A, B, Cin,output Sum, Cout
);// 系统级描述中可以使用高级的抽象,不关注具体电路实现细节assign {Sum, Cout} = A + B + Cin;
endmodule
// B. 算法级描述:
module full_adder (input A, B, Cin,output Sum, Cout
);// 算法级描述关注操作的算法,但不涉及具体的硬件结构always_comb beginSum = A ^ B ^ Cin;Cout = (A & B) | (B & Cin) | (A & Cin);end
endmodule
// C. 门级描述:
module full_adder (input A, B, Cin,output Sum, Cout
);// 门级描述涉及具体的逻辑门实现wire w1, w2, w3, w4;assign w1 = A ^ B;assign w2 = w1 ^ Cin;assign w3 = A & B;assign w4 = w3 | (w1 & Cin);assign {Sum, Cout} = {w2, w4};
endmodule
// D. RTL级描述(寄存器传输级描述):
module full_adder (input wire A, B, Cin,output wire Sum, Cout
);// RTL级描述涉及到数据传输和寄存器的操作reg [1:0] sum_reg;always @(posedge clk or posedge rst) beginif (rst) beginsum_reg <= 2'b0;end else beginsum_reg <= A + B + Cin;endendassign {Sum, Cout} = sum_reg;
endmodule

这些描述层级从高到低,系统级描述抽象程度高,而RTL级描述更接近硬件实现。

  • // 1
    1. 在FPGA构成的数字系统中,为什么通常需要要配备一个PROM或E2PROM?
  • 因为常用的FPGA的结构是基于SRAM的,掉电后芯片内的信息将消失,所以配备一个PROM或E2PROM,使得上电后,FPGA的信息由外部加载到芯片中,使得FPGA成为用户需要功能的芯片。
  • // 2
    1. FPGA的基本结构主要包括哪些组成部分?
  • 输入/输出模块IOB,用于存放编程数据的SRAM,可编程逻辑块CLB,互连资源IR。
  • // 3
    1. 什么是组合逻辑和时序逻辑?两者的区别有哪些?
  • 组合逻辑指有常见逻辑门构成的,不需要时钟驱动的电路;
  • 时序电路是指包含寄存器等需要时钟驱动的电路;
  • 两者最主要的区别在于是否需要时钟触发。
  • // 4
    1. 简述阻塞赋值与非阻塞赋值的不同。
  • 符号分别为“=”和“<=”;
  • (1)阻塞赋值:赋值立刻完成;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知。
  • (2)非阻塞赋值:赋值不是立刻完成的,而是在块结束时才完成;块内的多条赋值语句在块结束时同时赋值;硬件有对应的电路。
  • // 5
    1. 简述Verilog HD设计中不同层次的抽象。
  • Verilog HD设计中,抽象级别可以分为五级:
  • (1)系统级(system level): 用高级语言结构(如case语句)实现的设计模块外部性能的模型;
  • (2)算法级(algorithmic level): 用高级语言结构实现的设计算法模型(写出逻辑表达式);
  • (3)RTL级(register transfer level): 描述数据在寄存器之间流动和如何处理这些数据的模型;
  • (4)门级(gate level): 描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;
  • (5)开关级(switch level): 描述器件中三极管和储存节点及其之间连接的模型。
  • // 1
    1. 用Verilog HDL设计2位sel控制的4选1多路选择器。 模块名:module mux4_1 (out, in0, in1, in2, in3, sel);
module mux4_1 (output reg out, input wire in0, in1, in2, in3, input wire [1:0] sel
);always @(sel or in0 or in1 or in2 or in3) begincase (sel)2'b00: out = in0;2'b01: out = in1;2'b10: out = in2;2'b11: out = in3;default: out = 1'b0; // Optional default caseendcase
endendmodule
  • // 2
    1. 用Verilog HDL设计一个分频电路,要求输入、输出信号分别为10MHz和500KHz的方波,具有异步清零功能。 模块名:module fdivision(RESET,F10M,F500K);
<占个坑>
  • // 3
    1. 用Verilog HDL设计七人投票表决器。 模块名: module voter7(pass,vote);
module voter7 (input [6:0] vote, // 输入七个人的投票,使用二进制编码表示output reg pass   // 输出表决结果
);always @(posedge clk or negedge rst) beginif (~rst) begin// 在复位时可以对pass进行初始化,例如 pass <= 1'b0;end else begin// 在这里实现表决逻辑,这里只是一个简单的例子// 如果超过半数的人投赞成票(1),则 pass 置为 1,否则为 0pass <= (vote >= 4);end
endendmodule
  • // 4
    1. 用Verilog HDL设计8位的同步置数同步清零计数器: 模块名: module count4(out, data, load, reset, clk);
module count4(output reg [7:0] out,input [7:0] data,input load,input reset,input clk
);always @(posedge clk or posedge reset) beginif (reset) beginout <= 8'b0; // 同步清零end else if (load) beginout <= data; // 同步置数end else beginout <= out + 1; // 计数endendendmodule

  • // – 习题2 – //
  • 过程语句 - always
  • 连续语句 - assign
  • //
  • 块语句有两种,一种是begin-end语句,用来标志顺序执行的语句;一种是fork-join语句,通常用来标志并行执行的语句。
  • //
  • 在EDA的IP核中,软IP是可编程语言描述的,灵活性较高;固IP结合了硬件和嵌入式软件;硬IP以硬件电路形式存在,性能最高。
  • //
  • MAX7000系列是由Altera(现在是Intel)公司生产的CPLD(可编程逻辑器件)而不是FPGA(现场可编程门阵列)结构。
  • //
  • 不完整的 if 语句,其综合结果可实现 时序逻辑电路。
  • // 1
    1. 请写出以下英文缩写的中文全称:EDA,ASIC,HDL,FPGA,CPLD。
  • EDA: 电子设计自动化(Electronic Design Automation)
  • ASIC: 定制集成电路(Application-Specific Integrated Circuit)
  • HDL: 硬件描述语言(Hardware Description Language)
  • FPGA: 现场可编程门阵列(Field-Programmable Gate Array)
  • CPLD: 可编程逻辑器件(Complex Programmable Logic Device)
  • // 2
    1. 简述Verilog HD设计中的结构描述、数据流描述和行为描述。
  • 结构描述:通过调用库中元件(如逻辑门、晶体管)或设计好的模块来完成设计实体功能,描述只表示元件(模块)和元件(模块)之间的互联。
  • 数据流(Data Flow)描述:描述数据在寄存器、逻辑门之间传输和处理的过程,主要使用持续赋值语句(assign),通过表达式、操作符和操作数来设计电路。
  • 行为(Behavioral)描述:对设计实体的数学模型描述,无需知道具体电路结构,只需描述清楚输入与输出信号的行为。
  • //
  • 一般来说,与门、或门、与非门、或非门等支持多个输入,而非门、异或门、异或非门等通常只有一个或两个输入。
  • //
// 结构描述:(门原语)
module FullAdder (input A, input B, input Cin, output Sum, output Cout);xor f1(t1, A, B);xor f2(sum, t1, Cin);and f3(t3, A, B);and f4(t4, A, Cin);and f5(t5, B, Cin);or f6(Cout, t3, t4, t5);
endmodule
// 数据流描述:(表达式)
module FullAdder (input A, input B, input Cin, output Sum, output Cout);assign {Cout, Sum} = A + B + Cin;
endmodule
// 行为描述:(块语句等高级抽象语言)
module FullAdder (input A, input B, input Cin, output reg Sum, output reg Cout);always @(A or B or Cin) beginSum = A ^ B ^ Cin;Cout = (A & B) | (B & Cin) | (A & Cin);end
endmodule
  • // 3
  • 按要求给出Verilog语言代码
    程序的逻辑功能为:8位的同步清零、同步置数的计数器。
    程序注释:
    ①定义模块名为AAA,端口为out、data、load、reset、clk
    ②定义out为输出端口,out为8位宽的二进制数
    ③定义data为输入端口,data为8位宽的二进制数
    ④定义load、reset、clk为输入端口
    ⑤定义out为八位宽的reg型变量
    ⑥过程语句,敏感变量为时钟clk,上升沿触发方式
    ⑦条件语句,同步清零信号为低电平时,对out清零
    ⑧条件语句,同步置数信号为高电平时,把data的值赋给out,完成置数操作
    ⑨若同步清零信号、同步置数信号无效时,完成计数操作。
module AAA(output reg [7:0] out,input [7:0] data,input load,input reset,input clk
);// 同步不需要 ` or negedge reset or posedge load`,不然就变成异步了always @(posedge clk) beginif (~reset) beginout <= 8'b00000000; // 同步清零end else if (load) beginout <= data; // 同步置数end else beginout <= out + 1; // 计数操作endendendmodule
  • // 4
  • Moore 莫尔型:输出只依赖于状态而不依赖于其输入信号
  • Mealy 米里型:输出不仅依赖状态而且依赖于它的输入
  • //
  • 利用有限状态机,以格雷码编码方式设计一个从输出信号序列中检测出101信号的序列检测器,其状态转移图如下图所示。 模块名:module fsm_seq101(clk, clr, x, z);
module fsm_seq101(input clk, clr, x, output reg z
);parameter s0 = 2'b 00;
parameter s1 = 2'b 01;
parameter s2 = 2'b 11;
parameter s3 = 2'b 10;reg [1:0] now,next;always @(posegde clk or negedge clr) beginif (~clr) now = s0;else now = next;
endalways @(posegde clk or negedge clr) beginif (~clr) next = s0;else begincase (x)	// 只是表示当前进行到第几步而已s0: x ? next = s1 : s0;s1: x ? next = s1 : s2;s2: x ? next = s3 : s0;s3: x ? next = s1 : s2;default: next = s0;endcaseend
endalways @(posedge clk or negedge clr) beginif (~clr) z = 0;else beginz = now == s3 ? 1 : 0;end
endendmodule

  • // – 习题3 – //
  • 1.用for语句和移位运算符实现两个8位二进制数a和b的乘法运算。 模块名:module mult_8(outcome, a, b);
module mult_8(output reg [15:0] outcome,  // 输出乘法结果,16位宽度input [7:0] a,              // 输入数 a,8位宽度input [7:0] b               // 输入数 b,8位宽度
);reg [15:0] temp,i;  // 用于保存中间结果always @(a or b) begintemp = 16'b0;   // 初始化中间结果为0for (i = 0; i < 8; i = i + 1) beginif (b[i])       // 如果 b 的当前位为1,则将 a 左移相应的位数,并加到中间结果上temp = temp + (a << i);endoutcome = temp;   // 将最终结果输出end
endmodule
  • 2.用Verilog HDL设计8位的带异步清零(低电平有效)、同步置数(高电平有效)的计数器。 模块名: module count8(out, data, load, reset, clk);
module count8(output reg [7:0] out,  // 输出计数器结果input [7:0] data,      // 同步置数数据input load,            // 同步置数使能信号,高电平有效input reset,           // 异步清零信号,低电平有效input clk              // 时钟信号
);always_ff @(posedge clk or negedge reset) beginif (~reset)           // 异步清零out <= 8'b0;else if (load)       // 同步置数out <= data;elseout <= out + 1;    // 正常计数end
endmodule

实现细节


参考示意图

  • 1
  • 2
  • 3

参考链接


作者 | 乐意奥AI

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

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

相关文章

Go后端开发 -- main函数 变量 常量 函数

Go后端开发 – main函数 & 变量 & 常量 & 函数 文章目录 Go后端开发 -- main函数 & 变量 & 常量 & 函数一、第一个main函数1.创建工程2.main函数解析 二、变量声明1.单变量声明2.多变量声明 三、常量1.常量的定义2.优雅的常量 iota 四、函数1.函数返回…

vim学习记录

目录 历史记录前言相关资料配置windows互换ESC和Caps Lock按键 基本操作替换字符串 历史记录 2024年1月2日, 搭建好框架,开始学习; 前言 vim使用很久了,但是都是一些基本用法,主要是用于配置Linux,进行一些简单的编写文档和程序.没有进行过大型程序开发,没有达到熟练使用的程…

OpenHarmony之HDF驱动框架

概述 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路&#xff0c;让驱动开发和部署更加规范&#xff0c;旨在…

小红书、抖音、视频号下载工具:随心管理个人作品集 | 开源日报 No.134

karanpratapsingh/system-design Stars: 20.6k License: NOASSERTION 这个项目是关于系统设计的。它提供了有关系统设计的课程内容&#xff0c;包括 IP、OSI 模型、TCP 和 UDP 等主题。该项目的核心优势和特点如下&#xff1a; 提供全面而高效的系统架构定义。从基础设施到数…

C#使用纯OpenCvSharp部署yolov8-pose姿态识别

【源码地址】 github地址&#xff1a;https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-Pose算法是一种基于深度神经网络的目标检测算法&#xff0c;用于对人体姿势进行准确检测。该算法在Yolov8的基础上引入了姿势估计模块&#xff0c;通过联合检测和姿势…

安全与认证Week3

Key Management 密钥管理 密钥交换、证书 密钥的类别 密钥管理方面 密钥分发问题 密钥分发方案 简单的密钥分发&#xff1a;允许安全通信&#xff0c;但不存在先前或之后的密钥。 带机密性和身份验证的密钥分发&#xff1a;提供更高级别的安全性。 混合密钥分发 公钥分发 公开…

CodeWave智能开发平台--02--目标:文档快速阅读

CodeWave智能开发平台的02次接触-实现快速了解CodeWave平台 CodeWave参考资源 网易数帆CodeWave开发者社区课程中心 网易数帆CodeWave开发者社区文档中心 CodeWave智能开发平台-文档快速阅读指北 大家如果看了本专栏中的第一篇博客&#xff0c;应该知道我接触CodeWave不久&a…

RabbitMQ(七)ACK 消息确认机制

目录 一、简介1.1 背景1.2 定义1.3 如何查看确认/未确认的消息数&#xff1f; 二、消息确认机制的分类2.1 消息发送确认1&#xff09;ConfirmCallback方法2&#xff09;ReturnCallback方法3&#xff09;代码实现方式一&#xff1a;统一配置a.配置类a.生产者c.消费者d.测试结果 …

TypeScript中的Declare关键字的作用

详细介绍TypeScript中的“declare”关键字的作用&#xff0c;这样你对*.d.ts文件就不陌生了。 当你在TypeScript项目中打开 *.d.ts 声明文件时&#xff0c;你可能会看到 declare 。你知道 declare 是做什么的吗?如果你不知道&#xff0c;读完这篇文章&#xff0c;也许你就会知…

安装VS Code到AWS EC2 Linux 2

文章目录 小结问题及解决参考 小结 本文记录了安装VS Code到AWS EC2 Linux 2。 问题及解决 安装VS Code到AWS EC2 Linux 2采取了以下步骤&#xff1a; 更新VS Code的YUM源&#xff1a; [ec2-userip-100-92-28-119 ~]$ sudo rpm --import https://packages.microsoft.com/k…

LanChatRoom局域网聊天室

CPP已经结课&#xff0c;我提交的项目是Qt的入门项目&#xff0c;局域网聊天室LanChatRoom。 这个代码重构了很多遍。第一遍是照着明哥推荐到书&#xff0c;把代码抄了一遍。 但抄下来之后&#xff0c;各种问题&#xff0c;而且是清朝老代码。抄了一遍之后&#xff0c;对代码的…

python慕课版课后题答案,python慕课作业答案

这篇文章主要介绍了中国大学慕课python测验答案&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 Flag 8月29日前学习完MOOC_Python课程&#xff0c;以下各测试题均来自于Python…

深度学习|10.2 边缘检测示例 10.3 更多边缘检测

文章目录 如何在编程中实现卷积运算使用卷积实现边缘检测结果矩阵的元素正负性质的意义水平分类器如何构造卷积运算使用的矩阵 原矩阵通过一个过滤器&#xff08;filter&#xff09;/核心&#xff08;kernel&#xff09;来生成一个新的矩阵。 如何在编程中实现卷积运算 使用卷积…

Kafka安全认证机制详解之SASL_PLAIN

一、概述 官方文档&#xff1a; https://kafka.apache.org/documentation/#security 在官方文档中&#xff0c;kafka有五种加密认证方式&#xff0c;分别如下&#xff1a; SSL&#xff1a;用于测试环境SASL/GSSAPI (Kerberos) &#xff1a;使用kerberos认证&#xff0c;密码是…

Redis:原理+项目实战——Redis实战3(Redis缓存最佳实践(问题解析+高级实现))

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理项目实战——Redis实战2&#xff08;Redis实现短信登录&#xff08;原理剖析代码优化&#xff09;&#x…

【计算机毕业设计】SSM游戏点评网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,游戏资讯管理,游戏类型管理,城市信息管理,竞技场管理,游戏信息管理,游戏评价信息管理等功能。…

使用UDF扩展Spark SQL

Apache Spark是一个强大的分布式计算框架&#xff0c;Spark SQL是其一个核心模块&#xff0c;用于处理结构化数据。虽然Spark SQL内置了许多强大的函数和操作&#xff0c;但有时可能需要自定义函数来处理特定的数据需求。在Spark SQL中&#xff0c;可以使用UDF&#xff08;User…

视频剪辑技巧:制作视频画中画效果,背景图片的选取与运用

在视频剪辑中&#xff0c;画中画效果是一种常用的技巧&#xff0c;它可以在同一屏幕上展示两个或多个视频片段。这种效果在制作教程、比较两个物品或展示对话等场景中非常实用。现在一起来看看云炫AI智剪如何制作视频画中画效果&#xff0c;选取和运用背景图片的方法。 一起来看…

【Apache-2.0】springboot-openai-chatgpt超级AI大脑产品架构图

springboot-openai-chatgpt: 一个基于SpringCloud的Chatgpt机器人&#xff0c;已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话&#xff0c;聊天机器人会根据用户的输入自动生成回复。同时也支持画图&a…

RT-Thread内核移植

目录 前言一、实验平台简介1.1 W601简介1.2 RT-Thread简介1.3 ENV简介 二、开发环境搭建2.1 MDK安装2.2 Git安装2.3 RT-Thread相关下载2.4 其他素材 三、移植RT-Thread四、ENV使用五、W601开发板下载验证5.1 使用串口下载软件5.2 ST-Link下载 前言 本文以正点原子W601开发板为例…