当前位置: 首页 > news >正文

Verilog 语法 (一)

Verilog 是硬件描述语言,在编译下载到 FPGA 之后, FPGA 会生成电路,所以 Verilog 全部是并行处理与运行的;C 语言是软件语言,编译下载到单片机 /CPU 之后,还是软件指令,而不会根据你的代码生成相应的硬件电路,而单片机/CPU 处理软件指令需要取址、译码、执行,是串行执行的。 Verilog 和 C 的区别也是 FPGA 和单片机 /CPU 的区别,由于 FPGA 全部并行处理,所以处理速度非常快,这个是 FPGA 的最大优势,这一点是单片机 /CPU 替代不了的。
逻辑 0 :表示低电平,也就是对应我们电路的 GND
逻辑 1 :表示高电平,也就是对应我们电路的 VCC
逻辑 X :表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z :表示高阻态,外部没有激励信号是一个悬空状态。

有意义的名称

确保命名能够直观表达信号的用途和功能。例如,sum 应该表示一个和,cpu_addr 应该表示 CPU 的地址线。

下划线风格

使用下划线(_)来分隔不同的词。这样可以提高可读性,并避免单词混淆。例如,data_inaddress_outclk_50m 等。

前缀与后缀

时钟信号:如你所说,使用 clk_ 作为前缀,如 clk_50mclk_cpu

低电平信号:使用 _n 后缀标识低电平有效的信号,如 reset_nenable_n

有效信号:信号名可以使用 _valid 后缀,如 data_valid 表示数据有效信号。

使能信号:使用 _en 后缀,如 write_enread_en

统一缩写

使用标准和一致的缩写。例如,rst 一般表示复位信号,en 表示使能信号。

避免自定义缩写,除非它们能增加可读性且广泛被使用。

信号一致性

在同一个模块或不同模块中保持信号命名的一致性,尤其是在多层次设计中。例如,同一时钟信号可以保持命名为 clk_50m,而在模块中使用相同的名称。

在层次化的设计中,层级之间的信号可以有统一的命名规则,比如 top_clksubmodule_clk

避免保留字冲突

确保自定义的标识符与 Verilog 语言的保留字(如 if, else, module, input, output 等)不冲突。

如果有疑问,可以参考 Verilog 的保留字列表。

参数命名规范

参数使用全大写字母,如 SIZEWIDTHDEPTH,这可以让它们区别于信号名或变量。

如果参数有多个单词,可以使用下划线分隔,如 MAX_DEPTHADDR_WIDTH

模块名称和实例化命名

模块名通常采用首字母大写的驼峰命名法,如 DataProcessorControlUnit

实例化时,可以使用类似 data_processor_0control_unit_top 的命名方式,明确表示该实例的作用和层级。

信号类型和位宽标识

对于带宽的信号,可以在名称中包含位宽信息,如 data_in_8 表示 8 位数据输入。

对于多维信号(如多位总线或数组),可以使用带宽或索引信息,如 addr_bus[7:0]

Verilog 数字进制
格式包括二进制、八进制、十进制和十六进制,一般常用的为二进制、十进制和十六进制。
        二进制表示如下:4’b0101 表示 4 位二进制数字 0101
        十进制表示如下:4’d2 表示 4 位十进制数字 2 (二进制 0010 );
        十六进制表示如下:4’ha 表示 4 位十六进制数字 a (二进制 1010 ),十六进制的计数方式为 0 1 ,2…9, a b c d e f ,最大计数为 f f :十进制表示为 15 )。
        当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如 100 ,实际上表示的值为32’d100。
4'b0101    // 4 位二进制,表示 5 (十进制)
4'd2       // 4 位十进制,表示 2 (二进制 0010)
4'ha       // 4 位十六进制,表示 10 (十进制) -> 二进制 1010
32'd100    // 默认 32 位十进制,表示 100
8'o17      // 8 位八进制,表示 15 (十进制) -> 二进制 00001111
Verilog 的数据类型
        在 Verilog 语法中,主要有三大类数据类型,即寄存器类型、线网类型和参数类型。从名称中,我们可以看出,真正在数字电路中起作用的数据类型应该是寄存器类型和线网类型。寄存器类型表示一个抽象的数据存储单元,它只能在 always 语句和 initial 语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。如果该过程语句描述的是时序逻辑,即 always 语句带有时钟信号,则该寄存器变量对应为寄存器;如果该过程语句描述的是组合逻辑,即 always 语句不带有时钟信号,则该寄存器变量对应为硬件连线;寄存器类型的缺省值是 x (未知状态)。 寄存器数据类型有很多种,如 reg integer real 等,其中最常用的就是 reg 类型,它的使用方法如下:
//reg define
reg [31:0] delay_cnt; //延时计数器
reg key_flag ; //按键标志

reg 是最常用的寄存器类型,它用于存储逻辑值(01X 等)。

它只能在 always 语句(带时钟)或 initial 语句中被赋值。

reg 的大小可以由方括号 [] 来指定,如 reg [31:0] 表示一个 32 位的寄存器。

线网表示 Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。 如果没有驱动元件连接到线网,线网的缺省值为 z (高阻态)。线网类型同寄存器类型一样也是有很多种, 如 tri wire 等,其中最常用的就是 wire 类型,它的使用方法如下:
//wire define
wire data_en; //数据使能信号 
wire [7:0] data ; //数据

wire 类型用于表示 连接信号传输信号,它是 线网类型 的一部分。你给出的示例是两个 wire 类型的信号:data_endata

wire data_en;

这个 wire 类型的信号 data_en 被定义为一个单比特(1 位)信号,用于表示 数据使能信号。它通常用来控制某个数据传输操作的启用或禁用。例如,data_en 可以用来控制 data 是否有效。

用途示例

数据使能信号:当 data_en 为高电平(1)时,表示数据有效,可以进行传输或操作;当 data_en 为低电平(0)时,数据可能被忽略或不传输。

wire [7:0] data;

这个 wire 类型的信号 data 被定义为 8 位宽的信号([7:0]),用于表示 数据。这个信号通常用来传输实际的数据值,例如一个 8 位的字节数据。

用途示例

数据传输data 可以传递一个 8 位的数据单元,可以是从一个模块传到另一个模块,或者用于在不同寄存器间传输数据。

parameter 的定义和作用

parameter 类型的常量在模块中定义,并且可以在模块实例化时进行修改。这样可以使得模块具有灵活的配置能力,而无需修改模块内部的实现代码。定义方法parameter 可以在模块中定义并赋予默认值。例如:

parameter DATA_WIDTH = 8;  // 数据位宽为 8 位

数据位宽:可以用 parameter 来定义数据总线的宽度,便于模块复用。

状态机状态数量:在设计状态机时,可以使用 parameter 来定义状态的数量或者状态的编码值。

延迟大小:在某些模块中,可以用 parameter 来定义延迟的大小,以便根据实际需求进行调整。

关键词描述
module模块开始定义
input输入端口定义
output输出端口定义
inout双向端口定义
parameter信号的参数定义
wire信号定义(用于线网类型信号)
reg信号定义(用于寄存器类型信号)
always产生 reg 信号语句的关键字
assign产生 wire 信号语句的关键字
begin语句的起始标志
end语句的结束标志
posedge/negedge时序电路的标志
caseCase 语句起始标记
defaultCase 语句的默认分支标志
endcaseCase 语句结束标记
ifif 语句标记
else/else ifelse / else if 语句标记
forfor 语句标记
endmodule模块结束定义

接下来呢,我们就通过实际的一个例子,来将上述的知识点融会贯通。

module led(input sys_clk , //系统时钟input sys_rst_n, //系统复位,低电平有效output reg [3:0] led //4 位 LED 灯
);//parameter define
parameter WIDTH = 25 ;
parameter COUNT_MAX = 25_000_000; //板载 50M 时钟=20ns,0.5s/20ns=25000000,需要 25bit
//位宽//reg define
reg [WIDTH-1:0] counter ;
reg [1:0] led_ctrl_cnt;//wire define
wire counter_en ;//***********************************************************************************
//** main code
//***********************************************************************************//计数到最大值时产生高电平使能信号
assign counter_en = (counter == (COUNT_MAX - 1'b1)) ? 1'b1 : 1'b0; //用于产生 0.5 秒使能信号的计数器
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n == 1'b0)counter <= 1'b0;
else if (counter_en)counter <= 1'b0;
elsecounter <= counter + 1'b1;
end//led 流水控制计数器
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n == 1'b0)led_ctrl_cnt <= 2'b0;
else if (counter_en)led_ctrl_cnt <= led_ctrl_cnt + 2'b1;
end//通过控制 IO 口的高低电平实现发光二极管的亮灭
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n == 1'b0)led <= 4'b0;
else begincase (led_ctrl_cnt) 2'd0 : led <= 4'b0001;2'd1 : led <= 4'b0010;2'd2 : led <= 4'b0100;2'd3 : led <= 4'b1000;default : ;endcase
end
endendmodule

 因为是第一次笔者讲verilog代码,详细讲一下,我们开始。

第一部分内容就是模块的定义,如下所示:

module led(input sys_clk,       // 系统时钟input sys_rst_n,     // 系统复位,低电平有效output reg [3:0] led // 4 位 LED 灯输出
);

该模块名为 led,包含一个系统时钟 sys_clk、复位信号 sys_rst_n,和一个 4 位的 LED 输出端口 led

参数定义

parameter WIDTH = 25 ;
parameter COUNT_MAX = 25_000_000; // 计数最大值

WIDTH 定义了计数器的位宽,这里设置为 25 位。

COUNT_MAX 设定了计数器的最大值,使用板载 50 MHz 时钟,经过 25 位计数器和 0.5 秒定时的计算结果为 25_000_000。

寄存器定义

reg [WIDTH-1:0] counter ;      // 用于计数的寄存器
reg [1:0] led_ctrl_cnt;       // 用于控制 LED 流水灯状态的计数器

counter 用于记录时钟周期计数,并达到 COUNT_MAX 后触发 LED 切换。

led_ctrl_cnt 控制流水灯的状态,在 counter_en 使能信号触发时改变。

信号定义

wire counter_en ; // 使能信号

counter_en 为计数器使能信号,当 counter 达到 COUNT_MAX 时,该信号为高电平,表示计数周期已完成。

计数器使能信号的生成

assign counter_en = (counter == (COUNT_MAX - 1'b1)) ? 1'b1 : 1'b0; 

counter_encounter 达到最大值时,产生高电平信号,表示计数周期已完成。

计数器模块

always @(posedge sys_clk or negedge sys_rst_n) beginif (sys_rst_n == 1'b0)counter <= 1'b0;       // 复位时,计数器清零else if (counter_en)counter <= 1'b0;       // 计数完成时,计数器清零elsecounter <= counter + 1'b1; // 每个时钟周期加 1
end

counter 计数器每次在时钟上升沿累加,计数到 COUNT_MAX 后复位。

LED 控制计数器

always @(posedge sys_clk or negedge sys_rst_n) beginif (sys_rst_n == 1'b0)led_ctrl_cnt <= 2'b0;  // 复位时,LED 控制计数器清零else if (counter_en)led_ctrl_cnt <= led_ctrl_cnt + 2'b1;  // 每次计数完成后加 1
end

led_ctrl_cnt 用于控制 LED 灯的流水显示,每次计数周期完成时自增,改变流水灯显示的顺序。

LED 灯控制

always @(posedge sys_clk or negedge sys_rst_n) beginif (sys_rst_n == 1'b0)led <= 4'b0;  // 复位时,LED 灯关闭else begincase (led_ctrl_cnt) 2'd0 : led <= 4'b0001; // LED 灯显示第一个2'd1 : led <= 4'b0010; // LED 灯显示第二个2'd2 : led <= 4'b0100; // LED 灯显示第三个2'd3 : led <= 4'b1000; // LED 灯显示第四个default : ;endcaseend
end

根据 led_ctrl_cnt 控制 LED 灯的显示状态,形成一个 4 位 LED 的流水效果。每次计数周期完成后,led 的值依次切换。

相关文章:

Verilog 语法 (一)

Verilog 是硬件描述语言&#xff0c;在编译下载到 FPGA 之后&#xff0c; FPGA 会生成电路&#xff0c;所以 Verilog 全部是并行处理与运行的&#xff1b;C 语言是软件语言&#xff0c;编译下载到单片机 /CPU 之后&#xff0c;还是软件指令&#xff0c;而不会根据你的代…...

针对 Spring Boot 应用中常见的查询场景 (例如:分页查询、关联查询、聚合查询) 如何进行 SQL 优化?

通用优化原则&#xff08;适用于所有场景&#xff09;&#xff1a; 索引是基础: 确保 WHERE、JOIN、ORDER BY、GROUP BY 涉及的关键列都有合适的索引&#xff08;单列或联合索引&#xff09;。避免 SELECT *: 只查询业务需要的列&#xff0c;减少数据传输量和内存消耗。覆盖索…...

shadcn/radix-ui的tooltip高度定制arrow位置

尝试了半天&#xff0c;后来发现&#xff0c;不支持。。。。。就是不支持 那箭头只能居中 改side和align都没用&#xff0c;下面有在线实例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢&#xff0c; 第一如果…...

ROS-真机向虚拟机器人映射

问题描述 ROS里的虚拟机械臂可以实现和真实机械臂的位置同步&#xff0c;真实机械臂如何动&#xff0c;ROS里的虚拟机械臂就如何动 效果 步骤 确保库卡机械臂端安装有EthernetKRL辅助软件和KUKAVARPROXY 6.1.101&#xff08;它是一个 TCP/IP 服务器 &#xff0c;可通过网络实…...

ap无法上线问题定位(交换机发包没有剥掉pvid tag)

一中学&#xff0c;新开的40台appoe交换机核心交换机旁挂ac出口路由的组网&#xff0c;反馈ap无法上线&#xff0c;让协助解决。 组网如下&#xff1a; 排查过程&#xff1a; 检查ac的配置&#xff0c;没有发现问题 发现配置没有问题&#xff0c;vlan1000配置子接口&#xff…...

Linux基础

03.Linux基础 了解VMware备份的两种方式 了解Linux系统文件系统 掌握Linux基础命令 备份操作系统 为什么要备份系统&#xff1f; 数据安全&#xff1a;防止因硬件故障、软件错误等原因导致的数据丢失。 系统恢复&#xff1a;快速恢复系统至正常状态&#xff0c;减少停机时…...

python函数与模块

目录 一&#xff1a;函数 1.无参函数 2.带参数函数 2.函数中变量中的作用域 4.内建函数 二&#xff1a;模块与包 1.模块 &#xff08;1&#xff09;模块定义 &#xff08;2&#xff09;模块导入 2.包 &#xff08;1&#xff09;包的使用 &#xff08;2&#xff09;_…...

线上助农产品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码&#xff0c;旨在为农产品销售搭建一个高效、便捷的线上平台&#xff0c;助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;FastAdmin作为快速开发框架&#xff0c;UniApp作为跨…...

个人博客后台管理开发日志

技术栈&#xff1a;Vue3 Ts node.js mySQL pinia axios 3月14日 一、数据表梳理 用户&#xff08;user&#xff09; ID名字邮箱密码 头像 地址 创建 时间 总览有本地文件、博客文章、摄影图库、随笔随记&#xff0c;这些板块也有对应的分类&#xff0c;我们要把这些分类…...

[论文阅读]REPLUG: Retrieval-Augmented Black-Box Language Models

REPLUG: Retrieval-Augmented Black-Box Language Models REPLUG: Retrieval-Augmented Black-Box Language Models - ACL Anthology NAACL-HLT 2024 在这项工作中&#xff0c;我们介绍了RePlug&#xff08;Retrieve and Plug&#xff09;&#xff0c;这是一个新的检索增强型…...

Matlab 基于共面螺旋管或共面亥姆霍兹谐振器的超薄低频吸声板

经典吸声材料的吸声性能严格依赖于材料的厚度&#xff0c;要达到完全吸声&#xff0c;至少需要四分之一波长。在本文中&#xff0c;我们报道了一种厚度约为波长百分之一的超薄吸声板&#xff0c;可以完全吸收声能。其策略是将四分之一波长的减声管弯曲并缠绕成二维共面减声管&a…...

济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理

输电线路工程安全管理 安全标识 颜色 禁止红、警示黄、指令蓝、提示绿 安全器具 定义 安全工器具通常专指“电力安全工器具”&#xff0c;是防止触电、灼伤、坠落、摔跌、腐蚀、窒息等事故&#xff0c;保障工作人员人身安全的各种专用工具和器具 分类 个体防护设备 防…...

【C语言】数据在内存中的存储:从整数到浮点数的奥秘

前言 在计算机的世界里&#xff0c;数据的存储和表示是编程的基础。今天&#xff0c;我们就来深入探讨一下数据在内存中的存储方式&#xff0c;包括整数和浮点数的存储细节&#xff0c;以及大小端字节序的奥秘。这些内容不仅对理解计算机系统至关重要&#xff0c;还能帮助我们…...

白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证

近日&#xff0c;北京白鲸开源科技有限公司与深圳计算科学研究院联合宣布&#xff0c;双方已完成产品兼容互认证。此次认证涉及深圳计算科学研究院自主研发的崖山数据库管理系统YashanDB V23和北京白鲸开源科技有限公司的核心产品WhaleStudio V2.6。经过严格的测试与验证&#…...

图论---朴素Prim(稠密图)

O( n ^2 ) 题目通常会提示数据范围&#xff1a; 若 V ≤ 500&#xff0c;两种方法均可&#xff08;朴素Prim更稳&#xff09;。 若 V ≤ 1e5&#xff0c;必须用优先队列Prim vector 存图。 // 最小生成树 —朴素Prim #include<cstring> #include<iostream> #i…...

借助deepseek和vba编程实现一张表格数据转移到多张工作簿的表格中

核心目标 将工作表中的内容按村社名称分类放入对应位置的目标工作簿的第一个工作表的对应位置 deepseek提问方式 你是一个擅长vba编程的专家&#xff0c;核心目标是奖工作表中的部分内容按下列要求写入对应工作簿的第一个工作表中。第一&#xff0c;在工作表A列中筛选出相…...

springboot整合redis实现缓存

一、redis 二、spring boot 整合redis 三、基于注解的Redis缓存实现 使用Cacheable、CachePut、CacheEvict注解定制缓存管理 对CommentService类中的方法进行修改使用Cacheable、CachePut、CacheEvict三个注解定制缓存管理&#xff0c;修改后的方法如下 Cacheable(cacheNam…...

git tag使用场景和实践

背景 每次上线一个迭代&#xff0c;为了区分本次代码的分支是哪个迭代&#xff0c;可以给分支打上tag&#xff0c;这样利于追踪分支所属迭代&#xff0c;如果devops没有自动给分支打tag&#xff0c;需要自己来打 操作 1.查看当前tag git tag2.给分支打tag git tag <tag…...

十分钟恢复服务器攻击——群联AI云防护系统实战

场景描述 服务器遭遇大规模DDoS攻击&#xff0c;导致服务不可用。通过群联AI云防护系统的分布式节点和智能调度功能&#xff0c;快速切换流量至安全节点&#xff0c;清洗恶意流量&#xff0c;10分钟内恢复业务。 技术实现步骤 1. 启用智能调度API触发节点切换 群联系统提供RE…...

国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Artix7系列FPGA上的应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上…...

最小生成树-prim、kruskal算法

目录 prim算法 kruskal算法 题目练习 &#xff08;1&#xff09;AcWing 858. Prim算法求最小生成树 - AcWing &#xff08;2&#xff09;859. Kruskal算法求最小生成树 - AcWing题库​编辑 学习之前建议温习一下迪杰斯特拉算法和并查集~ 先简单认识下最小生成树&#xff1a…...

【硬核干货】JetBrains AI Assistant 干货笔记

快进来抄作业&#xff0c;小编呕心沥血整理的 JetBrains AI Assistant 超干货笔记&#xff01; 原文链接&#xff1a;【硬核干货】JetBrains AI Assistant 干货笔记 关于晓数神州 晓数神州坚持以“客户为中心”的宗旨&#xff0c;为客户提供专业的解决方案和技术服务&#xff…...

强化学习核心原理及数学框架

1. 定义与核心思想 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种通过智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;的持续交互来学习最优决策策略的机器学习范式。其核心特征为&#xff1a; ​​试错学习​​&#x…...

C# 综合示例 库存管理系统4 classMod类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 在《库存管理系统》中使用classMod类来保存全局变量。 变量定义和含义,请详见下面的源代码: public class classMod { //数据库路径...

[C] 第6章 C51函数

文章目录 C51函数函数概述从函数定义角度分类从函数有无返回值分类从函数有无参数 函数定义的一般形式C51无参函数的一般形式C51有参函数的一般形式 函数的形式参数和实际参数形式参数实际参数函数的返回值一般形式为&#xff1a; 函数的形参和实参的特点 函数的调用函数的调用…...

docker 配置代理

docker 配置代理有 2 中方法 1.Daemon configuration 直接在 /etc/docker/daemon.json 文件中配置 {"proxies": {"http-proxy": "http://proxy.example.com:3128","https-proxy": "https://proxy.example.com:3129",&quo…...

Redis 深度解析:从核心原理到生产实践

Redis 深度解析&#xff1a;从核心原理到生产实践 一、Redis 核心定位与数据结构 1. 核心能力矩阵深度解析 Redis 作为高性能内存数据库&#xff0c;核心能力覆盖缓存、数据存储、消息中间件等场景&#xff0c;其设计哲学围绕速度优先、内存高效、功能丰富展开&#xff1a; …...

从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践

一、需求背景与设计目标 在分布式系统中&#xff0c;面对突发流量时需要一种精准可控的流量控制手段。我们的组件需要具备&#xff1a; 多维度限流&#xff08;用户/IP/服务节点/自定义表达式&#xff09;分布式环境下精准控制开箱即用的Spring Boot Starter集成高扩展性的架…...

基于霍尔效应传感器的 BLDC 电机梯形控制方案详解

基于霍尔效应传感器的 BLDC 电机梯形控制方案解读 使用霍尔效应传感器的无刷直流(BLDC)电机梯形控制 一、系统核心架构与技术优势 (一)BLDC 电机与霍尔传感器控制原理 BLDC 电机作为永磁同步电机的一种,其核心特征是转子反电动势为梯形波,定子电流为 120 电角度宽度的矩…...

Pikachu靶场-File Inclusion

文件包含漏洞&#xff08;File Inclusion Vulnerability&#xff09;是Web应用程序中的一种常见安全漏洞&#xff0c;通常由于开发者未对用户输入进行严格过滤&#xff0c;导致攻击者能够包含并执行恶意文件。这种漏洞主要分为两种类型&#xff1a; 1. 漏洞类型 本地文件包含&a…...

如何模拟黑客攻击(Red Teaming)以测试服务器安全性

模拟黑客攻击&#xff08;Red Teaming&#xff09;是评估服务器安全性的有效方法&#xff0c;但需严格遵循**合法授权**和**道德准则**。以下是专业且安全的操作流程&#xff1a; --- ### **1. 前期准备** - **法律授权** - 获得目标系统的**书面授权**&#xff0c;明确测…...

分页查询优惠券

文章目录 概要整体架构流程技术细节小结 概要 接口分析 一个典型的带过滤条件的分页查询&#xff0c;非常简单。按照Restful风格设计即可&#xff0c;我们关注的点有两个&#xff1a; 请求参数 返回值格式 请求参数包含两部分&#xff0c;一个是分页参数&#xff0c;另一…...

QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信

在 Qt 中&#xff0c;您可以通过 QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信。以下是如何使用 Qt 实现这两种通信方式的简要示例。 1. TCP 网络通信 TCP 是面向连接的协议&#xff0c;确保数据的可靠传输。下面是一个简单的 TCP 客户端和服务器示例。 TCP …...

从岗位依附到能力生态:AI革命下“什么叫就业”的重构与价值

在人工智能(AI)技术深刻重塑社会生产关系的当下,“就业”这一概念正经历着从“职业绑定”到“能力变现”的范式转移。本文将从传统就业观的解构、AI赋能艺术教育的价值逻辑、以及未来就业形态的进化方向三个维度,探讨技术驱动下就业的本质变革,并揭示AI技术如何通过教育创…...

2025上海车展 | 移远通信全栈车载智能解决方案重磅亮相,重构“全域智能”出行新范式

2025年4月23日至5月2日&#xff0c;第二十一届上海国际汽车工业展览会在国家会展中心&#xff08;上海&#xff09;盛大启幕。作为车载智能解决方案领域的领军企业&#xff0c;移远通信以“全域智能 驭见未来”为主题&#xff0c;携丰富的车载解决方案及客户终端惊艳亮相8.2馆8…...

LVGL在VScode的WSL2中仿真

目录 一、前言 二、开始部署 1.拉取github的库 2.在WSL安装一些必要的库或者包 3.开始编译 三、注意事项 一、前言 相信有不少兄弟因为苦于没有外设而无法学习LVGL&#xff0c;这里我提供一种WSL中仿真LVGL工程的方法。结果图如下&#xff1a; 二、开始部署 1.拉取github…...

React-组件和props

1、类组件 import React from react; class ClassApp extends React.Component {constructor(props) {super(props);this.state{};}render() {return (<div><h1>这是一个类组件</h1><p>接收父组件传过来的值&#xff1a;{this.props.name}</p>&…...

驱动开发系列53 - 一个OpenGL应用程序是如何调用到驱动厂商GL库的

一:概述 一个 OpenGL 应用程序调用 GPU 驱动的过程,主要是通过动态链接库(libGL.so)来完成的。本文从上到下梳理一下整个调用链,包含 GLVND、Mesa 或厂商驱动之间的关系。 二:调用关系 1. 首先一个 OpenGL 应用程序(比如游戏或图形渲染软件)在运行时会调用 OpenGL 提供…...

【python】一文掌握 markitdown 库的操作(用于将文件和办公文档转换为Markdown的Python工具)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、markitdown概述1.1 markitdown介绍1.2 MarkItDown支持的文件1.3 为什么是Markdown?二、markitdown安装2.1 pip方式安装2.2 源码安装2.3 docker方式安装三、基本使用3.1 命令行方式3.2 可选依赖项配置3.3 插件方…...

【网络入侵检测】基于Suricata源码分析NFQ IPS模式实现

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 本文聚焦于 Suricata 7.0.10 版本源码,深入剖析其 NFQ(Netfilter Queue)模式的实现原理。通过系统性拆解初始化阶段的配置流程、数据包监听机制的构建逻辑,以…...

驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)

视频教程请关注 B 站&#xff1a;“嵌入式 Jerry” 一、背景说明&#xff1a;字符设备驱动的角色定位 在 Linux 内核驱动体系中&#xff0c;**字符设备驱动&#xff08;Character Device Driver&#xff09;**扮演着关键的桥梁作用&#xff0c;它直接向用户空间程序提供 read/…...

项目——高并发内存池

目录 项目介绍 做的是什么 要求 内存池介绍 池化技术 内存池 解决的问题 设计定长内存池 高并发内存池整体框架设计 ThreadCache ThreadCache整体设计 哈希桶映射对齐规则 ThreadCache TLS无锁访问 CentralCache CentralCache整体设计 CentralCache结构设计 C…...

几种查看PyTorch、cuda 和 Python 版本方法

在检查 PyTorch、cuda 和 Python 版本时&#xff0c;除了直接使用 torch.__version__ 和 sys.version&#xff0c;我们还可以通过其他方式实现相同的功能 方法 1&#xff1a;直接访问属性&#xff08;原始代码&#xff09; import torch import sysprint("PyTorch Versi…...

如何实现跟踪+分割的高效协同?SiamMask中的多任务损失设计

如何实现跟踪分割的高效协同&#xff1f;SiamMask中的多任务损失设计 一、引言二、三大分支损失函数详解2.1 分类分支损失2.2 回归分支损失2.3 Mask分支损失 三、损失加权策略与系数选择3.1 常见超参数设定3.2 动态权重&#xff08;可选&#xff09; 四、训练实践&#xff1a;平…...

MODBUS转EtherNetIP边缘计算网关配置优化:Logix5000与ATV340高效数据同步与抗干扰方案

一、行业背景 智能制造是当前工业发展的趋势&#xff0c;智能工厂通过集成各种自动化设备和信息技术&#xff0c;实现生产过程的智能化、自动化和高效化。在某智能工厂中&#xff0c;存在大量采用ModbusTCP协议的设备&#xff0c;如智能传感器、变频器等&#xff0c;而工厂的主…...

从代码学习深度学习 - 图像增广 PyTorch 版

文章目录 前言一、图像增广的基本概念二、PyTorch中的图像增广实现三、数据加载与处理四、模型训练与评估五、实验设置与执行六、实验结果与分析七、讨论总结前言 在深度学习中,数据是关键。尤其是在计算机视觉任务中,高质量且丰富多样的数据对模型性能有着决定性的影响。然…...

从机械应答到智能对话:大模型为呼叫注入智慧新动能

引言 在当今竞争激烈的商业环境中&#xff0c;高效和有效的客户沟通对于企业的成功至关重要。智能外呼系统已成为企业与潜在客户和现有客户互动的重要工具。最近&#xff0c;大模型&#xff08;如大型语言模型或 LLMs&#xff09;的出现为这些系统带来了显著的提升&#xff0c…...

深入浅出 Python 协程:从异步基础到开发测试工具的实践指南

Python 的异步编程近年来越来越受欢迎&#xff0c;尤其在需要同时处理大量 I/O 请求的场景中&#xff0c;它展现了出色的性能。而协程是异步编程的核心&#xff0c;也是开发高效异步测试工具的关键技术。 这篇文章将用通俗的语言带你快速入门 Python 协程&#xff0c;结合实际…...

算法之分支定界

分支定界 分支定界概述核心思想与步骤常见变体复杂度分析案例分析1. 0-1背包问题2. 最短路径问题&#xff08;分支定界法&#xff09;3. 旅行商问题&#xff08;TSP&#xff09; 分支定界 概述 分支定界&#xff08;Branch and Bound&#xff09;是一种用于解决组合优化问题的…...

Hugging Face上面找开源的embedding模型

问题 想找一个支持中文的embedding模型&#xff08;把一段文本转化成多维度的向量&#xff09;。Hugging Face平台上面共享了很多开源模型&#xff0c;算是这年头&#xff08;2025年&#xff09;&#xff0c;大家都把自己开源模式都往上放的地方了吧。现在去这个平台上面找一个…...