FPGA中级项目1——IP核(ROM 与 RAM)
FPGA中级项目1——IP核(ROM 与 RAM)
IP核简介
在 FPGA(现场可编程门阵列)设计中,IP 核(Intellectual Property Core,知识产权核)是预先设计好的、可重用的电路模块,用于实现特定功能。它们可以极大简化开发流程,提高设计效率,是现代 FPGA 设计的核心组成部分。可代替部分复杂Verilog代码设计!!!
IP 核的类型
软核(Soft IP):以 HDL 代码形式提供,灵活性高,可根据需求修改和优化。
例如:软处理器核(如 MicroBlaze)、自定义逻辑模块。
硬核(Hard IP):以物理布局(版图)形式集成到 FPGA 中,性能稳定但不可修改。
例如:高速串行收发器(SERDES)、DDR 控制器。
固核(Firm IP):介于软核和硬核之间,提供 RTL 代码或门级网表,部分优化但保留一定灵活性。
例如:数字信号处理(DSP)模块。
常见 IP 核应用场景
数字信号处理:FFT、FIR 滤波器、数字下变频(DDC)。
通信协议:Ethernet MAC、USB 3.0、PCIe。
接口与存储:DDR4 控制器、GPIO 扩展、UART。
嵌入式系统:软处理器(如 ARM Cortex-M/R 系列)、中断控制器。
图像处理:视频编解码、图像增强算法。
ROM IP核简介
在 FPGA 设计中,ROM IP 核是一种用于存储固定数据的预设计模块,其内容在运行时不可修改。它通过硬件资源(如片内 BRAM 或 LUT)实现,广泛用于存储程序代码、查找表、图像数据等固定信息。对于需要存储大量静态数据或实现快速查表的场景,ROM IP 核是首选方案。
ROM IP 核的类型与实现
基于 BRAM 的 ROM
硬核实现:利用 FPGA 片内专用存储块(如 Xilinx 的 BRAM、Intel 的 MegaCore)。
特点:高容量(单块可达 36/72 Kb)、低功耗、支持双端口访问。
适用场景:大数据量存储(如视频帧缓存)。
基于 LUT 的 ROM
软核实现:使用逻辑查找表(LUT)构建,容量较小。
特点:灵活性高,但资源占用大(每个 LUT 存储 1 位数据)。
适用场景:小规模查找表或临时数据存储。
混合实现
结合 BRAM 和 LUT,根据数据量动态选择存储方式。
关键参数配置
深度(Depth):存储单元的数量(如 256×8 表示 256 个 8 位存储单元)。
宽度(Width):每个存储单元的数据位宽。
访问模式
单端口:同一时间只能读写一个地址。
双端口:支持同时读写不同地址(需硬件资源支持)。
初始化文件:通过工具(如 Vivado 的 Memory Initialization File Editor)生成数据文件,指定每个地址的初始值。
应用场景举例
数字信号处理:存储 FIR 滤波器系数、FFT 蝶形运算常数。
示例:使用 ROM 存储正弦波查表数据,生成任意波形。
嵌入式系统:存储软核处理器(如 MicroBlaze)的启动代码。
实现状态机的固定控制序列。
通信协议
存储 MAC 地址、协议配置参数。
缓存通信帧的固定头部数据。
图像处理:存储颜色查找表(CLUT)、图像阈值数据。
问题分析ROM
1. 分布式ROM的容量要比块ROM小得多,因此如果我们可根据所需存储空间的大小不同来调用不同的IP核,甚至更小的我们只需要用到case语句,而不用IP核来实行。
2. 我们以块ROM的学习为例,来创建工程讲解。其中memory type为单端口类型,可定义单端口还是双端口类型(左边框图为实时设计综合形成的ROM IP核)。
单端口与双端口ROM差异
1.端口结构
单端口 ROM:只有一组地址线、数据线和控制信号。这意味着在同一时刻,它只能进行一次操作,要么是读取数据,并且只能对一个特定的地址进行操作。
例如,一个简单的单端口 ROM 可能有一个 8 位的地址线用于选择存储单元,一个 16 位的数据线用于输出数据,以及一个使能信号用于控制是否允许访问。
双端口 ROM:具备两组独立的地址线、数据线和控制信号。这使得它可以同时对两个不同的地址进行操作,大大提高了数据的访问效率。
例如,双端口 ROM 有端口 A 和端口 B,每个端口都有自己独立的地址线、数据线和使能信号,端口 A 可以在读取一个地址的数据时,端口 B 同时读取另一个地址的数据。
2.访问特性
单端口 ROM:同一时刻只能进行一次读操作,即一次只能访问一个存储单元。这限制了数据的读取速度,尤其是在需要频繁快速读取不同地址数据的应用中。
例如,在一个简单的数字系统中,如果需要按照顺序依次读取 ROM 中的数据,单端口 ROM 可以满足需求,但当需要同时获取多个不同位置的数据时,就会显得力不从心。
双端口 ROM:支持同时进行两个独立的读操作,能够并行地从两个不同的地址读取数据。这在需要高速数据处理和多任务并行的场景中非常有用。
例如,在图像处理中,可能需要同时读取图像的不同部分进行并行处理,双端口 ROM 就可以同时提供所需的数据,提高处理速度。
3.访问双端口ROM的代码示例
module dual_port_rom #(parameter DATA_WIDTH = 8, // 数据位宽parameter ADDR_WIDTH = 4 // 地址位宽
) (input wire clk, // 时钟信号// 端口Ainput wire [ADDR_WIDTH-1:0] addr_a,output reg [DATA_WIDTH-1:0] data_a,// 端口Binput wire [ADDR_WIDTH-1:0] addr_b,output reg [DATA_WIDTH-1:0] data_b
);// 定义ROM数组reg [DATA_WIDTH-1:0] rom [(2**ADDR_WIDTH)-1:0];// 初始化ROM内容initial begin// 这里可以根据需要修改初始化数据rom[0] = 8'h01;rom[1] = 8'h02;rom[2] = 8'h03;rom[3] = 8'h04;rom[4] = 8'h05;rom[5] = 8'h06;rom[6] = 8'h07;rom[7] = 8'h08;rom[8] = 8'h09;rom[9] = 8'h0A;rom[10] = 8'h0B;rom[11] = 8'h0C;rom[12] = 8'h0D;rom[13] = 8'h0E;rom[14] = 8'h0F;rom[15] = 8'h10;end// 端口A的读操作always @(posedge clk) begindata_a <= rom[addr_a];end// 端口B的读操作always @(posedge clk) begindata_b <= rom[addr_b];endendmodule
4.测试双端口ROM的代码示例
module tb_dual_port_rom;reg clk;reg [3:0] addr_a;reg [3:0] addr_b;wire [7:0] data_a;wire [7:0] data_b;// 实例化双端口ROMdual_port_rom uut (.clk(clk),.addr_a(addr_a),.data_a(data_a),.addr_b(addr_b),.data_b(data_b));// 时钟生成initial beginclk = 0;forever #5 clk = ~clk; // 10个时间单位的时钟周期end// 测试序列initial begin// 初始化信号addr_a = 4'b0000;addr_b = 4'b0001;#20;addr_a = 4'b0010;addr_b = 4'b0011;#20;$finish;endendmodule
本项目,我们选择单端口A来进行ROM IP核设置!
3. 在端口A选项设置中,其中 width 和 depth 分别代表数据的位宽与容量
4. 在端口A的其他选项中,我们需要特别注意的是,给准备创建的ROM核里面存入内容。即为下图中的load init file选项。
可以自己手动编辑,也可以用相关软件自行生成。如下所示可自动生成宽度为5位,深度为1024的正弦波数据从而存入load init file选项的COE file中。
5. 最后是我们配置好的总结窗口,可查看相关的选项配置。最后点击OK便可生成ROM的IP核,存在于源代码文件夹选项之下(可代替手搓Verilog代码)
RAM IP核简介
RAM IP 核允许在任意时刻、以任意顺序对存储单元进行读写操作,这使得数据的访问非常灵活。它以硬件形式实现于 FPGA 中,可根据设计需求灵活配置其参数,如存储容量、数据位宽等。
类型及特点
1. 单端口 RAM(Single - Port RAM)
端口结构:只有一组地址线、数据线和读写控制信号。在同一时刻,只能进行读或写一种操作。
特点:结构简单,资源占用相对较少。适用于对数据读写操作不太频繁、不需要同时进行读写的场景,例如简单的缓冲存储。
2. 双端口 RAM(Dual - Port RAM)
端口结构:具备两组独立的地址线、数据线和读写控制信号。可以同时对两个不同的地址进行读写操作,提高了数据的访问效率。
特点:支持并行操作,能满足一些对数据处理速度要求较高的应用。但由于结构相对复杂,占用的 FPGA 资源也较多。
3. 真双端口 RAM(True Dual - Port RAM)
端口结构:是双端口 RAM 的一种特殊类型,两个端口都可以独立地进行读写操作,并且可以同时对同一地址进行操作(不过可能需要处理一些冲突情况)。
特点:提供了最高级别的并行访问能力,适用于需要高度并发数据处理的复杂系统。
关键参数配置
存储深度(Depth):表示 RAM 中存储单元的数量。例如,一个存储深度为 256 的 RAM 可以存储 256 个数据单元。
数据位宽(Width):指每个存储单元的数据位数。常见的数据位宽有 8 位、16 位、32 位等。存储深度和数据位宽共同决定了 RAM 的存储容量,容量 = 存储深度 × 数据位宽。
读写模式:包括同步读写和异步读写。同步读写操作在时钟信号的控制下进行,具有更好的时序特性和稳定性;异步读写操作不依赖时钟信号,响应速度较快,但设计时需要更关注时序问题。
应用场景
数据缓存:在数据采集系统中,用于临时存储采集到的数据,等待后续处理。例如,在高速 AD 采样中,将采样数据先存储在 RAM 中,再进行数据分析和处理。
FIFO(First - In - First - Out)实现:通过合理配置 RAM 的读写指针,可以实现 FIFO 缓冲器,用于数据的顺序存储和读取,常用于不同时钟域之间的数据传输。
图像处理:在图像处理算法中,需要对图像数据进行缓存和处理,RAM IP 核可以存储图像的像素数据,方便进行各种滤波、变换等操作。
数字信号处理(DSP):在 DSP 算法中,如 FFT(快速傅里叶变换)、卷积运算等,需要临时存储中间结果和数据,RAM 可以满足这些数据存储和快速访问的需求。
问题分析RAM
1. RAM IP核的创建可按照ROM来如法炮制,可根据所要完成任务的需求来定制。值得注意的是,RAM有读和写两个信号,需要进行相关的配置。而ROM只需要读即可。同样也有单端口与双端口的选项差异。在这里我们选择的是双端口通道
2. RAM端口A设置如下,operating mode 设置为写优先模式,保证写入的数据是正确的。同时宽度与深度要根据所做的项目来选择。
3. RAM端口B设置如下
4. 最后就是RAM IP核的总结界面。需要注意:整个流程重点在于存储容量的计算!即根据项目来实现深度的配置要求!
相关文章:
FPGA中级项目1——IP核(ROM 与 RAM)
FPGA中级项目1——IP核(ROM 与 RAM) IP核简介 在 FPGA(现场可编程门阵列)设计中,IP 核(Intellectual Property Core,知识产权核)是预先设计好的、可重用的电路模块,用于实…...
Redis的持久化-AOF
1.AOF AOF(Append Only File)持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。理解掌握好A…...
jmeter-sample
jmeter-sample http request:接口测试常用请求参数ParametersBody DataFiles Upload jdbc request配置JDBC Connection Configuration创建JDBC Requst请求 http request:接口测试常用 请求参数 Parameters 常见于get请求,与拼在接口后面是一样的效果:如…...
2025-03-15 学习记录--C/C++-PTA 练习3-4 统计字符
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 练习3-4 统计字符 本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、…...
编程自学指南:java程序设计开发,网络编程基础,TCP编程,UDP编程,HTTP客户端开发
编程自学指南:java程序设计开发,网络编程基础 学习目标: 理解网络协议(TCP/IP、UDP)的核心概念 掌握Socket编程实现客户端与服务端通信 能够通过多线程处理并发网络请求 开发简单的网络应用(如聊天程序…...
C++ primer plus 类和对象
目录 前言 一 接口的设计 二 方法的设计和使用 三 构造函数 四 析构函数 五 析构函数和构造函数小结 总结 前言 前面已经描述了很多有关于类和对象的知识了,所以我们直接开始上手操作 一 接口的设计 首先我们要知道什么是接口 接口是一个…...
k8s 修改节点驱逐阈值
编辑 /var/lib/kubelet/config.yaml 文件 kind: KubeletConfiguration evictionHard:nodefs.available: "5%" # 降低磁盘压力触发阈值imagefs.available: "10%" # 调整容器镜像存储触发阈值nodefs.inodesFree: "3%...
HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型
一、软件介绍 文末提供程序和源码下载 HiPixel是一个开源程序基于SwiftUI构建的macOS原生应用程序,用于AI驱动的图像超分辨率,并利用Upscayl的强大AI模型。 二、软件特征 具有 SwiftUI 界面的原生 macOS 应用程序使用 AI 模型进行高质量图像放大通过 G…...
使用 .NET Core 实现 RabbitMQ 消息队列的详细教程
RabbitMQ 是一个流行的消息队列中间件,它允许应用程序通过异步消息的方式进行通信。RabbitMQ 支持 AMQP 协议,可以通过多种方式与应用程序交互。在本教程中,我们将深入探讨如何在 .NET Core 环境中使用 RabbitMQ 来实现消息队列。我们将学习如…...
深度学习——同一台电脑使用ssh配置多个github账号
如果一台电脑只有一个github账号,那么进行默认的ssh配置,通过git拉取和提交代码即可,但在实际的工作中,有时候需要在一台电脑登录多个github账号,将不同的项目代码提交到不同的github账号,这个时候如果仅仅…...
windows常用cmd命令
Windows 命令提示符(CMD)提供了许多实用的命令,用于管理文件、目录、网络、系统配置等。以下是一些常用的 CMD 命令及其用途: 文件和目录操作 dir: 列出当前目录下的文件和子目录。 dircd: 切换当前目录。 cd C:\Users cd .. # 返…...
C语言中的流程控制语句
一.流程控制语句的分类: 1.顺序结构 概念:从上往下依次执行,也是程序默认的执行顺序 2.分支结构 概念:程序在执行的过程中出现了岔路(我们只能选择一条支线进行执行) (1).if语句…...
C语言【数据结构】:理解什么是数据结构和算法(启航)
引言 启航篇,理解什么是数据结构和算法 在 C 语言编程领域,数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合(比如数组),它是组织和存储数…...
WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)深度解析与实战复现
0x00 漏洞概述 CVE-2017-10271 是Oracle WebLogic Server WLS Security组件中的远程代码执行漏洞。攻击者通过构造恶意XML请求,利用XMLDecoder反序列化机制绕过安全验证,最终实现服务器权限接管。 影响版本 WebLogic 10.3.6.0WebLogic 12.1.3.0WebLog…...
【动态规划篇】746.使用最小花费爬楼梯
746.使用最小花费爬楼梯 题目链接: 746.使用最小花费爬楼梯 题目叙述: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 …...
类和对象:
1. const运算符重载: 1. const成员函数: 我们来看我们的下面的代码: 我们来看这个,我们的对象使用const进行修饰,然后我们对象d1调用我们的成员函数,然后我们取d1的地址然后传过去,这时候我们的…...
研究整除的性质——最大公约数(GCD)和最小公倍数(LCM)
最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM)研究整除的性质,非常古老,在2000多年前就得到了很好的研究。由于简单易懂,有较广泛的应用,它们是竞赛中频繁出现…...
jenkins 配置邮件问题整理
版本:Jenkins 2.492.1 插件: A.jenkins自带的, B.安装功能强大的插件 配置流程: 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“,是配置之后发件人的email。 2.配置系统自带的邮件A…...
FastAPI复杂查询终极指南:告别if-else的现代化过滤架构
title: FastAPI复杂查询终极指南:告别if-else的现代化过滤架构 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系统讲解FastAPI中复杂查询条件的构建方法,涵盖参数验证、动态过滤、安全防护等18个核心技术点。通过引入策略模式、声明式编程等技术,彻…...
MySQL行列转化
初始化表结构: CREATE TABLE student_scores (student_id int NOT NULL,student_name varchar(50) DEFAULT NULL,math_score int DEFAULT NULL,english_score int DEFAULT NULL,science_score int DEFAULT NULL,PRIMARY KEY (student_id) ) ENGINEInnoDB DEFAULT C…...
施磊老师c++(六)
继承与多态-多重继承 文章目录 继承与多态-多重继承1.虚基类和虚继承本节内容 2.菱形继承---怎么解决?本节内容**面试问题: 怎么理解多重继承的?**---重点 3.c提供的四种类型转换本节内容 1.虚基类和虚继承 本节内容 多重继承? 代码复用, 一个派生类 有多个基类 抽象类—有…...
c++:AVL树
1.概念 由于二叉搜索树不能确保为近似完全二叉树的结构,节点相同的情况下,高度可能会很高,高度有可能会很低,所以搜索次数不能稳定维持在logn级别。我们在二叉搜索树的基础上进行平衡调整就可以控制搜索次数稳定在logn级别。 而AV…...
HTML编辑MP4保存名称
上图是HTML的界面,需要点击EDIT_MP4的选项,然后就出现文本框输入MP4名称。输入对应的MP4文件名称后,则点击Add_MP4按钮就可以把MP4的名称修改到json文件里面,json文件是network_detail.json文件。 HTML和CGI程序的交互 上图是htm…...
以太坊AI代理与PoS升级点燃3月市场热情,2025年能否再创新高?
币热网深度报道:以太坊AI代理与PoS升级引爆3月热潮,2025年能否再攀历史新高? 原文来源:币热网 - 区块链信息资讯平台 以太坊升级,市场热情高涨 近期,以太坊市场犹如被一股神秘力量点燃,掀起了…...
IDEA2024又一坑:连接Docker服务连不上,提示:Cannot run program “docker“: CreateProcess error=2
为新电脑安装了IDEA2024版,因为局域网中安装有Docker,所以这台电脑上没有安装,当运行时发现死活连不上Docker报:Cannot run program “docker“: CreateProcess error2 分析: Docker服务有问题 其它电脑都能连,排除 网…...
css基本功
为什么 ::first-letter 是伪元素? ::first-letter 的作用是选择并样式化元素的第一个字母,它创建了一个虚拟的元素来包裹这个字母,因此属于伪元素。 grid布局 案例一 <!DOCTYPE html> <html lang"zh-CN"><head&…...
ALSA vs OSS:Linux 音频架构的演变与核心区别
在 Linux 音频系统的发展过程中,OSS(Open Sound System) 和 ALSA(Advanced Linux Sound Architecture) 曾分别在不同阶段承担着音频管理的角色。OSS 是 Linux 早期的音频架构,而 ALSA 作为其继任者…...
双指针算法介绍+算法练习(2025)
一、介绍双指针算法 双指针(或称为双索引)算法是一种高效的算法技巧,常用于处理数组或链表等线性数据结构。它通过使用两个指针来遍历数据,从而减少时间复杂度,避免使用嵌套循环。双指针算法在解决诸如查找、排序、去重…...
第八节:红黑树(初阶)
【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…...
【C++标准库类型】深入理解C++中的using声明:从基础到实践
目录 一、using声明基础 1.1 基本语法形式 1.2 典型应用场景 1.3 作用域规则 二、关键注意事项 2.1 命名冲突处理 2.2 头文件使用规范 2.3 与typedef的对比 三、面向对象中的应用 3.1. 解除派生类名称隐藏(核心应用) 3.2. 构造函数继承&#…...
蓝桥杯2024年第十五届省赛真题-回文数组
题目描述 小蓝在无聊时随机生成了一个长度为 n 的整数数组,数组中的第 i 个数为ai,他觉得随机生成的数组不太美观,想把它变成回文数组,也是就对于任意i ∈ [1, n] 满足 ai an−i1 。小蓝一次操作可以指定相邻的两个数,…...
多数元素——面试经典150题(力扣)
题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 …...
QT中委托QStyledItemDelegate的使用
目录 一、子类化委托 二、委托方法实现 1)createEditor 2)setEditorData 3)setModelData 4)updateEditorGeometry 三、委托使用 四、总结 Qt的数据容器控件采用模型/视图(model/view)架构设计。模型用于存放控件的数据,视图则用于显示编辑数据,而委托则是…...
android 调用wps打开文档并感知保存事件
需求场景 在项目开发中会碰到需要调用WPS打开Word,Excel,Ppt等Office系列文档的情况,网上目前少有正式介绍如何调用相关API打开文档,并实现文档编辑后回传给三方应用,本人在逛WPS社区时发现 解锁WPS二次开发新世界:Android开发用…...
前端 Webpack 面试题
1、什么是 Webpack?它有什么作用? Webpack 是一个前端资源打包工具,用于将 JavaScript、CSS、图片等项目资源进行模块化管理和打包。它能够将复杂的项目结构转化为浏览器友好的代码,提高前端项目的开发效率和性能。 模块打包:Webpack 将项目中的各个模块及依赖打包成一个…...
05延迟任务精准发布文章(redis实现延迟任务、分布式锁)
上架不代表发布(需要发布app端才会显示文章) 1)文章定时发布 2)延迟任务概述 2.1)什么是延迟任务 定时任务:有固定周期的,有明确的触发时间 延迟队列:没有固定的开始时间,它常常是由一个事件触发的,而在…...
十六、从零搭建一个 Vue 3 后台管理系统:完整实战教程
Vue 3 作为当下最为流行的前端框架之一,凭借其简洁的 API 以及强大的性能,已然成为构建后台管理系统的首选工具。本文将一步一步地引导你从零开始搭建一个 Vue 3 后台管理系统,内容涵盖路由、权限管理、状态管理等核心功能,并且会…...
never_give_up
一个很有意思的题: never_give_up - Bugku CTF平台 注意到注释里面有1p.html,我们直接在源代码界面看,这样就不会跳转到它那个链接的: 然后解码可得: ";if(!$_GET[id]) {header(Location: hello.php?id1);exi…...
DeepSeek结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)转载
思维速览: 本文将详细介绍如何利用DeepSeek结合Mermaid语法绘制各类专业图表,帮助你提高工作效率和文档质量。 ▍DeepSeek入门使用请看:deepseek保姆级入门教程(网页端使用 本地客户端部署 使用技巧) DeepSeek官网…...
「基于大模型的智能客服系统」语义理解、上下文记忆与反馈机制设计
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
【后端】【django】导出 API 文档的几种方法
在 Django 项目里,导出 API 文档是很常见的需求,一般可以借助第三方库来实现。 使用 drf-yasg 导出 Swagger/OpenAPI 格式文档 drf-yasg 是一个用于 Django REST framework 的工具,能够自动生成 Swagger 和 OpenAPI 格式的 API 文档。 步骤…...
【HarmonyOS Next之旅】DevEco Studio使用指南(二)
目录 1 -> 工程模板介绍 2 -> 创建一个新的工程 2.1 -> 创建和配置新工程 2.1.1 -> 创建HarmonyOS工程 2.2.2 -> 创建OpenHarmony工程 1 -> 工程模板介绍 DevEco Studio支持多种品类的应用/元服务开发,预置丰富的工程模板,可以根…...
鸿蒙Next开发与实战经验总结
文章目录 1. 鸿蒙Next概述与开发环境搭建1.1 鸿蒙Next的核心特性1.2 开发环境搭建与工具链安装步骤工具链 1.3 第一个鸿蒙Next应用代码示例流程图 2. 鸿蒙Next应用架构与设计模式2.1 应用架构解析2.2 常用设计模式2.3 组件化开发实践 3. UI开发与布局系统3.1 基础UI组件3.2 布局…...
uniapp实现 uview1 u-button的水波纹效果
说明: 由于uview2已经移除水波纹效果,这边又觉得那个效果好看,所以开发这个功能(原谅我不会录动图) 效果: 具体代码: <view class"ripple-container" touchstart"handleTouchStart" touchend&…...
Linux练级宝典->任务管理和守护进程
任务管理 进程组概念 每个进程除了进程ID以外,还有一个进程组,进程组就是一个或多个进程的集合 同一个进程组,代表着他们是共同作业的,可以接收同一个终端的各种信号,进程组也有其唯一的进程组号。还有一个组长进程&a…...
金融行业替换传统的FTP传输系统的必要性
在如今这个数字化飞速发展的时代,金融行业对于信息安全性和数据传输效率的要求简直高得离谱。可是呢,你可能想不到,很多金融机构竟然还在用传统的FTP(文件传输协议)来处理日常的数据交换。 FTP在过去几十年里确实是网络…...
C# backgroundworker类(后台线程)
概念 在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题。解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完成。但是原生接口的线程…...
OpenAI智能体初探:使用 OpenAI Responses API 在 PDF 中实现检索增强生成(RAG)
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 引子 在信息爆炸的时代,从大量 PDF 文档中快速准确地检索信息…...
SqlServer数据库报错紧急或可疑无法访问的修复过程,亲测有效。
当 SQL Server 数据库被标记为 SUSPECT 状态时,表示数据库可能由于事务日志损坏、数据文件丢失或其他严重问题而无法正常启动。以下是一个详细的恢复步骤,基于搜索结果中的信息和常见的最佳实践: 恢复步骤 1. 确认数据库状态 将database-n…...
12.31[net]review
复用(Multiplexing)的概念 定义:在传输层,复用是指多个应用进程可以使用同一个传输层协议(如 TCP 或 UDP)来发送数据。从应用层的角度看,不同的应用进程(如网页浏览器、邮件客户端等…...