$stop //停止运行仿真, modelsim中可继续仿真
$stop(n) //带参数系统任务,根据参数 0,1或 2不同,输出仿真信息
$finish //结束运行仿真,不可继续仿真
$finish(n) //带参数系统任务,根据参数 0,1或 2不同,输出仿真信息
//0:不输出任何信息
//1:输出当前仿真时刻和位置
//2:输出当前仿真时刻、位置和仿真过程中用到的 memory以及 CPU时间的统计
$random //产生随机数
$random % n //产生范围 n到 n之间的随机数
{$random} % n //产生范围 0到 n之间的随机数
在仿真器中打印输出:
$monitor ($time,,,"clk=%d reset=%d out=%d", clk, reset, out);
$display ("Addr: %b -> DataWrite: %d", Mpi_addr, Data_out);
利用时序检查的系统任务来检查时序:
$setup (Sig_D, posedge Clock, 1); //如果在Clock上升沿到达之前的1ns时间内Sig_D发生跳变,则将给出建立时间违反告警
$hold (posedge Clock, Sig_D, 0.1); //如果在Clock上升沿到达之后的0.1ns时间内Sig_D发生跳变,则将给出保持时间违反告警
$time系统函数可以用来返回当前的仿真时间,协助仿真。
$time //返回 64位整型时间
$stime //返回 32位整型时间
$realtime //实行实型模拟时间
文本输入方式::$readmemb / $readmemh
//verilog提供了读入文本的系统函数
$readmemb / $readmemh ("<数据文件名>", <存储器名>);
$readmemb / $readmemh ("<数据文件名>", <存储器名>, <起始地址>);
$readmemb / $readmemh ("<数据文件名>", <存储器名>, <起始地址>, <结束地址>);
$readmemb:
/*读取二进制数据,读取文件内容只能包含:空白位置,注释行,二进制数
数据中不能包含位宽说明和格式说明,每个数字必须是二进制数字。*/
$readmemh:
/*读取十六进制数据,读取文件内容只能包含:空白位置,注释行,十六进制数
数据中不能包含位宽说明和格式说明,每个数字必须是十六进制数字。*/
/*当地址出现在数据文件中,格式为 @hh...h,地址与数字之间不允许空白位置,可出现多个地址*/
一个用户代码片段
"Reading and writing data from a file": {
// "scope": "javascript,typescript",
"prefix": "tb_file_rw",
"body": [
"",
"reg [ 7:0] DataSource [ 0:47];",
"$$readmemh (\"Read_In_File.txt\", DataSource);",
"",
"integer Write_Out_File;",
"Write_Out_File = $$fopen (\"Write_Out_File.txt\");",
"$$fdisplay (Write_Out_File, \"@%h\\n%h\", Mpi_addr, Data_in);",
"$$fclose (Write_Out_File);",
"$2"
],
"description": "Reading and writing data from a file"
},