北大数字集成电路课件--14_Verilog文本输入输出

上传人:gp****x 文档编号:243045955 上传时间:2024-09-14 格式:PPT 页数:20 大小:60.50KB
返回 下载 相关 举报
北大数字集成电路课件--14_Verilog文本输入输出_第1页
第1页 / 共20页
北大数字集成电路课件--14_Verilog文本输入输出_第2页
第2页 / 共20页
北大数字集成电路课件--14_Verilog文本输入输出_第3页
第3页 / 共20页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,数字集成电路设计入门,-从HDL到版图,北大微电子学系,1,第14章,对验证的支持,学习内容,理解,Verilog,文本输出,理解不同的读取仿真时间的系统函数,理解,Verilog,文件,I/O,功能,2,验证系统中的任务(task)及函数(function),Verilog读取当前仿真时间的系统函数,$time,$stime,$realtime,Verilog支持文本输出的系统任务:,$display,$strobe,$write,$monitor,3,仿真时间,访问仿真时间,$time,$realtime,和$stime函数返回当前仿真时间。,这些函数的返回值使用调用模块中timescale定义的时间单位,$time返回一个64位整数时间值。,$stime返回一个32位整数时间值。,$realtime返回一个实数时间值。,$stime函数返回一个32位整数时间值。对大于2,32,的时间,返回模2,32,的值。使用它可以节省显示及打印空间。,4,输出格式化时间信息,timescale 10ns / 100ps,module top;,reg in1;,not m1( o1, in1);,initial begin,$timeformat(-9, 2, ns, 10);,in1 = 0;,#8 in1 = 1;,#10 $display(,%t,%b %b, $realtime, in1, o1);,#10 $finish;,end,endmodule,在这个例子中,显示的时间为:180.00 ns,unit:0(s)到-15(fs)之间的整数,表示时间度量,precision:要显示的十进制小数位数。,suffix:在时间值后显示的字符串,min_width:显示前三项的最小宽度,若使用多个timescale,以最小的时间精度显示时间值。,可用系统任务$timeformat结合格式符%t全局控制时间显示方式。,$timeformat系统任务的语法为:,$timeformat(,);,5,输出格式化时间信息,timescale 1 ns / 10 ps,module top;,reg in1;,not,#9.53,n1 (o1, in1);,initial,begin,$display(time realtime stime t in1 t o1 );,$timeformat(-9, 2, ns, 10);,$monitor(%d %t %d t %b t %b, $time, $realtime,$stime, in1, o1);,in1 = 0;,#10 in1 = 1;,#10 $finish;,end,endmodule,time realtime stime in1 o1,0 0.00ns 0 0 x,10 9.53ns 10 0 1,10 10.00ns 10 1 1,20 19.53ns 20 1 0,6,输出格式化时间信息,对#延迟,Verilog将延迟值舍入最近(四舍五入)时间精度值。,例如,上面的例子修改为:,timescale 1ns/ 100ps,not #9.42 n1 (o1, in1);,结果为:,time realtime stime in1 o1,0 0.00ns 0 0 x,9 9.40ns 9 0 1,10 10.00ns 10 1 1,19 19.40ns 19 1 0,timescale 1ns/ 100ps,not #9.49 n1 (o1, in1);,结果为:,time realtime stime in1 o1,0 0.00ns 0 0 x,9 9.50ns 9 0 1,10 10.00ns 10 1 1,19 19.50ns 19 1 0,7,显示信号值 ,$,display,$display输出参数列表中信号的当前值。,语法:,$display(“ format_specifiers”, ),$display输出时,自动换行,。,$display ($ time, “%b t %h t %d t %o”, sig1, sig2, sig3, sig4);,$display ($ time, “%b t”, sig1, “%h t”, sig2, “% d t”, sig3, “%o”, sig4);,$display支持二进制、八进制、十进制和十六进制。缺省基数为十进制。,$display (sig1, sig2, sig3, sig4);,$displayb (sig1, sig2, sig3, sig4);,$displayo (sig1, sig2, sig3, sig4);,$displayh (sig1, sig2, sig3, sig4);,%h %o %d %b %c %s %v %m %t,hex octal decimal binary ASCII string strength module time,t n %0d,tab 换行 反斜杠 双引号 上述的ASCII表示 无前导0的十进制数,格式符,转义符,8,显示信号值,$,write和,$,strobe,$write与$display相同,不同的是不会自动换行。,$write($time, “%b t %h t %d t %o t”, sig1, sig2, sig3, sig4);,$strobe与$display相同,不同的是在仿真时间前进之前的信号值。而$display和$write立即显示信号值。也就是说$strobe显示稳定状态信号值,而$display和$write可以显示信号的中间状态值。,$strobe($time, “%b t %h t %d t %o t”, sig1, sig2, sig3, sig4);,$write和$strobe都支持多种数基,缺省为十进制。,$writeb$strobeb,$writeo$strobeo,$writeh$strobeh,9,显示信号值,$,write和,$,strobe,下面是模块textio仿真的输出:,$writeb输出:,0 xxxxxxxx x,注意data是32位数据,由8位十六进制数表示。时间以没有前导零的十进制形式输出。,缺省情况下,值以十进制显示,忽略前导零,与%0d格式符相同。可以在一个格式化符前插入一个0使Verilog忽略开头的零。,$displayh:,000f 00000010 1,注意当前时间,一个64位量,需要16个十六进制的数。,$display: 10 20,$strobe: 10 30,module textio;,reg flag;,reg 31: 0 data;,initial,begin,$writeb(%d, $time, ,%h t,data, , flag, n);,#15 flag = 1; data = 16;,$displayh($time, ,data, , flag);,end,initial,begin,#10 data = 20;,$strobe($time, , data);,$display($time, , data);,data = 30;,end,endmodule,10,监视信号值,$,monitor,$monitor持续监视参数列表中的变量。,在一个时间片中,参数表中任何信号发生变化,$monitor将在仿真时间前进前显示参数表的信号值。,后面的$monitor将覆盖前面的$monitor。,可以用系统任务$monitoron和$monitoroff控制持续监视。,$monitor支持多种基数。缺省为十进制。,$monitor ($ time, “%b t %h t %d t %o”, sig1, sig2, sig3, sig4);,11,监示信号值,$,monitor,$monitor是唯一的不断输出信号值的系统任务。其它系统任务在返回值之后就结束。,$monitor和$strobe一样,显示参数列表中信号的稳定状态值,也就是在仿真时间前进之前显示信号。在一个时间步中,参数列表中信号值的任何变化将触发$monitor 。但$time,$stime,$realtime不能触发。,任何后续的$monitor覆盖前面调用的$monitor。只有新的$monitor的参数列表中的信号被监视,而前面的$monitor的参数则不被监视。,可以用$monitoron和$monitoroff系统任务控制持续监视,使用户可以在仿真时只监视特定时间段的信号。,$monitor参数列表的形式与$display相同。,$monitor支持多种基数。缺省为十进制。,$monitorb,$monitoro,$monitorh,12,文件输出,$fopen打开一个文件并返回一个多通道描述符(MCD)。,MCD是与文件唯一对应的32位无符号整数。,如果文件不能打开并进行写操作,MCD将等于0。,如果文件成功打开,MCD中的一位将被置位。,以$f开始的显示系统任务将输出写入与MCD相对应的文件中。,. . .,integer,MCD1,;,MCD1,= $fopen();,$fdisplay(,MCD1, P1, P2, ., Pn);,$fwrite(,MCD1, P1, P2, ., Pn);,$fstrobe(,MCD1, P1, P2, ., Pn);,$fmonitor(,MCD1, P1, P2, ., Pn);,$fclose(,MCD1,);,. . .,13,文件输出,$fopen打开参数中指定的文件并返回一个32位无符号 整数MCD,MCD是与文件一一对应的多通道描述符。如果文件不能打开并进行写操作,它返回0。,$fclose关闭MCD指定的通道。,输出信息到log文件和标准输出的四个格式化显示任务($display, $write, $monitor, $strobe)都有相对应的任务用于向指定文件输出。,这些对应的任务($fdisplay,$fwrite,$fmonitor,$fstrobe)的参数形式与对应的任务相同,只有一个例外:第一个参数必须是一个指定向何哪个文件输出的MCD。MCD可以是一个表达式,但其值必须是一个32位的无符号整数。这个值决定了该任务向哪个打开的文件写入,。,MCD可以看作由32个标志构成的组,每个标志代表一个单一的输出通道。,14,文件输出,. . .,integer messages, broadcast, cpu_chann, alu_chann;,initial,begin,cpu_chann = $fopen( cpu.dat),; if(! cpu_chann) $finish;,alu_chann = $fopen( alu.dat);,if(! alu_chann) $finish;,/ channel to both cpu. dat and alu. dat,messages = cpu_chann | alu_chann;,/ channel to both files, standard out, and verilog. log,broadcast = 1 | messages;,end,always ( posedge clock) / print the following to alu. dat,$fdisplay(,alu_chann, acc= %h f=%h a=%h b=%h, acc, f, a, b);,/* at every reset print a message to alu. dat, cpu. dat, standard output,and the verilog. log file */,always ( negedge reset),$fdisplay( broadcast, system reset at time %d, $time);,. . .,必须声明为integer,通道0(编号为1)为标准输出及verilog.log,15,文件输入,Verilog中有两个系统任务可以将数据文件读入寄存器组。一个读取二进制数据,另一个读取十六进制数据:,$readmemb,$readmemb (, );,$readmemb (, , );,$readmemb (, , , );,$readmemh,$readmemh ( , );,$readmemh ( , , );,$readmemh ( , , , );,16,文件输入,系统任务$readmemb和$readmemh从一个文本文件读取数据并写入存储器。,如果数据为二进制,使用$readmemb;如果数据为十六进制,使用$readmemh。,指定要调入的文件。,mem_name指定存储器名。,start和finish决定存储器将被装载的地址。Start为开始地址,finish为结束地址。如果不指定开始和结束地址,$readmem按从低端开始读入数据,与说明顺序无关。,17,文件输入,$readmemb和$readmemh的文件格式 :,$readmemb(mem_file. txt, mema);,0000_0000,0110_0001 0011_0010,/ 地址3255没有定义,100 / hex,1111_1100,/地址2571022没有定义,3FF,1110_0010,文本文件:mem_,声明的存储器组,reg 0:7 mema0:1023,module readmem;,reg 0:7 mema 0:1023,initial,$readmemb(“mem_”, mema);,endmodule,18,文件输入,$readmemb和$readmemh的文件格式 :,$readmemb(mem_file. txt, mema);,可以指定二进制(,b,)或十六进制(,h,)数,用下划线(,_,)提高可读性。,可以包含单行或多行注释。,可以用空格和换行区分存储器字。,可以给后面的值设定一个特定的地址,格式为:,(hex_address),十六进制地址的大小写不敏感。,在,和数字之间不允许有空格。,19,复习,问题:,哪个系统任务显示参数列表中信号的稳定状态值?,每次能打开多少个输出文件?,解答:,系统任务,$monitor,和,$strobe,显示参数列表中信号的稳定状态值。这些任务在时间前进之前输出信号值。,每次只能打开一个输出文件,包括已由仿真器打开的任何,log,文件。,20,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!