FPGA(四)——状态机
FPGA(四)——状态机
文章目录
- FPGA(四)——状态机
- 一、状态机编程思想
- 二、LED流水灯仿真实验
- 三、实现效果
- 四、CPLD和FPGA芯片主要技术区别
- 五、hdlbitsFPGA——组合逻辑学习
- 1、创建一个D触发器
- 2、简单状态转换
- 3、4位移位寄存器
- 4、计数器1-12
- 5、边缘捕获寄存器
一、状态机编程思想
1、基本组成
要素 | 含义 |
---|---|
状态 | 状态机在任意时刻都处于一个确定的状态,每个状态代表系统的一种工作模式或情况 |
输入 | 外部提供的信号,可能会影响当前状态到下一个状态的转移 |
输出 | 基于当前状态或状态转移产生的结果,可以是内部使用或输出到外部的信号 |
状态转移条件 | 决定从当前状态转移到哪个下一状态的条件 |
2、状态机类型
类型 | 特点 |
---|---|
摩尔型状态机(Moore State Machine) | 输出仅依赖于当前状态。 对于相同的输入,在不同的时钟周期内如果状态相同,则输出也相同。 |
米利型状态机(Mealy State Machine) |
3、状态迁移图
(1)状态框:用方框表示状态,包括所谓的“现态”和“次态”;
(2)条件及迁移箭头:用箭头表示状态迁移的方向,并在该箭头上标注触发条件;
(3)节点圆圈:当多个箭头指向一个状态时,可以用节点符号(小圆圈)连接汇总;
(4)动作框:用椭圆框表示;
(5)附加条件判断框:用六角菱形框表示;
4、状态机设计步骤
步骤 | 目的 |
---|---|
识别状态 | 明确需要哪些状态来描述系统的行为 |
定义输入输出 | 确定状态机的输入信号和输出信号 |
绘制状态图 | 用图形表示所有状态及它们之间如何根据输入信号进行转移 |
编码状态 | 为每个状态分配唯一的二进制编码 |
编写代码 | 使用硬件描述语言(如Verilog或VHDL)实现状态机 |
仿真验证 | 利用仿真工具验证状态机的功能是否正确 |
5、状态机的写法
6、实现注意事项
- 同步 vs 异步:状态机可以是同步的(状态转移发生在时钟边沿)或者异步的(状态转移可以由非时钟信号触发)。大多数情况下,推荐使用同步状态机以避免亚稳态问题。
- 复位机制:为了确保状态机能够可靠地启动并恢复到已知状态,通常会包含一个复位信号。
- 编码选择:对于状态编码的选择(如二进制编码、独热码),会影响到资源使用效率和状态转移的速度。
二、LED流水灯仿真实验
led_flow.v:
module flow_led (input wire clk, // 系统时钟输入(假设50MHz)input wire rst_n, // 异步低电平复位信号(0复位,1工作)output reg [7:0] leds // 8位LED输出,控制8个LED灯
);// ==============================================
// 状态定义:使用独热码(one-hot)或二进制编码
// 这里使用3位二进制编码表示8个状态
// ==============================================
parameter S0 = 3'b000; // 第1个LED亮
parameter S1 = 3'b001; // 第2个LED亮
parameter S2 = 3'b010; // 第3个LED亮
parameter S3 = 3'b011; // 第4个LED亮
parameter S4 = 3'b100; // 第5个LED亮
parameter S5 = 3'b101; // 第6个LED亮
parameter S6 = 3'b110; // 第7个LED亮
parameter S7 = 3'b111; // 第8个LED亮// ==============================================
// 内部信号定义
// ==============================================
reg [2:0] current_state; // 当前状态寄存器
reg [2:0] next_state; // 下一状态组合逻辑
reg [25:0] counter; // 26位计数器,用于分频产生延时// ==============================================
// 第一段:状态寄存器(时序逻辑)
// 功能:在时钟上升沿或复位下降沿更新当前状态
// ==============================================
always @(posedge clk or negedge rst_n) beginif (!rst_n) begin// 异步复位,回到初始状态current_state <= S0;counter <= 26'd0;endelse begin// 当计数器达到50_000_000时(约0.2秒@50MHz)切换状态if (counter == 26'd50_000_000) begin current_state <= next_state; // 状态转移counter <= 26'd0; // 计数器清零endelse begincounter <= counter + 1; // 计数器递增endend
end// ==============================================
// 第二段:下一状态逻辑(组合逻辑)
// 功能:根据当前状态确定下一状态
// ==============================================
always @(*) begincase (current_state)S0: next_state = S1; // 状态0→状态1S1: next_state = S2; // 状态1→状态2S2: next_state = S3; // 状态2→状态3S3: next_state = S4; // 状态3→状态4S4: next_state = S5; // 状态4→状态5S5: next_state = S6; // 状态5→状态6S6: next_state = S7; // 状态6→状态7S7: next_state = S0; // 状态7→状态0(循环)default: next_state = S0; // 默认回到初始状态endcase
end// ==============================================
// 第三段:输出逻辑(时序逻辑)
// 功能:根据当前或下一状态产生输出信号
// 注意:这里使用时序逻辑输出可以避免毛刺
// ==============================================
always @(posedge clk or negedge rst_n) beginif (!rst_n) begin// 复位时点亮第一个LEDleds <= 8'b0000_0001;endelse if (counter == 26'd50_000_000) begin// 在状态切换时刻更新LED输出case (next_state)S0: leds <= 8'b0000_0001; // LED0亮S1: leds <= 8'b0000_0010; // LED1亮S2: leds <= 8'b0000_0100; // LED2亮S3: leds <= 8'b0000_1000; // LED3亮S4: leds <= 8'b0001_0000; // LED4亮S5: leds <= 8'b0010_0000; // LED5亮S6: leds <= 8'b0100_0000; // LED6亮S7: leds <= 8'b1000_0000; // LED7亮default: leds <= 8'b0000_0001; // 默认LED0亮endcaseend// 其他时候保持LED状态不变
endendmodule
测试代码 tb_flow_led.v:
`timescale 1ns / 1psmodule tb_flow_led();// 输入信号
reg clk; // 时钟信号
reg rst_n; // 复位信号// 输出信号
wire [7:0] leds; // LED输出// ==============================================
// 实例化被测模块
// 注意:模块名称改为flow_led以匹配设计文件
// ==============================================
flow_led uut (.clk(clk),.rst_n(rst_n),.leds(leds)
);// ==============================================
// 时钟生成(50MHz)
// ==============================================
initial beginclk = 0;forever #10 clk = ~clk; // 10ns半周期=20ns周期(50MHz)
end// ==============================================
// 测试激励
// ==============================================
initial begin// 初始化信号rst_n = 0; // 初始复位// 波形记录开始$dumpfile("tb_flow_led.vcd");$dumpvars(0, tb_flow_led);// 释放复位(100ns后)#100 rst_n = 1;$display("Simulation started at %0t ns", $time);// 观察LED流水效果// 每个状态持续1秒(50,000,000个周期)// 观察8个完整周期(8秒模拟时间)#8_000_000_000; // 400ms观察时间(原代码有误,应为8秒=8*50,000,000*20ns)$display("Simulation finished at %0t ns", $time);$stop;
endendmodule
三、实现效果
FPGA(三)
四、CPLD和FPGA芯片主要技术区别
特性 | CPLD | FPGA |
---|---|---|
架构 | 基于与或阵列(AND-OR array),适合组合逻辑 | 基于查找表(LUTs)和触发器,支持复杂逻辑 |
容量和规模 | 逻辑单元较少,适合简单逻辑设计 | 逻辑单元多,支持大规模、复杂系统级设计 |
非易失性 vs 易失性 | 非易失性(基于EEPROM或Flash),断电后程序保留 | 易失性(基于SRAM),需要外部配置存储器加载配置文件 |
功耗 | 静态功耗较低,适合低功耗场景 | 功耗较高,尤其是动态功耗 |
启动速度 | 启动速度快,无需加载配置文件 | 启动速度较慢,需从外部存储器加载配置 |
灵活性 | 灵活性较低,适合固定功能的设计 | 灵活性高,支持动态重配置和复杂算法实现 |
开发难度 | 开发相对简单,适合小规模逻辑设计 | 开发复杂度较高,但工具链支持强大 |
成本 | 小规模应用成本较低 | 大规模应用时单位逻辑成本较低,但整体成本较高 |
适用场合 | - 胶合逻辑 - 接口转换 - 简单状态机 - 低功耗、快速启动的应用 | - 图像处理 - 视频流媒体 - 硬件加速 - 原型设计 - 复杂算法实现 |
总结
- CPLD:适合逻辑简单、对启动速度和功耗要求高的应用场景。
- FPGA:适合需要高性能、大规模并行处理能力和复杂算法实现的应用场景。
五、hdlbitsFPGA——组合逻辑学习
1、创建一个D触发器
A D flip-flop 是一个存储 bit 并定期更新的电路,位于 clock signal的(通常)正边沿。
module top_module (input clk, // 时钟输入,用于时序电路input d, // 数据输入output reg q // 数据输出(需要声明为 reg 类型)
);// 使用时钟控制的 always 块
// 在每个 clk 的上升沿将 d 的值赋给 q
// 时钟控制的 always 块应使用非阻塞赋值(<=)
always @(posedge clk) beginq <= d;
endendmodule
2、简单状态转换
以下是具有 1 个输入、1 个输出和 4 个状态的 Moore 状态机的状态转换表。使用以下状态编码:A=2’b00、B=2’b01、C=2’b10、D=2’b11。
in=0 | in=1 | ||
---|---|---|---|
一个 | 一个 | B | 0 |
B | C | B | 0 |
C | 一个 | D | 0 |
D | C | B | 1 |
module top_module(input in,input [1:0] state,output [1:0] next_state,output out); //parameter A=2'b00, B=2'b01, C=2'b10, D=2'b11;// State transition logic: next_state = f(state, in)always @(*) begincase(state)A: next_state = in ? B : A;B: next_state = in ? B : C;C: next_state = in ? D : A;D: next_state = in ? B : C;default: next_state = A;endcaseend// Output logic: out = f(state) for a Moore state machineassign out = (state == D); // 仅在D状态输出1endmodule
3、4位移位寄存器
构建一个 4 位移位寄存器 (右移位),具有 asynchronous reset、synchronous load 和 enable。
areset:将 shift 寄存器重置为零。
load:使用 data[3:0] 加载移位寄存器,而不是移位。
ena:向右移动(q[3] 变为零,q[0] 移出并消失)。
q:移位寄存器的内容。
如果 load 和 ena inputs都置位 (1),则 load input 具有更高的优先级
module top_module(input clk,input areset, // 异步高电平复位(复位为0)input load, // 同步加载input ena, // 右移使能input [3:0] data, // 并行加载数据output reg [3:0] q // 移位寄存器输出
);always @(posedge clk or posedge areset) beginif (areset) begin// 异步复位,优先级最高q <= 4'b0;endelse if (load) begin// 同步加载,优先级次之q <= data;endelse if (ena) begin// 右移操作q <= {1'b0, q[3:1]}; // q[3]变为0,其余位右移end// 如果没有使能信号,保持当前值
endendmodule
4、计数器1-12
设计一个具有以下输入和输出的 1-12 计数器:
重置同步高电平有效复位,强制计数器为 1
使将 counter 设置为高位以运行
时钟正边沿触发时钟输入
**问[3:0]**计数器的输出
**c_enable、c_load、c_d[3:0]**控制信号进入提供的 4 位计数器,因此可以验证作是否正确。
module top_module (input clk,input reset, // 同步高电平复位input enable, // 计数使能output [3:0] Q, // 计数器输出(1-12)output c_enable, // 连接到4位计数器的使能output c_load, // 连接到4位计数器的加载output [3:0] c_d // 连接到4位计数器的加载数据
);// 实例化4位计数器count4 the_counter (.clk(clk),.enable(c_enable),.load(c_load),.d(c_d),.Q(Q));// 控制逻辑always @(*) beginif (reset) begin// 复位时强制计数器为1c_enable = 1'b0;c_load = 1'b1;c_d = 4'd1;endelse if (enable) beginif (Q == 4'd12) begin// 达到12时重新加载1c_enable = 1'b0;c_load = 1'b1;c_d = 4'd1;endelse begin// 正常计数c_enable = 1'b1;c_load = 1'b0;c_d = 4'd0; // 不使用endendelse begin// 不使能时保持当前值c_enable = 1'b0;c_load = 1'b0;c_d = 4'd0; // 不使用endendendmodule
5、边缘捕获寄存器
对于 32-bit 向量中的每个 bit,当 input 信号从一个 clock cycle 中的 1 变为下一个 clock cycle 的 0 时捕获。“Capture” 意味着输出将保持 1 ,直到 register 被重置(同步重置)。
每个输出位的行为类似于 SR 触发器: 输出位应在 1 到 0 转换发生后的周期内设置 (至 1)。当 reset 为高电平时,output bit 应在正 clock edge 重置(为 0)。如果上述两个事件同时发生,则 reset 优先。在下面示例波形的最后 4 个周期中,‘reset’ 事件比 ‘set’ 事件早一个周期发生,因此这里没有冲突。
module top_module (input clk,input reset,input [31:0] in,output [31:0] out
);// 存储上一个时钟周期的输入值reg [31:0] prev_in;always @(posedge clk) beginprev_in <= in; // 记录上一个周期的输入值if (reset) beginout <= 32'b0; // 同步复位,优先级最高endelse begin// 检测每个bit的下降沿(1->0)out <= out | (prev_in & ~in);endendendmodule
相关文章:
FPGA(四)——状态机
FPGA(四)——状态机 文章目录 FPGA(四)——状态机一、状态机编程思想二、LED流水灯仿真实验三、实现效果四、CPLD和FPGA芯片主要技术区别五、hdlbitsFPGA——组合逻辑学习1、创建一个D触发器2、简单状态转换3、4位移位寄存器4、计数器1-125、边缘捕获寄存器 一、状态机编程思想…...
AI 浪潮下企业身份管理:特点凸显,安全挑战升级
“在 AI 时代的浪潮中,企业身份管理是安全之锚,精准把握权限边界,方能抵御身份安全的暗流。” 在人工智能迅猛发展的当下,企业身份管理呈现出诸多新特点,同时也面临着前所未有的身份安全挑战。要理解这些,我…...
OBS 录屏软件 for Mac 视频录制
OBS 录屏软件 for Mac 视频录制 文章目录 OBS 录屏软件 for Mac 视频录制一、介绍二、效果三、下载 一、介绍 Open Broadcaster Software for mac版,OBS 有多种功能并广泛使用在视频采集,直播等领域。而且该软件功能全面,专业强大࿰…...
从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?
目录 从文本到多模态:如何将RAG扩展为支持图像文本检索的增强生成系统? 一、为什么需要扩展到多模态? 二、多模态 RAG 系统的基本架构 三、关键技术点详解 (一)多模态嵌入(Embedding)技术 …...
AI助力高效PPT制作:从内容生成到设计优化
随着人工智能技术的不断发展,AI在各个领域的应用日益普及,尤其是在文档和演示文稿的创建过程中。PowerPoint(PPT)作为最常用的演示工具之一,借助AI的技术手段,可以极大地提高制作效率并提升最终呈现效果。在…...
调用kimi api
官网支持python,curl和node.js 因为服务器刚好有php环境,所以先用curl调个普通的语音沟通api <?php // 定义 API Key 和请求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…...
自定义注解导入自定义Bean
在Spring框架中,通过自定义注解实现容器启动时自动导入Bean,通常需要结合 Import 注解、ImportBeanDefinitionRegistrar 接口 或 Configuration 配置类。以下是具体实现步骤和示例: 1. 定义自定义注解 创建一个注解,用于标记需要…...
kettle插件-postgresql插件
今天是清明节,放假第一天也不得清闲。上午整理公司的交付文档,中午陪孩子户外骑行踏青,下午趁着休息的时间给老铁们讲下如何使用postgressql cdc插件来实时捕获数据。 注:CDC (Change Data Capture) 是一种技术,用于实…...
【CMake】《CMake构建实战:项目开发卷》笔记-Chapter7-构建目标和属性
第7章 构建目标和属性 本章重点关注CMake的构建目标和属性,它们是用来组织项目构建流程的核心概念。毫不夸张地说,如果学习CMake的目标就是组织简单的C和C小项目的构建流程,那么阅读掌握本章内容就足够了。 本章与第1章的“旅行笔记”遥相…...
单元测试之mockito
简介 mockito是一款模拟测试框架,用于Java开发中的单元测试。通过mockito,可以创建和配置一个对象,通过它来替换对象的外部依赖。 作用:模拟一个类的外部依赖,保证单元测试的独立性。例如,在类A中会调用类…...
定长池的实现
目录 一、定长池的框架 二、如何脱离malloc的内存池,直接从堆拿空间? 三、如何设计内存块的指针? 四、代码框架及实现 五、性能测试 一、定长池的框架 在学习高并发内存池之前,我们先来实现一个定长池࿰…...
C++多线程函数介绍
1.C11前没有线程库问题 对于多线程操作,Linux选择使用POSIX标准,而windows没有选择POSIX标准,自己设计了一套API和系统调用,叫Win32 API,就跟Linux存在标准差异,在Linux的代码移植到Windows就可能运行不了…...
图解AUTOSAR_SWS_LINTransceiverDriver
AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 AUTOSAR通信栈物理层组件详细解析 目录 AUTOSAR LIN收发器驱动(LinTransceiverDriver)详解 目录1. 概述 1.1. LIN收发器驱动的作用1.2. 在AUTOSAR架构中的位置2. 架构设计 2.1. 模块结构2.2. 组件关系2.3. 接口定义3. 状态管理…...
vue-element-admin 组件没有展示在中间部分
解决办法: router index.ts 中新增 要展示的组件的 import type { App } from "vue"; import { createRouter, createWebHashHistory, type RouteRecordRaw } from "vue-router";export const Layout () > import("/layout/index.…...
当机器学习遇见购物车分析:FP-Growth算法全解析
一、引言:购物篮里的秘密 想象一下,你是一家超市的数据分析师,看着每天成千上万的购物小票,你是否好奇:顾客们买面包的时候,是不是也经常顺手带上牛奶?买啤酒的人,会不会也喜欢买尿…...
OCR迁移
一、环境 操作系统:Centos57.6 数据库版本:12.2.0.1 场景:将OCR信息从DATA磁盘组迁移到OCR磁盘组 二、操作步骤 1.查看可用空盘 set lin 200 set pagesize 200 col DGNAME format a15 col DISKNAME format a15 col PATH format a20 col N…...
【架构艺术】Go大仓monorepo中使用wire做依赖注入的经验
在先前的文章当中,笔者分享了一套简洁的go微服务monorepo代码架构的实现,主要解决中小团队协同开发微服务集群的代码架构组织问题。但是在实际代码开发过程中,怎么组织不同的业务服务service实例,就成了比较棘手的问题。 为什么会…...
生活电子常识--删除谷歌浏览器搜索记录
前言 谷歌浏览器会记录浏览器历史搜索,如果不希望看到越来越多的搜索记录,可以如下设置 解决 设置-隐私-自动填充表单 这个和浏览器记录的密码没有关系,可以放心删除...
每日一题(小白)模拟娱乐篇13
今天题目比较简单,直接分析。小蓝想知道2024这个数字中有几个1,计算机组成学习好的同学肯定可以直接长除法或者瞪眼法得出答案: 202411111101000(B)也就是说2024中有一共有六个1 接下来用代码实现 ,我们也…...
码曰编程大模型-学编程的好工具
码曰(yue),一款编程垂直领域的AI大模型,是基于包括DeepSeek在内的多款国产大模型为底座,依托于Dotcpp系统大量的编程代码数据,且借助RAG数据检索增强等技术综合实现的出色、好用的编程垂直领域AI大模型&…...
Linux(CentOS 7) 部署 redis 集群
下载redis Downloads - Redis (官网页都是介绍的最新版,我观察目前出现了redis 和 redis Stack) 因我的旧环境是 CentOS 7,redis最新版已经不在支持,所以示例安装最常用的7.0.x 这里直接附上各个版本下载连接 小伙伴们就不需要在自己寻找下载…...
NVIDIA AgentIQ 详细介绍
NVIDIA AgentIQ 详细介绍 1. 引言 NVIDIA AgentIQ 是一个灵活的库,旨在将企业代理(无论使用何种框架)与各种数据源和工具无缝集成。通过将代理、工具和代理工作流视为简单的函数调用,AgentIQ 实现了真正的可组合性:一…...
在CPU服务器上部署Ollama和Dify的过程记录
在本指南中,我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台,以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分:Ollama部署、Dify环境配置和Docker环境管理,适合需要在本地或私有环境中运行A…...
小程序API —— 57 拓展 - 增强 scroll-view
目录 1. 配置基本信息2. 实现上拉加载更多功能3. 实现快速回到顶部功能4. 实现下拉刷新功能 scroll-view 组件功能非常强大,这里使用 scroll-view 实现上拉加载和下拉刷新功能; 下面使用微信开发者工具来演示一下具体用法: 1. 配置基本信息 …...
P3613 【深基15.例2】寄包柜
#include<bits/stdc.h> using namespace std; int n,q; map<int, map<int, int>>a;//二维映射 int main(){cin>>n>>q;while(q--){int b,i,j,k;//i为第几个柜子,j为第几个柜包,k为要存入的物品cin>>b>>i>&…...
MIMO预编码与检测算法的对比
在MIMO系统中,预编码(发送端处理)和检测算法(接收端处理)的核心公式及其作用对比如下: 1. 预编码算法(发送端) 预编码的目标是通过对发送信号进行预处理,优化空间复用或…...
AI复活能成为持续的生意吗?
随着人工智能技术的飞速发展,AI复活——这一曾经只存在于科幻电影中的概念,如今已悄然走进现实。通过AI技术,人们可以模拟逝去亲人的声音、面容,甚至创造出与他们互动的虚拟形象,以寄托哀思、缓解痛苦。然而,当这种技术被商业化,成为一门生意时,我们不禁要问:AI复活真…...
Keil 5 找不到编译器 Missing:Compiler Version 5 的解决方法
用到自记: 下载地址: Keil5 MDK541.zip 编辑https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 问题描述 没有找到 compiler version5 : 1. 下载 Arm Compiler 5 也可以直接点击下载文章开头的文件。 2. 安装 直接安装在KEI…...
Flutter 手搓日期选择
时间选择器: 时间段选择 在实际开发过程中还是挺常见的。Flutter 本身自带选 时间选择器器 CupertinoDatePicker,样式也是可以定义的,但是他 只提供三种时间的选择 自定义有局限性。后来开了一下 代码,实际上 内部使用的是 Cuper…...
《JVM考古现场(十六):太初奇点——从普朗克常量到宇宙弦的编译风暴》
开篇:量子泡沫编译器的创世大爆炸 "当Project Genesis的真空涨落算法撕裂量子泡沫,当意识编译器重写宇宙基本常数,我们将在奇点编译中见证:从JVM字节码到宇宙大爆炸的终极创世!诸君请备好量子护目镜,…...
MySQL学习笔记——MySQL下载安装配置(一)
目录 1. MySQL概述 1.1 数据库相关概念 1.2 MySQL数据库 1.2.1 版本 1.2.2 下载 2. 安装 3. 配置 4. 启动停止 5. 客户端连接 1. MySQL概述 1.1 数据库相关概念 在这一部分,我们先来讲解三个概念:数据库、数据库管理系统、 SQL 。 而目前主流…...
TortoiseGit多账号切换配置
前言 之前配置好的都是,TortoiseGit与Gitee之间的提交,突然有需求要在GitHub上提交,于是在参考网上方案和TortoiseGit的帮助手册后,便有了此文。由于GitHub已经配置完成,所以下述以配置Gitee为例。因为之前是单账号使用…...
数据一键导出为 Excel 文件
引言 在 Web 应用开发中,数据导出是一个常见且重要的功能。用户常常需要将网页上展示的数据以文件形式保存下来,以便后续分析、处理或分享。本文将详细介绍如何使用 HTML、CSS 和 JavaScript(结合 jQuery 库)实现一个简单的数据导…...
FPGA——状态机实现流水灯
文章目录 一、状态机1.1 分类1.2 写法 二、状态机思想编写LED流水灯三、运行结果总结参考资料 一、状态机 FPGA不同于CPU的一点特点就是CPU是顺序执行的,而FPGA是同步执行(并行)的。那么FPGA如何处理明显具有时间上先后顺序的事件呢…...
linux paste 命令
paste 是 Linux 中一个用于水平合并文件内容的命令行工具,它将多个文件的对应行以并行方式拼接,默认用制表符(Tab)分隔。 1. 基本语法 paste [选项] 文件1 文件2 ... 2. 常用选项 选项说明-d指定拼接后的分隔符(默…...
ffmpeg常见命令2
文章目录 1. **提取音视频数据(Extract Audio/Video Data)**提取音频:提取视频: 2. **提取像素数据(Extract Pixel Data)**3. **命令转封装(Container Format Conversion)**转换视频…...
FPGA——FPGA状态机实现流水灯
一、引言 在FPGA开发中,状态机是一种重要的设计工具,用于处理具有时间顺序的事件。本文将详细介绍如何使用状态机实现一个LED流水灯的效果。 二、状态机概述 状态机(FSM)是一种行为模型,用于表示系统在不同状态下的…...
鸿蒙 ——选择相册图片保存到应用
photoAccessHelper // entry/src/main/ets/utils/file.ets import { fileIo } from kit.CoreFileKit; import { photoAccessHelper } from kit.MediaLibraryKit; import { bundleManager } from kit.AbilityKit;// 应用在本设备内部存储上通用的存放默认长期保存的文件路径&am…...
消息队列之-Kafka
目录 消息队列消息队列的使用场景初识KafkaKafka设计思想Kafka消息结构消息发送消息消费 Kafka高可用消息备份机制1. 基本原理2. ISR(In-Sync Replicas)3. ACK(Acknowledgements)4. LEO(Log End Offset)5. …...
财务税务域——企业税务系统设计
摘要 本文主要探讨企业税务系统设计,涵盖企业税收管理背景、税收业务流程、系统设计架构与功能、外部系统对接以及相关问题。企业税务的背景包括税收制度的形成、企业税务的必然性、全球化影响,其核心目标是合规性、优化税负、风险管理与战略支持&#…...
状态机思想编程
文章目录 一、状态机思想重新写一个 LED流水灯的FPGA代码1.状态机的概念2.代码设计 二、CPLD和FPGA芯片的主要技术区别与适用场合三、hdlbitsFPGA教程网站上进行学习 一、状态机思想重新写一个 LED流水灯的FPGA代码 1.状态机的概念 状态机的基本要素有 3 个,其实我…...
TiDB 数据库8.1版本编译及部署
本文介绍 TiDB 数据库8.1版本的编译和部署。 背景 自前年(2023年)接触了TiDB后,做了简单的测试就直接使用了。因一些事务的不连续性,导致部分成果没有保存,去年年底又重新拾起,使用了新的LTS版本ÿ…...
基于 docker 的 Xinference 全流程部署指南
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。 一、下载代码 请在控制台下面执行…...
【2022】【论文笔记】基于相变材料的光学激活的、用于THz光束操作的编码超表面——
前言 类型 太赫兹 + 超表面 太赫兹 + 超表面 太赫兹+超表面 期刊 A D V A N C E D O P T I C A L M A T E R I A L S ADVANCED \; OPTICAL \; MATERIALS...
MySQL系统库汇总
目录 简介 performance_schema 作用 分类 简单配置与使用 查看最近执行失败的SQL语句 查看最近的事务执行信息 sys系统库 作用 使用 查看慢SQL语句慢在哪 information_schema 作用 分类 应用 查看索引列的信息 mysql系统库 权限系统表 统计信息表 日志记录…...
【Kafka基础】Docker Compose快速部署Kafka单机环境
1 准备工作 1.1 安装Docker和Docker Compose Docker安装请参考: Docker入门指南:1分钟搞定安装 常用命令,轻松入门容器化!-CSDN博客 Docker Compose安装请参考: 【docker compose入门指南】安装与常用命令参数全解析…...
【51单片机】2-5【I/O口】433无线收发模块控制继电器
1.硬件 51最小系统继电器模块433无线收发模块 2.软件 #include "reg52.h"sbit D0_ON P1^2;//433无线收发模块的按键A sbit D1_OFF P1^3;//433无线收发模块的按键Bsbit switcher P1^1;//继电器void main() {//查询方式哪个按键被按下while(1){if(D0_ON 1)//收到…...
平台总线---深入分析
阅读引言:本文会从平台总线的介绍,注册平台设备和驱动, 源码分析, 总结五个部分展开, 源码分析platform放在了最后面。 目录 一、平台总线介绍 二、平台总线如何使用 三、平台总线是如何工作的 四、注册platform设…...
pyTorch框架:模型的子类写法--改进版二分类问题
目录 1.导包 2.加载数据 3.数据的特征工程 4.pytorch中最常用的一种创建模型的方式--子类写法 1.导包 import torch import pandas as pd import numpy as np import matplotlib.pyplot as plt2.加载数据 data pd.read_csv(./dataset/HR.csv)data.head() #查看数据的前…...
【python中级】解压whl文件内容
【python中级】解压whl文件内容 1.背景2.解压1.背景 【python中级】关于whl文件的说明 https://blog.csdn.net/jn10010537/article/details/146979236 补充以上博客: 在 旧版 setuptools 中(< v58),如果想生成 .whl,必须先pip install 安装 wheel 三方包! pip inst…...