首页 技术 正文
技术 2022年11月11日
0 收藏 406 点赞 2,247 浏览 2800 个字

1)系统任务:$monitor

 格式:$monitor(p1,p2,p3…pn);$monitor;$monitoron;$monitoroff;任务$monitor提供了监控输出列表中的表达式或变量值的功能。其参数列表中输出格式控制字符串和输出列表的规则和$display一样。当启动一个带有一个或多个参数的$monitor时,仿真器则建立一个处理机制,使得每当参数列表中变量或者表达式的值发生变化是,整个参数列表中变量或者表达式的值都将输出显示。如果同一时刻,两个或多个参数的值发生变化,则该时刻只输出一次。在$monitor中,参数可以是$time系统函数。这样参数列表中变量或表达式的值同时发生变化的时刻可以通过表明同一时刻的多行显示出来。如: $monitor($time,,”tex=%b rex=%b”,tex,rex);     //注意这里的,,代表空参数,空参数在输出时显示为空格。$monitor和$display的不同之处在于$monitor往往直接用在initial语句块中,只要不调用$monitoroff,$monitor便不断的对所设定的信号进行监视。$monitor不能在always块中调用。再多模块的调试情况下,每一个模块都会默认调用$monitor语句,但是仿真器只能执行一个$monitor语句,因此程序会报错,这是需要$monitoron和$monitoroff语句,这样可以使得各个模块分开调用$monitor函数。 2)时间度量系统函数$time 在Verilog HDL中有两类型的时间系统函数,$time和$realtime。用这两个系统用函数可以的大当前的仿真时间。$time可以返回一个64位的整数来表示当前仿真时刻值,该时刻是以模块的仿真时间尺度位基准的。$realtime返回的时间数字是一个实型数。该数也是以时间尺度为基准的。 `timescale 10ns/1nsmodule test;  reg set;  parameter p=1.6;  initial    begin     $monitor($time,,”set=”,set);     #p  set=0;     #p  set=1;    endendmodule输出结果为: 0 set=x 2 set=0 3 set=3在这个例子中,模块test想在时间为16ns是设置寄存器set的值为0,在32ns时设置寄存器的set为1。但是由$time疾苦的set变化时刻却和预想的不一样,这是由下面两个原因引起的。1)$time显示时刻受时间尺度的影响。这里时间尺度为10ns,故16ns和32ns是对应输出的数字为1.6和3.2。2)$time总是输出整数,所以在将经过尺度比例变换的数字输出时,要先进行取整,1.6和3.2分别取整为1和3.2.3)如果将上述例子中的$time替换成$realtime,那么输出的数字将变为1.6和3.2. 3)系统任务$readmemb $readmemh在Verilog中有两个系统任务$readmemb和$readmemh,并用来从文件中读取数据到存储器中。这两个系统任务可以在仿真的任何时刻都被执行使用。(1)$readmemb(“<数据文件名>”,<存储器名>);(2)$readmemb(“<数据文件名>”,<存储器名>,<起始地址>);(3)$readmemb(“<数据文件名>”,<存储器名>,<起始地址>,<结束地址>);(4)$readmemh(“<数据文件名>”,<存储器名>);(5)$readmemh(“<数据文件名>”,<存储器名>,<起始地址>);(6)$readmemh(“<数据文件名>”,<存储器名>,<起始地址>,<结束地址>);在这两个系统函数中,被读取的数据文件的内容只能包括:空白字符(空格换行和制表格) 注释行(//和/**/) 二进制和十六进制数字。当地址出现在数据文件中时,其格式为@FF…F。

1 module test;
2 reg [0:7]memory[0:7]; //声明8个8位的存储单元
3 integer i;
4 initial
5 $readmemb("init.dat",memory);
6 for(i=0;i<8;i=i+1)
7 $display("memory[%d]=%b",i,memory[i]);
8 end
9 endmodule

 如果文件中的内容为:@00211111111 0000000001010101 10101010@0061111xxxx 00001111则测试结果为:memory[0]=xxxxxxxxmemory[1]=xxxxxxxxmemory[2]=11111111memory[3]=00000000memory[4]=01010101memory[5]=10101010memory[6]=1111xxxxmemory[7]=00001111在上面6种系统任务格式,需补充说明一下几点:(1)如果系统任务和数据文件都没有说明地址。则从默认的存储器地址开始写入数据,直至数据写完或者存储器存满。(2)如果系统任务说明了起始地址,没有说明结束地址,则数据从起始地址开始存放,直至存储器的结束地址为止。(3)如果系统任务说明了起始地址和结束地址。那么久按章任务说明中的地址进行存储,不考虑存储器的默认起始地址。(4)如果系统任务和数据文件都说明了地址。那么数据文件中的地址说明必须包含在任务地址说明语句中,否则将出现错误信息,并且停止存储。(5)如果数据文件中的数据个数和系统任务中起始地址和结束地址暗示的数据个数不同,也会报错。 4)系统任务$finish $stop 格式:$finish;$finish(n);系统任务$finish的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。$finish可以带承诺书,根据参数的值输出不同的特征信息。如果不带参数,默认其值为1;0 不输出任何信息。1 输出当前的仿真时间和位置;2 输出当前的仿真时间、位置和仿真过程中所用memory和CPU的时间统计。 格式:$stop;$stop(n);$stop任务的作用是将EDA工具设置为暂停模式,在仿真环境下给出一个交互式的命令,将控制权交给用户。参数值越大,输出信息越多。 5)系统任务$random 这个系统函数提供了一个产生随机数的手段。当函数被调用时返回一个32位的随机数。这是一个带符号的整型数。$random的一般用法是:$random%b,其中b>0.他给出了一个范围在(-b+1):(b-1)中的随机数。下面给出例子:reg [23:0]rand;rand=$random%60;            //生成-59~59之间的随机数rand={$random}%60;        //生成0~59之间的随机数

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297