本文首发于微信公众号“花蚂蚁”,想要学习FPGA及Verilog的同学可以关注一下。
Verilog HDL语言中共有以下一些系统函数和任务:
$bitstoreal, $rtoi, $display, $setup, $finish, $skew, $hold,
$setuphold, $itor, $strobe, $period, $time, $printtimescale,
$timefoemat, $realtime, $width, $real tobits, $write, $recovery,
在Verilog HDL语言中每个系统函数和任务前面都用一个标识符$来加以确认。这些系统函数和任务提供了非常强大的功能。下面对一些常用的系统函数和任务逐一加以介绍。
注意:对于初学者来说任务函数和任务不是首要必须掌握的,可以以后慢慢理解。
1.$display和$write任务
格式:
$display(p1,p2,....pn);
$write(p1,p2,....pn);
这两个函数和系统任务的作用是用来输出信息,即将参数p2到pn按参数p1给定的格式输出。参数p1通常称为“格式控制”,参数p2至pn通常称为“输出表列”。
这两个任务的作用基本相同。$display自动地在输出后进行换行,$write则不是这样。如果想在一行里输出多个信息,可以使用$write。在$display和$write中,其输出格式控制是用双引号括起来的字符串,它包括两种信息:
- 格式说明,由"%"和格式字符组成。它的作用是将输出的数据转换成指定的格式输出。格式说明总是由“%”字符开始的。对于不同类型的数据用不同的格式输出。下表中给出了常用的几种输出格式。
![e2286f72ee746a147241b6a034f28306.png](https://i-blog.csdnimg.cn/blog_migrate/ff10f236570477c5b311af85d4c84c1f.jpeg)
- 普通字符,即需要原样输出的字符。其中一些特殊的字符可以通过下表中的转换序列来输出。下面表中的字符形式用于格式字符串参数中,用来显示特殊的字符。
![0c0fcd16b148d89d68107ae4c638c68c.png](https://i-blog.csdnimg.cn/blog_migrate/fffa0fc86ae074102f82281a801e7eb0.jpeg)
在$display和$write的参数列表中,其“输出表列”是需要输出的一些数据,可以是表达式。下面举几个例子说明一下。
[例1]:
module disp;
initial
begin
$display("t%%n"123");
end
endmodule
输出结果为
%
"S
从上面的这个例子中可以看到一些特殊字符的输出形式(八进制数123就是字符S)。
[例2]:
module disp;
reg[31:0] rval;
pulldown(pd);
initial
begin
rval=101;
$display("rval=%h hex %d decimal", rval, rval);
$display("rval=%o otal %b binary", rval, rval);
$display("rval has %c ascii character value",rval);
$display("pd strength value is %v",pd);
$display("current scope is %m");
$display("%s is ascii value for 101",101);
$display("simulation time is %t",$time);
end
endmodule
其输出结果为:
rval=00000065 hex