FPGA仿真与Test Bench编写实战:从Vivado工具到验证方法学
1. 项目概述为什么FPGA仿真与Test Bench是设计的生命线在FPGA开发的世界里写完RTL代码只是万里长征的第一步。代码能否在真实的硬件上按照预期运行逻辑时序是否正确功能是否完备这些问题在烧录进芯片之前都必须通过仿真来回答。如果把FPGA设计比作建造一座摩天大楼那么仿真就是施工前的全套计算机模拟和压力测试它能发现设计图纸中的结构缺陷、管线冲突避免建成后推倒重来的灾难性后果。而Test Bench就是这个模拟测试环境的总设计师和总控台。Vivado作为Xilinx现AMD主流的FPGA开发套件其集成的仿真工具功能强大但细节繁多。很多初学者甚至是有一定经验的工程师往往只停留在“点一下Run Simulation看看波形”的层面对仿真的深度、方法和技巧缺乏系统性的理解。这导致很多潜在问题直到板级调试时才暴露出来调试周期长成本高昂。本文将从一个资深FPGA开发者的视角彻底拆解Vivado仿真的全流程并深度剖析Test Bench的编写艺术。无论你是正在学习FPGA的学生还是希望提升验证效率的工程师这篇文章都将为你提供一套可直接复用的、深入骨髓的实战方法论。2. Vivado仿真环境全解析不止于点击运行Vivado内部集成了多个仿真引擎并支持与第三方仿真器的联合仿真。理解这些工具的特性和适用场景是高效开展仿真工作的基础。2.1 仿真器选型XSim vs. 第三方仿真器Vivado自带仿真器称为XSimXilinx Simulator。对于大多数中小型项目和学习用途XSim完全够用。它启动快与Vivado环境无缝集成支持基本的波形查看、调试功能。然而当项目规模变大代码量达到数十万甚至百万行时或者需要复杂的验证方法学如UVM时XSim在仿真性能、调试功能和高级特性支持上就会显得力不从心。这时就需要引入第三方专业仿真器如Mentor的QuestaSim/ModelSim网络热词中提到的questasim、Cadence的Xcelium、Synopsys的VCS等。如何选择这里有一个简单的决策树学习、小型项目、功能简单验证优先使用XSim。无需额外安装和License配置开箱即用。中大型项目、算法验证、需要代码覆盖率建议使用QuestaSim。它在性能和功能上取得了很好的平衡且与Vivado的集成相对较好需正确配置PATH和LICENSE_FILE环境变量。超大型SoC项目、需要与前端设计深度协同、追求极致仿真速度考虑VCS或Xcelium。但这通常意味着更复杂的环境配置和更高的License成本。注意网络热词中提到的“vivado能连上但ise连不上”这类问题通常源于环境变量冲突、License文件设置错误或仿真器版本与Vivado版本不兼容。一个干净的开发环境以及严格遵循Xilinx/AMD官方文档的配置步骤是避免此类问题的关键。2.2 仿真库编译被忽视的基石无论是使用XSim还是第三方仿真器只要你的设计中实例化了Xilinx的官方IP核如Block RAM、FIFO、DDS、SerDes等就必须先编译这些IP核对应的仿真模型库。很多仿真失败报错找不到某个模块的定义根源就在这里。编译仿真库是一个“一劳永逸”但必须执行的操作。在Vivado中你可以通过Tools - Compile Simulation Libraries来启动编译向导。这个过程的关键在于选择正确的仿真器下拉菜单中会列出已检测到的仿真器务必选择你计划使用的那一个。指定编译库路径建议使用一个独立的、路径中不含中文和空字的目录例如D:/Xilinx/Vivado_Libs。所有编译后的.lib文件都会存放在此。耐心等待编译所有库可能需要几十分钟到数小时取决于你的电脑性能和选择的器件家族如UltraScale系列比7系列更庞大。编译完成后Vivado会在你指定的目录下生成一个modelsim.ini或questa.ini文件。当你使用第三方仿真器时需要确保其启动配置指向这个ini文件这样才能正确链接到已编译的仿真库。2.3 仿真波形调试看懂时序的艺术仿真最直观的输出就是波形。但看波形不是看热闹而是看门道。Vivado的波形查看器提供了强大的调试功能。关键技巧1分组与重命名。将相关的信号拖拽到一起并赋予有意义的组名如“AXI_Stream_Interface”、“Ctrl_Signals”可以极大提高调试效率。对于总线信号可以右键选择“Radix”将其显示为无符号十进制、有符号十进制、十六进制等便于观察数据值。关键技巧2使用标记和测量工具。波形窗口上的“Markers”工具可以放置时间标记T1 T2并直接显示两个标记之间的时间差。这对于测量关键路径的延迟、验证时序关系如建立保持时间至关重要。例如你可以标记一个时钟上升沿和对应的数据有效窗口来检查建立时间是否满足。关键技巧3将仿真数据导出给Matlab分析。这是网络热词中明确提到的一个高级需求。对于信号处理、图像处理等算法验证光看波形不够需要做频谱分析、误差计算等。方法如下 1. 在波形窗口中选中需要导出的信号通常是数据总线。 2. 右键 -Export - Export to Waveform...。 3. 在弹出窗口中选择导出格式为Value Change Dump (.vcd)或Comma Separated Value (.csv)。CSV格式更便于Matlab直接读取。 4. 指定导出文件名和路径。 5. 在Matlab中可以使用csvread或readmatrix函数读取CSV文件然后进行后续分析。通过对比FPGA仿真输出与Matlab黄金参考模型的输出可以定量评估算法实现的正确性和精度。3. Test Bench编写实战从脚手架到验证平台Test Bench的本质是一个用HDLVerilog或VHDL编写的、用于实例化待测设计DUT并施加激励、检查响应的程序。一个优秀的Test Bench应该是自洽的、可重复的、并且具备一定的错误检测和报告能力。3.1 Test Bench的基本结构与要素一个最基础的Test Bench通常包含以下部分timescale 1ns / 1ps // 时间单位/精度 module tb_your_design(); // 1. 时钟和复位信号定义 reg clk; reg rst_n; // 2. 连接到DUT的输入信号定义为reg类型因为由Test Bench驱动 reg [7:0] data_in; reg data_valid; // 3. 从DUT输出的信号定义为wire类型 wire [7:0] data_out; wire data_ready; // 4. 实例化待测设计 (DUT) your_design uut ( .clk (clk), .rst_n (rst_n), .data_in (data_in), .data_valid (data_valid), .data_out (data_out), .data_ready (data_ready) ); // 5. 时钟生成最简单的方式 initial begin clk 0; forever #5 clk ~clk; // 产生一个周期为10ns100MHz的时钟 end // 6. 复位逻辑 initial begin rst_n 0; // 初始复位有效 #100; // 保持100个时间单位 rst_n 1; // 释放复位 end // 7. 主要的测试激励序列 initial begin // 等待复位结束 wait(rst_n 1b1); #20; // 测试用例1发送单个数据 data_in 8hA5; data_valid 1b1; #10; data_valid 1b0; // 等待输出并做简单检查 (posedge data_ready); // 等待data_ready变高 if (data_out ! 8hA5) begin $display([ERROR] Test Case 1 Failed! Expected 0xA5, Got 0x%h, data_out); $finish; end else begin $display([PASS] Test Case 1 Passed.); end // 可以加入更多测试用例... #1000; $display(All tests completed.); $finish; // 结束仿真 end // 8. 可选波形文件导出用于后续调试或给Matlab initial begin $dumpfile(simulation.vcd); // 生成VCD文件 $dumpvars(0, tb_your_design); // 转储所有变量 end endmodule3.2 高级激励生成告别手动“点点点”手动编写每一个激励信号如#10 data1; #10 data0;对于复杂接口如AXI、DDR接口或大数据量测试如图像帧数据是灾难性的。我们必须采用更高效的方法。方法一使用任务Task封装常用操作。task send_axi_stream_data; input [31:0] data []; integer i; begin for (i 0; i data.size(); i i 1) begin (posedge clk); axis_tdata data[i]; axis_tvalid 1b1; do begin (posedge clk); end while (axis_tready 1b0); // 等待从机准备好 (posedge clk); axis_tvalid 1b0; // 发送完一个数据后拉低valid end axis_tlast 1b1; // 最后一个数据 (posedge clk); axis_tlast 1b0; end endtask这样在主测试序列中你只需要声明一个数据数组并调用任务send_axi_stream_data(my_data_array);。方法二从文件读取激励数据。这是处理大量测试向量的标准做法。你可以将测试数据如图像的像素值、通信的帧数据预先用Matlab、Python或C语言生成保存为文本文件如.txt或.dat然后在Test Bench中读取。integer file_handle, scan_ret; reg [31:0] data_from_file; initial begin file_handle $fopen(input_stimulus.txt, r); if (file_handle 0) begin $display(Failed to open stimulus file!); $finish; end while (!$feof(file_handle)) begin scan_ret $fscanf(file_handle, %h\n, data_from_file); // 将data_from_file驱动到DUT的输入端口 (posedge clk); din data_from_file; din_valid 1b1; // ... 控制逻辑 end $fclose(file_handle); end网络热词中提到的“vivado的simulation仿真波形导出数据给matlab”是逆向过程而这是正向过程共同构成了“FPGA-Matlab联合验证”的闭环。3.3 响应检查与自动化断言仿真的最终目的是验证功能正确性。我们不能只靠肉眼观察波形必须建立自动化的检查机制。1. 实时比对在线检查在Test Bench中一边驱动激励一边检查DUT的输出是否与预期一致。这通常需要一个“黄金参考模型”。这个模型可以是一个用HDL编写的简单行为级模型也可以是通过$readmemh从文件加载的预期结果数据。always (posedge clk) begin if (dout_valid) begin if (dout ! expected_data) begin $display([ERROR time %t] Output mismatch! Got %h, Expected %h, $time, dout, expected_data); error_count error_count 1; end // 更新expected_data例如从数组或文件中读取下一个预期值 end end initial begin // ... 测试结束后 if (error_count 0) begin $display([SUCCESS] All tests passed!); end else begin $display([FAILURE] %0d errors found., error_count); end end2. 使用SystemVerilog断言SVA对于更复杂的时序关系检查SVA是更强大和简洁的工具。虽然Vivado XSim对SVA的支持有限但第三方仿真器如QuestaSim支持良好。断言可以内嵌在RTL代码中也可以写在Test Bench里用于检查诸如“req拉高后ack必须在1-3个周期内拉高”这样的协议属性。// 一个简单的断言示例 property req_ack_handshake; (posedge clk) disable iff (!rst_n) (req ##1 ack[-1]) |- (ack within [1:3]); endproperty assert_req_ack: assert property (req_ack_handshake) else $error(ACK did not arrive within 3 cycles after REQ!);4. 仿真策略与覆盖率驱动验证当设计变得复杂时随机的、无目的的仿真就像大海捞针。我们需要更聪明的策略。4.1 定向测试与随机测试结合定向测试针对特定功能路径编写的测试用例。例如测试FIFO的满、空边界条件测试状态机的每一个状态跳转。这是验证基础功能的基石。随机测试使用$random或SystemVerilog的约束随机化CRV方法在给定约束范围内随机生成激励。这有助于发现那些你没想到的“角落案例”Corner Case。例如随机数据包长度、随机延迟插入、随机错误注入等。一个高效的验证流程往往是先用定向测试搭建基本功能框架确保主干通路正确再用大量的随机测试进行“压力测试”和“探索性测试”以期暴露深层次问题。4.2 功能覆盖率收集与分析“我们仿真了多久才算够” 功能覆盖率是回答这个问题的重要指标。它衡量的是测试用例对设计功能点如状态机状态、穿越的代码分支、特定的输入组合的覆盖程度。Vivado本身不直接提供功能覆盖率收集工具但可以通过与支持覆盖率的第三方仿真器如QuestaSim联动来实现。你需要在Test Bench或RTL代码中定义覆盖组Covergroup和覆盖点Coverpoint。covergroup cg_packet_length; coverpoint packet_len { bins short {[1:63]}; bins medium {[64:1517]}; bins jumbo {[1518:9000]}; } endgroup仿真结束后仿真器会生成一个覆盖率数据库你可以用其自带工具或Vivado如果集成查看覆盖率报告。目标是达到较高的覆盖率如95%以上但更重要的是分析未覆盖到的点并据此补充针对性的测试用例形成“仿真-分析-补充”的闭环。5. 大型项目仿真管理与调试技巧5.1 仿真目录管理与脚本化一个真实的项目会有多个测试用例、多个仿真配置。良好的目录结构至关重要。我推荐的目录结构如下project/ ├── rtl/ // 所有RTL源代码 ├── sim/ │ ├── tb/ // 所有Test Bench文件 │ ├── testcases/ // 不同的测试用例目录 (tc_basic, tc_random, tc_error) │ │ ├── tc_basic/ │ │ │ ├── run.do // ModelSim/QuestaSim运行脚本 │ │ │ ├── stimulus.txt │ │ │ └── expected_output.txt │ │ └── ... │ ├── waves/ // 各测试用例的波形配置文件 │ ├── logs/ // 仿真日志文件 │ └── compile.f // 文件列表包含所有需要编译的源文件 └── xilinx_ip/ // Xilinx IP核文件使用脚本如Tcl脚本用于Vivado.do脚本用于ModelSim/QuestaSim来编译、运行仿真和加载波形可以极大提升效率并保证可重复性。5.2 高效调试定位问题的艺术当仿真结果与预期不符时如何快速定位问题分层调试法不要一上来就仿真整个顶层。先仿真最小的、独立的功能模块如一个FIFO控制器、一个特定的算法模块。确保底层模块正确后再逐级集成仿真。波形信号筛选法面对成百上千个信号不要全部添加。首先只添加关键控制信号时钟、复位、使能和出问题的数据通路信号。逐步缩小范围。使用$display和$monitor进行文本打印在关键代码位置插入打印语句输出变量的实时值。这对于调试状态机、计数器、复杂控制逻辑非常有效有时比看波形更直观。利用仿真器的调试功能如QuestaSim的“Step”单步执行、“Force”强制信号值、“Restart”重新运行到指定时间点。熟练掌握这些功能可以让你像调试软件一样调试硬件逻辑。分析仿真日志和警告Vivado仿真运行时会在Tcl控制台打印大量信息。不要忽略警告Warning很多时序问题如锁存器推断、多驱动源会先以警告形式出现。养成仔细阅读仿真开始时的编译报告和运行日志的习惯。5.3 与硬件调试的联动ILA的使用哲学Vivado集成的ILA集成逻辑分析仪是板级调试的利器。但仿真和ILA调试不是割裂的。一个高级技巧是在仿真Test Bench中模拟ILA触发和捕获的条件。例如你的ILA设定为当某个错误标志位拉高时触发。那么在你的Test Bench中可以故意构造一个会产生此错误的场景然后观察仿真波形中在错误标志拉高前后相关信号的状态是否与ILA捕获到的真实硬件行为一致。这能帮助你在仿真阶段就提前验证ILA调试方案的有效性避免在硬件上盲目抓取。6. 常见问题与排查实录以下是我在多年实践中总结的典型问题及其解决方案很多是官方文档不会提及的“坑”。问题现象可能原因排查步骤与解决方案仿真时始终为X不定态或Z高阻态1. 复位信号未正确释放或生效。2. 模块输入端口未连接悬空。3. 多个驱动源冲突。4. 组合逻辑环路。1. 检查Test Bench中复位信号的极性高有效/低有效和释放时间。2. 在波形中检查所有DUT输入端口确保已被Test Bench驱动为确定值。3. 搜索代码中是否对同一reg或wire型信号有多处赋值。4. 审查组合逻辑确保无环路。使用Vivado的“Schematic”视图查看综合后的网表有助于发现意外环路。仿真行为与硬件实测不一致1. 仿真未考虑时钟树延迟、布线延迟。2. Test Bench的时钟/复位时序与硬件板卡实际不符。3. IP核仿真模型与真实硬件行为有细微差异极少见。1. 仿真通常是“零延迟”的功能仿真。进行“时序仿真”Post-Implementation Simulation可以包含布局布线后的实际延迟更接近硬件行为但速度极慢通常只用于关键路径验证。2. 核对板卡原理图确保Test Bench中的时钟频率、复位极性、上电顺序与硬件一致。3. 对于高速接口如SerDesIP核可能提供更精确的仿真模型选项需在IP配置中启用。第三方仿真器如QuestaSim无法编译Xilinx IP1. 仿真库未编译或路径未正确设置。2. 仿真器版本与Vivado版本不兼容。3. 环境变量如MODEL_TECHPATH设置错误。1. 确认已通过Vivado的Compile Simulation Libraries为当前使用的仿真器编译了库并在仿真器启动脚本中通过-L参数或ini文件正确指向库路径。2. 查阅Xilinx/AMD官方发布的兼容性列表确保版本匹配。3. 在操作系统中检查环境变量确保指向了正确的仿真器可执行文件目录。仿真速度极慢1. 设计规模太大仿真精度设置过高。2. Test Bench中使用了低效的激励生成方式如大量#延迟。3. 波形文件.wdb或.vcd记录过多信号或全程记录。1. 对于大型设计尝试先仿真关键子模块。将仿真时间精度从1ps降低到1ns可以显著提速。2. 改用基于时钟边沿(posedge clk)的同步激励生成减少绝对时间延迟。3. 只在需要调试的时间段记录波形或使用$dumpvars的层次参数限制记录范围如$dumpvars(1, tb_top)只记录顶层信号。$finish后仿真不停止Test Bench中存在forever循环或未关闭的initial块。检查所有initial块确保它们都有明确的结束条件如$finish 或通过事件触发结束。对于时钟生成等永久循环这不是问题仿真器会在所有非永久进程结束后自动停止。个人心得仿真调试的终极心法是“分而治之”和“大胆假设小心求证”。遇到诡异的问题不要一头扎进浩瀚的波形里。首先尝试用最简单的测试向量比如全0、全1、递增数列去测试看基本功能是否正常。其次尝试在代码中临时添加一些“探针”信号把内部关键状态引出来观察。最后善用仿真器的“强制Force”功能你可以强行把某个内部信号拉成你假设的值然后看电路是否按你预期的路径运行这能快速验证你的猜想。仿真是逻辑思维与工具运用结合的艺术。

相关新闻

游戏手柄输入延迟精准测量:XInputTest技术解析与实践指南

游戏手柄输入延迟精准测量:XInputTest技术解析与实践指南

游戏手柄输入延迟精准测量:XInputTest技术解析与实践指南 【免费下载链接】XInputTest Xbox 360 Controller (XInput) Polling Rate Checker 项目地址: https://gitcode.com/gh_mirrors/xin/XInputTest 在竞技游戏领域,毫秒级的响应差异往往决定着…

2026/10/18 4:06:40 阅读更多 →
Windows文件资源管理器标签页革命:告别杂乱窗口,拥抱高效管理

Windows文件资源管理器标签页革命:告别杂乱窗口,拥抱高效管理

Windows文件资源管理器标签页革命:告别杂乱窗口,拥抱高效管理 【免费下载链接】ExplorerTabUtility 🚀 Supercharge Windows 11s File Explorer: Auto-convert windows to tabs, duplicate tabs, reopen closed ones, and more! 项目地址: …

2026/10/17 12:07:46 阅读更多 →
2026学术写作一键生成论文工具全攻略:7款实测,谁是论文党的真效率工具?

2026学术写作一键生成论文工具全攻略:7款实测,谁是论文党的真效率工具?

在 AI 持续渗透学术创作流程的 2026 年,学术写作工具的能力边界已经不再局限于内容生成,而是逐步延伸到结构梳理、格式规范、可视化表达、语言润色与答辩整理等多个关键环节。对于本科生、研究生以及需要持续输出论文与课题材料的研究者而言,…

2026/10/18 2:51:08 阅读更多 →

最新新闻

CSS凸起导航栏效果实现:从flex布局到伪元素细节优化

CSS凸起导航栏效果实现:从flex布局到伪元素细节优化

导航栏是每个前端页面都绕不开的基础组件,但基础不代表简单。前阵子做导航栏练习,专门试了一版“凸起导航栏效果”:当前激活项像一块小磁贴从工具栏底部鼓出来,和下方内容区连成同色整体。第一眼看上去挺高级,放到SaaS…

2026/10/18 8:40:19 阅读更多 →
Paper周报:构建可执行的学术信息流操作系统

Paper周报:构建可执行的学术信息流操作系统

1. 项目概述:这不是一份普通周报,而是一套可复用的学术信息流操作系统“Paper 周报 | 2026.10 #1”这个标题乍看像一份随手发在实验室群里的PDF附件,但在我过去十年帮某高校AI实验室、某医疗影像初创团队和某半导体设计公司搭建知识管理流程的…

2026/10/18 8:40:19 阅读更多 →
sqlite3跨平台静态库资源包:C++后端链接难题一包解决

sqlite3跨平台静态库资源包:C++后端链接难题一包解决

简介:面向C后端开发者的SQLite跨平台库文件包,覆盖Windows 64位/32位与Linux环境,解决不同系统下编译链接SQLite时缺少对应静态库、动态库及头文件的问题,适合快速搭建本地数据存储能力。包内共8个文件,包含3个.h头文件…

2026/10/18 8:40:19 阅读更多 →
持续集成工具Jenkins部署全流程:从安装到流水线实战

持续集成工具Jenkins部署全流程:从安装到流水线实战

我最早接触持续集成工具,就是因为被一次手动发版折磨到天亮。那次经历让我下定决心,必须把构建、测试、部署这套流程彻底自动化。而聊到持续集成工具,Jenkins 几乎是绕不开的名字。这篇文章我就结合自己部署 Jenkins 的完整过程,把…

2026/10/18 8:40:19 阅读更多 →
Arch Linux极简桌面:st终端与dwm窗口管理器深度配置指南

Arch Linux极简桌面:st终端与dwm窗口管理器深度配置指南

1. 项目概述:为什么一个极简终端窗口管理器组合值得花三天重装系统“Arch Linux 美化 (st dwm)”——这行标题在Linux桌面生态里,像一句暗号。它不谈图形界面、不提开箱即用,甚至刻意回避“桌面环境”这个词。但凡看到它的人,心里…

2026/10/18 8:40:19 阅读更多 →
Linux stress工具深度实践:从安装避坑到压测验证

Linux stress工具深度实践:从安装避坑到压测验证

简介:本资源为Linux系统管理员与运维开发人员必备的 stress 压力测试工具源码包,专用于CPU与内存极限负载场景下的稳定性验证与性能调优。资源完整包含1.0.1版本源码构建体系,共32个文件,涵盖configure配置脚本、Makefile系列构…

2026/10/18 8:39:19 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →