FPGA学习篇——Verilog学习2(常见系统函数)

1 系统函数

Verilog 语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在 Testbench 仿真中使用的,使我们更方便的进行验证。

1.1 时间预编译指令及延时

时间精度:决定时间相关量的精度及仿真显示的最小刻度。
例如:`timescale 1ns/10ps   精度0.01,
时间单位不能比时间精度小,下面这种写法就是错误的:
例如:`timescale 100ps/1ns


如:#10.11 表示延时10110ps。

1.2 $display

类似于C语言中的printf函数,可自动换行。

以上例子 “” 内的内容被打印,将a以二进制形式输出,b以二进制形式输出,然后将C以十进制输出。

1.3 $write

用$display差不多,但要手动换行。

实例:

(左图中18行应还有endmodule)

由于write没有自动换行,由代码第10行和第11行可知其两行字应该在一起,EmbedFire加了换行符后换行了。

1.4 $strobe

无论此函数在哪里写,都是在文件的最后才编译。

实例(代码不完整,主要为了展示其最后才编译的特点):

strobe在display前,但还是strobe的最后才来打印。

1.5 $monitor

monitor中的语句只要“”内的任何一个变量发生变化,就会打印一遍该语句。

实例:

如图,可以看到,第11行,a变量被赋值,即发生变化,打印(此时bc未赋值故为x),第13行,b又被赋值,即发生变化,打印(此时c未被赋值为x),第15行,c又被赋值,即发生变化,直接打印,故有三条打印结果。

1.6 $stop和$finish

$stop是暂停仿真,$finish是结束仿真,直接使用即可。

实例:

可以看到,输出“Stop Simulation ”后,黄色划线部分对应于暂停了仿真,然后暂停仿真后继续仿真是从原来暂停的位置继续的,而不是从头来!红色划线则刚好对应结束仿真。

1.7 $time和$random

$time为时间函数,返回64位当前仿真时间(即显示当前仿真时间);

$random用于产生随机数,返回随机数。

实例:

看这个实例,第6行表示每延迟10ns,a赋值一个随机值,然后第八行,用monitor进行打印(只要a变化就打印一次此时的a值),且使用了$time,会打印此时仿真对应的时间。

看结果,代码编写是每延迟10ns,a赋值一个随机值,打印对应的仿真时间也是每行相差10ns。

1.8 $readmemb 和 $readmemh

看最后一个字母,b表示二进制,h表示十进制。故$readmemb为读取二进制文件,$readmemh为读取十进制文件。

存贮器名就是将读取的文件赋值到这里。


注:本节为学习了哔哩哔哩网站上“野火”官方号视频所得个人经验,如有侵权,请联系我,欢迎指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值