- 博客(67)
- 收藏
- 关注
原创 塔勒布《黑天鹅》
塔勒布最后回到实践层面:既然无法预测黑天鹅,那就让自己暴露在正面黑天鹅之下,同时保护自己免受负面黑天鹅的伤害。这就是他在《反脆弱》中进一步展开的“杠铃策略”的思想源头。
2026-10-04 18:19:19
156
原创 塔勒布《反脆弱》
这一卷的任务是提出概念,奠定全书地基。第1章:达摩克利斯之剑和九头蛇怪脆弱(达摩克利斯之剑,一次打击就毁灭)、强韧(凤凰,打击后恢复原状,但不会变强)、反脆弱(九头蛇怪,被砍一个头长出两个,冲击带来增益)知乎。大多数有机体和复杂系统都是反脆弱的,而现代社会的人造系统大多只有脆弱或坚韧属性。第2章:随处可见的过度补偿和过度反应过度补偿。骨骼在压力下变密,肌肉在撕裂后变强,免疫系统在接触少量病菌后产生抗体。适度的压力不是伤害,而是激活修复和成长机制的信号-3。无压力的绝对稳定,反而会导致退化。
2026-10-04 18:05:35
161
转载 卢安克——用观察替代想象,引领者的心态决定一切
(本文摘自卢安克《是什么带来力量》中“老师的心态决定一切”这一节,小编把题目改成了‘引领者’的心态决定一切,因为它不仅仅是指老师,适合于孩子身边所有重要的与之命运深深交融的大人们。)全文字数:4677阅读时间:14分钟我一直在尝试通过更合理的方法来消除在我课堂上的问题,所以一直在完善我的方法。但最终我发现——根本不能通过方法来解决我存在的问题。反而,我越重视只能在表面上起作用的方法,问题就越严重。在方法的表面之下起作用的,是心理,是灵心的力量。我一直都忽略了从我的心往学生那里发挥的情感,忽略了我自己情绪的作
2026-10-03 18:59:38
5
原创 FPGA--IC验证--AI--deepseek
你说“哈哈”,说“熬着”。这个语气我懂——不是真的在笑,是苦笑,是那种“道理我都懂,但日子还是得一天天过”的无奈。我不打算给你灌一碗“坚持就是胜利”的汤。你现在的处境,不是一个“选错了”的处境,而是一个“还没有走到能看清路的位置”的处境。FPGA这个行业没有死,IC验证的门也没有焊上,30岁不是终点,大城市也不是唯一的活法。你手上的牌,比你想象的多,也比你想象的少。多的是,这个行业的底盘还在,你已有的经验还有变现空间;少的是,你没有太多时间可以“再等等看”。
2026-10-03 15:30:04
278
原创 在家居士略感
你说“希望自己生死心切,出离六道,回归极乐,慈悲度众生”。这个愿非常好。但不要因为自己现在做不到就焦虑。元音老人讲,修行是“长养圣胎”,是慢慢来的。你无始劫的习气,不可能一朝断尽。你只要方向对,每天走一点,哪怕走得慢,也是在回家。最怕的是:理上说得头头是道,事上却不肯迈步;或者反过来,事上忙得团团转,心里却忘了家在哪。你现在理上已经通了,接下来就是在事上一遍一遍地练。练到有一天,你面对任何境界,心里都清清楚楚、平平等等、不取不舍——那时候,你就知道,净土不在别处,就在你当下这一念清净心里。
2026-10-03 12:45:45
281
原创 sequence.sv路科验证--deepseek
高度复用:三种不同的接口(通道数据、APB寄存器、格式配置),用相同的 Sequence 模板(继承、rand、body、),就能轻松应对。完全解耦:Sequence 只负责“造子弹”,完全不知道 Driver 是怎么把子弹变成信号的。闭环反馈:通过,Sequence 能收到 Driver 的回执,知道子弹是否成功打出,甚至能拿到读寄存器的值。软硬结合:Sequence 里的soft约束和变量,让顶层的case0_vseq。
2026-09-24 14:52:34
106
原创 monitor_channel.sv路科验证--deepseek
大白话:这里没有用之前那种装满信息的庞大子弹,而是定义了一个轻量级的“结构体(struct)”。它打包了一个 32 位的数据和 2 位的通道 ID。为什么这么写?摄像机拍完画面后,不需要把整个剧本(Transaction)都传给后方,它只需要把“画面里核心的数据”和“这是哪个通道的”打包成一张小纸条,扔给参考模型(Reference Model)就行了。packed关键字表示它在内存里是按位紧密排列的,方便传递。Driver(演员):用去<=驱动信号,还要等DUT准备好,主动去推。
2026-09-24 14:17:05
118
原创 driver_channel.sv路科验证--deepseek
UVM外套config_db收接口、要数据、item_done结束任务、发回执。Verilog内核。去 QuestaSim 里跑一下这个case0的仿真。打开波形,找到chnl0_if。放大看ch_valid和ch_ready的握手。你会看到:当ch_valid为 1 时,Driver 会等待ch_ready为 1,然后下一个时钟才发下一个数。你会在波形里看到造成的“空档期”(valid 突然拉低几个周期)。你可以尝试在的里,把改成固定值(比如。
2026-09-24 11:24:16
155
原创 agent_channel.sv路科验证--deepseek
同学,你把这个看懂了,再看agent_bus和,你会发现它们简直一模一样!只是里面装的子弹类型(transaction)不同。高内聚:所有和“通道”相关的驱动、监控、序列,全部打包在里,不散落。可复用:这个类,你可以实例化3次,分别给通道0、1、2用。灵活配置:用is_active变量,不用改代码,就能适应主动(发数据)或被动(只看数据)的不同需求。这在MCDF这种多通道DUT中极其重要(如果某个通道只是用来输出查看的,就可以用去 QuestaSim 里跑一下,在里加一句");,在里加一句");。
2026-09-24 11:09:42
151
原创 interface.sv路科验证--deepseek
这是一个典型的 valid-ready 握手通道信号方向(相对 DUT)含义ch_dataDUT 输出 / TB 输入数据ch_validDUT 输出 / TB 输入DUT 说"我数据有效"ch_readyDUT 输入 / TB 输出TB 说"我准备好了"只有同时为 1 的那个时钟沿,才算一次成功传输。这是 AXI、APB、很多总线都用的经典协议。
2026-09-23 15:09:30
90
原创 2.5 建造测试用例--deepseek
base_test是“骨架”:负责建 env、配默认 sequence、在里数错误(UVM_ERROR),打印 PASS/FAIL。my_caseX是“皮肉”:继承base_test,用覆盖(Override)的方式替换。是“灵魂”:不修改一行代码,靠命令行选择跑哪个用例。这是写回归脚本的基础。:是带约束的子弹发射,用来给随机化加上特定条件(比如载荷长度必须是60)。你现在看懂这7张图,说明你已经完全掌握了UVM第2章“搭积木”的全部流程!从零到现在能看懂这套完整机制,是非常了不起的。
2026-09-23 14:15:51
219
原创 *2.4.3 default_sequence的使用--deepseek
同学,走完这一节,你以后搭建UVM平台,90%都会用这种方式,因为它是“解耦”的最高境界。:这是传“图纸”的快递柜。最后一定要加。相对与绝对路径:在类里(Env/Agent)用this+ 相对路径;在模块里(top_tb)用null+ 绝对路径。的自动传递:UVM自动帮你把phase传进来,你只要在body()开头判断它不为空,然后即可。今天的内容是实战中的高频考点,你能看懂这几行代码的差异,说明你的“UVM树形空间感”已经完全建立起来了!在这个阶段,觉得晕、觉得需要多看几遍,是非常非常正常的。
2026-09-23 09:24:23
174
原创 *2.4.2 sequence机制--deepseek
uvm_object_utils(my_sequence) // 注册进工厂// 【核心:剧本的主体】= null)// 1. 挂起反对票`uvm_do(req) // 2. 造子弹+随机化+交给手枪(连发10次)end#1000;// 3. 发完之后,延时1000个时间单位= null)// 4. 撤销反对票endtaskendclass:说明这个剧本是专门为这种子弹写的。body():这是Sequence的主线任务,相当于Verilog里的initial块。
2026-09-22 17:07:56
116
原创 *2.3.7 加入field_automation机制--deepseek
同学,你现在回头看这一节,是不是觉得没那么玄乎了?不用手写重复代码加宏,相当于“一键生成”了copycompareprint等函数。硬件协议神器pack_bytes和让你的(面向对象)和硬件需要的字节流(面向比特/字节)完美转换。注意顺序:注册字段的顺序,就是打包/解包时的顺序。顺序错了,包就废了。注意动态数组:解包()前,务必要先给动态数组分配好大小(new[size]这块知识非常实战。你在写完这节代码后,去 QuestaSim 里跑一跑,在 Driver 的pack_bytes下面加一句。
2026-09-22 13:49:46
242
原创 2.3.6 加入scoreboard--deepseek
同学,这段代码之所以长,是因为它第一次把异步并发(fork...join)数据缓存(queue)和面向对象比较(my_compare)结合在了一起。两条线同时跑分别接标准答案和实际答案)。先来的排队等(用缓存参考模型的快速输出)。按顺序逐个比(用pop_front和my_compare逐字节核查)。不要怕这些代码。如果你在QuestaSim里跑,看到满屏幕的,你就会觉得这套复杂的机制“真香”了。如果比对失败,它立刻就能告诉你哪个字节对不上,比你肉眼在波形图里找Bug不知道快了多少倍!今天先消化到这。
2026-09-22 10:55:30
177
原创 在UVM中,通常使用TLM(Transaction Level Modeling)实现component之间transaction级别的通信。要实现通信,有两点是值得考虑的:第一,数据是如何发送的
数据发送:Monitor 用广播数据(不等待,扔完就走)。数据接收:Model 用请求数据(阻塞等待)。缓冲隔离:Env 里放一个fifo(快递柜),让 Monitor 把数据扔进去,Model 从里面取。用connect把它们连起来。打包封装:Agent 在外面开一个ap窗口,连到自己的mon.ap上,方便 Env 统一调用。“不等待的发送” + “阻塞的接收” = 必须有一个FIFO来缓冲。去QuestaSim里把这几个类加进去,把。
2026-09-21 10:57:15
127
原创 由于agent的加入,driver和monitor的层次结构改变了,在top_tb中使用config_db设置virtualmy_if时要注意改变路径---deepseek
同学,你现在弄懂了这个路径变化,以后遇到config_db路径跟着树走:你在代码里create组件的层级在哪里,config_db里的路径就得跟着加长。通配符是个好东西:如果i_agt里的drv和mon都需要同一个vif,你可以偷个懒,写成:这里的表示“i_agt下面所有的子节点,不管是drv还是mon,都可以来拿这个包裹”。是固定的:它是调用run_test()时,UVM自动创建的那个测试用例(my_test)的实例名。所有的路径,都必须以它开头(除非用绝对路径的其他形式,初学就用这个打头最稳)
2026-09-21 10:38:16
223
原创 最令人困惑的可能是build_phase中为何根据is_active这个变量的值来决定是否创建driver的实例---deepseek
你看第二张图的图2-5:左边是i_agt(输入端的agent),右边是o_agt(输出端的agent)。左边的i_agt它的任务是什么?是给DUT发激励。它需要造子弹(sequence)、扣扳机(driver),还得录像(monitor)。所以,它是主动模式(ACTIVE),既需要司机,也需要摄像机。因此,它需要,必须实例化driver。右边的o_agt它的任务是什么?DUT的输出是它自己吐出来的,不需要别人去驱动。它只需要看着(监测)DUT的输出引脚就行了。这个时候,如果它里面还强行放一个。
2026-09-21 10:27:14
187
原创 两个build_phase按照何种顺序执行呢---deepseek
先爹后儿子:因为只有爹(Env)能生儿子(Driver),所以爹的必须先跑,跑的过程中create了儿子,儿子的紧跟着在后面跑。先造人后干活:UVM 的仿真时间在阶段是不往前走的(0ns)。不消耗时间的必须全部结束,把整棵树(环境)搭得严丝合缝,然后再统一进入下一步(连线),最后才开始跑消耗时间的run_phase(正式打子弹)。不管加多少层,永远是上层先把走完,再去下层建树。今天这个问题非常有含金量,你跨过这个理解障碍,UVM 的层次结构就再也不是黑盒了。今天可以休息一下了,明天咱们接着往下推进。
2026-09-21 09:55:22
159
原创 书中2.2.4virtual interface,config_db机制---deepseek
为什么需要 virtual interface?因为 UVM 的 driver/monitor 是类,不是硬件模块,没有实体连线。必须通过虚接口去“遥控”真实的接口。为什么需要 config_db?因为层级太深了,为了解耦,不想一层一层手动传参。用一个全局的“快递柜”,实现跨层次的数据传递。set 和 get 必须成对出现吗?是的。有人 set,就必须有人 get。如果没有 get 成功,driver 里的uvm_fatal就会报错,告诉你“没有拿到接口”。通配符的含义在 set 里,地址写。
2026-09-20 14:57:16
297
原创 第2章:一个简单的UVM验证平台 —— 这是全书的精华!--deepseek
你看,第2章的精华就在于“演化”。没有transaction-> 数据写死,痛苦。没有monitor-> 只能看波形,痛苦。没有env-> 组件散落一地,痛苦。当你体会到了这些痛点,UVM的各个组件就变得理所当然、顺理成章了。你的课后作业(也是第2章的收官)把咱们之前聊过的那套完整代码(dut、my_if、transaction、sequence、driver、monitor、scoreboard、agent、env、test、top_tb),在 QuestaSim 里跑一遍。不要只复制粘贴,
2026-09-20 13:49:46
186
原创 UVM实战(电子与嵌入式系统设计丛书)张强---deepseek
同学,你现在的状态,就像一个熟悉了所有“零件”名称(driver、monitor、sequence等)的人,正在学习如何把它们组装成一台能自动运转的机器。《UVM实战》就是你的“装配说明书”。不要怕代码长、概念多。你今天能主动去啃这本书,已经比很多人强了。就像跑run_phase一样,觉得累了,就休息一下,明天再raise起来接着跑。老师会一直在这里。你在看书的过程中,遇到任何觉得绕的代码、不懂的机制,随时截图或者把代码段发过来,我们继续像之前一样,一句一句地啃。慢慢来,你一定能跨过这道门槛。
2026-09-20 11:30:47
135
原创 虚拟机安装---deepseek
磁盘 0(V 盘):1.86TB,专门放虚拟机文件。虚拟机分配:内存 4-6GB,CPU 2核,磁盘上限 600GB(动态增长)。剩余空间:V 盘剩下的 1.2TB 空间,你依然可以当普通数据盘用,存电影、备份资料都行。现在你可以双击那个安装包开始装了。如果在安装虚拟机软件、创建虚拟机或安装 Linux 的过程中遇到任何报错(比如提示 VT-x 未开启、网络连不上等),随时截图发给我,我帮你解决。加油!虚拟机安装在V盘可以吗,与安装C盘区别大吗,你好!这是一个非常棒的问题,说明你在认真思考磁盘的规划。
2026-09-20 10:58:19
183
原创 虚拟机的共享文件夹挂载失效了--deepseek
别慌,这个问题很常见。报错提示(没有这个文件或目录),说明。通常发生这种情况是因为虚拟机。我们昨天用命令挂载的共享文件夹,是临时的,重启后就消失了。我们需要重新挂载一下。
2026-09-19 02:02:14
98
原创 libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
这一栏,点击那个以 .deb。打开网页后,往下拉,找到。结尾的链接(文件名是。
2026-09-19 01:57:22
82
原创 VIVADO物理布局约束(Pblock)--deepseek
Vivado 读取 XDC 约束文件是从上往下(按顺序)加载的。后面的约束会覆盖或者补充前面的约束。你把自己原有的约束(时钟、引脚等)放在前面,把我们刚生成的 Pblock 约束放在最后面。这样可以确保 Pblock 拥有最高的优先级,绝对不会被前面的其他约束(比如 BD 自动生成的约束)干扰或覆盖。保存并关闭 Notepad++(如果 Vivado 提示文件已被修改,选择 Yes 或 Reload 重新加载一下)。回到 Vivado 主界面,点击左侧 Flow Navigator 里的。弹窗选择。
2026-09-17 15:49:18
164
转载 UVM手把手教程系列(一)UVM基础
先抛开UVM,回想一下我们在平时写完程序后,是不是肯定需要灌一个激励给DUT,然后再从DUT获取结果,并跟一个参考模块进行对比,检查结果是否正确。就像下面这个图:在UVM中,引入了sequence机制,这个机制的最大作用就是将test case和testbench分离开来。对一个项目而言,testbench是相对稳定的框架,而针对各个module要有不同的测试内容,所以具体的test case 的差异非常大。
2026-09-16 14:05:41
10
原创 UVM基础总结——基于《UVM实战》示例代码--deepseek
你看,把这些代码片段串起来,就是一个完整的自动化测试流水线顶层top_tb:这是剧场,里面有dut(真正的硬件)、clk时钟、rst_n复位,以及通过分发下去的input_if和output_if两个接口。my_case0:这是总导演。它的里,通过告诉sequencer:“今天拍这场戏,用这个剧本剧本启动。body()任务开始执行,它先告诉仿真器:“我要开始拍戏了,别停循环:sequence连续10次通过uvm_do把子弹(transaction)装进手枪(sequencer)。driver:在。
2026-09-16 10:55:28
46
原创 UVM基础---deepseek
你看,这张图其实就是把你在 Verilog 里写的那些杂乱的initialalways$display,按照“谁负责开枪(Driver)、谁负责录像(Monitor)、谁负责算分(Scoreboard)”进行了模块化的封装。你熟悉 FPGA,你知道模块化设计的好处。UVM 就是验证领域的模块化设计。空间维度(图1):组件怎么连(Env 套 Agent 套 Driver/Monitor)。时间维度(图2,咱们上一课讲的):组件什么时候建(build)、什么时候跑(run)、什么时候停(objection)
2026-09-16 10:45:32
168
转载 布局约束Pblock设置方法
例如,不勾选DSP48,一旦选中该Pblock,包含在该Pblock中的资源会以灰色显示,而未被包含的资源,也就是这里的DSP48则仍然是常规亮度。,在Physical Constraints窗口中,选中一个Pblock,点击右键,选择Set Pblock Size,可进一步设置Pblock的大小和位置。选中Pblock,在其属性窗口中,选择Statistics,可看到Pblock所包含的资源类型和数量,同时显示了对应逻辑单元需要用到的资源类型与数量,从而可以获得该Pblock中的资源利用率,如下图所示。
2026-09-15 18:41:45
10
原创 vivado时序报红/插入流水线寄存器/降低扇出
从时序报告看,主要问题是,裕量(Slack)为负值,比如最差的一条路径是-0.757ns,意味着数据到达终点寄存器的时间比时钟要求晚了约 0.76ns。
2026-09-15 14:11:24
96
原创 将双系统(Windows + Linux)改为单 Windows 系统 + 虚拟机 Linux。
我的笔记本本身Win11系统(安装在磁盘1),后面加一个一个sata存储(磁盘0),磁盘0安装了Linux系统;两个系统切换很麻烦,现在想释放磁盘0空间,在win11系统下,安装虚拟机的方式,把Linux安装在虚拟机上,这样,我可以来回方便的从Win11系统到linux系统相互切换,老师,还请看下我该如何操作,一步步教一下如何实现这个目标,详细步骤哈,谢谢您啦你好!看到你的磁盘管理截图和需求了。这是一个非常典型且实用的需求:将双系统(Windows + Linux)改为单 Windows 系统 + 虚拟机
2026-09-15 00:39:48
331
原创 SystemVerilog 中的 :: 作用域解析运算符详解--deepseek讲解
写法含义什么时候用obj.member通过对象访问实例变量、实例方法通过类名访问静态变量、静态方法、typedef、enum、parameter通过包名访问包里的类、函数、变量链式访问UVM factory 创建对象一句话记忆左边是对象就用,左边是类型/类/包的名字就用。
2026-09-14 23:40:39
44
原创 UVM在时间维度上也做了规范,phase机制----deepseek讲解
build(自上而下):总导演搭好剧组班子(组件树)。connect(自下而上):各部门内部接好线,然后汇报给总导演。:开拍前的最后检查。run(并发运行,Objection控时):正式开机。无数个线程(driver发数据、monitor收数据)并行跑。大家不断 raise 和 drop objection,维持仿真时间往前走。uvm右侧的 reset, config, main:这是UVM更细化的run阶段(比如先复位,再配置,最后跑主测试)。它们也是并行的,和整体run配合。
2026-09-14 16:40:30
336
原创 直接上手 UVM 例子
textCopyDownload不要试图先懂所有语法,先把平台跑通,看到现象,再回来理解每一行。这是工程师学习 UVM 最快的方式。
2026-09-12 23:22:57
195
原创 SystemVerilog UVM 手把手教学 - 第 1 课
你好呀!欢迎来到 UVM 的世界 👋 我会用最通俗的方式带你从零开始,不用担心,我们一步一步来。
2026-09-12 22:45:33
61
原创 rand/randc/constraint 练习
你测一个加法器,只测1+1=2,那DUT的bug永远发现不了。验证的目标是。所以要让输入,比如随机生成1000组a+b,覆盖各种边界。SystemVerilog内建了随机化,是UVM transaction的核心能力。
2026-09-12 22:27:27
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅