xilinx FPGA FIFO IP核的使用(VHDLISE)

news2025/3/10 21:31:15

1.新建工程和ip核文件

下图显示了一个典型的写操作。拉高WR_EN,导致在WR_CLK的下一个上升边缘发生写入操作。因为FIFO未满,所以WR_ACK输出1,确认成功的写入操作。当只有一个附加的单词可以写入FIFO时,FIFO会拉高ALMOST_FULL标志。当ALMOST_FULL拉高之后,一个附加的写入将导致FIFO拉高FULL。当FULL拉高之后发生写入时,WR_ACK就会为0表示溢出。一旦执行了一个或多个读取操作,FIFO将拉低FULL,并且数据可以成功地写入FIFO,之后WR_ACK也会相应拉高表示溢出取消。

本节描述了FIFO读取操作的行为和相关联的状态标志。当断言读取启用且FIFO不为空时,将从输出总线(DOUT)上的FIFO中读取数据,并断言有效标志(有效)。如果FIFO被连续读取而没有被写入,则FIFO将排空。当FIFO不为空时,读取操作将会成功。当FIFO为空且请求读取时,将忽略读取操作,断言下流标志,且FIFO的状态没有变化(下FIFO是非破坏性的)

读写使用一个时钟时,当写操作和读取操作同时发生时,写操作被接受,读取操作被忽略。

对于Virtex-4 FPGA内置的FIFO实现,全信号有一个额外的延迟周期。使用写确认来验证成功或可编程满的早期指示。

Virtex-4 FPGA内置的FIFO实现在FULL标志上显示了一个额外的延迟周期

Common Clock FIFO: Block RAM and Distributed RAM此实现可选地支持首字切换

下图说明了一个FIFO的功能实现,使用块RAM或公共RAM的分布式RAM用于内存。所有信号都同步到单个时钟输入(CLK)。这个设计实现了写和读取指针的计数器,用于计算状态标志的逻辑。另外,还有一个可选的同步(SRST)或异步(RST)复位信号。

 Common Clock FIFO: Shift Registers

此实现仅在Virtex-4 FPGA和更新的架构中可用。

说明了使用移位寄存器配置公共时钟的FIFO的功能实现。所有操作都同步到同一时钟输入(CLK)。这个设计实现了一个写和读指针和逻辑的上/下计数器,用于计算状态标志的逻辑。

 Common Clock (CLK), Built-in FIFO(独立时钟,内置fifo)

此实现可选地支持第一个字的故障切换

FIFO生成器支持使用内置的FIFO原语的FIFO内核。这为用户提供了使用内置的FIFO的能力,而只需要一个时钟接口。具有内置FIFO的公共时钟配置的行为与具有内置FIFO的独立时钟配置相同,除了所有操作都与公共时钟(CLK)有关。

Independent Clocks (RD_CLK, WR_CLK), Block RAM

此实现可选地支持非对称读/写端口和第一个字的故障切换

说明了一个配置了独立时钟的FIFO的功能实现。这个实现使用块RAM或分布式RAM用于内存,用于写和读指针的计数器,二进制代码和灰度代码之间的转换用于跨时钟域的同步,以及用于计算状态标志的逻辑。

 该FIFO被设计为支持一个独立的读时钟(RD_CLK)和写时钟(WR_CLK);换句话说,RD_CLK和WR_CLK之间的频率或相位没有必要的关系。下表总结了FIFO接口信号,它们仅在各自的时钟域中有效

 对于使用独立时钟的FIFO核心,写操作和读取操作与状态标志之间的时间关系受到两个时钟之间关系的影响。例如,写入空FIFO和断空之间的时间由写时钟和读时钟之间的相位和频率关系决定。

我选择了读写独立时钟,配置成内部fifo

 read mode

读取模式仅在选择块RAM或分布式RAM FIFOs时可用。对内置FIFOs的支持仅适用于Kintex-7、Virtex-7、Virtex-6和Virtex-5的FPGA实现。

标准FIFO实现了具有标准延迟的FIFO,而不使用输出寄存器。

第一字下降直通FIFO实现了一个具有注册输出的FIFO。

Built-in FIFO Options
在标准的fifo模式下,当没有读使能时,dout是不会有输出的,但是如果使用模式,我测试了,在没有读写使能的前提下,任然会输出第一个读数,并且会早于读使能。

--------------------------------------------------------------------------------
-- Company: 
-- Engineer:
--
-- Create Date:   14:37:40 09/01/2022
-- Design Name:   
-- Module Name:   F:/ISE/trigger/fifo/fifo_tb.vhd
-- Project Name:  fifo
-- Target Device:  
-- Tool versions:  
-- Description:   
-- 
-- VHDL Test Bench Created by ISE for module: fifo
-- 
-- Dependencies:
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
-- Notes: 
-- This testbench has been automatically generated using types std_logic and
-- std_logic_vector for the ports of the unit under test.  Xilinx recommends
-- that these types always be used for the top-level I/O of a design in order
-- to guarantee that the testbench will bind correctly to the post-implementation 
-- simulation model.
--------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
 
ENTITY fifo_tb IS
END fifo_tb;
 
ARCHITECTURE behavior OF fifo_tb IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
   COMPONENT fifo
  PORT (
    rst : IN STD_LOGIC;
    wr_clk : IN STD_LOGIC;
    rd_clk : IN STD_LOGIC;
    din : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
    wr_en : IN STD_LOGIC;
    rd_en : IN STD_LOGIC;
    dout : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
    full : OUT STD_LOGIC;
    almost_full : OUT STD_LOGIC;
    wr_ack : OUT STD_LOGIC;
    overflow : OUT STD_LOGIC;
    empty : OUT STD_LOGIC;
    almost_empty : OUT STD_LOGIC;
    valid : OUT STD_LOGIC;
    underflow : OUT STD_LOGIC;
    rd_data_count : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);
    wr_data_count : OUT STD_LOGIC_VECTOR(8 DOWNTO 0)
  );
END COMPONENT;
    

   --Inputs
   signal rst : std_logic := '0';
   signal wr_clk : std_logic := '0';
   signal rd_clk : std_logic := '0';
   signal din : std_logic_vector(17 downto 0) := (others => '0');
   signal wr_en : std_logic := '0';
   signal rd_en : std_logic := '0';

 	--Outputs
   signal dout : std_logic_vector(17 downto 0):= (others => '0');
   signal full : std_logic:= '0';
   signal empty : std_logic:= '0';
   signal valid : std_logic:= '0';
   signal underflow : std_logic:= '0';

    signal rd_data_count : std_logic_vector(8 downto 0):= (others => '0');
    signal wr_data_count : std_logic_vector(8 downto 0):= (others => '0');
   signal almost_full : std_logic:= '0';
   signal wr_ack : std_logic:= '0';
   signal overflow : std_logic:= '0';
   signal almost_empty : std_logic:= '0';
   
    
   -- Clock period definitions
   constant wr_clk_period : time := 10 ns;
   constant rd_clk_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: fifo PORT MAP (
    rst => rst,
    wr_clk => wr_clk,
    rd_clk => rd_clk,
    din => din,
    wr_en => wr_en,
    rd_en => rd_en,
    dout => dout,
    full => full,
    almost_full => almost_full,
    wr_ack => wr_ack,
    overflow => overflow,
    empty => empty,
    almost_empty => almost_empty,
    valid => valid,
    underflow => underflow,
    rd_data_count => rd_data_count,
    wr_data_count => wr_data_count
  );

   -- Clock process definitions
   wr_clk_process :process
   begin
		wr_clk <= '0';
		wait for wr_clk_period/2;
		wr_clk <= '1';
		wait for wr_clk_period/2;
   end process;
 
   rd_clk_process :process
   begin
		rd_clk <= '0';
		wait for rd_clk_period/2;
		rd_clk <= '1';
		wait for rd_clk_period/2;
   end process;
 


   -- Stimulus process
   stim_proc: process
   begin		
     rst <= '1';
    wr_en <= '0';
    rd_en <= '0'; 
    din <= (others => '0');
      wait for wr_clk_period;
    rst <= '0';
    wait for wr_clk_period*5;
    
    wr_en <= '1'; 
     din <= "00"&X"1203";
     wait for wr_clk_period;
     wr_en <= '0';
      wait for wr_clk_period*10;
      
      rd_en <= '1';   
      
      wr_en <= '1'; 
      din <= "00"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
     rd_en <= '0';
      wait for wr_clk_period*10;
      
      rd_en <= '1';  
      wr_en <= '1'; 
      din <= "10"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
     rd_en <= '0';
      wait for wr_clk_period*10;
      
      rd_en <= '1';  
      wr_en <= '1'; 
      din <= "01"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
     rd_en <= '0';
      wait for wr_clk_period*10;
      -- insert stimulus here 

      wait;
   end process;

END;

 先写再读,而且是写一个之后就开始读,并且读写频率一样,所以仿真结果就是写一次读一次

--------------------------------------------------------------------------------
-- Company: 
-- Engineer:
--
-- Create Date:   14:37:40 09/01/2022
-- Design Name:   
-- Module Name:   F:/ISE/trigger/fifo/fifo_tb.vhd
-- Project Name:  fifo
-- Target Device:  
-- Tool versions:  
-- Description:   
-- 
-- VHDL Test Bench Created by ISE for module: fifo
-- 
-- Dependencies:
-- 
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
-- Notes: 
-- This testbench has been automatically generated using types std_logic and
-- std_logic_vector for the ports of the unit under test.  Xilinx recommends
-- that these types always be used for the top-level I/O of a design in order
-- to guarantee that the testbench will bind correctly to the post-implementation 
-- simulation model.
--------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
 
ENTITY fifo_tb IS
END fifo_tb;
 
ARCHITECTURE behavior OF fifo_tb IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
   COMPONENT fifo
  PORT (
    rst : IN STD_LOGIC;
    wr_clk : IN STD_LOGIC;
    rd_clk : IN STD_LOGIC;
    din : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
    wr_en : IN STD_LOGIC;
    rd_en : IN STD_LOGIC;
    dout : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
    full : OUT STD_LOGIC;
    almost_full : OUT STD_LOGIC;
    wr_ack : OUT STD_LOGIC;
    overflow : OUT STD_LOGIC;
    empty : OUT STD_LOGIC;
    almost_empty : OUT STD_LOGIC;
    valid : OUT STD_LOGIC;
    underflow : OUT STD_LOGIC;
    rd_data_count : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);
    wr_data_count : OUT STD_LOGIC_VECTOR(8 DOWNTO 0)
  );
END COMPONENT;
    

   --Inputs
   signal rst : std_logic := '0';
   signal wr_clk : std_logic := '0';
   signal rd_clk : std_logic := '0';
   signal din : std_logic_vector(17 downto 0) := (others => '0');
   signal wr_en : std_logic := '0';
   signal rd_en : std_logic := '0';

 	--Outputs
   signal dout : std_logic_vector(17 downto 0):= (others => '0');
   signal full : std_logic:= '0';
   signal empty : std_logic:= '0';
   signal valid : std_logic:= '0';
   signal underflow : std_logic:= '0';

    signal rd_data_count : std_logic_vector(8 downto 0):= (others => '0');
    signal wr_data_count : std_logic_vector(8 downto 0):= (others => '0');
   signal almost_full : std_logic:= '0';
   signal wr_ack : std_logic:= '0';
   signal overflow : std_logic:= '0';
   signal almost_empty : std_logic:= '0';
   
    
   -- Clock period definitions
   constant wr_clk_period : time := 10 ns;
   constant rd_clk_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: fifo PORT MAP (
    rst => rst,
    wr_clk => wr_clk,
    rd_clk => rd_clk,
    din => din,
    wr_en => wr_en,
    rd_en => rd_en,
    dout => dout,
    full => full,
    almost_full => almost_full,
    wr_ack => wr_ack,
    overflow => overflow,
    empty => empty,
    almost_empty => almost_empty,
    valid => valid,
    underflow => underflow,
    rd_data_count => rd_data_count,
    wr_data_count => wr_data_count
  );

   -- Clock process definitions
   wr_clk_process :process
   begin
		wr_clk <= '0';
		wait for wr_clk_period/2;
		wr_clk <= '1';
		wait for wr_clk_period/2;
   end process;
 
   rd_clk_process :process
   begin
		rd_clk <= '0';
		wait for rd_clk_period/2;
		rd_clk <= '1';
		wait for rd_clk_period/2;
   end process;
 


   -- Stimulus process
   stim_proc: process
   begin		
     rst <= '1';
    wr_en <= '0';
    rd_en <= '0'; 
    din <= (others => '0');
      wait for wr_clk_period;
    rst <= '0';
    wait for wr_clk_period*5;
    
    wr_en <= '1'; 
     din <= "00"&X"1203";
     wait for wr_clk_period;
     wr_en <= '0';
      wait for wr_clk_period*3;
      
      rd_en <= '1';   
      
      wr_en <= '1'; 
      din <= "00"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
    
      wait for wr_clk_period*3;
      
   
      wr_en <= '1'; 
      din <= "10"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      
    
      wr_en <= '1'; 
      din <= "01"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      -- insert stimulus here 

      wait;
   end process;

END;

先写两个数据,再读,所以读出的结果就是当读使能来的时候,立马读出两个数,然后再去等待下一个数写入

  -- Stimulus process
   stim_proc: process
   begin		
     rst <= '1';
    wr_en <= '0';
    rd_en <= '0'; 
    din <= (others => '0');
      wait for wr_clk_period;
    rst <= '0';
    wait for wr_clk_period*5;
    
    wr_en <= '1'; 
     din <= "00"&X"1203";
     wait for wr_clk_period;
     wr_en <= '0';
      wait for wr_clk_period*3;
      
      
      
      wr_en <= '1'; 
      din <= "00"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
    
      wait for wr_clk_period*3;
      
    rd_en <= '1';   
      wr_en <= '1'; 
      din <= "10"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      
    
      wr_en <= '1'; 
      din <= "01"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      -- insert stimulus here 

      wait;
   end process;

这次是先使能读,然后再写,就会等数据写进去之后,数据才会读出

-- Stimulus process
   stim_proc: process
   begin		
     rst <= '1';
    wr_en <= '0';
    rd_en <= '0'; 
    din <= (others => '0');
      wait for wr_clk_period;
    rst <= '0';
    wait for wr_clk_period*5;
     rd_en <= '1';  
     wait for wr_clk_period*5;
    wr_en <= '1'; 
     din <= "00"&X"1203";
     wait for wr_clk_period;
     wr_en <= '0';
      wait for wr_clk_period*3;
      
      
      
      wr_en <= '1'; 
      din <= "00"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
    
      wait for wr_clk_period*3;
      
    
      wr_en <= '1'; 
      din <= "10"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      
    
      wr_en <= '1'; 
      din <= "01"&X"1103";
      wait for wr_clk_period;
     wr_en <= '0';
  
      wait for wr_clk_period*3;
      -- insert stimulus here 

      wait;
   end process;

测试结论就是,用fifo读写可以避免用rom,因为数据还没有写入时,一直读出上一次的数据,用fifo就可以在vaild为高时去读取,这样读出的数就是依次写入的数据

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

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

相关文章

图数据结构与算法

什么是图数据的结构 图是由顶点和边组成的非线性数据结构。顶点有时也称为节点,边是连接图中任意两个节点的线或弧。更正式地说,图由一组顶点 ( V ) 和一组边 ( E ) 组成。该图由 G(E, V) 表示。 图的组成部分 顶点:顶点是图的基本单位。有时,顶点也称为顶点或节点。每个节…

私有化部署VideoTogether一起看视频

本文折腾始于 2022 年 9 月&#xff0c;但因为种种原因并未写完&#xff0c;最近&#xff0c;因为有朋友需要&#xff0c;又重新开始捡了起来&#xff0c;然而&#xff0c;我发现官方已经把私有化部署的相关文档删了&#xff0c;原因不得而知。 什么是 VideoTogether ? VideoT…

拥抱自动化测试,快速升职加薪丄Selenium+Pytest自动化测试框架教你如何做到

目录&#xff1a;导读 引言 SeleniumPytest自动化测试框架是目前最流行的自动化测试工具之一&#xff0c;其强大的功能和易用性援助许多开发人员和测试人员。 selenium自动化 pytest测试框架禅道实战 选用的测试网址为我电脑本地搭建的禅道 conftest.py更改 config.ini更…

【权限维持】域控后门SSPHOOKDSRMSID万能钥匙

文章目录内网域-权限维持-基于验证DLL加载-SSP方法一&#xff1a;但如果域控制器重启&#xff0c;被注入内存的伪造的SSP将会丢失。方法二&#xff1a;使用此方法即使系统重启&#xff0c;也不会影响到持久化的效果。使用总结内网域-权限维持-基于验证DLL加载-HOOK方法一&#…

esxi的安装配置以及新建虚拟机

esxi的安装配置以及新建虚拟机1_esxi的安装1.1_镜像下载1.2_启动盘制作1.3_安装教程1.3.1_进入Bios Manager选择使用U盘启动1.3.2_配置esxi&#xff08;主要是配置网络&#xff09;1.3.3_远程连接&#xff08;直接在电脑上输入ip地址登录即可&#xff09;2_新建虚拟机装操作系统…

没有他们,人工智能只能死翘翘

我过去写过一篇文章《很多所谓伟大的贡献&#xff0c;其实都是狗屎运》&#xff0c;今天我也写写人工智能。&#xff08;1&#xff09;人才深度神经网络如果不从明斯基和罗森布拉特说起&#xff0c;那就应该可以从1965年Ivakhnenko发明前馈神经网络说起。但关键里程碑是出自Rum…

Socket套接字编程(实现TCP和UDP的通信)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

设置Pycharm的背景颜色(样式)、图片

目录 一、效果 二、背景图片 三、背景颜色 一、效果 二、背景图片 1.打开Pycharm中的File-Settings 2.点击Appearance & Behavior中的Appearance&#xff0c;然后点击Bcakground Image &#xff08;图中已标明顺序&#xff09; 3.找到图片并选中。 &#xff08;图中已…

[JavaEE]----Spring01

文章目录Spring_day011&#xff0c;课程介绍1.1 为什么要学?1.2 学什么?1.3 怎么学?2&#xff0c;Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线2.3 Spring核心概念2.3.1 目前项目中的问题2.3.…

PasteSpider之--路由列表-私有仓库-环境配置-的介绍

路由列表 这个路由就是我们说的代理&#xff0c;PasteSpider的代理是使用nginx实现的&#xff0c;其实就是PasteSpider在执行命令的过程中对对应的nginx的配置文件进行修改和更新。所以这个板块非常重要&#xff0c;特别是你进行动态扩容的时候。 建议查阅nginx的相关代理配置&…

【ESP32】嵌入式FreeRtos--队列Queue

基础知识 队列&#xff1a;先入先出(FIFO,first in first out) 使用方法&#xff1a; 创建队列长度、尺寸(每个信息内存空间的大小)发送数据取数据 API功能xQueueCreate()创建一个队列xQueueSend()往队列里写数据xQueueReceive从队列里读数据uxQueueMessagesWaiting(队列句…

静态时序分析Static Timing Analysis4——多时钟域和多时钟时序检查

文章目录前言一、多时钟域时序分析1、慢时钟域到快时钟域1.1 建立时间检查1.2 保持时间检查1.3 多周期检查2、快时钟域到慢时钟域2.1 建立时间检查2.2 保持时间检查2.3 合理的约束3、总结二、多时钟1、整数倍关系2、非整数倍关系三、相位移动前言 2023.4.12 这里讲的多时钟域和…

干货满满!MES生产制造管理全流程分析

阅读本文您将了解&#xff1a;1.什么是MES生产管理流程&#xff1b;2.MES生产管理流程具体步骤&#xff1b;3.实施MES生产管理流程优势&#xff1b;4.MES生产管理流程中可能会遇见的问题。 一、什么是MES生产管理流程 MES生产管理系统&#xff08;又称制造执行系统&#xff0…

Java开发 - 公共字段的自动填充

前言 如果说Java开发中有什么是让人很烦的一件事&#xff0c;那一定是无尽的填充字段&#xff0c;本篇作为观众瑰宝系列第二篇&#xff0c;将带来公共字段填充相关的知识点&#xff0c;学完此篇&#xff0c;让你摆脱公共字段填充带来的麻烦&#xff0c;节省代码&#xff0c;降…

定时任务:从Timer、STPE、Quartz 到 XXL-JOB

java.util.Timerjava.util.concurrent.ScheduledThreadPoolExecutor 简称STPEQuartzXXL-JOB 基本套路 定时任务基本上都是在一个while(true)或for(;;)死循环中&#xff08;每次循环判断定时程序是否终止或暂停&#xff09;&#xff0c;从任务存放的地&#xff08;可以是内存的…

电脑重装系统后会怎样?

​有小伙伴的电脑系统运行缓慢卡顿&#xff0c;现在想通过重装系统来解决问题。咨询电脑重装系统会怎么样对系统有影响吗&#xff0c;现在小编就带大家看看电脑重装系统后会怎样。 方法/步骤&#xff1a; 一、电脑重装系统会怎么样 1、我们的电脑重装系统后&#xff0c;电脑…

Java面试题总结 | Java基础部分(持续更新)

Java基础 文章目录Java基础一个Java文件里可以有多个类吗&#xff08;不含内部类&#xff09;&#xff1f;创建对象的方法面向对象和面向过程简述自动装箱拆箱Java代码块执行顺序java中的基本数据类型对应的字节数包装类型和基本数据类型的场景java中的关键字分类final关键字st…

【微信小程序】小程序基础入门01

&#x1f609;博主&#xff1a;初映CY的前说(前端领域) ,&#x1f4d2;本文核心&#xff1a;微信小程序的入门介绍 【前言】小程序是一种不需要下载、安装即可使用的应用&#xff0c;它实现了应用触手可及的梦想&#xff0c;用户扫一扫或者搜一下就能打开应用&#xff0c;也实现…

Flink 优化 (三) --------- 反压处理

目录一、概述1. 反压的理解2. 反压的危害二、定位反压节点1. 利用 Flink Web UI 定位2. 利用 Metrics 定位三、反压的原因及处理1. 查看是否数据倾斜2. 使用火焰图分析3. 分析 GC 情况4. 外部组件交互一、概述 Flink 网络流控及反压的介绍&#xff1a;https://flink-learning.…

threejs-后期通道效果汇总

文章目录前言后期处理通道汇总简单通道效果FilmPassDotScreenPassBloomPassUnrealBloomPassOutlinePassGlitchPassHalftonePass高级通道效果掩码效果MaskPass景深效果 BokehPass景自定义效果 ShaderPass总结前言 Threejs提供了很多后期处理通道&#xff0c;配合 THREE.EffectC…