先写好一个top.sv

查看代码

// 导入VCS或者Modelsim自带的UVM库和宏
`include "uvm_macros.svh"
import uvm_pkg::*; // 下面这些sv都是接下来要写的
`include "driver.sv"
`include "monitor.sv"
`include "agent.sv"
`include "env.sv"
`include "test.sv" module top;
initial
run_test();
endmodule

再把test.sv写好。

每个phase都只有简单地打印信息,方便查看各个phase执行的顺序

查看代码

class test1 extends uvm_test;
`uvm_component_utils(test1)
env t_env; function new(string name = "test1", uvm_component parent = null);
super.new(name, parent);
endfunction: new function void build_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Build", UVM_LOW);
t_env = env::type_id::create("t_env", this);
endfunction: build_phase function void connect_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Connect", UVM_LOW);
endfunction function void end_of_elaboration_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "End_of_elaboration", UVM_LOW);
endfunction function void start_of_simulation_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Start_of_simulation", UVM_LOW);
endfunction task run_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Run", UVM_LOW);
endtask task main_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Main", UVM_LOW);
endtask function void extract_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Extract", UVM_LOW);
endfunction function void check_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Check", UVM_LOW);
endfunction function void report_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Report", UVM_LOW);
endfunction function void final_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Final", UVM_LOW);
endfunction
endclass

env.sv

class env extends uvm_env;
`uvm_component_utils(env)
agent ag1;
agent ag2; function new(string name, uvm_component parent);
super.new(name, parent);
endfunction function void build_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Build", UVM_LOW);
ag1 = agent::type_id::create("ag1",this);
ag2 = agent::type_id::create("ag2",this);
endfunction: build_phase function void connect_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Connect", UVM_LOW);
endfunction function void end_of_elaboration_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "End_of_elaboration", UVM_LOW);
endfunction function void start_of_simulation_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Start_of_simulation", UVM_LOW);
endfunction task run_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Run", UVM_LOW);
endtask task main_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Main", UVM_LOW);
endtask function void extract_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Extract", UVM_LOW);
endfunction function void check_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Check", UVM_LOW);
endfunction function void report_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Report", UVM_LOW);
endfunction function void final_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Final", UVM_LOW);
endfunction
endclass

agent.sv

查看代码

class agent extends uvm_agent;
`uvm_component_utils(agent)
protected uvm_active_passive_enum is_active = UVM_ACTIVE;
monitor mon;
driver drv; function new(string name, uvm_component parent);
super.new(name, parent);
endfunction function void build_phase(uvm_phase phase);
// super.build_phase(phase);
uvm_report_info(get_full_name(), "Build", UVM_LOW);
mon = monitor::type_id::create("mon", this);
drv = driver::type_id::create("drv", this);
endfunction: build_phase function void connect_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Connect", UVM_LOW);
endfunction function void end_of_elaboration_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "End_of_elaboration", UVM_LOW);
endfunction function void start_of_simulation_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Start_of_simulation", UVM_LOW);
endfunction task run_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Run", UVM_LOW);
endtask task main_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Main", UVM_LOW);
endtask function void extract_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Extrnct", UVM_LOW);
endfunction function void check_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Check", UVM_LOW);
endfunction function void report_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Report", UVM_LOW);
endfunction function void final_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Final", UVM_LOW);
endfunction
endclass

driver.sv

查看代码

class driver extends uvm_driver;
`uvm_component_utils(driver) function new(string name, uvm_component parent);
super.new(name, parent);
endfunction function void build_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Build", UVM_LOW);
endfunction: build_phase function void connect_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Connect", UVM_LOW);
endfunction function void end_of_elaboration_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "End_of_elaboration", UVM_LOW);
endfunction function void start_of_simulation_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Start_of_simulation", UVM_LOW);
endfunction task run_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Run", UVM_LOW);
endtask task main_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Main", UVM_LOW);
endtask function void extract_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Extract", UVM_LOW);
endfunction function void check_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Check", UVM_LOW);
endfunction function void report_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Report", UVM_LOW);
endfunction function void final_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Final", UVM_LOW);
endfunction
endclass

monitor.sv

查看代码

class monitor extends uvm_monitor;
`uvm_component_utils(monitor) function new(string name, uvm_component parent);
super.new(name, parent);
endfunction function void build_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Build", UVM_LOW);
endfunction: build_phase function void connect_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Connect", UVM_LOW);
endfunction function void end_of_elaboration_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "End_of_elaboration", UVM_LOW);
endfunction function void start_of_simulation_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Start_of_simulation", UVM_LOW);
endfunction task run_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Run", UVM_LOW);
endtask task main_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Main", UVM_LOW);
endtask function void extract_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Extract", UVM_LOW);
endfunction function void check_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Check", UVM_LOW);
endfunction function void report_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Report", UVM_LOW);
endfunction function void final_phase(uvm_phase phase);
uvm_report_info(get_full_name(), "Final", UVM_LOW);
endfunction
endclass

使用Modelsim做一下测试:

ModelSim> cd <dir> // 程序所在目录

ModelSim> vlib work

ModelSim> vlog -sv -mfcu top.sv

ModelSim> vsim top +UVM_TESTNAME=test1

ModelSim> run

检查一下输出

查看代码

# Reading C:/modeltech_10.1a/tcl/vsim/pref.tcl
# // ModelSim SE 10.1a Feb 22 2012
# //
# // Copyright 1991-2012 Mentor Graphics Corporation
# // All Rights Reserved.
# //
# // THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION
# // WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS
# // LICENSORS AND IS SUBJECT TO LICENSE TERMS.
# //
cd E:/CH02_3_LAB
vlib work
vlog -sv -mfcu top.sv
# Model Technology ModelSim SE vlog 10.1a Compiler 2012.02 Feb 22 2012
# ** Note: (vlog-2286) Using implicit +incdir+C:/modeltech_10.1a/uvm-1.1a/../verilog_src/uvm-1.1a/src from import uvm_pkg
#
# ** Warning: driver.sv(1): (vlog-2181) Use of a parameterized class uvm_driver as a type creates a default specialization.
#
# -- Compiling package top_sv_unit
# -- Importing package mtiUvm.uvm_pkg (uvm-1.1a Built-in)
# ** Warning: driver.sv(1): (vlog-2181) Use of a parameterized class uvm_driver as a type creates a default specialization.
#
# -- Compiling module top
# ** Warning: driver.sv(1): (vlog-2181) Use of a parameterized class uvm_driver as a type creates a default specialization.
#
#
# Top level modules:
# top
vsim top +UVM_TESTNAME=test1
# vsim +UVM_TESTNAME=test1 top
# ** Note: (vsim-3812) Design is being optimized...
#
# Loading sv_std.std
# Loading mtiUvm.uvm_pkg
# Loading work.top_sv_unit(fast)
# Loading work.top(fast)
# Loading mtiUvm.questa_uvm_pkg(fast)
# Loading C:\modeltech_10.1a\uvm-1.1a\win32\uvm_dpi.dll
run
# ----------------------------------------------------------------
# UVM-1.1a
# (C) 2007-2011 Mentor Graphics Corporation
# (C) 2007-2011 Cadence Design Systems, Inc.
# (C) 2006-2011 Synopsys, Inc.
# (C) 2011 Cypress Semiconductor Corp.
# ----------------------------------------------------------------
#
# *********** IMPORTANT RELEASE NOTES ************
#
# You are using a version of the UVM library that has been compiled
# with `UVM_NO_DEPRECATED undefined.
# See http://www.accellera.org/activities/vip/release_notes_11a for more details.
#
# You are using a version of the UVM library that has been compiled
# with `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR undefined.
# See http://www.accellera.org/activities/vip/mantis3770 for more details.
#
# (Specify +UVM_NO_RELNOTES to turn off this notice)
#
# UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(215) @ 0: reporter [Questa UVM] QUESTA_UVM-1.2
# UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(217) @ 0: reporter [Questa UVM] questa_uvm::init(+struct)
# UVM_INFO @ 0: reporter [RNTST] Running test test1...
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Build
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Build
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Connect
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Connect
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Connect
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] End_of_elaboration
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Start_of_simulation
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Run
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Run
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Run
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Main
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Main
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Extract
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Extranct
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Extract
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Check
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Check
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Check
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Report
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Report
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Report
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Report
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Report
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Report
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Report
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Report
# UVM_INFO @ 0: uvm_test_top [uvm_test_top] Final
# UVM_INFO @ 0: uvm_test_top.t_env [uvm_test_top.t_env] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag1 [uvm_test_top.t_env.ag1] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.drv [uvm_test_top.t_env.ag1.drv] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag1.mon [uvm_test_top.t_env.ag1.mon] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag2 [uvm_test_top.t_env.ag2] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.drv [uvm_test_top.t_env.ag2.drv] Final
# UVM_INFO @ 0: uvm_test_top.t_env.ag2.mon [uvm_test_top.t_env.ag2.mon] Final
#
# --- UVM Report Summary ---
#
# ** Report counts by severity
# UVM_INFO : 83
# UVM_WARNING : 0
# UVM_ERROR : 0
# UVM_FATAL : 0
# ** Report counts by id
# [Questa UVM] 2
# [RNTST] 1
# [uvm_test_top] 10
# [uvm_test_top.t_env] 10
# [uvm_test_top.t_env.ag1] 10
# [uvm_test_top.t_env.ag1.drv] 10
# [uvm_test_top.t_env.ag1.mon] 10
# [uvm_test_top.t_env.ag2] 10
# [uvm_test_top.t_env.ag2.drv] 10
# [uvm_test_top.t_env.ag2.mon] 10
# ** Note: $finish : C:/modeltech_10.1a/win32/../verilog_src/uvm-1.1a/src/base/uvm_root.svh(408)
# Time: 0 ns Iteration: 224 Instance: /top
# 1
# Break in Task uvm_pkg/uvm_root::run_test at C:/modeltech_10.1a/win32/../verilog_src/uvm-1.1a/src/base/uvm_root.svh line 408

从最后的打印结果很容易了解到各个phase的执行情况是这样的:

  • 除了build和final是自顶向下的,其他phase都是自下而上的。
  • 并且每个块中的phase是按顺序执行的。

UVM——通过一个简单的testbench来了解UVM组件的phase执行顺序的更多相关文章

  1. 初始化错误——从一个简单的算例看UDF各个宏的调用顺序

    感谢西安交通大学en_phert的问题和尝试 Fluent版本:Fluent 19.0 Visual Studio版本:Visual Studio 2013 在UDF的宏的调用中大家常看见下图: 这个 ...

  2. new一个有父类的对象时各代码块的执行顺序问题

    public class QQ { public static void main(String[] args) { new B(); } } class A { static { System.ou ...

  3. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  4. Verdi UVM Debug Mode 简单使用

    转载:Verdi UVM Debug Mode 简单使用_Holden_Liu的博客-CSDN博客 文档与源码: User Guide: UVMDebugUserGuide.pdf  in $VERD ...

  5. 一个简单的Verilog计数器模型

    一个简单的Verilog计数器模型 功能说明: 向上计数 向下计数 预装载值 一.代码 1.counter代码(counter.v) module counter( input clk, input ...

  6. 动手写一个简单版的谷歌TPU-矩阵乘法和卷积

    谷歌TPU是一个设计良好的矩阵计算加速单元,可以很好的加速神经网络的计算.本系列文章将利用公开的TPU V1相关资料,对其进行一定的简化.推测和修改,来实际编写一个简单版本的谷歌TPU.计划实现到行为 ...

  7. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  8. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  9. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  10. [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

    打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...

随机推荐

  1. 请务必注意精度不一样,就不相等(float 与double)

    即使两个小数显示的值是一样的,但是类型不一要样,精度不一样实际上是不一样的 就比如下面这段代码: #include <iostream> #include <cstring> ...

  2. VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法

    1.打包部署后,发现样式和本地运行时候代码不一致 经过排查发现 这个路径的文件被打包进去了,但是我并没有引用这个文件啊啊啊啊啊a~~~~ src\assets\webgl-assets\scss\st ...

  3. 方法的调用-JDK的JShell简单使用

    方法的调用 方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法.在 主方法中,直接写要调用的方法名字就可以调用了. public static ...

  4. Unity_UIWidgets - 组件Scaffold

    UIWidgets - 组件Scaffold 各位兄弟姐妹,想通过Unity来开发UIWidgets的么,想通过UIWi的gets..来开发手机APP么??想么想么,哈哈哈哈哈哈哈哈. 好了,小黑不唠 ...

  5. 论文翻译:2022_PercepNet+: A Phase and SNR Aware PercepNet for Real-Time Speech Enhancement

    博客地址:凌逆战 (转载请注明出处) 论文地址:PercepNet+: 用于实时语音增强的相位和信噪比感知 PercepNet 引用格式: Ge X, Han J, Long Y, et al. Pe ...

  6. Python调用Openstack API

    本文将介绍如何使用 python 调用 OpenStack API. 什么是RESTful API RESTful API 就是 RESTful 风格的 API.遵循 RESTful 风格开发的API ...

  7. 提供给用户使用的表格样式自定义工具,适用于elementUI表格

    介绍 给用户提供了可以自定义修改elementUI表格的能力,通过混入(mixins)使用,必须先安装element-ui. 通过npm安装: npm i el-table-customizer 使用 ...

  8. 1月3日内容总结——bbs项目登陆页面和主页、个人站点页的搭建

    目录 一.登陆功能完善 验证码功能实现 单机验证码实现验证码刷新(局部刷新) 点击登陆提交数据进行校验 二.主页搭建 html代码 views.py代码 主页内容部分 后台添加数据 分页器 前端获取头 ...

  9. JSP第一次作业

    1.环境搭建,运行出来一个JSP页面,显式hello <%@ page language="java" import="java.util.*" page ...

  10. vivo 自研Jenkins资源调度系统设计与实践

    作者:vivo 互联网服务器团队- Wu Qinghua 本文从目前业界实现Jenkins的高可用的实现方案,分析各方案的优缺点,引入vivo目前使用的Jenkins高可用方案,以及目前Jenkins ...