当前位置: 首页 > news >正文

网站的稳定性哈尔滨做网站搭建的

网站的稳定性,哈尔滨做网站搭建的,汕头做网站设计,琪觅网站建设摘要#xff1a;本文主要介绍了一些在verilog中的行为级语法#xff0c;并且提供了大量的运行实际例子#xff0c;可以通过这些例子感受行为级语法在仿真中的巨大作用。 概述#xff1a;行为级语法是RTL级的上一层#xff0c;或者说是比RTL级更高级的语法#xff0c;其语…摘要本文主要介绍了一些在verilog中的行为级语法并且提供了大量的运行实际例子可以通过这些例子感受行为级语法在仿真中的巨大作用。 概述行为级语法是RTL级的上一层或者说是比RTL级更高级的语法其语法更加符合人类思维的描述方式。行为级语法可用于快速验证算法的正确性或快速构建一个复杂的系统模型。仿真验证中使用行为级的语法可以充分发挥仿真平台的优越性用更加简介、高效的语法语句简化并加快仿真系统的构建让设计者把更多的时间和精力集中在设计和调试上。行为级多以直接赋值、指定延迟、算术运算等不可综合的形式进行不关注电路的具体结构因为其并不需要直接综合成实际的电路结构并运行到FPGA器件中。 1.initial和always initial和always语句所实现的行为级语法遵循硬件固有的并行性特点在仿真过程中可以独立并行地运作。在一个测试脚本中无论是有一个还是多个initial或always语句它们都会从仿真的0ns开始并行工作。initial语句在整个仿真过程中只会运行一次而always语句则会不断重复运行直到仿真运行停止。 timescale 1ns/1nsmodule testbench_top();reg a, b;initial beginab1;bb0;endinitial begin#1000;$stop;endalways begin#50 a~a;endalways begin#100 b~b;endendmodule 2.时间刻度timescale timescale对事件单位代表的物理时间进行定义其后接时间单位和事件精度两者之间用反斜杠/进行分隔。语法结构为timescale 时间单位/时间精度。 3.时间戳 $time 时间戳$time是一个系统函数可以返回一个64位的整数来表示当前的仿真时刻返回值的单位和timescale定义的时间单位一致。时间戳$time在使用$display打印时若指定输出格式为%t则输出数据以timescale定义的时间精度为单位若指定输出格式为%d则输出数据以timescale定义的时间单位为单位。示例代码如下 timescale 1ns/1psmodule testbench_top();initial begin#10;$display(%0tps, $time);#5.481;$display(%0tps, $time);#10.58289;$display(%0tps, $time);$display(%0dns, $time);$stop;endendmodule 运行结果如下 此处$time返回的是一个整数值因此虽然时间精度为ps返回的整数值也会将后面的小数进行四舍五入因此我们得到的是整数的时间单位。 4.时间戳$realtime 时间戳$realtime是一个系统函数返回的时间数字是一个实型数该实型数也是以时间尺度为基准的。时间戳$realtime在使用$display进行打印时若指定输出格式为%t则输出数据以timescale定义的时间精度为单位若指定输出格式为%f则输出数据以timescale定义的时间单位为单位。示例代码如下: timescale 1ns/1psmodule testbench_top();initial begin#10;$display(%0fns, $realtime);#5.481;$display(%0fns, $realtime);#10.58289;$display(%0fns, $realtime);$display(%0tps, $realtime);$stop;endendmodule 运行结果如下 5.持续赋值assign和deassign 使用assign语句可以对变量进行持续的赋值deassign则恰恰相反可以结束assign语句对某个变量的持续赋值。示例代码如下 timescale 1ns/1psmodule testbench_top();define CLK_PERIORD 10reg clk;initial beginclk 0; endalways #(CLK_PERIOD/2) clk ~clk;reg a; initial begina0;#100;assign aclk;#100;deassign a;#100;$stop; endendmodule 6.持续赋值force和release force语句和assign语句有类似的功能可以实现持续地赋值。但是force语句除了可以对变量进行持续赋值甚至还可以对一个已经使用assign赋值了的变量进行强制赋值而release语句则可以终止force语句的赋值。示例代码如下 timescale 1ns/1psmodule testbench_top();define CLK_PERIOD 10reg clk;initial beginclk 0; endalways #(CLK_PERIOD/2) clk ~clk;reg a; initial beginassign a clk;#100;force a 0;#100;release a;#100;$stop; end endmodule7.循环语句forever、repeat、while和for 行为级语法支持forever、repeat、while和for这4类循环语句可以实现对一段代码的不执行、一次执行或多次执行。 1forever forever意为永远表示连续执行forever语句后的逻辑功能当最后一行代码执行完成后再从第一行代码开始重新执行如此反复直到仿真结束。如果用begin...end规定执行范围执行范围从begin开始以end结束。forever语句必须写到initial语句中。其语法结构如下 2repeat repeat意为重复表示连续执行repeat后的逻辑功能其后括号中的数值是执行的次数当最后一行代码执行完成后再从第一行代码开始执行直到完成执行的次数后停止。如果用begin...end规定执行范围执行范围从begin开始以end结束。forever语句必须写到initial语句中。其语法结构如下 示例代码如下 module testbench_top();integer cnt;reg en;initial beginen0;cnt0;#100;repeat(8) beginen1;cntcnt1;#10;enden0;cnt0;#100;$stop;end endmodule 3while while表示“当...时”当while后括号中的表达式为TRUE时连续执行while语句后的逻辑功能当最后一行代码执行完成后再从第一行代码开始执行直到表达式为FALSE时停止。如果用begin...end规定执行范围执行范围从begin开始以end结束。其语法结构如下 示例代码如下 module testbench_top();define CLK_PERIOD 10 reg clk;initial beginclk 0; endalways #(CLK_PERIOD/2) clk ~clk;reg [7:0] cnt0; always (posedge clk)cnt cnt 1;initial begin$display(Simulation Start.);while(cnt 8) begin$display(cnt%0d, cnt);(posedge clk);#1;end$display(Simulation End.);$stop; endendmodule运行结果如下 4for语句根据其表达式中的变量初始、变化和判断条件实现其后逻辑功能的多次执行。for后面的括号中有3个表达式首先以for后面括号中的第一个表达式为初始条件当for后面括号中第2个表达式为TRUE时连续执行for语句后的逻辑功能当最后一行代码执行完成之后执行一次for后面括号中的第3个表达式再回头执行for后面的第2个表达式若为TRUE则继续执行其后的逻辑功能如此反复直到第二个表达式为FALSE时停止。其语法结构如下 示例代码如下 module testbench_top();define CLK_PERIOD 10 reg clk;initial beginclk 0; endalways #(CLK_PERIOD/2) clk ~clk;integer cnt; initial begin$display(Simulation Start.);for (cnt4; cnt8; cntcnt1) begin$display(cnt%0d, cnt);(posedge clk);endend endmodule 运行结果如下 8.时间控制 在行为级语法的过程赋值中的事件控制主要有两大类一类使用#实现精确的时间延时控制另一类使用事件表达式如和wait语句实现事件触发的时间控制。 1时间延时# 时间延时#可后接数值、常量表达式如定义的参数或变量表示延时若干个时间单位时间单位和精度由timescale语法申明。若#后的延时时间设置值中某些位出现x或z则延时时间将被强制设定为0若#后的延时时间设置值为负数则延时时间将被强制设定为2s。示例代码如下 timescale 1ns/1psmodule testbench_top();parameter DELAY_PARA50; real delay_vari; real t1,t2,t3,t4;initial begindelay_vari25.338;t1$realtime;#100;t2$realtime;$display(#100 %0fns, (t2-t1));#delay_vari;t3$realtime;$display(#delay_vari%0fns, (t3-t2));#DELAY_PARA;t4$realtime;$display(#DELAY_PARA%0fns, (t4-t3));$finish; endendmodule 运行结构如下 2事件触发 事件触发可以基于某个信号或变量的取值变化也可以基于某个数据位的方向变化如使用posedge或negedge分别表示取值从0变化为1或从1变化为0。示例代码如下 timescale 1ns/1psmodule testbench_top();reg en;integer dly;initial beginen0;#10;en1;#10;en0;endinitial begindly0;#20;dly1;#20;dly3;#20;dly4;endinitial begin(posedge en);$display((negedhe en) at %0fns, $realtime);(negedge en);$display((negedge en) at %0fns, $realtime);(dly 3);$display((dly 3) at %0fns, $realtime);endendmodule 运行结果如下 3事件等待wait 事件等待wait为电平敏感的事件控制语法。wait后的括号内的表达式若为false则一致等待直到表达式为true才执行后续逻辑代码。示例代码如下 timescale 1ns/1psmodule testbench_top();reg [7:0] cnt0;always #10 cntcnt1;initial beginwait(cnt10) begin$display(cnt10 at %0dns, $time);end$stop;end endmodule 9.顺序块begin end和并行块 行为级仿真中begin end之间的多个使用阻塞赋值的赋值语句是按照顺序依次执行的fork join之间的多个赋值语句则是并行执行的。具体的示例代码如下 timescale 1ns/1psmodule testbench_top();reg a10, b10, c10;reg a20, b20, c20;initial begin$monitor(a1%b, b1%b, c1%b, a2%b, b2%b, c2%b at %0dns, a1, b1, c1, a2, b2, c2, $time);endinitial begin#10 a11;#10 b11;#10 c11;end#10;$stop;initial beginfork#5 a21;#5 b21;#5 c21;joinend endmodule 运行结果如下 10.数据类型转换函数 以下4个系统函数支持real和int、real和bit数据类型之间的互相转换。real_data为任意real类型的数据调用$rtoi(real_data)函数将返回real_data转换为int类型后的数据。int_data为任意int类型的数据调用$itor(int_data)函数将返回int_data转换为real类型后的数据。real_data为任意real类型的数据调用$realtobits(real_data)函数将返回real_data转换为64位二进制寄存器类型后的数据。bits_data为任意64位二进制寄存器类型的数据调用$bitstoreal(bits_data)函数将返回bits_data转换为real类型后的数据。 示例代码如下 timescale 1ns/1psmodule testbench_top();integer int_a108; real real_a59.23; integer int_b; real real_b;initial beginint_b $rtoi(real_a);real_b $itor(int_a);$display(int_b$rtoi(real_a) $rtoi(%0f) %0d, real_a, int_b);$display(real_b$itor(int_a) $itor(%0d) %0f, int_a, real_b);$stop; endendmodule 11.随机数生成$random 每次调用系统函数$random(seed)都可以产生一个新的32位随机数。如果不设置seed则每次取得的随机数都是相同的。也就是说$random所产生的随机数其实对于系统而言不过是提前预设好的32位数据数组而已。使用$random产生的随机数在seed一致的情况下都是调用了系统中预设的同一套数据数组因此它们的值总是一致的。示例代码如下 reg [23:0] rand;rand $random % 100; // 产生一个-99~99范围内的随机数reg [23:0] rand;rand {$random} % 100; // 通过位拼接操作产生0~99范围的随机数添加位拼接会认为是random[23]...random[0]拼接而成reg [23:0] rand;rand min {$random} % (max - min 1); //产生一个在minmax之间的随机数 12.显示任务$display和$write 系统显示任务$display和$write在仿真测试中是最为常用的信息显示方式。$display和$write任务最主要的区别在于$display在一次输出后自动换行而$write则不会其余用法基本类似。其语法结构如下 任务名可以是$display、$displayb、$displayo、$displayh、$write、$writeb、$writeo或$writeh。格式由%和格式字符组成信号为要显示的信号名信号数量和格式数量必须对应。若不指定显示信号的格式即使用$display或$write则信号现实的格式会默认为十进制其余类似。下面给出可用输出格式列表以及一些常用的特殊字符如下 示例代码如下 timescale 1ns/1nsmodule testbench_top();reg [31:0] rval;initial beginrval101;$display(rval %h hex %d decimal, rval, rval);$display(rval %0h hex %0d decimal, rval, rval);$display(rval %o octal \n %b bin, rval, rval);$display(rval has %c ascii character valuel, rval);$display(current scope is %m);$display(%s is ascii value for 101, 101);#101;$display(Simulation time is %t, $time);$stop;endendmodule 运行结果如下 注意除了十进制显示之外高位的0会默认以空格填充其他进制显示时会将高位的0显示出来。在%和格式字符之间可以添加数字0就可以隐藏前置的0或空格是的第一个非0数字顶格显示。 13.监视任务$monitor 系统监视任务$monitor在仿真测试脚本中可以实现对任何变量或表达式取值的监视和显示。$monitor语法结构以及用法都与$display类似。当$monitor任务中包含一个或多个监控信号并运行时若参数列表中有任何的变量或表达式的值发生变化则所有参数列表中的信号值都将输出并显示。同一时刻若两个或多个参数的值同时发生变化则此时将会合并一次输出并显示。$monitor任务在申明后默认开启在其运行器件若调用系统任务$monitoroff则关闭$monitor直到调用系统任务$monitoron后将重新开启$monitor。其语法结构如下 示例代码如下 initial begin(posedge rst_n);$display(o_cnt is %d at %0dns, o_cnt, $time); endalways (posedge clk) beginif (o_cnt 4d5) $monitoroff;else if(o_cnt 4d12) $monitoron; end 14.仿真终止$finish和$stop 系统任务$finish被调用时将会退出仿真工具并返回操作系统。其语法结构如下 系统任务$stop被调用时仿真工具被挂起仿真运行停止。语法结构与num取值与$finish一样。 End!
http://www.dnsts.com.cn/news/256378.html

相关文章:

  • 资源平台如何建设网站公司网站网络营销是什么
  • 淮安制作网站在那里天津建设网安全员成绩查询
  • 企业网站优化报告第四章第二节网站建设的教学设计
  • 国科联创网站建设请问门户网站是什么意思
  • 专业做律师网站的公司郑州app推广
  • 网站外围网站怎么做wap网站制作开发公司
  • 北京网站优化快速排名上海网站设计推荐刻
  • 网站建设客户需求公司网站怎么弄
  • 移动互联网网站建设wordpress 静态页面
  • 怎样做生成的二维码链接到网站百度免费官网入口
  • 为何网站打开慢东莞网站优化的具体方案
  • 360建站模板最新wordpress电商主题
  • 常州哪家做网站便宜赣州酒店网站设计
  • 怎么给自己的网站做seo软件开发工程师职业满足兴趣因素
  • 平面设计做兼职网站品牌网站建设找哪家
  • 佛山市外贸网站建设wordpress直播购物插件
  • 网站建设格式个人购买域名做企业网站
  • 在线支付网站建设物流网站建设 市场分析
  • 摄影网站制作教程百度关键词优化大师
  • 潍坊mip网站建设手机网站建设软件下载
  • 一个网站怎么留住用户营销型网站建设的流程
  • 有哪些网站主页做的比较好看上海专业网站设计
  • 公司网站 备案自动发货网站建设
  • 深圳龙岗做网站的宁波房产网上备案查询
  • 专业网站运营设计wordpress php 7 速度优化
  • wordpress分类网站网套加工机器设备
  • 河北省建设集团有限公司网站丽水专业网站建设公司
  • 怎么为做的网站配置域名高端定制app开发
  • 青海高端网站建设公司威海网站建设开发公司
  • 如何做网站权重广东网站建设报价