UVM笔记

UVM学习整理——UVM整体介绍 目录 一、典型UVM验证平台介绍 1.1典型UVM验证平台的主要组成和基本功能 1.2UVM类库地图 1.3UVM常用类的继承关系 一、典型UVM验证平台介绍 1.1典型UVM验证平台的主要组成和基本功能 driver:向sequencer申请sequence_item(数据包transaction),并将包里的信息按照总线协议规定驱动到DUT的端口上; sequencer:组织管理sequence,driver申请数据时,它就把sequence生成的sequence_item发给drive 阅读详情

一、UVM基本 概念

验证计划
功能覆盖率,结构覆盖率
模块机/芯片级/系统级
白盒/灰盒/黑盒

在这里插入图片描述

二、构建简化的UVM平台

在这里插入图片描述
在这里插入图片描述
简化的UVM平台
只有master agent

2.1、创建transaction

在这里插入图片描述

2.2、创建sequence

在这里插入图片描述
在这里插入图片描述
含义:启动后产生10个事物对象,然后停止仿真。

2.3、创建agent(sequencer,monitor、driver,phase顺序)

sequencer:
在这里插入图片描述

driver:
在这里插入图片描述
在这里插入图片描述
创建monitor:
在这里插入图片描述

在这里插入图片描述
phase执行顺序

UVM平台中所有的组件具有phase概念,它们按照一定顺序执行的任务或函数产生。
在这里插入图片描述

2.4、创建agent

在这里插入图片描述

在这里插入图片描述

2.5、创建env

在这里插入图片描述
在这里插入图片描述

2.6、创建testcase

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7、运行仿真

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、UVM平台组件

在这里插入图片描述

3.1、UVM库

UVM库-在类库中使用继承和封装
基本要素的三个层次:
1、TLM:TLM是组件之间的通信标准
2、Structural Elements:不同方法学的通用类:组件、信息系统、仿真阶段等等
3、Methodology:这个时用户实现平台重要的主要接口。使用这些接口用户可以在不改变测试平台代码的情况下更改平台的配置、替换平台组件、更换不同的激励甚至改变仿真行为等。

在这里插入图片描述
UVM package包含了三个主要的类
1、uvm_component:是用来构建UVM testbench层次结构最基本的类
2、uvm_object:作为UVM的一种数据结构,课作为配置对象来配置测试平台
3、uvm_transaction:用来产生激励和收集响应

3.2、uvm_component

在这里插入图片描述
这一分类为事物服务
在这里插入图片描述

3.3、UVM结构树

1、agent包含driver
在这里插入图片描述
2、env包含agent
在这里插入图片描述
3、test_case实例化env
在这里插入图片描述

简化的UVM结构树
顶层名字总为uvm_test_top
在这里插入图片描述
在这里插入图片描述
uvm的实际顶层为uvm_root,系统自己产生。

UVM构建这种结构的原因:
1、为config机制提供搜索路径
2、为override机制提供搜索路径
3、时phase自动执行的需要

3.4、UVM phase

UVM中为平台组件定义了一套phase流程来控制仿真平台的执行过程。
phase是uvm_component的属性

在这里插入图片描述
Task phase & Function phase。Task phase消耗仿真时间,图中黄色为Task phase其余都为Function phase。
build_phase自顶向下执行,其他phase都是自下向上执行。
黄色区域为12个run-time pahse,这12个之间按顺序执行。相同组件的task phase同一时刻进行。
注意:
1、只有当所有component的同名phase都执行完毕时,才会执行下一个phase。
2、同名phase在不同的component中的顺序执行。
3、run phase与12个run time phase的关系。同时存在可以同时使用

从验证平台的构建,到配置,到连接,再到运行,最后停止需要有一定的先后顺序。
在这里插入图片描述
每一个component中都有一个任务或者函数与某个phase相对应,这些任务或者函数会在该phase阶段被自动的执行。
在这里插入图片描述
依次调用buile phase。

每个phase的功能:
在这里插入图片描述
12个run-time phase
在这里插入图片描述
uvm_phase的启动
-使用run_test()启动UVM平台
在这里插入图片描述

3.5、UVM object

UVM phase具有objection属性
UVM phase的objection属性有两个作用:
1、控制task phase的运行与终止
2、同步各个components同名的task phase

objection的使用方法:
1、在task phase中调用raise_objection()和drop_objection()。
2、task phase中其他需要执行的语句放在这两个方法之间。

UVM objection注意事项:
1、objection对于task phase才有意义,控制task phase的运行和终止。
2、必须在执行消耗仿真时间的语句之前raise objection。如果在raise之前加入消耗仿真时间的语句,会导致raise失效,延时过后直接结束当前task。
3、在task phase结束时drop objection。否则将用于不会执行下一个phase,一直停留在当前phase。
4、在一个component中的某个task phase中raise和drop objection会影响到其他component中相同名字的task phase。
5、建议在每个task phase中都raise和drop objection一次。

示例对比:
在这里插入图片描述
在这里插入图片描述
因为按顺序执行phase,所以如果reset_phase的执行了,那么configure_phase的打印就会变成在200延时打印。

在这里插入图片描述
修改代码后,在reset_phase添加raise和drop objection。

注意事项4和5:
在这里插入图片描述
monitor中的reset_phase没有raise和drop objection,但打印还是被执行了,原因在于,在driver中有同名的reset_phase
在这里插入图片描述
各组件中相同的task phase会并行执行。并且会同时开始,同时退出。
但是如果monitor中执行打印时的延时高,比如#50变成#150那么将不会有打印。因为在driver #100时结束了drop_objection,而monitor中又没有raise objection,那么monitor的objection会被终止。

四、UVM factory

4.1、什么是factory

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2、使用factory(uvm_component_utils,uvm_object_utils)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3、factory机制与override机制

factory机制要与override机制结合使用。
factory是基础。override机制是为实现第三步而存在的,即要想factory的替换列表中添加替换项。

常见的override函数有两个:
set_type_override_by_type(original_class_name::get_type(),target_class_name::get_type());
set_inst_override_by_type(“original_inst_path”,original_class_name::get_type(),target_class_name::get_type());
这两个函数存在于component中,并且一般需要在build_phase()中调用。

在这里插入图片描述第一个为全局替换,第二个为替换指定的路径,比如只替换master_agent中的类。
问题1:要将transaction中的da值约束为3
在这里插入图片描述
解决:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题2:
仅仅希望替换master_agent中sequencer中的transaction类型而不是整个平台的呢?
解决:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
UVM平台的重要性:在不改变原来平台的代码的情况下即可实现不同激励的产生。

五、事物级建模

5.1、什么是事物级建模

事物是一系列具有一定关系和功能的数据集合。
比如满足PCI协议的称为PCI事物,满足AMBA AXI协议的称为AMBA AXI事物。
是各个组件通信的基本单元。

5.2、从uvm_sequence_item扩展事物

例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3、UVM field automation机制

在这里插入图片描述
uvm_field_automation可以使用打印,复制,对比,记录,打包,解压等功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、UVM信息服务

6.1、信息服务机制

在这里插入图片描述

6.2、安全等级及信息行为

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、UVM configuration

7.1、什么是UVM configuration机制

在这里插入图片描述
configuration机制的特点:
1、半个全局变量,避免全局变量带来的风险
2、高层组件可以通过configuration机制实现在不改变代码的情况下更改它所包含子组件的变量
3、在各个层次上都可以使用configuration机制
4、支持通配符和正则表达式对多个变量进行配置
5、支持用户自定义的数据类型
6、可以在仿真运行的过程中进行配置

configuration的原理:
UVM configuration机制的实现由两部分组成
1、设置配置资源
2、获取配置资源

7.2、如何使用configuration

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用法1:
在这里插入图片描述
在这里插入图片描述
用法2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用法3:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回顾过程:
在这里插入图片描述

八、UVM sequence机制

在这里插入图片描述

8.1、什么是UVM sequence机制

控制和产生一系列的事物,并将事物发送给driver的一套机制。

UVM sequence将事物的产生和驱动互相分离。

8.2、UVM sequence机制的原理

sequence机制在driver、sequenc、sequencer中完成。
在这里插入图片描述

8.3、如何使用UVM sequence机制

1、driver中实现 sequence机制:
在这里插入图片描述
2、sequencer中实现sequence机制:
UVM已经实现sequencer全部功能,只需要拿来实现即可。

3、sequence中实现sequence机制:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果不用uvm_do宏,使用上述分解步骤完成可实现同样功能。

8.4、如何启动sequence

有两种方法:1、默认default启动 2、手动启动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般使用方法2(手动启动)

8.5、sequence机制其他知识

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、UVM TLM

在这里插入图片描述

9.1、什么是UVM TLM

TLM -Transaction Level Model事物级建模,用于组件之间通信。

9.2、为什么要使用TLM

建立专门的通信通道,避免通信出现混乱。
各个通道独立,互不影响。

9.3、UVM TLM原理

在这里插入图片描述

9.4、常用的UVM TLM port/import/export

在这里插入图片描述

T:该参数代表port所要传输的transaction的类型
TMP:指定所在的component
put():是一个task,可能会阻塞当前进程直到transaction传输成功。
try_put():是一个function,不会阻塞当前进程,不管transaction传输是否完成都会立刻返回。
can_put():是一个function,不会阻塞当前进程,不会发生transaction传输,只会检查对方是否准备好了接收。
*get():同理,传输变成接收。
port和import成对使用

uvm_put_port 支持 put(),try_put(),can_put()
uvm_blocking_put_port支持put()
uvm_nonblocking_put_port 支持 try_put(),can_put()
uvm_get_port 支持 get(),try_get(),can_get()
uvm_blocking_get_port 支持 get()
uvm_nonblocking_get_port 支持 try_get(),can_get()
在这里插入图片描述
export通常作为中间端口使用
在这里插入图片描述
示例:
在这里插入图片描述

9.5、普通TLM端口的使用方法(PUT、GET、FIFO)

1、PUT模式
lab08
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、GET模式
lab08-a
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、FIFO模式(在PUT基础上修改)
lab08-b
在这里插入图片描述
在这里插入图片描述

十、UVM analysis component

lab09
analysis component:1、reference model 2、scoreboard
在这里插入图片描述
实现步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一、UVM callback

在这里插入图片描述

11.1、什么是UVM callback

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.2、如何使用UVM callback

在这里插入图片描述
在这里插入图片描述
lab10
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前三步都为定义,第四步为实例化使用。
在这里插入图片描述
在这里插入图片描述
上图这个示例没有载入post_send方法(post_send也会执行),所有post_send没有任何功能。

十二、UVM Advanced

在这里插入图片描述

12.1、什么是UVM sequence library

在这里插入图片描述
sequence library其本质是一个sequence,相对于普通的sequence,sequence library有以下功能:
1、其他sequence可以想sequence library注册
2、可根据配置产生并且执行已经在其注册过的sequence
3、具有多种内嵌的选择sequence的算法
4、支持用户自定义的sequence选择算法
5、注册方式的多样化
在这里插入图片描述
向UVM sequence library永久注册sequence
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何将sequence临时添加到UVM sequence library中
在这里插入图片描述

临时注册方法1:在这里插入图片描述
上图为临时添加,在不同test中控制添加对应的sequence。
临时注册方法2:
在这里插入图片描述
在这里插入图片描述
sequence library内置的变量,作用是控制sequence library的行为
在这里插入图片描述
sequence library相关变量
在这里插入图片描述
例:
在这里插入图片描述
执行仿真
在这里插入图片描述
在这里插入图片描述
本技术在项目中使用较少。

12.2、什么是Virtual sequence

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现:
在这里插入图片描述
与普通sequencer基本没区别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与普通sequence基本没区别
在env实例化它们并进行连接
在这里插入图片描述
在这里插入图片描述

十三、UVM寄存器抽象级-RAL

在这里插入图片描述

13.1、寄存器抽象级概念

问题:
在这里插入图片描述
寄存器抽象层:
在这里插入图片描述
在这里插入图片描述
backdoor比较简单
在这里插入图片描述

在这里插入图片描述

13.2、frontdoor实现?

在这里插入图片描述
在这里插入图片描述

1、建模工作在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来开始封装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、Adapter实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、在env中实例化
在这里插入图片描述
在这里插入图片描述

4、connect在这里插入图片描述
在这里插入图片描述
5、API访问寄存器
在这里插入图片描述

13.3、寄存器模型的基本数据结构

在这里插入图片描述

14.4、寄存器模型API

1、read&write
在这里插入图片描述
2、peak&poke
在这里插入图片描述
3、randomize&update&mirror
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
read&write默认一般使用前3个参数,其他使用默即可

14.5、寄存器测试sequence和内建coverage

在这里插入图片描述
driver单方面驱动DUT,只能从monitor查看DUT。代码实现如下
在这里插入图片描述
在这里插入图片描述
内建coverage

在这里插入图片描述
在这里插入图片描述

UVM入门与进阶学习笔记1——UVM概述、类库地图、工厂机制、覆盖方法 目录验证方法学概述UVM的优势类库地图UVM核心类库工厂机制覆盖方法 前言:个人学习UVM的在线笔记。学习的过程中借鉴一些大佬的笔记和路科验证学习资料,只做个人学习交流使用,感谢! 验证方法学概述 UVM的优势 UVM融合其他验证方法学的积极意义在于,打通了各个EDA公司和IC设计公司的验证技能通道,便于验证技术交流和人才流动,也方便IC设计公司的技术及工具选择。用户不再受限于使用何种仿真器、使用哪一家的验证IP,而只需要将主要精力着眼于设计的功能验证,由此也提升了验证效率。 SV核心特性包括面向对象 阅读详情

相关推荐

UVM_1:UVM介绍

UVM是IC验证方法学的一种,可以结合验证语言SystemVerilog使用。主要结合验证平台搭建和测试用例编写进行介绍。(最近在学UVM相关内容,整理笔记仅供参考)

weixin_45159924的博客 5059

UVM简介

UVM为硬件设计的验证提供了一个完整的框架和一组规范,旨在提高验证工程师的生产力,降低验证任务的复杂性,并促进团队间的协作。在 UVM(Universal Verification Methodology)中,Agent、Monitor、Driver 和 Sequencer 是用于硬件验证的重要组件,它们通常在环境(Environment)中被使用,协同工作以完成对设计(DUT)的验证任务。通过将测试过程分为不同的阶段,UVM 可以更好地控制测试台架的执行流程,确保每个组件在合适的时机执行相应的任务。

凳子花❀的博客 6057

uvm入门学习笔记(2)

UVM入门学习笔记

2301_81405032的博客 2174

UVM 一文全概括

针对MCDF中sv 代码转换成 UVM 代码的比对,理解UVM代码,方便调试。

zhy07321517526的博客 6383

UVM sequence 笔记

sequence sequence基础 剥离激励的原因 这样带来的一个最大的问题就是gen_pkt函数的重复定义,显然这样是不允许的。为了避免重复定义,有两种策略:第一种是 使用虚函数。将代码清单6-3中的gen_pkt定义为virtual类型,然后在建造CRC错误的测试用例时,从my_driver派生一个新的 crc_err_driver,并重载gen_pkt函数。但是这样新的问题又出现了,如何...

bikan7287的博客 787

uvm 形式验证_UVM入门学习笔记(一)

1.开坑宣言之前在学校做的一个项目需要搭验证环境。由于我们作为学生基本都没有接触正儿八经验证框架的经验,而我作为唯一略了解一点systemverilog的人,就根据学长的验证框架写了个简单的bfm。后来在秋招面试过程中被反复问及我们的验证框架如何确保验证覆盖率,每次都只能回答“增加多个测试序列。。。”。所以最近秋招基本结束后想着补充一下UVM验证相关的知识,即使不是验证工程师,也是数字IC前端该了...

weixin_35133182的博客 6161

UVM实战笔记简介

UVM实战笔记简介 【下载地址】UVM实战笔记简介 《UVM实战笔记》是一份专注于UVM(通用验证方法学)的实用指南,旨在帮助读者深入理解UVM的核心概念与实战技巧。笔记内容涵盖UVM源代码的截图分析、《UVM实战(卷1)》中的实例讲解,以及《uvm1.1应用指南及源代码分析》的详细解读。通过结合这些资源,读者可以更好地...

gitblog_06739的博客 407

uvm入门学习笔记(1)

UVM入门学习

2301_81405032的博客 1220

uvm 学习笔记(目录)

uvm 学习笔记

布拉奇的博客 137

《UVM实战》学习笔记1

验证平台的组成 激励模块:driver 计分板:scoreboard 收集DUT输出:monitor 预期参考模型:Reference model 其他概念:agent、sequence 1、driver模块 class my_driver extends uvm_driver; function new(string name = "my_driver", ...

weixin_39565666的博客 3483

【UVM学习笔记】UVM基础—一文告诉你UVM的组成部分

该专题用于记录学习UVM芯片验证的过程,主要学习书籍为经典的《UVM实战》,同时也会去进行一些UVM的项目联系。

Sn_Mn的博客 2021

【UVM学习笔记】UVM中的“类”

该专题用于记录学习UVM芯片验证的过程,主要学习书籍为经典的《UVM实战》,同时也会去进行一些UVM的项目联系。本次描述了在上一节定义的众多组件的详细介绍,能够让我们更加深刻的了解UVM各组件之间的协调运转。

Sn_Mn的博客 1087

别再乱装了!Win10下NVIDIA显卡驱动、CUDA 11.0和cuDNN 8.0.5保姆级配置指南(含版本匹配避坑)

本文提供Win10下NVIDIA显卡驱动、CUDA 11.0和cuDNN 8.0.5的保姆级配置指南,详细解析版本匹配逻辑与安装步骤。从驱动选择到环境变量配置,再到框架测试,手把手教你避开常见坑点,确保深度学习环境一次配置成功。特别强调版本匹配的重要性,帮助开发者高效搭建GPU开发环境。

weixin_30600197的博客 307

UVM入门笔记学习(3)

组件连接时数据通信的机制就是TLM,换句话来说,TLM就是各种模块通道的模型。TLM:事务级建模。作用:为组件间的通行建立通道,确保数据流能够稳定运行,可以避免混乱。port端口:发送数据的端口// 三个关联方法 :put (), try_put() ,can_put().//支持put()//支持try_put() ,can_put()//支持get()

2301_81405032的博客 1153

STM32F407ZGT6开发板跑马灯实战:从原理图到烧录全流程(附FlyMcu配置)

本文以正点原子F4探索者开发板(STM32F407ZGT6)为例,手把手指导完成跑马灯实验。内容涵盖从原理图解读、GPIO驱动逻辑分析、HAL库工程搭建,到代码编写与FlyMcu串口烧录配置的全流程,帮助嵌入式开发新手快速实现第一个LED控制程序,打通软硬件开发链路。

weixin_29183637的博客 223

固定翼飞行器建模(二)——MATLAB/Simulink建模、配平及线性化

MATLAB/Simulink固定翼建模、配平及线性化。

2302_80148937的博客 1万+

UVM笔记1

主要是我在看《UVM实战 卷一》的一些笔记。 1.什么是 `uvm_component_utils 这是一个宏,而且是无参数的宏。作用是注册新类,目的是为了兼容各种仿真工具。类似的宏,还有`uvm_object_utils。 class A extends uvm_component; `uvm_component_utils(A); ... endclass 2.什么是A::type_id::create 首先A是自定义的一个类,这里相当于创建一个A类的对象。 A_...

Junluoyu的博客 460

解决fetch_california_housing数据集403错误的3种实用方法(附手动下载地址)

本文针对机器学习中常见的fetch_california_housing数据集403 Forbidden错误,提供了三种实用的解决方案。从理解HTTP 403错误的根源出发,详细介绍了修改源码路径、使用国内镜像源以及手动下载并配置数据文件这三种方法,并附带了可靠的手动下载地址,帮助开发者彻底解决数据加载障碍,确保机器学习项目顺利进行。

weixin_29062963的博客 561

UVM学习笔记记录Day3

function new、build_phase和main_phase、virtual、uvm_tset_top、宏的分号

weixin_44357763的博客 862

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1166

在 ABAP CDS View 里把 Conversion Functions 用到极致:FLTP 精度、单位换算、货币换算与小数位处理的工程化实践

数据格式转换在真实项目中比业务逻辑更容易引发问题。ABAP CDS中的转换函数(如FLTP_TO_DEC、UNIT_CONVERSION、CURRENCY_CONVERSION和DECIMAL_SHIFT)可帮助在数据库层统一数据口径,避免应用层重复处理。这些函数支持数值精度治理、单位换算、货币转换和小数位调整,能显著提升报表性能并减少逻辑分散。通过将格式转换前移到数据模型层,可以确保服务层和UI层的数据一致性,同时降低接口传输错误风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2352

UVM学习笔记

UVM学习笔记 去发现同类优质开源项目:https://gitcode.com/ 这里是关于UVM(Universal Verification Methodology)的学习笔记,旨在帮助理解UVM的基本概念、组件以及在实际项目中如何应用UVM进行验证。 本笔记详细记录了UVM的学习过程,从基础环境搭建、关键类和组件的介绍,到实际的验证案例,全方位为您讲解UVM的要点和技巧。 内容涵盖:UVM...

gitblog_06762的博客 284

【2026OD新机考】【哈希表】20260422-文章特征提取【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

90+天陪伴式学习,100+直播课时,300+动画图解视频,500+LeetCode经典题,500+华为OD真题/大厂真题,还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁。这道题的本质是多集合交集问题的变形,属于非常典型的哈希表应用题。,储存全局的每个片段中,各个字符最少出现的次数。表示该字母并非所有片段的公共字母。,按照顺序构建答案即可。没有字母在所有三个字符串中都出现。每个字母在各字符串中都至少出现。次,所以结果中每个字母出现一次。这样,当上述循环结束后,最终。显然在上述代码中,如果字母。

weixin_48157259的博客 66

UVM入门学习笔记(4)

UVM入门学习

2301_81405032的博客 2373

【温室气体】GOSAT 数据产品

【温室气体】GOSAT 数据产品

WW、forever的博客 238

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 数字成像系统笔记
dullhero
博客等级 码龄16年 45粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值