乐于分享
好东西不私藏

UVM寄存器模型深度解析:源码级RAL全解

UVM寄存器模型深度解析:源码级RAL全解

一、为什么需要寄存器模型(RAL)—— 从痛点到设计哲学

在芯片验证中,寄存器操作占据验证用例的相当大比例。传统做法——在 sequence 中硬编码地址、手动拼 bit 掩码——随着项目规模增长会引发一系列工程噩梦。UVM 的 Register Abstraction Layer(RAL)正是从工程实践中提炼出来的系统性解法。
传统方式痛点
具体问题
RAL 解法
核心机制
地址硬编码
地址散落在数百个 sequence 中,IP 改地址需批量修改
用寄存器名访问,地址集中在 map 管理
uvm_reg_map
位域不可见
手动 mask/shift 拼接字段,容易出错且不可维护
直接操作字段名,RAL 自动处理 mask/shift
uvm_reg_field
无预测值
不知道寄存器当前期望值,比对需要额外逻辑
维护 mirror/desired 值,随时查询
mirror_value
后门访问繁琐
DPI 后门访问路径散落代码中,多 TOP 场景混乱
统一 HDL path 管理,一键前/后门切换
uvm_hdl_path_concat
无法自测
复位值、读写属性需手写 checker,工作量大
内建 uvm_reg_hw_reset_seq 等自动化测试序列
uvm_reg_sequence
覆盖率盲区
不知道哪些字段、哪些值被写过/读过
内建 field_vals / reg_bits 覆盖率模型
UVM_CVR_*
RAL 的设计哲学:将"验证环境如何与 DUT 寄存器通信"这一问题分层解耦 —— 业务层(sequence)只关心功能语义,传输层(adapter)只关心总线协议,同步层(predictor)只关心 mirror 更新。三层职责清晰,变化独立。

二、RAL 类体系与架构全景

RAL 由 10+ 个核心类构成,我们先建立整体认知,再逐层深入源码。

三、uvm_reg_block 深度源码剖析

uvm_reg_block 继承自 uvm_object(不是 component),这个设计决策意义深远:它可以被工厂覆盖、被传递到任何地方,但不参与 phase 机制,其 build() 必须由用户显式调用。

3.1 关键成员变量源码

为什么用 AA 而不是 queue?源码中存储 reg/mem/blk 均使用关联数组(key = handle 本身)。好处:①防止重复注册(AA key 唯一);②删除/查找 O(1);③迭代 foreach(regs[r]) 语义清晰。

3.2 lock_model() 的内部机制

lock_model() 不仅是"防写开关",它还触发了一系列重要的初始化逻辑:

3.3 层次化子块:get_reg_by_offset() 的递归查找

四、uvm_reg_field 状态机与访问类型深度解析

uvm_reg_field 是 RAL 中最核心的状态机。每个 field 内部维护两个关键值:desired value(期望值)和 mirror value(镜像值),以及控制其行为的访问类型字符串。理解这个状态机是写出正确验证代码的基础。

4.1 desired vs mirror:两种值的本质区别

概念
含义
更新时机
典型用途
desired_value
软件"想要"写入的值,尚未驱动到总线
set()/write() 调用时立即更新
攒多个 field 后一次性 update() 到 DUT
mirror_value
RAL 认为 DUT 当前持有的值
read()/write() 完成后,或 predictor 同步后
get_mirrored_value() 查当前状态
reset_value
复位后的默认值(在 configure 时设定)
reset() 调用时,mirror 和 desired 都恢复
hw_reset 序列自动比对

4.2 所有访问类型的状态机行为(源码级)

访问类型不仅决定"能不能写",更精确定义了写操作后 mirror 值如何变化、读操作后值如何变化。以下是源码中 XpredictX() 函数对各类型的处理逻辑:

W1C 的常见误区:很多人以为 W1C 是"写1才能清零整个寄存器",实际上是写1的位清零,写0的位不变。所以清中断时要写 int_status.write(status, 32'hFFFF_FFFF) 全清,而不是写 0。

4.3 configure() 参数详解

volatile 标志的深层含义:当 field 标记为 volatile=1,RAL 知道硬件可能随时改变此值,因此 get_mirrored_value() 的结果不可信,需要通过 read() 或后门访问重新同步。典型场景:中断状态寄存器(硬件自动置位)。

五、write() / read() 完整调用链深度追踪

很多工程师只会调用 reg.write(status, value),但对内部发生了什么一无所知。一旦出现 timeout、mirror 不同步、adapter 报错等问题,就无从排查。本节通过源码追踪完整调用链。

5.1 前门写操作完整调用链

1.uvm_reg::write(status, value, path, map, ...):用户调用入口。检查参数,选择路径(UVM_FRONTDOOR / UVM_BACKDOOR / UVM_DEFAULT_PATH)。若 map=null,自动获取 default map。构造 uvm_reg_item 封装写请求。

2.uvm_reg::do_write(rw):检查 field 访问权限(RO 字段给出警告但不阻止)。调用 pre_write() 钩子(用户可 override)。根据路径分发:前门 → map.do_write(),后门 → uvm_reg_backdoor.write()。

3.uvm_reg_map::do_write(rw):调用 adapter.reg2bus(rw) 将 uvm_reg_item 转换为 bus_seq_item。将生成的 bus item 通过 sequencer 发送(start_item/finish_item)。等待总线事务完成(task,消耗仿真时间)。

4.adapter.reg2bus(rw) → 用户实现:将 rw.value(寄存器值)、rw.addr(地址)、rw.kind(UVM_WRITE)转换为具体协议的 sequence item(如 apb_seq_item.paddr = rw.addr)。这是唯一需要用户实现的协议相关代码。

5.bus driver 驱动波形 → DUT 完成写入:总线 driver 驱动 APB/AXI/AHB 等协议波形,DUT 寄存器写入完成,PREADY 等握手信号返回。

6.bus monitor 采样 → predictor.write():monitor 在总线上采样到写事务,通过 analysis port 广播。predictor 的 analysis imp 收到后调用 adapter.bus2reg() 反向解析,然后调用 rg.predict() 更新 mirror。

7.post_write() 钩子 + status 返回:调用 post_write() 用户钩子。更新 field 的 desired 和 mirror 值(通过 XpredictX 计算新 mirror)。返回 status(UVM_IS_OK / UVM_NOT_OK)给调用方。

5.2 set() + update() 模式 vs write() 模式

方式
调用示例
消耗时间
适用场景
mirror 更新时机
write()
reg.ctrl.write(status, val)
是(等总线)
单次写,立即生效
write() 返回后
set()+update()
reg.mode.set(2); reg.update(status)
是(update时)
改多字段后批量写
update() 返回后
set()+write_reg()
reg.set(val); reg.write(status, reg.get())
手动控制写值
write() 返回后
poke()
reg.poke(status, val)
否(后门)
强制设置,调试/初始化
立即
predict()
reg.predict(val)
手动同步mirror(不走总线)
立即

六、uvm_reg_adapter 深度剖析 —— 协议桥接核心

uvm_reg_adapter 是 RAL 与具体总线协议之间的"翻译官"。它是 RAL 中唯一需要用户基于具体协议实现的核心类。理解其内部机制,能帮助解决大量奇怪的 RAL 调试问题。

6.1 源码结构与关键标志

6.2 APB Adapter 完整实现

6.3 AXI4-Lite Adapter(支持字节使能)

provides_responses 是最常见的 adapter Bug 来源
  • AXI/OCP 等有独立响应通道的协议:provides_responses = 1,且 driver 必须调用 put_response(rsp)
  • APB/简单 SRAM 等同步协议:provides_responses = 0,finish_item 返回即代表完成
  • 设置错误会导致:RAL 永远等不到 response 而挂死,或 response 未被取出导致 sequencer 队列溢出

七、uvm_reg_predictor 同步机制深度解析

uvm_reg_predictor 是 RAL 中最容易被忽视、但一旦缺失就会导致 mirror 长期不同步的组件。它的职责是:监听总线上的所有寄存器访问,自动更新 RAL 的 mirror 值,使 mirror 始终反映 DUT 的真实状态。

7.1 predictor 的源码核心逻辑

7.2 predictor 的连接与配置

最常见的 predictor 配置错误① m_predictor.map 未设置 → predict 时查不到 map,所有 mirror 不更新② monitor ap 未连到 predictor bus_in → predictor 收不到事务,mirror 永远是初始值③ adapter 在 connect_phase 后才赋值给 predictor → 早期仿真的 predict 用了 null adapter,crash④ 多 map 环境中 predictor 连了错误的 map → 地址反查失败,大量 "Predict failed" 报错

7.3 auto_predict vs explicit predict

UVM 提供了 两种 mirror 更新模式,需要根据项目情况选择:
模式
开启方式
原理
适用场景
风险
explicit predict
(默认)
接入 predictor 组件
监听总线实际波形,从波形反向 predict
推荐。真实反映 DUT 状态
monitor 采样不准时 mirror 会偏
auto predictmap.set_auto_predict(1)
write()/read() 调用后立即更新 mirror(不等总线)
简单仿真、无 predictor 时间
不走实际总线,mask/strobe 场景不准确

八、前门 vs 后门访问:内核机制与工程选择

8.1 后门访问的 HDL 路径机制

后门访问通过 DPI 直接读写 HDL 信号,绕过总线协议,零仿真时间消耗。其核心是 HDL 路径(hdl_path)的管理机制。

8.2 后门访问内核:uvm_hdl_read/write

8.3 前/后门的工程选择策略

场景
推荐方式
原因
复位值检查
后门读(poke/peek)
仿真开始时总线未就绪,后门可无视时序
功能测试(协议验证)
前门
验证总线协议逻辑,覆盖真实访问路径
DUT 初始化(大量寄存器)
后门写
大量配置用前门耗时极长,后门几乎零时间
中断响应验证
前门写(W1C)+ 后门读比对
验证清中断行为正确,后门快速确认状态
低功耗切换后恢复
后门读 snapshot + 前门写 restore
快速 dump 寄存器状态,协议层恢复
门级仿真
前门(后门路径可能失效)
门级网表 HDL 路径与 RTL 不同,慎用后门

九、多 Map 场景:多总线访问同一寄存器块

在复杂 SoC 中,同一个寄存器块可能被多条总线访问(如 CPU 通过 AHB,DMA 通过 AXI)。UVM RAL 通过多 map 机制优雅地支持这种场景。

9.1 多 map 的创建与使用

9.2 层次化子 map 与绝对地址计算

十、寄存器覆盖率:从 API 到覆盖组内核

UVM RAL 内建了完整的寄存器覆盖率框架,但很多工程师只知道它存在,不知道如何正确配置和使用。

10.1 覆盖率类型定义(源码)

10.2 覆盖率开启与 sample() 钩子实现

覆盖率两个必须条件:① reg 的 new() 第3参数包含该类型(has_coverage);② test 中调用 set_coverage() 开启。缺少任一条件,sample() 都不会采样。

十一、内建测试序列:源码级剖析与定制

序列名
验证内容
路径
核心算法
uvm_reg_hw_reset_seq
所有 field 复位值是否正确
前门读
遍历所有 has_reset 的 field,read 后比对 get_reset()
uvm_reg_bit_bash_seq
每 bit 读写功能
前门
对每 bit 依次写1/0,walking 1s/0s 验证回读
uvm_reg_access_seq
前门写 + 后门读交叉验证
前门写+后门读
前门写随机值,后门 peek 确认写入,比对
uvm_mem_walk_seq
内存 walking 1s/0s
前门
全深度写1走位/写0走位,覆盖所有 cell
uvm_mem_access_seq
内存前后门交叉测试
前门写+后门读
与 reg_access_seq 类似

11.1 hw_reset_seq 源码核心

十二、uvm_mem:大块内存 RAL 建模

uvm_mem 与 uvm_reg 最本质的区别:不维护 mirror value(内存太大),访问时总是真实读写,且行地址需要显式传入。

十三、RAL 高级调试技巧

十四、高频 Bug 清单与最佳实践

#
Bug 描述
症状
修复方法
1
忘记 lock_model()
地址冲突不报错,运行时随机错误
build() 最后必须调 lock_model()
2
configure/build 顺序错误
field NullPointer crash
先 configure() 再 build()
3
provides_responses 设错
write() 永远不返回(挂死)
同步协议=0(APB),异步协议=1(AXI)
4
predictor.map 未配置
mirror 永远不更新
connect_phase 设置 predictor.map
5
monitor ap 未连 predictor
同上
monitor.ap.connect(predictor.bus_in)
6
多 map 时 write 未指定 map
走错总线
reg.write(status, val, UVM_FRONTDOOR, map)
7
volatile field 用 mirror 比对
中断状态比对误报
volatile field 必须 read() 重新读取
8
W1C 写0以为能清零
中断清不掉
W1C 必须写1清零,写 0xFFFFFFFF 全清
9
后门 HDL 路径写错
backdoor 返回 x,uvm_hdl_read warning
仿真器先 $display 验证路径可达
10
bus2reg 忘 $cast
prdata=0,mirror 全部错误
$cast 失败立刻 `uvm_fatal
11
set_sequencer 在 build 中调用
sequencer 未建,connect 失败
必须在 connect_phase 调用
12
字节序配置错误
读出值高低字节颠倒
确认平台字节序,create_map 第4参数
13
update() 没产生总线事务
以为写了,实际没写
desired==mirror 时 update 跳过,改用 write()
14
误以为 read() 只读 mirror
不走总线导致状态未刷新
read() 一定走总线,返回 DUT 真实值
15
set()+update() 并发不安全
多 fork 改同一 reg desired,结果随机
用 semaphore 保护,或改用 write()

十五、RAL 知识点全景思维导图

写在最后:UVM RAL 的精髓在于分层解耦。业务逻辑(sequence)不关心总线协议;协议桥接(adapter)不关心验证逻辑;mirror 同步(predictor)不关心如何触发访问。每一层职责清晰,变化独立。理解这个架构哲学,RAL 的所有细节都会豁然开朗。

👍 ❤️ 🔔

如果这篇文章对你有帮助,点赞 + 推荐 + 分享给更多的朋友!

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-16 16:39:14 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/633706.html
  2. 运行时间 : 0.428055s [ 吞吐率:2.34req/s ] 内存消耗:4,718.42kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=97cd31b2f6e932f575b8db130beeacc3
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000674s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.069629s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.009178s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002961s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001052s ]
  6. SELECT * FROM `set` [ RunTime:0.000428s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000989s ]
  8. SELECT * FROM `article` WHERE `id` = 633706 LIMIT 1 [ RunTime:0.001775s ]
  9. UPDATE `article` SET `lasttime` = 1778920754 WHERE `id` = 633706 [ RunTime:0.004008s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000441s ]
  11. SELECT * FROM `article` WHERE `id` < 633706 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000663s ]
  12. SELECT * FROM `article` WHERE `id` > 633706 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000678s ]
  13. SELECT * FROM `article` WHERE `id` < 633706 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001794s ]
  14. SELECT * FROM `article` WHERE `id` < 633706 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003983s ]
  15. SELECT * FROM `article` WHERE `id` < 633706 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007358s ]
0.431996s