/*---------------------------------------------------------------- 仿真控制语句及系统任务描述 ----------------------------------------------------------------*/ $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 //仿真打印输出,大印出仿真过程中的变量,使其终端显示 /* $monitor($time,,,"clk=%d reset=%d out=%d",clk,reset,out); */ $display //终端打印字符串,显示仿真结果等 /* $display(” Simulation start ! "); $display(” At time %t,input is %b%b%b,output is %b",$time,a,b,en,z);
*/ $time //返回64位整型时间 $stime //返回32位整型时间 $realtime //实行实型模拟时间 /*---------------------------------------------------------------- 文本输入方式:$readmemb/$readmemh ----------------------------------------------------------------*/ //激励具有复杂的数据结构 //verilog提供了读入文本的系统函数 $readmemb/$readmemh("<数据文件名>",<存储器名>); $readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>); $readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>,<结束地址>); $readmemb:/*读取二进制数据,读取文件内容只能包含:空白位置,注释行,二进制数 数据中不能包含位宽说明和格式说明,每个数字必须是二进制数字。*/ $readmemh:/*读取十六进制数据,读取文件内容只能包含:空白位置,注释行,十六进制数 数据中不能包含位宽说明和格式说明,每个数字必须是十六进制数字。*/ /*当地址出现在数据文件中,格式为@hh...h,地址与数字之间不允许空白位置, 可出现多个地址*/ module reg [7:0] memory[0:3];//声明8个8位存储单元 integer i; initial begin $readmemh("mem.dat",memory);//读取系统文件到存储器中的给定地址 //显示此时存储器内容 for(i=0;i<4;i=i+1) $display("Memory[%d]=%h",i,memory[i]); end endmodule
/*mem.dat文件内容 @001 AB CD @003 A1 */ //仿真输出为 Memory[0] = xx; Memory[1] = AB; Memory[2] = CD; Memory[3] = A1; |