good usage on systemverilog

    xiaoxiao2021-12-14  19

    再次细看uvm source code, 借此把里面用的很好的技巧和语法记录一下, 希望后面有精力陆续更新

    Macro

    参数传递

    1.使用参数 1).   `(一个shell 执行符, Esc 下面 ),猜是转义字符的功能,使其“” 与S分离开,使编译器认为S是传入值而非字符串 2).  ``(两个shell 执行符, Esc 下面),这种偏多了,保留参数S的值 `define m_uvm_object_registry_internal(S) \ string str = `"S`";  `define m_uvm_object_registry_internal_xxx(S) \ string str2 = "xxx_``S``_xxx";      initial begin         `m_uvm_object_registry_internal(uvm_test)         `m_uvm_object_registry_internal_xxx(uvm_env)         $display("%0s, %0s", str, str2);     end 仿真结果: uvm_test, xxx_uvm_env_xxx

    Formatting data to string

    systemverilog syntax from IEEE:

    string_output_tasks ::= string_output_task_name ( output_var [,list_of_arguments ]) ; string_output_task_name ::= $swrite|$swriteb|$swriteh|$swriteo variable_format_string_output_task ::= $sformat (output_var,format_string [,list_of_arguments ]) ; variable_format_string_output_function ::= $sformatf (format_string [,list_of_arguments ]) $sformatalways interprets its second argument,and supports all the format specifiers supported by$display, eg:  string s;     $sformat(s, "pair : %s, %s",              first.convert2string(), second.convert2string()); 将第二个参数$display 成string,并赋值s; $sformatf 跟$sformat 一样,除了会将结果返回,也没有第一个参数。当一个string值需要有效地返回值该function很有用, uvm 中常用的就是该function 做字符串打印. eg: return $sformatf("built-in pair : %p, %p", first, second);

    count 1 number

    转载请注明原文地址: https://ju.6miu.com/read-968463.html

    最新回复(0)