IEEE SystemVerilog Chapter21.6:Command line input

2024-04-10 20:28

本文主要是介绍IEEE SystemVerilog Chapter21.6:Command line input,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        读取文件以获得在仿真中使用的信息的替代方案是用调用仿真器的命令指定信息。该信息以可选参数的形式提供给仿真器。这些参数与其他仿真器参数的区别在于它们以加号(+)字符开头。
        以下称为plusargs的这些参数可通过以下系统函数访问:

$test$plusargs ( string )
$value$plusargs ( user_string, variable )

        $test$plusargs系统函数在plusarg列表中搜索用户指定的plusarg_string。字符串在系统函数的参数中指定为字符串或解释为字符串的整型变量。如果使用变量来指定字符串,则应忽略变量中的前导null,并且不应视为匹配字符串的一部分。该字符串不应包括命令行参数的前导加号。按提供的顺序搜索命令行上存在的plusarg。如果提供的一个plusargs的前缀与提供的字符串中的所有字符匹配,则函数返回非零整数。如果命令行中没有与提供的字符串匹配的plusarg,则函数返回整数值零。
        例如:
        使用命令运行仿真器: +HELLO

initial beginif ($test$plusargs("HELLO")) $display("Hello argument found.");if ($test$plusargs("HE")) $display("The HE subset string is detected.");if ($test$plusargs("H")) $display("Argument starting with H found.");if ($test$plusargs("HELLO_HERE")) $display("Long argument.");if ($test$plusargs("HI")) $display("Simple greeting.");if ($test$plusargs("LO")) $display("Does not match.");
end

该代码将产生以下输出:

Hello argument found.
The HE subset string is detected.
Argument starting with H found.

        $value$plusargs系统函数搜索plusarg列表(类似于$test$plusargs系统函数)以查找用户指定的plusarg_string。字符串在系统函数的第一个参数中指定为字符串或解释为字符串的整型变量。如果使用变量来指定字符串,则应忽略变量中的前导null,并且不应视为匹配字符串的一部分。该字符串不应包括命令行参数的前导加号。按提供的顺序搜索命令行上存在的plusarg。如果提供的一个plusargs的前缀与提供的字符串中的所有字符匹配,则函数返回一个非零整数,字符串的其余部分将转换为user_string中指定的类型,并且结果值存储在提供的变量中。如果没有找到匹配的字符串,则函数返回整数值零,并且提供的变量不会被修改。当函数返回零(0)时,不应生成警告。

     user_string应采用以下格式:“plusarg_string format_string”。格式字符串与$display系统任务相同。以下是唯一有效的格式字符串(大写和小写以及前导的0格式有效):

%d 十进制转换
%o 八进制转换
%h, %x 十六进制转换
%b 二进制转换
%e 实指数转换
%f 实十进制转换
%g 实数十进制或指数转换
%s 字符串(无转换)

        提供给仿真器的plusargs列表中的第一个字符串与指定的user_string的plusarg_string部分匹配,应是可用于转换的plusarg字符串。匹配的plusarg的余数字符串(余数是与用户的plusarg_string匹配的部分之后的plusarg字符串的部分)应从字符串转换为格式字符串指示的格式,并存储在提供的变量中。如果没有剩余的字符串,存储在变量中的值应为零或空字符串值。
        如果变量的大小大于转换后的值,则存储的值将以零填充到变量的宽度。如果转换后变量不能包含值,则应截断该值。如果值为负,则应认为该值大于提供的变量。如果可用于转换的字符串中存在对于指定转换非法的字符,则应使用值“bx”写入变量。

考虑下面的SystemVerilog 代码:

`define STRING logic [1024 * 8:1]
module goodtasks;`STRING str;integer i1;logic [31:0] vect;real realvar;initialbeginif ($value$plusargs("TEST=%d", i1))$display("value was %d", i1);else$display("+TEST= not found");#100 $finish;end
endmodule
module ieee1364_example;real frequency;logic [8*32:1] testname;logic [64*8:1] pstring;logic clk;initialbeginif ($value$plusargs("TESTNAME=%s",testname))begin$display(" TESTNAME= %s.",testname);$finish;endif (!($value$plusargs("FREQ+%0F",frequency)))frequency = 8.33333; // 166 MHz$display("frequency = %f",frequency);pstring = "TEST%d";if ($value$plusargs(pstring, testname))$display("Running test number %0d.",testname);end
endmodule

(1)并将plusarg添加到该工具的命令行

+TEST=5

将产生以下输出:

value was 5
frequency = 8.333330
Running text number x.

(2)将plusarg添加到工具的命令行

+TESTNAME=t1

将产生以下输出:

+TEST= not foundTESTNAME= t1.

(3)将plusarg添加到工具的命令行:

+FREQ+9.234

将产生以下输出:

+TEST= not found
frequency = 9.234000

(4)将plusarg添加到工具的命令行:

+TEST23

将产生以下输出:

+TEST= not found
frequency = 8.333330
Running test number 23.



 

这篇关于IEEE SystemVerilog Chapter21.6:Command line input的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892055

相关文章

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

IEEE会议投稿资料汇总http://cadcg2015.nwpu.edu.cn/index.htm

最近投了篇IEEE的顶级会议文章,一下是比较有用的一些资料,以供参考。 1.会议主页:http://cadcg2015.nwpu.edu.cn/index.htm     (The 14th International Conference on Computer-Aided Design and Computer Graphics (CAD/Graphics 2015)) 2.I

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息交流,推动新能源技术的创新和应用,为全球能源领域的可持续发展贡献力量。期待着各方专家学者的共同参与和卓越贡献,共同开创电力系统未来的新篇章。

systemverilog、verilog的部分常用内部函数

1. $ceil 作用:将给定的实数或浮点数向上取整。示例:$ceil(3.2) 返回 4。 2. $floor 作用:将给定的实数或浮点数向下取整。示例:$floor(3.9) 返回 3。 3. $value$plusargs 作用:从命令行读取传递给仿真器的参数。格式:$value$plusargs("格式", 变量),格式 用来匹配命令行的参数,变量 是用来存储匹配到的值。示例:$

IEEE格式参考和指导

IEEE Conference Template: Word [Link]Links to an external site., Latex [LinkLinks to an external site.]IEEE Reference Guide: LinkLinks to an external site. IEEE格式是一种广泛用于工程、技术和计算机科学领域的引用和参考文献格式。IEEE

编译时出现错误 -- clang: error: linker command failed with exit code 1 (use -v to see invocation)

出现这个错误的原因有多种,常见的是因为某些文件的缺失或者是文件的重复导致的。 这类错误查看的关键在于其上一行的文字。 对于文件缺少而导致错误的情况: 例如上图中的示例,其上一行文字为 ld:library not found for -lrxl,可以看出是缺失了某一文件而导致的错误,这行文字中的最后“ -lrxl ”:-l 代表着其前缀是“lib”,连着后面的 rxl,其名称为 libr

vue中oninput和@input区别

使用oninput绑定,此方法会导致中文输入法情况下,v-model和value不一致,原因是在中文输入法情况下vue中的v-model会自动return,v-mode绑定的值不变,value绑定的值可变。 :οninput="value=value.replace(/\D/g,'')" @input="row[item.prop]=row[item.prop].replace(/\D/g,'

ON_COMMAND_RANGE 和 ON_UPDATE_COMMAND_UI_RANGE

 ON_COMMAND_RANGE 和 ON_UPDATE_COMMAND_UI_RANGE 可以影射ID连续的Toolbar/Menu ID。 ON_COMMAND_RANGE影射的消息响应函数需要一个参数UINT表明是哪一个消息, afx_msg void OnZoom(UINT nID); 而ON_UPDATE_COMMAND_UI_RANGE的消息响应函数则无此ID,与ON

on command range

 ON_COMMAND_RANGEON_COMMAND_RANGE( id1, id2, memberFxn )参数: id1一个连续范围的命令ID的起始值。id2一个连续范围的命令ID的结束值。memberFxn该命令被映射到的消息处理函数的名字。 说明:使用这个宏把一个连续范围的命令ID映射到单个命令处理函数。ID的范围从id1开始,到id2结束。用ON_COMMAND_RAN

ON_COMMAND_RANGE的用法

 今天主要介绍一下ON_COMMAND_RANGE的用法 第一次用这个方法还是刚毕业那会,那时写过一个控制程序,界面上有很多电器的控制按钮,这些按钮的响应函数基本一致,只是相应的ID值不一样,要是一一写响应函数那不累死人,于是就东找西找,找到ON_COMMAND_RANGE。 最近一个偶然机会也要用到它,三下五除二,CODE写完了, 1.在要添加的工程上添加函数afx_msg vo