零基础学FPGA(五)Verilog语法基基础基础(下)
9、关于任务和函数的小结,挑几点重要的说一下吧
本文引用地址:https://www.eepw.com.cn/article/267553.htm(1)任务具有多个输入、输入/输出和输出变量,在任务重可以使用延迟、事件和时序控制结构,在任务重可以调用其它任务和函数。与任务不同,函数具有返回值,而且至少要有一个输入变量,而且在函数中不能使用延迟、事件和时序控制结构,函数可以条用函数,但是不能调用任务。
(2)在声明函数时,系统会自动的生成一个寄存器变量,函数的返回值通过这个寄存器返回到调用处。
(3)函数和任务都包含在设计层次中,可以通过层次名对他们实行调用。这句话什么意思啊?
10、系统任务
(1)$diplay和$write任务
$display任务相当于C语言里的printf,用于输出信息,他的基本格式$display (p0,p1,p2);意思就是把p1、p2以p1的格式输出,至于具体格式,C语言里面讲的很清楚,下面用一张图帮大家回忆一下


此外,在display中,输出列表中的数据的现实宽度总是按照自动输出格式进行调整的。因此,我们通常在%和表示进制的符号之间加一个0来确保总是用最少的位数来表示表达式的当前值。
例如
begin
r1=10;
$display("size=%d=%h",r1,r1);
$display("size=%0d=%0h",r1,r1);
输出结果分别为 10,00a和10,a
所以在以后写程序时,为了养成良好习惯,应该注意加上0来保证代码的可读性。
如果输出的列表中含有不定值或者高阻态时,要遵循下列情况
(1)如果按10进制输出
如果输出列表全部为不定值,则输出为小写x;
如果输出列表部分为不定值,则输出为大写X;
如果输出列表全部为高阻态,则输出为小写的z;
如果输出列表部分为高阻态,则输出为大写的Z;
(2)如果按十六进制或者8进制输出
那么十六进制对应的四位或者8进制对应的3位中,如果部分是高阻态或者是不定值,那么输出结果为大写的Z或者X否则就输出小写的z或者x;
例如

(2)$monitor
系统任务$monitor提供了监控和输出参数列表中的表达式或变量值的功能,其参数列表中输出控制格式字符串和输出列表的规则和$display一样,当启动一个带有一个或者多个的$monitor任务时,仿真器则创立一个仿真机制,使得每当参数列表中的表达式或值发生变化时,整个参数列表中的变量或者表达式的值都将输出显示,如果在同一时刻,两个或者多个参数的值发生变化,则在这时刻只输出显示一次,但在$monitor任务中,参数可以是$time系统函数,这样参数列表中变量或者表达式的值同时发生变化的时刻可以通过标明同一时刻的多行输出来显示。
例如

$monitoron和$monitoroff的功能就是通过打开或者关闭监控标志来控制监控任务$monitor的启动和停止。这样可以使得程序员很容易的控制$monitor什么时候执行了。
(3)时间度量系统函数$time
在verilog hdl语法中有两种时间度量系统函数,分别是$time和$realtime,用这两个系统函数可以得到当前的仿真时刻。$time可以返回一个64位的值来记录当前的仿真时刻。
(4)$finish
系统任务$finish的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。格式是
$finish或者$finish(1);如果不带参数,则默认参数为1,下面是具体参数下系统输出的特征信息。
0 不输出任何信息
1 输出当前仿真时刻和位置
2 输出当前仿真时刻、位置和在仿真过程中所用memory及CPU时间的统计。
表示看不懂...
fpga相关文章:fpga是什么
c语言相关文章:c语言教程
评论