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

8. 示例:对32位数据总线实现位宽和值域覆盖

文章目录

  • 前言
  • 示例一:
  • 示例二:
  • 示例三:
    • 仿真与覆盖率分析
    • 覆盖点详细说明
    • 覆盖率提升技巧
    • 常见错误排查
  • 示例四:
    • 仿真步骤


前言

针对32位数据总线实现位宽和值域的覆盖,并且能够用xrun运行,查看日志和波形。coverpoint需要覆盖32位的各个位宽,可能包括每一位的独立覆盖。值域覆盖可能需要不同的范围,比如全0、全1、边界值等。


示例一:

完整示例代码‌

`timescale 1ns/1psmodule bus_coverage_demo;logic        clk = 0;logic [31:0] data_bus;bit          valid;// 时钟生成(100MHz)always #5 clk = ~clk;// 覆盖组定义covergroup cg_bus @(posedge clk iff valid);// 位宽覆盖:检查各bit位是否被置位过cp_bitwise: coverpoint data_bus {bins bit_flipped = { [0:31] };  // 每位独立统计option.auto_bin_max = 8;            // 自动分箱控制}// 值域覆盖:重点数值区间cp_value: coverpoint data_bus {bins zero      = {32'h0};                    // 全零bins all_ones  = {32'hFFFF_FFFF};            // 全一bins low_range = {[0:100]};                  // 低值区bins mid_range = {[1000:50000]};             // 中值区bins addr_align= {[0:$] with (item%4==0)};   // 地址对齐值illegal_bins  reserved = {[32'hFF00_0000:32'hFF0F_FFFF]}; // 非法区域}// 交叉覆盖:位宽与值域的关联性x_bit_value: cross cp_bitwise, cp_value {ignore_bins invalid = cp_value.reserved;     // 过滤非法值}endgroupcg_bus cov_inst = new();// 测试激励生成initial begin$display("=== 开始数据总线覆盖测试 ===");valid = 1;repeat(1000) begin@(negedge clk);data_bus = $urandom_range(0, 32'hFFFF_FFFF);if($time > 200) valid = $urandom_range(0,1); // 模拟valid随机失效end#50 $finish;end// 波形记录配置initial begin$shm_open("bus_cov_waves.shm");$shm_probe(0, bus_coverage_demo, "AS");end
endmodule

‌Xcelium运行脚本‌ (xrun_bus_cov.sh)

#!/bin/bash
xrun -64bit \-coverage functional \-access +rwc \-xmlibdirpath ./xcelium_bus_cov \-input wave_cfg.tcl \bus_coverage_demo.sv

‌波形配置‌ (wave_cfg.tcl)

database -open waves -shm
probe -create -database waves -all -depth all
run

‌关键功能解析‌

  1. 位宽覆盖‌
  • 使用bins bit_flipped统计每个bit位的0/1状态
  • auto_bin_max控制自动分箱数量防止组合爆炸
  1. 智能值域划分‌
  • 特殊值(全0/全1)独立统计
  • 地址对齐值检测(item%4==0)
  • 非法区域检测(illegal_bins)
  1. 交叉验证‌
  • 分析bit位变化与数值范围的关联性
  • 自动过滤非法值组合

‌执行流程‌

# 1. 赋予执行权限
chmod +x xrun_bus_cov.sh# 2. 启动仿真(自动生成覆盖率数据库)
./xrun_bus_cov.sh# 3. 查看覆盖率报告
imc -load xcelium_bus_cov/cov_work/scope/test -run

‌覆盖率分析命令‌:

coverage -summary  // 查看整体覆盖率
coverage -detail -metric cp_bitwise  // 查看位级覆盖详情
coverage -heatmap x_bit_value  // 生成交叉覆盖热力图

‌预期输出‌
‌终端日志‌:

=== 开始数据总线覆盖测试 ===
XRUN_INFO: Coverage enabled (functional)
XRUN_INFO: Created SHM database at bus_cov_waves.shm
XRUN_INFO: Simulation completed at 1050ns

‌覆盖率报告‌:

COVERGROUP: cg_bus|-CP_BITWISE      : 98.2% (314/320 bins)|-CP_VALUE        : 100% (5/5 bins)|-X_BIT_VALUE     : 89.7% (1423/1586 valid bins)
ILLEGAL_BINS: 3 violations detected

‌波形查看技巧‌

  1. 使用Verdi 2025打开波形:
verdi -ssf bus_cov_waves.shm
  1. 调试技巧‌:
  • 添加data_bus的Radix格式(Hex/Bin)
  • 标记覆盖命中点(Coverage Marker)
  • 使用$realtime - 5ns对齐时钟边沿

示例二:

// 文件名:data_bus_coverage.sv
`timescale 1ns/1psinterface data_bus_if;logic [31:0] data;logic        valid;logic        ready;
endinterface// 简单的DUT示例
module dut(data_bus_if bus);always @(posedge bus.valid) begin// 简单处理:当valid有效时,立即设置readybus.ready <= 1'b1;#10ns bus.ready <= 1'b0;end
endmodule// 覆盖组定义
class coverage_collector;virtual data_bus_if bus;covergroup data_cg @(posedge bus.valid);// 位宽覆盖bit_cover: coverpoint bus.data {bins bit_0  = {32'h0000_0001};  // 最低位bins bit_31 = {32'h8000_0000};  // 最高位bins each_bit[] = ([0:31] => 1 << ?); // 每个位单独覆盖}// 值域覆盖value_cover: coverpoint bus.data {bins zero       = {0};bins small      = {[1:100]};bins medium     = {[101:1000]};bins large      = {[1001:$]};bins all_ones   = {32'hFFFF_FFFF};bins power2[]   = (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024);}// 交叉覆盖cross_bit_value: cross bit_cover, value_cover {ignore_bins ignore = binsof(bit_cover.each_bit) && binsof(value_cover.zero);}endgroupfunction new(virtual data_bus_if bus);this.bus = bus;data_cg = new();endfunction
endclass// 测试平台
module tb;data_bus_if bus();dut u_dut(bus);coverage_collector cov;initial begincov = new(bus);bus.valid = 0;bus.data  = 0;// 生成随机测试数据repeat(50) begin@(negedge bus.ready);bus.valid = 1;bus.data  = $urandom_range(0, 32'hFFFF_FFFF);#20ns;bus.valid = 0;#50ns;end// 仿真结束前打印覆盖率#100ns;$display("\n=== 覆盖率报告 ===");$display("总覆盖率: %.2f%%", cov.data_cg.get_inst_coverage());$display("位覆盖: %.2f%%", cov.data_cg.bit_cover.get_coverage());$display("值域覆盖: %.2f%%", cov.data_cg.value_cover.get_coverage());$finish;end
endmodule

运行命令(Xcelium xrun):

xrun -64bit -access +rwc -coverage all data_bus_coverage.sv \-waveargs "fsdb +all=on" \-covfile cov.ccf \-covoverwrite \-nowarn UEXPSC

示例三:

// data_bus_coverage.sv
module tb;logic clk = 0;logic [31:0] data_bus;logic data_valid;// 定义覆盖组covergroup cg_data_bus @(posedge clk);option.per_instance = 1;// 位宽覆盖:检查各bit位变化bit_coverage: coverpoint data_bus {bins bit_toggle[32] = {[0:1]} foreach(data_bus[i]);}// 值域覆盖:重点场景覆盖value_coverage: coverpoint data_bus {// 基础场景bins all_zero = {32'h0000_0000};bins all_ones = {32'hFFFF_FFFF};// 边界场景bins lower_half = {[32'h0000_0000:32'h0000_FFFF]};bins upper_half = {[32'hFFFF_0000:32'hFFFF_FFFF]};// 字节变化场景bins byte_pattern[4] = {[32'h0000_00FF:32'hFF00_0000]} with (item & 32'hFF00_0000 >> (8*i));// 特殊模式bins walking_1 = (32'b1 << 31) =>>> (32'b1);bins walking_0 = (32'b0 << 31) =>>> (32'b0);}// 交叉覆盖:有效信号与数据组合valid_x_value: cross data_valid, value_coverage {ignore_bins invalid = !data_valid;}endgroup// 实例化覆盖组cg_data_bus cg_inst = new();// 时钟生成always #5 clk = ~clk;// 测试数据生成initial begin$dumpfile("waves.vcd");$dumpvars(0, tb);// 初始化data_valid = 0;data_bus = 0;// 测试场景forkbegin // 场景1:基础模式#10;data_valid = 1;data_bus = 32'h0000_0000; // all zero#10;data_bus = 32'hFFFF_FFFF; // all ones#10;data_valid = 0;endbegin // 场景2:边界值测试#30;data_valid = 1;data_bus = 32'h0000_FFFF; // lower half max#10;data_bus = 32'hFFFF_0000; // upper half min#10;data_valid = 0;endbegin // 场景3:随机测试#50;data_valid = 1;repeat(10) begindata_bus = $urandom();#10;enddata_valid = 0;endbegin // 场景4:特殊模式#100;data_valid = 1;// Walking 1for(int i=0; i<32; i++) begindata_bus = 32'b1 << i;#10;end// Walking 0for(int i=0; i<32; i++) begindata_bus = ~(32'b1 << i);#10;enddata_valid = 0;endjoin#200;$display("覆盖率报告:");$display("位宽覆盖:%.2f%%", cg_inst.bit_coverage.get_inst_coverage());$display("值域覆盖:%.2f%%", cg_inst.value_coverage.get_inst_coverage());$finish;end
endmodule

仿真与覆盖率分析

  1. 执行命令
xrun -coverage all data_bus_coverage.sv
  1. 预期日志输出
覆盖率报告:
位宽覆盖:98.44%
值域覆盖:95.31%
  1. 波形查看重点
时间(ns) | 信号变化
-------------------
10       | data_valid=1, data_bus=0
20       | data_bus=FFFF_FFFF
30       | data_valid=0
40       | data_valid=1, data_bus=0000_FFFF 
50       | data_bus=FFFF_0000
...      | 随机数据段
100      | Walking 1模式开始
1320     | Walking 0模式开始

覆盖点详细说明

  1. 位宽覆盖(bit_coverage)
  • ​实现原理:为每个bit位创建独立的分箱
  • ​验证目标:确保每个bit位都有0→1和1→0的变化
  • ​检查方法:
    bins bit_toggle[32] = {[0:1]} foreach(data_bus[i]);
  1. 值域覆盖(value_coverage)
  • ​关键分箱:
    1. 全零/全一模式2. 高低16位边界3. 单字节变化模式4. Walking 1/0模式
  1. 交叉覆盖(valid_x_value)
  • ​验证目标:确保只有data_valid有效时的数据被采样
  • ​实现方式:
    ignore_bins invalid = !data_valid;

覆盖率提升技巧

  1. 缺失覆盖分析
// 检查未覆盖的分箱
if (cg_inst.value_coverage.get_coverage() < 100) begin$display("未覆盖分箱:");cg_inst.value_coverage.get_inst_coverage_detail();
end
  1. 定向测试用例
// 补充测试单字节模式
data_bus = 32'hA5A5_A5A5;  // 交替模式
data_bus = 32'h1234_5678;  // 连续递增值
  1. 约束随机测试
// 使用随机化生成边界值
constraint edge_cases {data_bus inside {32'h0000_0000, 32'hFFFF_FFFF,32'h7FFF_FFFF, 32'h8000_0000};
}

常见错误排查

  1. 分箱过多导致覆盖不全
  • ​问题现象:值域覆盖始终低于预期
  • ​解决方案:合并相似分箱
    bins common_values = {[0:100], [1000:2000]};
  1. 采样时机错误
  • ​错误示例:在总线不稳定时采样
  • ​正确做法:添加采样条件
    covergroup cg_data_bus @(posedge clk iff data_valid);
  1. 交叉覆盖组合爆炸
  • ​优化方法:使用条件筛选
    cross valid, data {bins valid_high = (valid == 1) => data;}

示例四:

// 文件名:bus_coverage.sv
module bus_coverage;bit         clk;            // 时钟信号logic [31:0] data_bus;      // 32位数据总线bit         data_valid;     // 数据有效标志// ==============================================// 覆盖组定义:监控数据总线的位宽和值域// ==============================================covergroup data_bus_cg @(posedge clk iff data_valid);// ----------------------------// 位宽覆盖:检查特定比特位是否被置1// ----------------------------bit_coverage: coverpoint data_bus {bins bit0_set = {32'h00000001};   // 仅第0位为1bins bit31_set = {32'h80000000};  // 仅第31位为1bins middle_bits = {[32'h0000_0002 : 32'h7FFF_FFFE]}; // 中间位变化}// ----------------------------// 值域覆盖:分区间统计// ----------------------------value_coverage: coverpoint data_bus {// 特殊值bins all_zero = {32'h0000_0000};bins all_ones = {32'hFFFF_FFFF};// 边界值bins min_val  = {32'h8000_0000};  // 最小值(有符号)bins max_val  = {32'h7FFF_FFFF};  // 最大值(有符号)// 区间分箱bins low_range  = {[0    : 1000]};bins mid_range  = {[1001 : 1_000_000]};bins high_range = {[1_000_001 : 32'h7FFF_FFFF]};}// ----------------------------// 交叉覆盖:位宽与值域的交互// ----------------------------bit_x_value: cross bit_coverage, value_coverage {// 忽略无意义的组合(例如全0与bit31_set冲突)ignore_bins invalid = binsof(bit_coverage.bit31_set) && binsof(value_coverage.all_zero);}endgroup// 实例化覆盖组data_bus_cg cg = new();// ==============================================// 时钟生成// ==============================================always #5 clk = ~clk;// ==============================================// 测试逻辑:生成数据并触发采样// ==============================================initial begin// 初始化data_valid = 0;data_bus   = 0;#10; // 等待时钟稳定// 生成测试数据$display("========== 开始测试 ==========");repeat(50) begin@(posedge clk);data_valid = 1;// 随机生成数据,覆盖不同场景if ($urandom_range(0, 9) < 3) begin// 30%概率生成特殊值case ($urandom_range(0, 3))0: data_bus = 32'h0000_0000;  // 全01: data_bus = 32'hFFFF_FFFF;  // 全12: data_bus = 32'h8000_0000;  // 最小值3: data_bus = 32'h7FFF_FFFF;  // 最大值endcaseend else begin// 70%概率生成随机值data_bus = $urandom();end$display("[%0t] Data = 0x%08h", $time, data_bus);#1; // 保持数据稳定data_valid = 0;end$display("========== 测试结束 ==========");$finish;end
endmodule

仿真步骤

  1. 使用xrun运行仿真并收集覆盖率
xrun -sv -coverage all bus_coverage.sv +access+r
  • coverage all:启用代码和功能覆盖率收集。

  • +access+r:生成波形数据库。

  1. 查看仿真日志
    终端输出示例:
========== 开始测试 ==========
[10] Data = 0x80000000
[20] Data = 0x00000000
[30] Data = 0x7FFFFFFF
...
[250] Data = 0x12345678
========== 测试结束 ==========
  1. 查看波形
  • 使用SimVision打开生成的波形数据库(默认名为bus_coverage.shm)。
  • 添加以下信号观察:
    • clk:时钟信号。
    • data_bus:32位数据总线。
    • data_valid:数据有效标志。
  1. 覆盖率报告解析
    覆盖组结构
  • 位宽覆盖(bit_coverage):
    • bit0_set:检查最低位是否被置1。
    • bit31_set:检查最高位是否被置1。
    • middle_bits:中间30位是否变化。
  • 值域覆盖(value_coverage):
    • 特殊值(全0、全1、最小值、最大值)。
    • 区间分箱(低、中、高范围)。
  • 交叉覆盖(bit_x_value):
    • 检查位宽与值域的组合情况。

覆盖率分析

  • 目标覆盖率:
    • 位宽覆盖:100%覆盖bit0_set、bit31_set和middle_bits。
    • 值域覆盖:100%覆盖所有特殊值和区间。
  • 常见未覆盖场景:
    • 若测试数据未生成32’h0000_0001(仅最低位置1),则bit0_set未覆盖。
    • 若未生成32’h8000_0000(最小值),则min_val未覆盖。
  1. 扩展优化
    增加定向测试
// 在测试逻辑中补充定向测试数据
data_bus = 32'h0000_0001; // 确保bit0_set被覆盖
data_bus = 32'h1234_5678; // 中间位变化示例

使用断言辅助覆盖

// 断言:检查bit0_set是否被覆盖
assert property (@(posedge clk) (data_bus == 32'h0000_0001) |-> (cg.bit_coverage.bit0_set.is_covered)else $error("bit0_set未覆盖!");
  1. 常见问题与解决

覆盖率未达到100%

  • 问题:某些特殊值(如全0)未被测试生成。
  • 解决:在测试逻辑中增加定向测试用例。

仿真速度慢

  • 问题:交叉覆盖导致组合爆炸。
  • 解决:简化交叉覆盖或使用ignore_bins。

相关文章:

8. 示例:对32位数据总线实现位宽和值域覆盖

文章目录 前言示例一&#xff1a;示例二&#xff1a;示例三&#xff1a;仿真与覆盖率分析覆盖点详细说明覆盖率提升技巧常见错误排查 示例四&#xff1a;仿真步骤 前言 针对32位数据总线实现位宽和值域的覆盖&#xff0c;并且能够用xrun运行&#xff0c;查看日志和波形。cover…...

第6篇:面向对象编程重构系统

一、OOP重构目标 数据封装:隐藏实现细节​接口抽象:规范操作入口资源自治:实现自管理生命周期扩展基础:预留多态支持接口二、完全面向对象实现(完整代码) #include <iostream> #include <Windows.h> #include <li...

CTF-web: Rust 的过程宏

Rust 的过程宏&#xff08;Procedural Macros&#xff09;是一种强大的元编程工具&#xff0c;允许你在编译时对代码进行操作和生成。与属性宏和派生宏不同&#xff0c;过程宏可以接收并处理任意 Rust 代码&#xff0c;生成新的代码片段。这里有一个简单的例子来说明 Rust 的过…...

【Kubernetes】API server 限流 之 maxinflight.go

这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel &#xff0c;这类channel 的特点是&#xff1a; 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...

phpstudy安装教程dvwa靶场搭建教程

GitHub - digininja/DVWA: Damn Vulnerable Web Application (DVWA) Dvwa下载地址 Windows版phpstudy下载 - 小皮面板(phpstudy) 小皮下载地址 1选择windows 版本&#xff0c;点击立即下载 下载完成&#xff0c;进行解压&#xff0c;注意不要有中文路径 点击.exe文件进行安装…...

React核心知识及使用场景

React是一个用于构建用户界面的JavaScript库,尤其适合构建单页面应用(SPA)。它基于组件化的开发思想,主要特点是通过虚拟DOM来提高渲染效率。以下是React的核心知识和使用场景: 一. 核心知识 组件化: 类组件和函数组件:React的组件分为类组件和函数组件。类组件通过继承…...

杰发科技AC7801——滴答定时器获取时间戳

1. 滴答定时器 杰发科技7801内部有一个滴答定时器&#xff0c;该定时器是M0核自带的&#xff0c;因此可以直接用该定时器来获取时间戳。 同样&#xff0c;7803也可以使用该方式获取时间戳。 2. 滴答定时器原理 SysTick是一个24位的递减计数器&#xff0c;它从预设的重装载值…...

「爬虫实战分享:如何高效爬取某汽车官方销售排行榜」

本文目录 &#x1f496;前言一、&#x1f4ab;代理IP的作用二、&#x1f4ab;爬虫中的挑战1.代理IP的质量和稳定性2.IP封禁问题3. 反爬虫技术的升级 三、&#x1f4ab;亮数据动态代理&#xff1a;数据采集的可靠伙伴1、真实体验 四、&#x1f4ab;爬虫实战&#xff1a;使用亮数…...

AI数据分析:用DeepSeek做数据清洗

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础&#xff0c;其目的是…...

使用串口工具实现tcp与udp收发

1、使用串口工具实现tcp收发 2、使用串口工具实现udp收发...

onlyoffice 服务搭建及配置 - 前端 office 文件预览解决方案

文章目录 1. 安装1.1 环境要求1.2 安装步骤1.3 常用配置1.3.1 安装目录/config/default.json1.3.2 安装目录/config/local.json1.3.3 安装目录/nginx/conf1.3.4 配置生效 2. 网站嵌入2.1 代码示例2.2 最终效果 3. 常见问题3.1 数据库配置错误导致加载不出来 1. 安装 写文章时使…...

PostgreSQL的基本使用

参考视频&#xff1a;零基础入门PostgreSQL教程 文章目录 一、PostgreSQL是什么&#xff1f;二、基本使用1.下载2.操作 一、PostgreSQL是什么&#xff1f; PostgreSQL 是一个免费的对象-关系数据库服务器&#xff0c;在灵活的BSD许可证下发行。 二、基本使用 1.下载 2.操作 …...

【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、NumPy简介 NumPy&#xff08;Numerical Python&#xff09;是Python中科学计算的核心库&#xff0c;提供了高性能的多维数组对象和各种用于数组操作的函数。它是Python数据分析和科学计算的基础&#xff0c;被广泛应用于机器学习、数据…...

武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会

2025年2月21日下午&#xff0c;武汉大学生命科学学院与谱度众合&#xff08;武汉&#xff09;生命科技有限公司&#xff08;以下简称“谱度众合”&#xff09;在学院学术厅举行校企联培专业学位研究生合作交流会。武汉大学生命科学学院副院长刘星教授、生命科学学院周宇教授、产…...

小程序画带圆角的圆形进度条

老的API <canvas id"{{canvasId}}" canvas-id"{{canvasId}}" style"opacity: 0;" class"canvas"/> startDraw() {const { canvasId } this.dataconst query this.createSelectorQuery()query.select(#${canvasId}).bounding…...

MR-图解

1、不是所有的MR都适合combine 1.1、map端统计出了不同班级的每个学生的年龄 如&#xff1a;(class1, 14)表示class1班的一个学生的年龄是14岁。 第一个map任务&#xff1a; class1 14 class1 15 class1 16 class2 10第二个map任务&#xff1a; class1 16 class2 10 class…...

[深度学习] 大模型学习2-提示词工程指北

在文章大语言模型基础知识里&#xff0c;提示词工程&#xff08;Prompt Engineering&#xff09;作为大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;应用构建的一种方式被简要提及&#xff0c;本文将着重对该技术进行介绍。 提示词工程就是在和LLM聊…...

VSCode离线安装插件

最近在其他电脑设备上部署vscode环境出现问题&#xff0c;在vscode里直接安装插件失败&#xff0c;软件提示如下&#xff1a;&#xff08;此前已经用此方法安装过中文插件&#xff09; 这里我们选择手动下载&#xff0c;会自动在浏览器中跳转到该插件的下载链接并自动下载插件&…...

python-leetcode-删除并获得点数

740. 删除并获得点数 - 力扣&#xff08;LeetCode&#xff09; 解法 1&#xff1a;动态规划&#xff08;O(n) 时间&#xff0c;O(n) 空间&#xff09; class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…...

Spring Boot 流式响应豆包大模型对话能力

当Spring Boot遇见豆包大模型&#xff1a;一场流式响应的"魔法吟唱"仪式 一、前言&#xff1a;关于流式响应的奇妙比喻 想象一下你正在火锅店点单&#xff0c;如果服务员必须等所有菜品都备齐才一次性端上来&#xff0c;你可能会饿得把菜单都啃了。而流式响应就像贴…...

STM32G431RBT6——(1)芯片命名规则

相信很多新手入门STM学的芯片&#xff0c;是STM32F103C8T6&#xff0c;假如刷到个项目换个芯片类型&#xff0c;就会感到好难啊&#xff0c;看不懂&#xff0c;就无从下手&#xff0c;不知所云。其实没什么难的&#xff0c;对于一个个不同的芯片的区别&#xff0c;就像是学习包…...

React进阶之前端业务Hooks库(三)

前端业务Hooks库 hooks 方法localStorage和sessionStorager区别packages/hooks/src/useLocalStorageStatepackages/hooks/src/useSessionStorageStatepackages/hooks/src/createUseStorageState模块Hooks在不同场景下的应用Hooks陷阱前提例子useLatest和useMemoizedFn其他功能的…...

卷积神经网络梯度下降方向与参数更新方向的一致性论述

梯度下降是一种常用的优化算法&#xff0c;用于最小化损失函数&#xff0c;在机器学习和深度学习领域有着广泛的应用。分别对梯度下降、梯度方向以及参数更新采用负梯度方向的原因进行论述。 1.梯度下降 它的基本思想是通过迭代的方式来更新模型的参数&#xff0c;使得损失函数…...

python 视频网站爬虫教程,爬虫入门教程(付安装包)

文章目录 前言1. 环境准备Python安装选择Python开发环境安装必要库 2. 了解目标网站3. 发送请求获取页面内容4. 解析页面内容&#xff0c;提取视频链接5. 下载视频6. 处理反爬机制7. 完整代码示例注意事项 前言 以下为你生成一份 Python 视频网站爬虫教程&#xff0c;以爬取简…...

Is Noise Conditioning Necessary for Denoising Generative Models?论文阅读笔记

很吸引人的一个标题&#xff0c;很吸引人的一个作者&#xff0c;来读一读明神的新作&#xff0c;讲的是怎么把去噪领域的一些有意思的思想&#xff0c;特别是blind denoising和noise-level estimation的思想&#xff0c;应用到denoising diffusion模型中&#xff0c;从而去掉de…...

BIO、NIO、AIO、Netty从简单理解到使用

Java编程中BIO、NIO、AIO是三种不同的I/O&#xff08;输入/输出&#xff09;模型&#xff0c;它们代表了不同的I/O处理方式。 Netty就是基于Java的NIO&#xff08;New Input/Output&#xff09;类库编写的一个高性能、异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可…...

最新版 (持续更新)docker 加速源 linux yum 源

收藏两个网站&#xff0c;配置docker 加速源与yum 源。 docker 加速源链接 Docker/DockerHub 国内镜像源/加速列表&#xff08;2月25日更新-长期维护&#xff09;-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/2485043 yum 源 CentOS7停服后yum源配置…...

MapReduce编程模型

MapReduce编程模型 理解MapReduce编程模型独立完成一个MapReduce程序并运行成功了解MapReduce工程流程掌握并描述出shuffle全过程&#xff08;面试&#xff09;独立编写课堂及作业中的MR程序理解并解决数据倾斜 1. MapReduce编程模型 Hadoop架构图 Hadoop由HDFS分布式存储、M…...

开源|Documind协同文档(接入deepseek-r1、支持实时聊天)

Documind &#x1f680; 项目介绍 Documind 一个支持实时聊天和接入deepseek-r1模型AI助手的协同文档编辑项目 前端&#xff1a;NextJS React TailwindCSS ShadcnUl Tiptap Zustand后端&#xff1a;NextJS Convex Liveblocks Clerk项目预览&#xff1a;Documind 预览…...

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候&#xff0c;通过命令行注册相应的服务&#xff08;比如cloudwego项目的demo_proto以及user服务&#xff09;失败。 解决办法 经过分析&#xff0c;是…...

`maturin`是什么:matu rus in python

maturin是什么 maturin 是一个用于构建和发布 Rust 编写的 Python 绑定库的工具。它简化了将 Rust 代码集成到 Python 项目中的过程,支持创建不同类型的 Python 包,如纯 Python 包、包含 **Rust (系统编程语言)**扩展模块的包等。以下为你详细介绍 maturin 的相关信息并举例…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_file_t

ngx_file_t 定义在 src/core/ngx_core.h typedef struct ngx_file_s ngx_file_t;ngx_file_s 定义 在 src/core/ngx_file.h struct ngx_file_s {ngx_fd_t fd;ngx_str_t name;ngx_file_info_t info;off_t …...

【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取

【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取 一、问题背景 政府的icp备案时&#xff0c;或者某些三方SDK以来的管理后台&#xff0c;都需要配置鸿蒙应用的公钥和证书MD5指纹 二、解决方案 专有名词解释&#xff1a; 华为AppGallery Connect简称 AGC平台&#xff0…...

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…...

两台互通的服务器使用Docker部署一主两从MySQL8.0.35

文章目录 1. 使用Docker Overlay网络&#xff08;需Swarm模式&#xff09;在服务器1&#xff08;172.25.0.19&#xff09;上&#xff1a;在服务器2&#xff08;172.25.0.20&#xff09;上&#xff1a;创建 overlay 网络&#xff08;172.25.0.19&#xff09;&#xff1a; 2. 部署…...

使用Semantic Kernel:对DeepSeek添加自定义插件

SemanticKernel介绍 Semantic Kernel是一个SDK&#xff0c;它将OpenAI、Azure OpenAI等大型语言模型与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点。 为什么需要添加插件&#xff1f; 大语言模型虽然具有强大的自然语言理解和…...

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP

DeepSeek 自由职业 发现新大陆&#xff0c;从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...

mysql数据迁移到SQLserver: 构建数据迁移脚本

文章目录 引言转换方法将 MySQL 脚本转换为 SQL Server 脚本主要修改点I 迁移案例菜单数据迁移迁移脚本1迁移脚本2I MySQL中将INT类型转换为字符串的方法‌CAST函数‌(标准SQL)‌CONVERT函数‌(MySQL特有)‌隐式转换‌(上下文触发)‌修改表结构‌(永久转换)保留前导零用…...

【Python在校课堂笔记】Python第1节课 【课下总结】

2025 - 02 - 28 - 第 63 篇 Author: 郑龙浩 / 仟濹 【Python在校课堂笔记】 Python第1节课 【课下总结】 2025-02-27上课 写这篇笔记不仅仅为了写作业&#xff0c;也是想总结一下本节课的内容加深印象&#xff0c;同时发布博客方便复习。 一 print() 的多种使用 1 直接打印…...

3分钟idea接入deepseek

DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型&#xff0c;背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术&#xff0c;拥有多个版本的模型&#xff0c;如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…...

【论文学习】DeepSeek-R1 总结

文章目录 Abstract1. Introduction2. Approach2.1. Overview2.2. DeepSeek-R1-Zero: Reinforcement Learning on the Base Model2.3. DeepSeek-R1: Reinforcement Learning with Cold Start2.4. Distillation: Empower Small Models with Reasoning Capability 3. Experiment3.…...

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…...

五、数据库索引详解:作用、原理与使用指南

数据库索引详解&#xff1a;作用、原理与使用指南 一、索引的作用&#xff08;为什么需要索引&#xff1f;&#xff09; 1. 生活中的类比 想象你要在一本 500 页的书中快速找到「数据库索引」相关内容&#xff1a; 没有目录&#xff1a;需要逐页翻找 → 全表扫描有目录&…...

如果使用MODBUS通用类进行通信

1. 初始化串口 在使用 ModbusRTU 类之前&#xff0c;需要先初始化串口。以下是一个示例代码&#xff1a; cpp复制 // 初始化 ModbusRTU 对象 ModbusRTU modbus;// 配置串口参数 modbus.initializePort("COM5", 115200); // 使用 COM5 和波特率 115200 modbus.setD…...

osgEarth安装总结

第一步&#xff1a;安装OSG 直接通过git下载源码&#xff0c;使用cmake进行编译&#xff0c; git clone --depth 1 https://github.com/openscenegraph/OpenSceneGraph.git mkdir build cd build cmake .. make sudo make isntall编译过程中缺什么库&#xff0c;就安装什么库 …...

自动化测试无法启动(java.net.SocketException)

在运行测试代码,对浏览器进行自动化操作时,遇到了以下问题,添加依赖,编写了测试代码,但是程序无法运行 这个有两种原因(我使用的是谷歌浏览器): 网络问题: 因为需要从GitHub上下载对应包,所以有时候可能会出现网络问题,这个时候可以打开VPN之后,重新对程序进行启动 浏览器版本…...

MOM成功实施分享(七)电力电容制造MOM工艺分析与解决方案(第一部分)

声明&#xff1a;文章仅用于交流学习&#xff0c;不用于商业项目实施&#xff0c;图片来源于网络&#xff0c;如有侵犯权利&#xff0c;请联系作者及时删除。 本方案旨在对电力电容&#xff08;PEC和PQM型号&#xff09;制造工艺深度分析&#xff0c;结合管理要求设计MOM相关功…...

如何查看react的版本号

方法一&#xff1a;通过 package.json 查看&#xff08;静态查看&#xff09; 打开项目根目录下的 package.json 文件在 dependencies 或 devDependencies 字段中查找 react 和 react-dom 的版本号&#xff1a;{"dependencies": {"react": "^18.2.0&…...

STM32呼吸灯实验手册(TIM定时器)

一、实验目标 使用TIM定时器的PWM模式控制LED亮度实现LED渐亮渐灭的呼吸灯效果掌握HAL库的TIM配置方法 二、硬件准备 开发板&#xff1a;STM32F103C8T6LED模块&#xff1a;LED串联220Ω电阻两组USB-TTL调试器硬件连接 三、软件配置&#xff08;STM32CubeMX&#xff09; 打开…...

Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录

因业务需要表单组件中嵌套着表格列表&#xff0c;内容比较多&#xff1b; 所以需要表单校验不通过时&#xff0c;自动定位到不通过的节点&#xff1b; 但发现这个像是没有起到效果一样&#xff0c;后面就是排查的思路了&#xff1a; 容器高度问题&#xff1a;如果表单容器的高度…...