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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70947.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TDengine 中的數據庫

數據庫概念 時序數據庫 TDengine 中數據庫概念&#xff0c;等同于關系型數據庫 MYSQL PostgreSQL 中的數據庫&#xff0c;都是對資源進行分割管理的單位。 TDengine 數據庫與關系型數據庫最大區別是跨庫操作&#xff0c;TDengine 數據庫跨庫操作除了少量幾個SQL 能支持外&…

開源電商項目、物聯網項目、銷售系統項目和社區團購項目

以下是推薦的開源電商項目、物聯網項目、銷售系統項目和社區團購項目&#xff0c;均使用Java開發&#xff0c;且無需付費&#xff0c;GitHub地址如下&#xff1a; ### 開源電商項目 1. **mall** GitHub地址&#xff1a;[https://github.com/macrozheng/mall](https://git…

如何設計一個短鏈系統?

短鏈系統設計的關鍵要點: 系統功能實現 短鏈生成:接收長鏈接,先檢查是否已有對應短鏈,存在則直接返回。否則,使用分布式 ID 生成器(如號段模式、SnowFlake 算法、數據庫自增 ID、Redis 自增等)生成唯一 ID,或通過哈希算法(如 MurmurHash)處理長鏈接得到哈希值。再將生…

數據結構(初階)(三)----單鏈表

單鏈表 概念 概念&#xff1a;鏈表是?種物理存儲結構上?連續、?順序的存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。 結點 與順序表不同的是&#xff0c;鏈表的結構類似于帶車頭的火車車廂&#xff0c;&#xff0c;鏈表的每個車廂都是獨立…

游戲引擎學習第129天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 小妙招: vscode:定位錯誤行 一頓狂按F8 重構快捷鍵:F2 重構相關的變量 回顧并為今天的內容做準備 今天的工作主要集中在渲染器的改進上&#xff0c;渲染器現在運行得相當不錯&#xff0c;得益于一些優化和組織上的改進。我們計…

文字描邊實現內黃外綠效果

網頁使用 <!DOCTYPE html> <html> <head> <style> .text-effect {color: #ffd700; /* 黃色文字 */-webkit-text-stroke: 2px #008000; /* 綠色描邊&#xff08;兼容Webkit內核&#xff09; */text-stroke: 2px #008000; /* 標準語法 *…

yolov8 目標追蹤 (源碼 +效果圖)

1.在代碼中 增加了s鍵開始追蹤 e鍵結束追蹤 顯示移動距離(代碼中可調標尺和像素的比值 以便接近實際距離) 2.繪制了監測區域 只在區域內的檢測 3.規定了檢測的類別 只有人類才繪制軌跡 import osimport cv2 from ultralytics import YOLO from collections import defaultdic…

2.5 運算符2

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商業目的 2.5.3 賦值運算符 賦值運算符將值存儲在左操作數指定的對象中。有兩種賦值操作&#xff1a; 1、簡單賦值&#xff0c;使用。其中第二…

地彈與振鈴

地彈&#xff08;Ground Bounce&#xff09;和振鈴&#xff08;Ringing&#xff09;是數字電路中常見的信號完整性問題&#xff0c;兩者都與高速開關和寄生參數有關&#xff0c;但表現形式和成因不同。以下是它們的對比及解決方法&#xff1a; 1. 地彈&#xff08;Ground Bounc…

解決Deepseek“服務器繁忙,請稍后再試”問題,基于硅基流動和chatbox的解決方案

文章目錄 前言操作步驟步驟1&#xff1a;注冊賬號步驟2&#xff1a;在線體驗步驟3&#xff1a;獲取API密鑰步驟4&#xff1a;安裝chatbox步驟5&#xff1a;chatbox設置 價格方面 前言 最近在使用DeepSeek時&#xff0c;開啟深度思考功能后&#xff0c;頻繁遇到“服務器繁忙&am…

二十三種設計模式

2 工廠方法模式 工廠模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式&#xff0c;它提供了一種創建對象的最佳方式。 在工廠模式中&#xff0c;我們在創建對象時不會對客戶端暴露創建邏輯&#xff0c;并且是通…

基于C語言對CAPL語法基礎的理解

.CAPL是基于C語言開發的&#xff0c;專門用于CANalyzer和CANoe工具環境&#xff0c;但是CAPL簡化了C語言&#xff0c;移除了復雜的指針概念&#xff0c;和一些不常用的關鍵字。 2.CAPL 腳本是基于事件驅動的&#xff0c;任何事件都有可能觸發CAPL腳本的執行&#xff0c;比如&a…

【Java SE】Java中String的內存原理

參考筆記&#xff1a; Java String 類深度解析&#xff1a;內存模型、常量池與核心機制_java stringx、-CSDN博客 解析java中String的內存原理_string s1 new string("ab");內存分析-CSDN博客 目錄 1.String初識 2.字符串字面量 3.內存原理圖 4. 示例驗證 4.…

Prometheus + Grafana 監控

Prometheus Grafana 監控 官網介紹&#xff1a;Prometheus 是一個開源系統 監控和警報工具包最初由 SoundCloud 構建。自 2012 年成立以來&#xff0c;許多 公司和組織已經采用了 Prometheus&#xff0c;并且該項目具有非常 活躍的開發人員和用戶社區。它現在是一個獨立的開源…

【Python爬蟲(95)】Python爬蟲進階:構建大型垂直領域爬蟲系統

【Python爬蟲】專欄簡介:本專欄是 Python 爬蟲領域的集大成之作,共 100 章節。從 Python 基礎語法、爬蟲入門知識講起,深入探討反爬蟲、多線程、分布式等進階技術。以大量實例為支撐,覆蓋網頁、圖片、音頻等各類數據爬取,還涉及數據處理與分析。無論是新手小白還是進階開發…

Node.js定義以及性能優化

Node.js Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時&#xff0c;廣泛用于構建高性能的網絡應用。以下是一些常見的 Node.js 面試題及其解答&#xff0c;幫助你準備面試&#xff1a; 1. 什么是 Node.js&#xff1f; Node.js 是一個基于 Chrome V8 引擎的 JavaSc…

開源|Documind協同文檔(接入deepseek-r1、支持實時聊天)

Documind &#x1f680; 項目介紹 Documind 一個支持實時聊天和接入deepseek-r1模型AI助手的協同文檔編輯項目 前端&#xff1a;NextJS React TailwindCSS ShadcnUl Tiptap Zustand后端&#xff1a;NextJS Convex Liveblocks Clerk項目預覽&#xff1a;Documind 預覽…

JVM內存模型詳解:各個區域的作用與原理

引言 Java虛擬機&#xff08;JVM&#xff09;是Java程序運行的核心環境&#xff0c;它負責管理程序的內存、執行字節碼以及提供跨平臺的支持。理解JVM的內存模型對于編寫高效、穩定的Java程序至關重要。本文將詳細介紹JVM的內存模型&#xff0c;并深入探討各個內存區域的作用和…

機器學習之集成學習思維導圖

學習筆記—機器學習-集成學習思維導圖 20250227&#xff0c;以后復習看&#xff08;周老師的集成學習&#xff09; PS&#xff1a;圖片看不清&#xff0c;可以下載下來看。 往期思維導圖&#xff1a; 機器學習之集成學習Bagging&#xff08;隨機深林、VR-樹、極端隨機樹&…

【http://noi.openjudge.cn/】4.3算法之圖論——1538:Gopher II

[【http://noi.openjudge.cn/】4.3算法之圖論——1538:Gopher II] 題目 查看提交統計提問 總時間限制: 2000ms 內存限制: 65536kB 描述 The gopher family, having averted the canine threat, must face a new predator. The are n gophers and m gopher holes, each at di…