UVM的Messages机制有些时候很繁琐,很多时候希望能够在UVM messages的基础上做一些个人化的订制,这里给出来一个找到的例子作为参考。
my_macros.sv:
`define my_info(MSG, VERBOSITY) \
begin \
if(uvm_report_enabled(VERBOSITY,UVM_INFO,get_full_name())) \
uvm_report_info(get_full_name(), $sformatf MSG, 0, `uvm_file, `uvm_line); \
end
`define my_err(MSG) \
begin \
if(uvm_report_enabled(UVM_NONE,UVM_ERROR,get_full_name())) \
uvm_report_error(get_full_name(), $sformatf MSG, UVM_NONE, `uvm_file, `uvm_line); \
end
`define my_warn(MSG) \
begin \
if(uvm_report_enabled(UVM_NONE,UVM_WARNING,get_full_name())) \
uvm_report_warning(get_full_name(), $sformatf MSG, UVM_NONE, `uvm_file, `uvm_line); \
end
`define my_fatal(MSG) \
begin \
if(uvm_report_enabled(UVM_NONE,UVM_FATAL,get_full_name())) \
uvm_report_fatal(get_full_name(), $sformatf MSG, UVM_NONE, `uvm_file, `uvm_line); \
end
my_init.sv:
initial begin
my_report_server_c report_server = new("my_report_server");
if($value$plusargs("fname_width=%d", fwidth)) begin
report_server.file_name_width = fwidth;
end
if($value$plusargs("hier_width=%d", hwidth)) begin
report_server.hier_width = hwidth;
end
uvm_pkg::uvm_report_server::set_server(report_server);
// all "%t" shall print out in ns format with 8 digit field width
$timeformat(-9,0,"ns",8);
end
my_report_server.sv:
class my_report_server_c extends uvm_report_server;
`uvm_object_utils(my_report_server_c)
string filename_cache[string];
string hier_cache[string];
int unsigned file_name_width = 28;
int unsigned hier_width = 60;
uvm_severity_type sev_type;
string prefix, time_str, code_str, fill_char, file_str, hier_str;
int last_slash, flen, hier_len;
function new(string name="my_report_server");
super.new();
endfunction : new
virtual function string compose_message(uvm_severity severity, string name, string id, string message,
string filename, int line);
// format filename & line-number
last_slash = filename.len() - 1;
if(file_name_width > 0) begin
if(filename_cache.exists(filename))
file_str = filename_cache[filename];
else begin
while(filename[last_slash] != "/" && last_slash != 0)
last_slash--;
file_str = (filename[last_slash] == "/")?
filename.substr(last_slash+1, filename.len()-1) :
filename;
flen = file_str.len();
file_str = (flen > file_name_width)?
file_str.substr((flen - file_name_width), flen-1) :
{{(file_name_width-flen){" "}}, file_str};
filename_cache[filename] = file_str;
end
$swrite(file_str, "(%s:%6d) ", file_str, line);
end else
file_str = "";
// format hier
hier_len = id.len();
if(hier_width > 0) begin
if(hier_cache.exists(id))
hier_str = hier_cache[id];
else begin
if(hier_len > 13 && id.substr(0,12) == "uvm_test_top.") begin
id = id.substr(13, hier_len-1);
hier_len -= 13;
end
if(hier_len < hier_width)
hier_str = {id, {(hier_width - hier_len){" "}}};
else if(hier_len > hier_width)
hier_str = id.substr(hier_len - hier_width, hier_len - 1);
else
hier_str = id;
hier_str = {"[", hier_str, "]"};
hier_cache[id] = hier_str;
end
end else
hier_str = "";
// format time
$swrite(time_str, " {%t}", $time);
// determine fill character
sev_type = uvm_severity_type'(severity);
case(sev_type)
UVM_INFO: begin code_str = "%I"; fill_char = " "; end
UVM_ERROR: begin code_str = "%E"; fill_char = "_"; end
UVM_WARNING: begin code_str = "%W"; fill_char = "."; end
UVM_FATAL: begin code_str = "%F"; fill_char = "*"; end
default: begin code_str = "%?"; fill_char = "?"; end
endcase
// create line's prefix (everything up to time)
$swrite(prefix, "%s-%s%s%s", code_str, file_str, hier_str, time_str);
if(fill_char != " ") begin
for(int x = 0; x < prefix.len(); x++)
if(prefix[x] == " ")
prefix.putc(x, fill_char);
end
// append message
return {prefix, " ", message};
endfunction : compose_message
endclass : my_report_server_c
- 定制个性化码表技术 ibus
在不同用户的工作环境中,都会根据各自使用的字符集的不同,而需要定制优化各自的输入法码表,例如,在GB18030中的大量汉字,或许因为输入法码表的老旧,而难于利用自己熟悉的“五笔”方法快速录入,同样,需 ...
- 【OpenStack】OpenStack系列14之Dashboard定制开发
django概述 参考资料:http://blog.javachen.com/2014/01/11/how-to-create-a-django-site.html http://djangobook ...
- scss组件定制的一些学习
应组织上的要求,简化前端开发,提高工作效率,开始着手研究scss框架及组件化. 把一些长的像的弄在一起,就有了组件化. 但组件只用一部分需要的,就有了定制. 下面是参考一个button组件写出的一些简 ...
- 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单
原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...
- [技术] 如何正确食用cnblogs的CSS定制
用过cnblogs的估计都知道cnblogs提供了相对比较开放的个性化选项,其中最为突出的估计就是页面CSS定制了.但是没学过Web前端的人可能并不会用这个东西... 所以我打算在此分享一些定制CSS ...
- django学习记录
1.参考资料问题: 现在django发布了1.11版本,离线文档下载引擎地址 文档下载地址 在线文档:https://docs.djangoproject.com/en/1.10/intro/tuto ...
- gson笔记 解析json数据
gson中负责json数据解析的类是JsonReader. Json格式有两种结构,一种是对象(键值对的组合,无序),另外一种是数组(值的有序集合). 因此针对这两种格式,JsonReader提供了不 ...
- PostgreSQL全文检索zhparser使用
本文引用自: http://blog.chinaunix.net/uid-20726500-id-4820580.html 防止文章丢失才进行复制 PostgreSQL支持全文检索,其内置的缺省的分词 ...
- linux PPTP VPN客户端安装
转载于http://www.2cto.com/os/201209/157462.html 下载pptp-1.7.2.tar.gz http://pptpclient.sourceforge.net/ ...
随机推荐
- Codeforces Round #249 (Div. 2) 总结
D.E还是很难的.....C不想多说什么... A:提意:给出每一组人的个数,以及一次车载容量,求出最少需要多少次才能载走所有的人. water: http://codeforces.com/cont ...
- poj 2823 二分法+单调队列
#include<stdio.h> #include<string.h> #define N 1100000 int a[N]; int fmin[N],fmax[N]; i ...
- AutoCAD如何移动坐标原点
通常在CAD画图设计时,坐标原点都默认在左下角,下面就来分享一下在CAD如何把左下角的坐标原点移动到我们画的图形中心点: 1.输入坐标原点移动命令UCS: 按回车确认后,再输入M(就是移动的意思): ...
- 可恢复的安全rm
我们常常使用rm去删除一些文件.假设不小手一抖,那么就悲剧了.你们都懂的... 在经历过一次这种慘剧后.决定永远杜绝这种情况.重写写了shell函数.运行安全的rm.这个函数会把要删除的文件按日期备份 ...
- 开发汉澳sinox64位,对接汉澳矩阵电脑
汉澳矩阵电脑刚刚不久前提出,即使全然设计出了汉澳矩阵电脑线路图,要在上面执行操作系统必须有矩阵操作系统. 汉澳sinox64位操作系统并非矩阵操作系统,仅仅是更为接近. 汉澳矩阵电脑假设插有16个矩阵 ...
- C++学习之继承中的访问控制
我们通常认为一个类有两种不同的用户:普通用户 和 类的实现者.其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的公有(接口)成员:实现者则负责编写类的成员和友元的代码,成员和友元既能访问类的 ...
- 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等
设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...
- LeetCode 463. Island Perimeter (岛的周长)
You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represen ...
- css高级:font-size
body{ font:62.5%/1.6em "Lucida Grande",Verdana,Geneva,Helvetica,Arial,sansserif; }//font-s ...
- UVA - 10324 Zeros and Ones
Description Given a string of 0's and 1's up to 1000000 characters long and indices i and j, you are ...