FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线(FPGA专业知识的学习方向,FPGA现场可编程门阵列学习路线和方向)

前言

前几篇讲了一下FPGA的发展和应用,以及未来前景。具体详细,请看

FPGA发展和应用,以及未来前景icon-default.png?t=N7T8https://blog.csdn.net/weixin_65793170/category_12665249.html

这里我们来,记录一下,FPGA专业知识的学习路线


一. FPGA技术优势

        首先,我们了解一下 FPGA 的技术优势,来为我们学习提供动力

可重构 / 可编程                              速度快 / 低延时   

                                            
效率高                                            接口丰富

          
开发方便、灵活                              应用广泛

        当然 FPGA 优势与劣势并存,首先是开发难度,需要掌握专门的硬件设计知识和工具,如Verilog 语言和 VIVADO 等工具,其次就是专业性较强,学历门槛较高,同时还有频率功耗、算力成本等一系列问题存在。  


二. FPGA学习路线

        学习 FPGA 开发专业知识的学习路线,大致可分为以下,请看(具体学习路线不固定,自己斟酌)

  1. 数字电路基础

  2. 硬件描述语言

  3. 设计调试工具

  4. FPGA架构

  5. FPGA开发流程

  6. 时序分析与约束

  7. 仿真技术

  8. IP核使用

  9. 嵌入式系统设计

  10. 高级设计技巧


三. FPGA学习内容

        FPGA 专业知识的学习内容,包括但不限与以下,请看

1. 数字电路基础

  • 布尔代数
  • 逻辑门
  • 组合逻辑电路
  • 时序逻辑电路

学习逻辑门、组合逻辑电路、时序逻辑电路等基础知识,是理解FPGA设计的核心。

2. 硬件描述语言

  • Verilog
  • VHDL

学习Verilog和VHDL等语言,用于描述和设计FPGA中的逻辑电路。 

3. 设计调试工具

  • Xilinx(赛灵思):Xilinx Vivado

  • Altera(阿尔特拉):Intel Quartus Prime

学习如何使用Xilinx Vivado、Intel Quartus Prime开发工具(以国外知名大厂开发工具为例),进行编码和调试,以验证设计的正确性。

4. FPGA架构

  • 可编程逻辑单元
  • 互连资源
  • I/O块
  • 存储资源

理解FPGA内部结构,包括逻辑单元、布线资源、存储单元等。

5. FPGA开发流程

  • 设计输入
  • 综合
  • 实现
  • 配置

学习设计输入、综合、实现、时序分析、编程与配置等完整的开发流程。

6. 时序分析与约束

  • 静态时序分析
  • 时序约束

学习如何进行时序分析,确保设计在规定时间内正确工作,以及如何施加约束。

7. 仿真技术

  • 功能仿真
  • 时序仿真

学习使用仿真工具(如ModelSim)对设计进行功能仿真和时序仿真。

8. IP核使用

  • 常用IP核
  • IP核集成

学习如何使用和集成现成的IP核(如FIFO、PLL),提高设计效率。

9. 嵌入式系统设计

  • 软核处理器
  • 硬件加速

学习如何将处理器嵌入FPGA中,进行软硬件协同设计,

并使用ARM Cortex内核。

10. 高级设计技巧

  • 流水线设计
  • 并行处理

学习优化设计、降低功耗、提高速度、复用设计等技巧。


四. FPGA学习内容,简单认识

        数字电路基础、硬件描述语言和设计调试工具,以及 FPGA 架构等,请看

1. 数字电路基础

        数字电路基础是学习FPGA开发的根本,也是FPGA设计的核心。它包括布尔代数、逻辑门(如与门、或门、非门等)、组合逻辑电路(如加法器、编码器)、和时序逻辑电路(如触发器、寄存器)。这些知识是理解和设计复杂数字系统的根本,它涵盖了理解和设计数字系统所需的基本概念和技巧。 

  • 布尔代数

    • 定义与基本运算: 布尔代数是一种用于处理逻辑变量的数学体系。它包括基本运算,如与(AND)、或(OR)、非(NOT)等,以及更复杂的运算如异或(XOR)。
    • 逻辑表达式: 通过布尔代数表达逻辑电路的功能。学习如何将复杂的逻辑问题表示为布尔表达式,并通过简化表达式优化逻辑电路。

  • 逻辑门

    • 基本逻辑门: 基本的逻辑门有与门、或门、非门、异或门等。每个门实现布尔代数的基本运算。
    • 派生逻辑门: 通过组合基本逻辑门,可以得到更复杂的逻辑门,如异或门(XOR)、同或门(XNOR)、与非门(NAND)等。
    • 逻辑门符号与真值表: 学习逻辑门的符号和真值表,用于描述逻辑门的输入输出关系。

  • 组合逻辑电路

    • 概念: 组合逻辑电路的输出仅由当前输入决定,不依赖于过去的状态。
    • 常见组合电路: 了解加法器、减法器、编码器、解码器、多路复用器(MUX)、比较器等常见的组合逻辑电路及其实现方法。
    • 卡诺图简化: 学习使用卡诺图来简化逻辑表达式,从而优化组合电路设计。

  • 时序逻辑电路

    • 概念: 时序逻辑电路的输出不仅取决于当前输入,还取决于过去的状态(即记忆功能)。
    • 触发器: 触发器是时序逻辑电路的基本单元,常见的类型包括D触发器、JK触发器、T触发器等。
    • 寄存器与计数器: 学习如何设计寄存器(用于数据存储)和计数器(用于计数和计时),它们都是由触发器构成的复杂时序电路。
    • 状态机设计: 通过设计有限状态机(FSM),实现复杂的时序逻辑功能。状态机在FPGA设计中非常常见,通常用于控制信号流和操作流程。


2. 硬件描述语言

        首先,硬件描述语言 HDL 是用于描述和实现数字电路设计的语言,是硬件描述语言的总称,其中 Verilog 和 VHDL 是用来描述FPGA内部逻辑电路的语言工具。它们用于编写可以直接合成为硬件的代码,是设计、仿真和实现FPGA电路的关键。

  • HDL

    • 简介:HDL 是硬件描述语言的总称,包括 Verilog、VHDL 等。这些语言用于描述数字系统的硬件行为,可以用于 FPGA、ASIC(专用集成电路)等的设计。
    • 特点
      • 描述能力:支持从高层次的行为描述到低层次的门级描述。
      • 仿真能力:支持设计的仿真验证。
      • 综合能力:可以将描述转换为实际的硬件电路。

  • VHDL

    • 语言概述: VHDL是一种早期的硬件描述语言,全称为VHSIC(超高速集成电路)硬件描述语言。它具有强类型定义,适合于复杂设计。
    • 基本语法: 学习VHDL的基本语法,包括数据类型(如BIT, STD_LOGIC)、信号、变量、常量的定义与使用。
    • 结构化设计: 通过学习VHDL中的实体(Entity)和架构(Architecture)概念,进行模块化设计,分离接口和实现。
    • 行为描述与结构描述: 学习如何使用行为描述(Behavioral)和结构描述(Structural)两种方式实现电路功能。行为描述注重功能的实现,结构描述注重电路的具体实现。

  • Verilog

    • 语言概述: Verilog是一种更接近编程语言的HDL,使用简洁的语法,广泛用于工业界。
    • 基本语法: 学习Verilog的基本语法,包括数据类型(如reg, wire)、模块定义、初始块(initial)、始终块(always)等。
    • 连续赋值与过程赋值: 了解Verilog中assign语句的连续赋值特性和always块中过程赋值的区别,用于组合逻辑和时序逻辑电路的实现。
    • 模块化设计: 学习如何在Verilog中定义模块,并通过实例化实现层次化设计,使设计更易于管理和调试。


3. 设计调试工具

        主流FPGA开发工具如Xilinx Vivado和Intel Quartus Prime是进行FPGA设计、调试和验证的重要软件平台。掌握这些工具的使用,可以高效地进行电路综合、布局布线、时序分析等任务。

First. Xilinx(赛灵思):Xilinx Vivado(全功能集成开发环境IDE)

  1. 逻辑分析仪:Xilinx ChipScope
    • 功能:用于在线调试 FPGA 内部信号,包括集成逻辑分析仪 (ILA) 和集成控制核 (ICON)。
    • 使用方法
      • 设计阶段:在 FPGA 设计中添加必要的 ChipScope 核心。
      • 配置:配置触发条件、采样率等参数。
      • 捕获:当满足触发条件时,ILA core 捕获信号数据并存储在 Block RAM 中。
      • 读取数据:通过 JTAG 接口将数据传输到 PC 上。
      • 分析:使用 ChipScope Analyzer 查看和分析信号波形。
  2. 高级调试工具:Xilinx Vivado Debugger
    • 功能:支持在 RTL 层级进行调试。
    • 使用方法:设置断点、单步执行、观察变量值等。

Second. Altera(阿尔特拉):Intel Quartus Prime(全功能集成开发环境IDE)

  1. 逻辑分析仪:Intel SignalTap II Logic Analyzer
    • 功能:与 Xilinx ChipScope 类似,用于在线调试 FPGA 内部信号。
    • 使用方法
      • 设计阶段:在 FPGA 设计中添加必要的 SignalTap II 核心。
      • 配置:配置触发条件、采样率等参数。
      • 捕获:当满足触发条件时,捕获信号数据并存储在 FPGA 的 Block RAM 中。
      • 读取数据:通过 JTAG 接口将数据传输到 PC 上。
      • 分析:使用 SignalTap II Analyzer 查看和分析信号波形。
  2. 高级调试工具:Intel In-Circuit Debugger (ICD)
    • 功能:提供交互式的调试环境,在设计运行时访问和修改寄存器状态。
    • 使用方法:使用 ICD 可以实时观察和修改寄存器值。

Third. Mentor Graphics(明导国际):ModelSim(仿真工具)

        ModelSim 是一种专注于硬件描述语言 (HDL) 的仿真工具,广泛用于 Verilog 和 VHDL 设计的功能仿真和时序仿真。它帮助设计工程师在合成前验证和调试设计逻辑,是设计流程中的关键环节。虽然 ModelSim 是由 Mentor Graphics 开发的,但它也集成在其他工具如 Quartus 和 Vivado 中。

  • 功能:功能仿真、时序仿真、调试 HDL 代码、波形分析、代码覆盖率分析。
  • 用途:主要用于验证和调试设计的功能性,确保设计在合成之前是正确的。

        这里的 ModelSim 是仿真工具,专注于验证和调试 HDL 代码,而Vivado 和 Quartus Prime 是完整的集成开发环境 (IDE),涵盖从设计输入到物理实现的整个流程。Vivado 专用于 Xilinx 的 FPGA,而 Quartus Prime 专用于 Intel 的 FPGA。

        而Mentor Graphics 是一家提供电子设计自动化 (EDA) 软件和硬件的公司。该公司成立于 1981 年,总部位于美国俄勒冈州威尔逊维尔。Mentor Graphics 在 2016 年被西门子公司收购,成为其旗下的一个业务部门。Mentor Graphics 提供广泛的工具和服务,用于帮助工程师设计和验证电子系统,包括集成电路 (IC)、印刷电路板 (PCB) 和电子系统级 (ESL) 设计。

Fourth. EDA 和 IDE

1. 电子设计自动化 (EDA) 详解(EDA是什么)

        电子设计自动化 (EDA) 行业是半导体和电子系统设计的核心支撑产业,提供软件和硬件工具,帮助设计工程师高效地设计、验证和制造复杂的电子系统和集成电路 (IC)。EDA 工具在芯片设计流程中不可或缺,涵盖从电路设计、仿真、验证、到物理实现的整个流程。随着半导体技术的进步,EDA 工具也在不断演进,支持更高的集成度和更复杂的设计需求。

2. 全功能集成开发环境 (IDE)详解(IDE是什么)

        全功能集成开发环境(IDE)中的“IDE”是“Integrated Development Environment”的缩写,中文通常翻译为“集成开发环境”。IDE是一种用于软件开发的应用程序,提供了一套集成的工具和功能,以简化编程过程和提高开发效率。

Fifth. Xilinx(赛灵思)和Altera(阿尔特拉)详细,请看

Xilinx(赛灵思)和Altera(阿尔特拉)icon-default.png?t=N7T8https://blog.csdn.net/weixin_65793170/article/details/141018445


4. FPGA架构

        FPGA架构是FPGA设计中物理实现的基础,FPGA的架构包括可编程逻辑单元(PLUs)、互连资源、I/O块、存储资源等。这些组件共同构成了FPGA的硬件基础,理解它们有助于设计者优化电路并提高性能。

  • 可编程逻辑单元(CLB)

    • 组成与功能: 可编程逻辑单元(CLB)是FPGA的基本构建模块,通常包含查找表(LUT)、触发器和多路复用器(MUX)。
    • LUT的工作原理: LUT用于实现逻辑函数,学习如何通过配置LUT实现任意的组合逻辑。
    • 可配置选项: 了解CLB中的触发器配置选项,如同步/异步复位、时钟使能等。

  • 互连资源

    • 互连网络: FPGA内的互连资源用于连接不同的CLB、I/O块等单元。互连网络的设计决定了信号的传输延迟和整体性能。
    • 可编程互连: 了解FPGA中如何通过配置开关矩阵实现逻辑单元间的连接,并优化路径以降低延迟。
    • 布线策略: 学习如何在FPGA设计中有效利用互连资源,避免过多的长路径和拥塞。

  • I/O块

    • 功能与配置: I/O块用于FPGA内部电路与外部设备的接口,支持多种电压标准和信号类型。
    • I/O标准: 了解常用的I/O标准(如LVDS, LVCMOS)及其应用场景。
    • 引脚分配与约束: 学习如何合理分配I/O引脚,并施加引脚约束(Pin Constraints),确保设计能够正确连接外部电路。

  • 存储资源

    • 嵌入式存储器: FPGA中通常包含嵌入式存储器,如块RAM(BRAM),用于存储数据或实现缓存。
    • 存储器配置: 学习如何在设计中使用FPGA的存储资源,如配置RAM/ROM、FIFO等。
    • 分布式存储器: 除了BRAM,FPGA还可以通过LUT实现小容量的分布式存储器,了解其应用场景和优缺点。


5. FPGA开发流程

        FPGA的开发流程涵盖从设计输入(使用HDL描述电路)到综合(将代码转化为门级电路)、实现(布局布线)、配置(加载到FPGA中)的完整过程。这些步骤确保了设计的逻辑性和硬件可行性。

  • 设计输入

    • 使用 Verilog 或 VHDL 描述设计。
    • 可以使用文本编辑器或图形化工具进行设计输入。

  • 综合

    • 将高级描述转换为门级网表。
    • 优化设计以减少面积、提高性能或降低功耗。

  • 实现

    • 映射到具体的 FPGA 架构。
    • 布局布线:确定逻辑单元的位置并连接它们。

  • 配置

    • 将最终设计下载到 FPGA 中。
    • 配置 FPGA 使其执行设计的功能。


6. 时序分析与约束

        时序分析是确保FPGA设计在规定时钟周期内正确工作的关键。通过施加时序约束(如时钟约束),设计者可以控制电路的时序性能,避免信号竞争和时序违例。

  • 静态时序分析 (STA)

    • 检查设计是否满足建立时间、保持时间等要求。
    • 识别时序违规并进行修正。

  • 时序约束

    • 定义最大时钟频率、路径延迟等时序要求。
    • 通过约束指导综合和实现工具优化设计。


7. 仿真技术

        仿真技术用于验证设计的功能性和时序性。功能仿真确保设计逻辑的正确性,而时序仿真结合时序信息,验证电路在真实硬件时序下的行为,是发现和解决潜在问题的重要手段。

  • 功能仿真

    • 验证设计的逻辑功能。
    • 不考虑延迟和时序关系。

  • 时序仿真

    • 验证设计在实际时序条件下的行为。
    • 考虑延迟和时序关系。


8. IP核使用

        IP核是预设计好的、可复用的电路模块,如FIFO、PLL等。使用这些IP核可以大大加快开发进度,提高设计的可靠性和效率,并减少重复工作。

  • 常用IP核

    • FIFO:用于数据缓冲。
    • PLL:用于时钟管理。
    • UART、SPI、I2C:用于通信协议。
    • DDR 控制器:用于高速数据传输。

  • IP核集成

    • 使用工具提供的 IP 核集成功能。
    • 遵循 IP 核提供的接口规范。


9. 嵌入式系统设计

        FPGA不仅用于实现逻辑电路,还可以嵌入软核处理器(如MicroBlaze、Nios II),支持软硬件协同设计。通过硬件加速,FPGA可以显著提升嵌入式系统的处理性能,适用于高性能需求的应用。

  • 软核处理器

    • 如 Xilinx MicroBlaze、Zynq PS 中的 ARM Cortex-A9/A7。
    • 用于实现控制逻辑和算法处理。

  • 硬件加速

    • 使用 FPGA 的并行性和低延迟特性来加速特定任务。
    • 与软核处理器协同工作。


10. 高级设计技巧

        高级设计技巧如流水线设计和并行处理是优化FPGA性能的关键。流水线设计通过分解任务并行处理,提高系统的吞吐量,而并行处理则充分利用FPGA的并行计算能力,显著提升系统效率。

  • 流水线设计

    • 将复杂操作分解成多个阶段,每个阶段并行执行。
    • 提高吞吐量,降低延迟。

  • 并行处理

    • 利用 FPGA 的并行性提高性能。
    • 多个操作同时执行。

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

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

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

相关文章

Python(C++)自动微分导图

🎯要点 反向传播矢量化计算方式前向传递和后向传递计算方式图节点拓扑排序一阶二阶前向和伴随模式计算二元分类中生成系数高斯噪声和特征二元二次方程有向无环计算图超平面搜索前向梯度下降算法快速傅里叶变换材料应力和切线算子GPU CUDA 神经网络算术微分 Pytho…

理解 decltype() 指定符(C++ 11 及以上版本)

目录 1. 功能 2. 语法格式 3. 理解 3.1 第一点 1.2 第二点 4. 例释 在 C 编程语言中,decltype 是一个用于检查实体的声明类型或表达式的类型和值类别的关键字。该关键字在 C11 中引入,主要用于泛型编程中,因为在泛型编程中&#x…

数据类型 NVARCHAR2 与 VARCHAR2 的对比

数据类型 NVARCHAR2 与 VARCHAR2 的对比 在数据库系统中,字符数据类型是用于存储文本数据的关键部分。在达梦数据库(DM Database)以及许多其他关系数据库管理系统(例如 Oracle),常见的字符数据类型有 NVAR…

C语言阴阳迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> enum WASD {W…

CityHash、FarmHash

CityHash和FarmHash都是由Google开发的非加密哈希函数&#xff0c;专为快速处理大量数据而设计。它们在数据中心和大规模分布式系统中尤其有用&#xff0c;用于任务如数据分区、查找优化、数据校验等。这两种哈希函数都以其高效的性能和良好的分布特性而著称。 CityHash City…

设计模式 -- 外观模式(Facade Pattern)

1 问题引出 组建一个家庭影院 DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能&#xff0c;其过程为&#xff1a; 直接用遥控器&#xff1a;统筹各设备开关 开爆米花机&#xff0c;放下屏幕 &#xff0c;开投影仪 &#xff0c;开音响&#xf…

【人工智能】AI算法系统设计与算法建模的详细阐述

&#x1f3c6;&#x1f3c6;欢迎大家来到我们的天空&#x1f3c6;&#x1f3c6; &#x1f3c6;&#x1f3c6;如果文章内容对您有所触动&#xff0c;别忘了点赞、关注&#xff0c;收藏&#xff01; &#x1f3c6; 作者简介&#xff1a;我们的天空 &#x1f3c6;《头衔》&#x…

自定义全局变量在uniapp的Vuex应用

本文介绍了uniapp使用自定义全局变量的方法。当同一业务在连续页面操作时&#xff0c;存在部分筛选变量需要始终保持一致&#xff0c;比如时间筛选条件等&#xff0c;来回跳转页面时如果采用变量传递&#xff0c;常较为繁琐&#xff0c;存在遗漏传递或未清除上一次变量值&#…

图像金字塔的作用

1. 概述 图像金字塔是图像多尺度表达的一种&#xff0c;主要应用与图像分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。图像金字塔实际上是一张图片在不同尺度下的集合&#xff0c;即原图的上采样和下采样集合。金字塔的底部是高分辨率图像&#xff0c;而…

LuaJit分析(九)LuaJit中的JIT原理分析

Jit in luajit Luajit是一款高性能的lua解释器&#xff0c;与官方的lua解释器相比&#xff0c;luajit的高速除了将解释器直接以汇编代码实现外&#xff0c;还支持jit模式&#xff08;Just in time&#xff09;。Jit模式即将luajit的字节码编译成处理器能够直接执行的机器码&am…

vue3如何监听reactive对象是哪个属性发生的变化

在 Vue 3 中&#xff0c;如果你想监听 reactive 对象中的某个属性发生的变化&#xff0c;你可以使用 watch 函数进行监听。watch 函数允许你观察 reactive 对象的某个属性或者整个对象&#xff0c;并在变化时执行相应的操作。 1. 监听 reactive 对象的某个属性 如果你只想监听…

C++学习/复习补充记录 --- 图论(深搜,广搜)

数据结构与算法 | 深搜&#xff08;DFS&#xff09;与广搜&#xff08;BFS&#xff09;_深搜广搜算法-CSDN博客 深度优先搜索理论基础 深搜和广搜的区别&#xff1a; &#xff08;通俗版&#xff09; dfs是可一个方向去搜&#xff0c;不到黄河不回头&#xff0c;直到遇到绝境了…

在Unity中使用C#进行Xml序列化时保留特定小数位的方法参考

序列化方法代码参考&#xff1a; using System.IO; using System.Xml.Serialization;public class XmlTool {public static string ToXml<T>(T obj){XmlSerializer xmlSerializer new XmlSerializer(typeof(T));using var stringWriter new StringWriter();//让xml文档…

linux驱动 -- 输入子系统

1:输入子系统介绍 一个统一的输入设备的开发框架&#xff0c; 统一生成设备文件&#xff0c; 统一返回固定格式值。 2:输入子系统开发设备 键盘、鼠标、触摸屏等等。 3&#xff1a;输入子系统运行框架 应用层&#xff1a;操作设备文件openclosereadwrite 输入子系统&#xff…

Netty 学习笔记

Java 网络编程 早期的 Java API 只支持由本地系统套接字库提供的所谓的阻塞函数&#xff0c;下面的代码展示了一个使用传统 Java API 的服务器代码的普通示例 // 创建一个 ServerSocket 用以监听指定端口上的连接请求 ServerSocket serverSocket new ServerSocket(5000); //…

OS常规测试方法-PPMU

step 0: 检查工作&#xff1a; 检查每根pin连接到指定的PPMU资源是否正确继电器资源在PRJ文件中是否定义正确 step 1 设计者设计的测试电路继电器重置初始化close应该闭合的继电器 step 2 DPS pin电压置0V&#xff0c;同时考虑电流量程wait闭合测试机DPS通道RELAYwait st…

android13 隐藏状态栏里面的飞行模式 隐藏蓝牙 隐藏网络

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.编译运行 6.彩蛋 1.前言 android13 隐藏状态栏里面的飞行模式,或者其他功能,如网络,蓝牙等等功能,隐藏下图中的一些图标。 2.问题分析 这里如果直接找这个布局的话,需要跟的逻…

nefu暑假acm集训1 构造矩阵 个人模板+例题汇总

前言&#xff1a; 以下都是nefu暑假集训的训练题&#xff0c;我在此把我的模板和写的一些练习题汇总一下并分享出来&#xff0c;希望在能满足我复习的情况下能帮助到你。 正文&#xff1a; 模板&#xff1a; #include<bits/stdc.h> using namespace std; typedef long…

算法训练营|图论第5天

题目&#xff1a;107.寻找存在的路径 题目链接&#xff1a; 107. 寻找存在的路径 (kamacoder.com) 代码&#xff1a; #include<bits/stdc.h> #include<unordered_map> #include<unordered_set> using namespace std; vector<int>father; int find(…

Celery 中,广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现

这里写自定义目录标题 设置 Django 的 settings 模块从 Django 的 settings 文件中加载 Celery 配置自动发现任务使 Celery 实例可用配置 Celery 的任务路由 在 Celery 中&#xff0c;广播模式可以通过使用 RabbitMQ 的 fanout 交换机来实现。fanout 交换机会将消息广播到所有绑…