【FPGA开发】利用状态机思想点亮流水灯/初学hdlbitsFPGA教程网站
一、状态机思想介绍
状态机是一种用于描述系统行为的形式化模型,它将系统抽象为有限的状态,并通过状态转移来响应外部输入或事件。其核心思想是:系统在任何时刻只处于一个确定的状态,且在不同状态之间按规则切换。状态机是处理明确、离散状态转换问题的利器,适合任何需要结构化行为模型的场景。
1.1 状态机核心概念
(1)状态(State)
表示系统所处的某种模式或条件。例如:
- 红绿灯的「红灯」「绿灯」「黄灯」。
- 门的「打开」「关闭」「锁定」。
(2)事件(Event)
触发状态转移的输入或动作。例如:
- 按下按钮(事件)使门从「锁定」转移到「打开」。
- 定时器超时(事件)使红绿灯从「绿灯」转移到「黄灯」。
(3)转移(Transition)
定义状态如何因事件而改变。通常表示为:
- 当前状态 + 事件 → 执行动作 + 下一状态。
(4)动作(Action)
在状态转移时执行的操作(可选)。例如:
- 进入「红灯」状态时启动倒计时。
1.2 状态机类型
(1)有限状态机(FSM)
- 状态数量有限。
- 分为两类:
- Moore型:输出仅依赖当前状态。
- Mealy型:输出依赖当前状态和输入事件。
(2)分层状态机(HFSM)
- 状态可以嵌套子状态,简化复杂逻辑。
- 例如:汽车「行驶」状态包含「加速」「巡航」等子状态。
(3)并发状态机
- 多个状态机并行运行,独立处理不同事件。
1.3 状态机应用场景
(1)嵌入式系统:电梯控制、交通灯管理。
(2)游戏开发:NPC行为逻辑(如「巡逻→攻击→逃跑」)。
(3)网络协议:TCP连接状态(建立、传输、关闭)。
(4)用户界面:页面跳转逻辑(如登录流程)。
以红绿灯来进行简单示例:
状态:红灯、黄灯、绿灯
事件:定时器超时转移规则:
1. 红灯 →(超时)→ 绿灯
2. 绿灯 →(超时)→ 黄灯
3. 黄灯 →(超时)→ 红灯
1.4 状态机的优点
(1)逻辑清晰:将复杂行为分解为离散状态。
(2)易于扩展:新增状态或事件不影响其他部分。
(3)可维护性:状态隔离,便于调试。
二、利用状态机思想点亮流水灯
2.1 设计思路
定义4个状态(S0, S1, S2, S3),每个状态对应点亮一个LED。定时器每0.5秒切换一次状态(假设FPGA时钟为50MHz,定时器计数25,000,000次),然后设置异步复位,初始状态为S0。
2.2 代码演示
verilog流水灯代码:
module LED(input wire clk, // 50MHz时钟input wire reset_n, // 异步低电平复位output reg [3:0] leds // 4个LED(低电平点亮)
);// 状态定义
localparam S0 = 2'b00;
localparam S1 = 2'b01;
localparam S2 = 2'b10;
localparam S3 = 2'b11;reg [1:0] current_state; // 当前状态
reg [1:0] next_state; // 下一状态
reg [24:0] counter; // 定时器计数器(25MHz计数)// 状态转移逻辑
always @(posedge clk or negedge reset_n) beginif (!reset_n) begincurrent_state <= S0;counter <= 0;end else begin// 定时器计数if (counter >= 25_000_000 - 1) begincounter <= 0;current_state <= next_state;end else begincounter <= counter + 1;endend
end// 下一状态逻辑
always @(*) begincase (current_state)S0: next_state = S1;S1: next_state = S2;S2: next_state = S3;S3: next_state = S0;default: next_state = S0;endcase
end// 输出逻辑(Moore型:输出仅依赖状态)
always @(*) begincase (current_state)S0: leds = 4'b1110; // LED0亮S1: leds = 4'b1101; // LED1亮S2: leds = 4'b1011; // LED2亮S3: leds = 4'b0111; // LED3亮default: leds = 4'b1111;endcase
endendmodule
测试代码:
`timescale 1ns / 1psmodule LED_tb;// 输入信号
reg clk;
reg reset_n;// 输出信号
wire [3:0] leds;// 实例化被测模块
LED uut (.clk(clk),.reset_n(reset_n),.leds(leds)
);// 时钟生成(50MHz)
initial beginclk = 0;forever #10 clk = ~clk; // 20ns周期(50MHz)
end// 复位和测试逻辑
initial beginreset_n = 0; // 初始复位#100 reset_n = 1; // 释放复位// 仿真运行足够长时间(观察4个状态切换)#200_000_000; // 200ms(实际需仿真更长时间)$stop;
end// 监控输出
initial begin$monitor("Time = %t, State = %b, LEDs = %b", $time, uut.current_state, leds);
endendmodule
2.3 modesim仿真测试
2.3.1 仿真环境调试
首先要指定仿真工具,找到Tools→Options→EDA Tool Options
点击Modesim Altera,确保路径指向安装目录(如C:\intelFPGA\modelsim_ase\win32aloem)
设置仿真参数,点击Assignments→Settings
按下图依次进行修改
创建测试文件 LED_tb.v,将其放在工程根目录下(步骤和创建LED.v一致)
然后添加Testbench文件,点击Test Benches→New
按照下图步骤进行添加,注意Top level module in test bench中必须与Testbench模块名一致
然后点击LED_tb.v文件,Open然后Add即可关联测试文件到Quartus工程
2.3.2 编译启动仿真
点击蓝色三角符号开始编译,编译成功后,Quartus会自动调用ModelSim并加载仿真文件。如果未自动启动,点击 Tools
→ Run Simulation Tool
→ RTL Simulation
(功能仿真),ModelSim将打开并加载Testbench和设计文件。
(正在运行中)
生成波形图,可以看到信号变化情况(F可以观察全局波形,I可以放大细节区域)
具体观察变化情况:
如上图,可以发现四个信号的变化情况:
-
时钟(clk):确认频率为50MHz(周期20ns)。
-
复位(reset_n):前100ns为低电平,之后拉高。
-
状态(current_state):每0.5秒(25,000,000个时钟周期)切换一次。
-
LED输出(leds):按1110→1101→1011→0111循环变化。
烧录结果:
状态机思想点亮流水灯
三、CPLD与FPGA芯片探索
3.1 CPLD芯片介绍
CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)是一种基于 可编程与或阵列(PAL/GAL结构) 的半定制集成电路,主要用于实现中小规模的数字逻辑功能。它介于简单PLD(如PAL、GAL)和FPGA之间,适合低复杂度、高确定性的控制场景。
3.1.1 CPLD的核心特点
特性 | 说明 |
---|---|
架构 | 基于 乘积项(Product-Term)逻辑,由可编程与阵列和固定或阵列组成。逻辑块通过全局互联连接,延迟固定且可预测。 |
逻辑容量 | 较小(通常等效 几十到几千个逻辑门),适合简单控制逻辑。 |
非易失性 | 配置信息存储在 Flash或EEPROM 中,上电即运行,无需外部配置芯片。 |
低功耗 | 静态功耗极低,适合电池供电设备。 |
高可靠性 | 抗干扰能力强,适用于工业环境。 |
快速响应 | 信号传输延迟固定(纳秒级),适合实时控制。 |
3.1.2 CPLD的典型应用
(1) 胶合逻辑(Glue Logic)
-
替代传统的 74系列逻辑芯片,实现电平转换、信号整形、总线仲裁等。
示例:-
连接不同电压的MCU和传感器(如3.3V ↔ 5V转换)。
-
扩展I/O口(如用CPLD实现多路复用)。
-
(2) 状态机与控制逻辑
-
实现 确定性高的控制逻辑,如电机驱动、电源管理、按键扫描等。
示例:-
工业PLC的IO控制模块。
-
智能家居设备的按键防抖逻辑。
-
(3) 接口协议转换
-
桥接不同通信协议(如UART转SPI、I2C主从切换)。
示例:-
将并行总线转换为串行LVDS信号。
-
(4) 低功耗设备
-
因 上电即运行 且 静态功耗低,常用于便携设备。
示例:-
智能手表的电源管理。
-
无线传感器网络的唤醒控制。
-
3.2 CPLD与FPGA芯片区别与适用场景分析
CPLD和FPGA(现场可编程门阵列)是两种主流的可编程逻辑器件,尽管功能相似,但在架构、性能和应用场景上存在显著差异。
3.2.1 主要技术区别
特性 | CPLD | FPGA |
---|---|---|
架构 | 基于 乘积项(PAL/GAL结构),逻辑块通过全局互联连接 | 基于 查找表(LUT)+ 寄存器,逻辑单元阵列通过可编程互联矩阵连接 |
逻辑容量 | 较小(通常几百到几千逻辑门) | 较大(数万到数百万逻辑门,支持复杂设计) |
时序特性 | 固定延迟(确定性高),适合同步逻辑 | 延迟可变(依赖布线),需时序约束优化 |
存储资源 | 少量嵌入式存储(如触发器) | 丰富(Block RAM、分布式RAM) |
DSP/算术能力 | 弱(依赖逻辑单元实现) | 强(内置DSP硬核、乘法器) |
功耗 | 静态功耗低,适合低功耗设计 | 动态功耗高,需优化设计 |
配置方式 | 非易失性(EEPROM/Flash,上电即运行) | 易失性(SRAM,需外挂配置芯片) |
灵活性 | 逻辑固定,适合简单控制逻辑 | 高度灵活,支持动态重构 |
3.2.2 两者适用场景
1. CPLD的典型应用
-
简单控制逻辑
地址译码、总线接口、状态机控制(如PCI接口协议转换)。 -
实时性要求高的场景
工业控制(PLC)、电机驱动(因固定延迟,响应时间可预测)。 -
低功耗与即时启动
便携设备、电源管理(上电无需配置,静态功耗低)。 -
胶合逻辑(Glue Logic)
连接不同标准的芯片(如电平转换、信号整形)。
示例:键盘扫描电路、电源时序控制、老式硬盘接口桥接
2. FPGA的典型应用
-
高性能并行处理
数字信号处理(DSP)、图像处理(如摄像头ISP流水线)。 -
复杂算法加速
机器学习推理、加密解密(利用DSP硬核和并行计算)。 -
可重构计算
通信协议栈(5G PHY层)、软件定义无线电(SDR)。 -
原型验证与ASIC替代
芯片流片前的功能验证(如SoC原型开发)。
示例:自动驾驶的传感器融合、高速数据采集卡(ADC/DAC接口)、区块链矿机
3.2.3 选择建议
场景 | 推荐器件 | 理由 |
---|---|---|
需要即时启动、低功耗控制 | CPLD | 非易失性,静态功耗低 |
简单逻辑整合(替换多颗74芯片) | CPLD | 成本低,开发周期短 |
高速数据流处理(>100MHz) | FPGA | 并行架构,支持流水线优化 |
需要动态重构功能 | FPGA | 可运行时重新配置逻辑 |
复杂算法(FFT、卷积) | FPGA | 内置DSP硬核,计算效率高 |
3.2.4 关键总结
CPLD:
优势:确定性延迟、低功耗、即时启动。
局限:逻辑规模小,缺乏硬核IP。
FPGA:
优势:高灵活性、大容量、支持复杂算法。
局限:功耗高,需外挂配置芯片,成本较高。
而且随着工艺进步,FPGA逐渐集成CPLD的特性(如Intel MAX 10系列融合Flash配置功能),而CPLD市场被低端FPGA挤压,但在特定场景仍不可替代。
四、hdlbits网站练习组合逻辑题目
4.1 2选1多路复用器(MUX)
1位宽 2选1多路复用器(MUX)是数字电路中最基础的逻辑单元之一,其核心功能是 根据选择信号(sel)从两个输入(a和b)中选择一个输出。它的作用可以类比为一个“数据开关”
问题描述:
解决方案:
module top_module(input a,input b,input sel,output out
);assign out = sel ? b : a; // 三元运算符实现
endmodule
说明: sel ?b:a;是条件运算符,等价于 if - else 的逻辑,这是最简洁的组合逻辑实现方式。
用于测试用例的时序图:Sel 在 a 和 b 之间进行选择
4.2 256:1 多路复用器
是2对1多路复用器的升级版
问题描述:
解决方案:
module top_module (input [255:0] in,input [7:0] sel,output out
);assign out = in[sel]; // 直接使用 sel 作为索引
endmodule
说明:in[sel]
表示从 in
向量中选择第 sel
位的值,这是最简洁、高效的方式,综合工具会自动优化为多路复用逻辑。
4.3 半加器设计
半加器是数字电路中最基础的算术单元,其核心逻辑是:
-
和(sum)= a ^ b(由 1 个异或门 实现)
-
进位(cout)=a & b(由 1 个与门 实现)
真值表:
a | b | sum | cout |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
问题描述:
解决方案:
module top_module (input a, b,output sum, cout
);assign sum = a ^ b; // 异或:本位和assign cout = a & b; // 与:进位
endmodule
掌握半加器后,可以进一步学习 全加器(Full Adder) 和 多位加法器(Ripple Carry Adder)。
4.4 全加器设计
全加器将两个1位二进制数和一个进位输入相加,产生和(sum)和进位输出(carry out)。
问题描述:
解决方案:
module top_module( input a, b, cin,output cout, sum );// 全加器实现assign sum = a ^ b ^ cin; // 和的计算assign cout = (a & b) | (a & cin) | (b & cin); // 进位输出的计算endmodule
说明:
-
输入端口:
a
: 第一个1位加数b
: 第二个1位加数cin
: 进位输入 -
输出端口:
sum
: 和输出 (a + b + cin 的结果)cout
: 进位输出 -
逻辑实现:
sum
使用异或(XOR)运算计算,因为当奇数个输入为1时结果为1cout
使用或(OR)运算组合三种可能的进位情况:a和b都为1、a和cin都为1、b和cin都为1
测试用例的时序图:
4.5 4位BCD加法器
这个加法器可以处理两个4位BCD数字(每个数字0-9,共16位输入)和一个进位输入,产生4位BCD和和进位输出。
问题描述:
解决方案:
module top_module( input [15:0] a, b,input cin,output cout,output [15:0] sum );// 定义中间进位信号wire c1, c2, c3;// 实例化4个bcd_fadd模块,形成波纹进位链bcd_fadd add0 (.a(a[3:0]),.b(b[3:0]),.cin(cin),.cout(c1),.sum(sum[3:0]));bcd_fadd add1 (.a(a[7:4]),.b(b[7:4]),.cin(c1),.cout(c2),.sum(sum[7:4]));bcd_fadd add2 (.a(a[11:8]),.b(b[11:8]),.cin(c2),.cout(c3),.sum(sum[11:8]));bcd_fadd add3 (.a(a[15:12]),.b(b[15:12]),.cin(c3),.cout(cout),.sum(sum[15:12]));endmodule
说明(工作原理):
·最低位BCD加法器(add0)接收cin
作为进位输入
·每个加法器的进位输出连接到下一个高位加法器的进位输入
·最高位BCD加法器(add3)的进位输出作为整个模块的cout
·每个加法器产生的4位和组合成最终的16位sum
输出
测试用例的时序图:
4.6 100位二进制加法器
使用波纹进位(Ripple Carry)结构,该加法器将两个100位二进制数和一个进位输入相加,产生100位和和一个进位输出。
问题描述:
解决方案:
module top_module( input [99:0] a, b,input cin,output cout,output [99:0] sum );// 定义中间进位信号wire [100:0] carry;// 初始进位设为输入进位assign carry[0] = cin;// 生成100个全加器实例genvar i;generatefor (i = 0; i < 100; i = i + 1) begin : adder_chain// 每个全加器实例full_adder fa (.a(a[i]),.b(b[i]),.cin(carry[i]),.cout(carry[i+1]),.sum(sum[i]));endendgenerate// 最终进位输出assign cout = carry[100];endmodule// 全加器模块定义
module full_adder(input a, b, cin,output cout, sum
);assign sum = a ^ b ^ cin;assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
说明:
-
使用
generate
语句创建100个全加器实例的链式结构 -
定义101位宽的进位信号
carry
(包含初始进位和各级进位) -
每个全加器处理一位加法运算
-
进位信号从低位向高位传播(波纹进位)
相关文章:
【FPGA开发】利用状态机思想点亮流水灯/初学hdlbitsFPGA教程网站
一、状态机思想介绍 状态机是一种用于描述系统行为的形式化模型,它将系统抽象为有限的状态,并通过状态转移来响应外部输入或事件。其核心思想是:系统在任何时刻只处于一个确定的状态,且在不同状态之间按规则切换。状态机是处理明…...
洛谷 P3214 [HNOI2011] 卡农
题目传送门 前言 再次败在 d p dp dp 手下,但是数据范围这么小应该是可以看出是 d p dp dp 的(毕竟对于其他组合数的问题数据范围都是 1 0 9 10^9 109 起步)。 思路 题意简化 现有 1 , 2 , 3 , . . . , n − 1 , n 1, 2, 3, ... , n -…...
智能体和RPA都需要程序思维,如何使用影刀的变量?
欢迎来到涛涛聊AI, 不管AI还是RPA,都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型,可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值,会根据不同的类型设置…...
使用OpenFeign实现服务远程调用
在微服务架构中,由于业务功能的分工不同,我们把项目拆分为多个独立的服务,并常常将其部署在不同的服务器上,这个时候如果服务A的某个功能需要借助服务B来实现,那么这个时候如何去调用就成了问题,目前有一种…...
【移动计算】:AndroidStudio安装和项目搭建【2019:版本3.5.2】
文章目录 1. 下载安装包2. 安装包安装2.1 运行完exe进行安装选择Cancel: Unable SdkInstall Type选择Custom可以选择更新最新版本:这里不选择点击Next勾选 Android Sdk Platform API 虚拟设备选项显示已安装否则也需要勾选设置自定义安装地址:…...
泡棉压缩对显示模组漏光的定位分析及论述
■背景 液晶LCD受到外力或者挤压后,比较容易出现漏光现象即显示mura。一般从结构设计的角度会做如下措施进行整改 1>控制背光和上铁框平整度 ; 2>合理设计液晶模组的厚度和边框大小 ; 3>承载液晶面板的泡棉选取 ; 4>FPC单双层区的设计 ; 5>合理…...
当AI助理接管云计算-走向智能运维的新时代
目录 时代背景 AI在云计算运维上的帮助 新时代产物:WatchAlert 新时代思考 时代背景 代理人工智能:自主决策的未来--Gartner2025十大顶级科技预测第一名 Gartner将代理人工智能列为2025年的顶级技术趋势。该技术通过快速分析用于药物发现的海量数据…...
Day2:前端项目uniapp壁纸实战
先来做一个轮番图。 效果如下: common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...
使用人工智能大模型DeepSeek,如何进行论文润色和去重?
今天我们学习人工智能,如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色,通过提问,我们了解了老师写论文润色的步骤和建议。润色的…...
为招聘推荐系统进行相应修改的 Python 实现方案(含协同过滤推荐算法)
下面是为招聘推荐系统进行相应修改的 Python 实现方案。首先是创建数据分析看板,这里借助 Streamlit 库来实现可视化;其次是将协同过滤推荐算法和其他算法(这里采用基于内容的推荐算法)结合,以此提升推荐效果。 impor…...
Spring Boot中自定义注解的创建与使用
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
算法思想之双指针(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之双指针二) 发布时间:2025.4.5 隶属专栏:算法 目录 双指针算法介绍对撞指针:快慢指针: 例题有效三角形的个数题目链接题目描述算法思路代码实现 查找总价格为…...
MySQL基础 [一] - 数据库基础
目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢? 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…...
智能合约的法律挑战与解决之道:技术与法律的交融
智能合约的法律挑战与解决之道:技术与法律的交融 智能合约的诞生,为区块链技术的应用打开了新的大门。从简单的自动化交易到复杂的去中心化自治组织(DAO),智能合约正在推动全球经济迈向去信任化的新时代。然而&#x…...
MySQL基础 [一] - Ubuntu版本安装
目录 预安装 先查看自己操作系统的版本 添加MySQL APT下载源 下载 安装 正式安装 查看MySQL状态 打开MySQL 预安装 先查看自己操作系统的版本 lsb_release -a 添加MySQL APT下载源 下载 下载发布包 下载地址 : https://dev.mysql.com/downloads/repo/apt/ 这里下…...
cursor机器码重置
1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor,ctrlshiftp ,输入fake,点击确定...
深度学习的疑问--综合【2】:像CNN,GNN,transformer等这些模型都是用于提取特征,然后经过全连接层实现分类的吗?
总结: CNN,GNN,transformer等这些模型都是用于提取特征;FC、MLP等用于实现分类,MLP即是多个FC组成的。 是的,从高层次来看,CNN(卷积神经网络)、GNN(图神经网络…...
基于编程的运输设备管理系统设计(vue+springboot+ssm+mysql8.x)
基于编程的运输设备管理系统设计(vuespringbootssmmysql8.x) 运输设备信息管理系统是一个全面的设备管理平台,旨在优化设备管理流程,提高运输效率。系统提供登录入口,确保只有授权用户可以访问。个人中心让用户可以查…...
SpringBoot整合MyBatis
一、SpringBoot整合MyBatis 步骤1:创建新模块,选择Spring初始化,并配置模块相关基础信息 步骤2:选择当前模块需要使用的技术集(MyBatis、MySQL) 步骤3:设置数据源参数 spring:datasource:dr…...
kali——masscan
目录 前言 使用方法 前言 Masscan 是一款快速的端口扫描工具,在 Kali Linux 系统中常被用于网络安全评估和渗透测试。 使用方法 对单个IP进行端口扫描: masscan -p11-65535 192.168.238.131 扫描指定端口: masscan -p80,22 192.168.238.131…...
数字化转型中的开源AI智能客服与S2B2C商城小程序的融合创新
摘要 数字经济时代,企业需通过技术重构用户交互与供应链体系。本文以“开源AI智能客服”“AI智能名片”及“S2B2C商城小程序”为核心,研究三者如何通过技术协同与场景化应用实现企业营销、客户服务与供应链管理的智能化升级。通过案例分析、技术架构设…...
2-Docker常用命令
1. Docker 帮助启动类命令 1.1 启动 docker: systemctl start docker [rootlocalhost ~]# systemctl start docker1.2 停止 docker: systemctl stop docker [rootlocalhost ~]# systemctl stop docke1.3 重启 docker: systemctl restart d…...
理解OSPF 特殊区域NSSA和各类LSA特点
本文基于上文 理解OSPF Stub区域和各类LSA特点 在理解了Stub区域之后,我们再来理解一下NSSA区域,NSSA区域用于需要引入少量外部路由,同时又需要保持Stub区域特性的情况 一、 网络总拓扑图 我们在R1上配置黑洞路由,来模拟NSSA区域…...
Chapter01_绪论
文章目录 数字图像处理导论⭐图像的分类数字图像处理的概念(狭义)⭐数字图像处理的基本特征图像分析 ⭐数字图像处理的组成⭐数字图像处理研究的基本内容 数字图像处理导论 ⭐图像的分类 模拟图像:二维空间和亮度值都是连续(值&a…...
SDL显示YUV视频
文章目录 1. **宏定义和初始化**2. **全局变量**3. **refresh_video_timer 函数**4. **WinMain 函数**主要功能及工作流程:总结: 1. 宏定义和初始化 #define REFRESH_EVENT (SDL_USEREVENT 1) // 请求画面刷新事件 #define QUIT_EVENT (SDL…...
频域滤波函数 To 空域冲激响应函数
从频域滤波函数 H ( u , v ) H(u, v) H(u,v)到空域冲激响应函数 h ( x , y ) h(x, y) h(x,y)的变换。 不是冈萨雷斯这么简单的IDFT,有两次移位。这么费劲是因为DFT定义在第一象限。而且要求滤波器的尺寸为奇数,零的个数没有影响。 逆中心移位变换&…...
【C++】C++11<包装器没写>
文章目录 一、初始化列表的统一1.列表初始化2.initializer_list 二、声明1.auto2.decltype3.nullptr 三、范围for四、智能指针五、STL中的变化1.新容器arrayforward_list 2.接口 六、右值引用1.左值引用和右值引用2.右值引用的使用场景和意义3.左值引用和右值引用的价值和场景4…...
《如何避免虚无》速读笔记
文章目录 书籍信息概览躺派(出世)卷派(入世)虚无篇:直面虚无自我篇:认识自我孤独篇:应对孤独幸福篇:追寻幸福超越篇:超越自我 书籍信息 书名:《如何避免虚无…...
【微机及接口技术】- 第四章 内部存储器及其接口(中)
文章目录 第三节 半导体存储器与CPU的连接一、存储芯片与CPU连接中应关注的问题二、存储器扩展1. 位扩展:2. 字扩展3. 字位扩展 三、实现片选控制的方法1. 全译码法2. 部分译码法3. 线选法 第三节 半导体存储器与CPU的连接 一、存储芯片与CPU连接中应关注的问题 C…...
Mysql 数据库下载安装
安装准备 步骤1:输入WindowsMysql下载地址:https://dev.mysql.com/downloads/,选择MySQL Installer for Windows。 步骤2:下载MySQL安装文件 mysql-install-community-8.0.22.0.msi 步骤3:登录MySQL, 如…...
蓝桥杯刷题笔记
奇怪的捐赠 #include <cstdio> #include <iostream> #include <cmath> using namespace std; int main(){// 初始化变量num为1000000,代表总金额为100万元int num 1000000;// 初始化变量cnt为0,用于记录最终划分的份数int cnt 0;//…...
数仓开发团队日常1
第一章:数据的召唤 2005年7月18日,星期一,上午8:30 城市商业银行总行大楼 盛夏的阳光透过高耸的银行大楼玻璃幕墙,在大理石地面上投下斑驳的光影。李明远站在城市商业银行总行大厦前,抬头望着这座在城市金融区并不算高的建筑,却感到一种莫名的压迫感。他整了整领带,深…...
Pgvector的安装
Pgvector的安装 向量化数据的存储,可以为 PostgreSQL 安装 vector 扩展来存储向量化数据 注意:在安装vector扩展之前,请先安装Postgres数据库 vector 扩展的步骤 1、下载vs_BuildTools 下载地址: https://visualstudio.microso…...
学习笔记—C++—入门基础()
目录 C介绍 参考文档 C第一个程序 命名空间namespace namespace的价值 namespace的定义 namespace使用 指定命名空间访问 using将命名空间中某个成员展开 展开命名空间中全部成员 输入和输出 缺省参数 函数重载 引用 引用的概念 应用 const引用 指针和引用的关…...
Pytorch实现之利用深度残差GAN做运动图像的去模糊
简介 简介:采用类似U-Net的解码编码的结构,结合10层的残差连接结构作为生成器,改进PatchGAN得到更大的感受野来作为鉴别器。生成器的损失为内容损失,鉴别器的损失为WGAN-GP损失。大家可以尝试这个模型来解决运动图像的去模糊化。 论文题目:基于深度残差生成对抗网络的运…...
[Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集
[Windows] XHS-Downloader 链接:https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款开源免费的小红书内容下载工具,支持无水印视频 / 图文提取、多链接批量处理及账号作品采集。其核心优势包括: 全平台…...
从零构建大语言模型全栈开发指南:附录与资源-2.数据集大全-公开语料库、多模态数据集与领域专用数据源
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录与资源-2. 数据集大全:公开语料库、多模态数据集与领域专用数据源一、公开语料库:通用语言模型的基石1.1 主流文本语料库1.2 预处理工具与策略二、多模态数据集:跨模态理解的桥梁2.1 视觉-语言数…...
SDL多线程编程
文章目录 1. SDL 线程基础2. 线程同步3. 线程池4. 注意事项5. 示例:在多个线程中进行图形渲染和输入处理总结在 SDL(Simple DirectMedia Layer)中,多线程编程通常用于提高应用程序的响应性和性能,尤其是在需要同时处理多个任务的场景中,例如渲染、输入处理和音频等。SDL …...
LINUX 4 tar -zcvf -jcvf -Jcvf -tf -uf
cp -r mv: 1.移动文件到目录 2.文件改名 3.目录改名 s 上面是打包 下面是打包并压缩...
STL剖析
1. vector 是一个封装了动态大小数组的顺序容器;数组内容器严格按照线性顺序排序,支持随机访问,因此提供随机访问指针,例如vector::iterator ivite; 并且为了降低空间配置得速度成本,vector实际分配大小要比需求大一点…...
【数据集】Romanov数据集
1. 数据集背景 名称:Romanov 单细胞转录组数据集 来源:Romanov et al., Cell Reports, 2017 原始论文标题: "Molecular interrogation of hypothalamic organization reveals distinct dopamine neuronal subtypes" GEO Accession…...
Baklib企业CMS的核心要素是什么?
企业CMS工作流协同创新 现代企业内容管理的核心挑战在于多角色协作效率与流程可视化的平衡。以Baklib为代表的协同型CMS,通过动态权限分级架构与实时版本追踪技术,构建了从内容草拟、多级审批到版本发布的完整闭环。系统支持多人同时编辑功能࿰…...
JavaWeb 课堂笔记 —— 02 JavaScript
本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...
Kafka 回溯消费
Kafka 回溯消费 是一个非常实用的能力,尤其当你: 消费端挂掉/处理异常消息数据出错/业务需要重跑要对某一段历史数据“重新拉取并消费”日志审计/数据补偿/BI分析 下面我来详细讲讲 Kafka 如何实现“回溯消费”,并配上使用方式、注意事项 &…...
LeetCode算法题(Go语言实现)_32
题目 在一个大小为 n 且 n 为 偶数 的链表中,对于 0 < i < (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n-1-i) 个节点 。 比方说,n 4 那么节点 0 是节点 3 的孪生节点,节点 1 是…...
CSS Text(文本)学习笔记
一、文本格式化 CSS 提供了多种文本格式化属性,用于控制文本的外观和布局。这些属性可以改变文本的颜色、对齐方式、修饰、大小写转换、缩进等。 1. 文本颜色 CSS 的 color 属性用于设置文本的颜色。颜色可以通过以下方式指定: 十六进制值:…...
MySQL篇(五)MySQL主从同步原理深度剖析
MySQL篇(五)MySQL主从同步原理深度剖析 MySQL篇(五)MySQL主从同步原理深度剖析一、引言二、MySQL主从同步基础概念主库(Master)从库(Slave)二进制日志(Binary Log&#x…...
AGI大模型(10):prompt逆向-巧借prompt
1 提示词逆向 明确逆向提示词⼯程概念 我们可以给ChatGPT提供⼀个简洁的提示词,让它能够更准确地理解我们所讨论的“逆向提示词⼯程”是什么意思,并通过这个思考过程,帮它将相关知识集中起来,进⽽构建⼀个专业的知识领域 提示词:请你举⼀个简单的例⼦,解释⼀下逆向pro…...
【问题记录】C语言一个程序bug定位记录?(定义指针数组忘记[])
背景 写了个小的程序,一直段错误。特此记录 代码 主要代码 int main_mytest(int argc, char *argv) {char *argv_my {"echo","/proc/cpuinfo",};main_mytest(sizeof(argv_my)/sizeof(char*), argv_my); }int main_mytest(int argc, char *a…...
Systemd构建自动化备份服务与外部存储管理
实训背景 你是一家数据公司的系统管理员,需设计一套自动化备份系统,满足以下需求: 定期备份:每周日凌晨1点将 /data 目录压缩备份到 /backups。外部存储挂载:插入USB设备时自动挂载到 /mnt/usb,并触发增量…...