verilog验证平台技巧(避免竞争的办法)

1.在0时刻复位。
2.时钟沿之后复位
3.创建仿真时钟
4.在无效沿时刻输入激励

1.在0时刻复位。

在0时刻使用阻塞赋值让复位生效(Aen)可能会导致克争条件,为什么?因为所有的过程块在0时刻被激活。如果initial块在always块之前被激活,那么 always块就不会意识到复位生效。直到下一个 posedge clk或者下一次复位生效
例子: Race condition while asserting reset at time0

initial beginret_n = 0;...
end
always@(posedge clk or negedge rst_n)

事实上,虽然 IEEE Verilog标准没有明确说明,但是大多数 Vendor的 Verilog仿真器在激话initial块之前,首先激活所有的 always块,这意味着在 inital块的复位信号执行之前, always块已经为复位信号准备好(等待复位的到来)。
但是设计者不应该依赖于这样的激活顺序( initial块在 always块之后激活)。避免这个竟争条件:的简单方法是:如果要让第一个复位信号在0时刻起效,那么就使用非阻塞赋值。对复位使用非阻塞赋值会强制复位信号在0时刻的最后执行,这时所有的 always块已经被激活,当复位信号在0时刻被更改时,就会触发 always块执行复位
例子: No race condition while asserting reset at time 0

initial beginret_n <= 0;...
end
always@(posedge clk or negedge rst_n)

2.时钟沿之后复位

另一个避免竞争条件方法是:在仿真器开始1~2时钟周期之后,再让复位在时钟无效沿起效因为我们一般都会忽略开始前几个时钟周期不定态( Unknown),如同在真实硬件上电复位时一样

3.创建仿真时钟

很多人经常使用类似下面的代码创建时钟,这里使用了两个过程块:initial块和 always块
例子:常用的生成时钟方法

reg clk;
initial clk= I'b0;
always #50 clk =~clk;

但是生成时钟本来是一个顺序的过程:赋一个初始值,然后以一定时间间隔在0和1之间题转,所以最好写成下面的形式,在0时刻对第一个时钟赋值使用非阻塞赋值,是为了在0时刻触发那些对 negedge clk敏感的过程块。
例子:更好的生成时钟方法

reg clk;
initial beginclk <= 0;forever (#`cycle/2) clk =~clk;
end

4.在无效沿时刻输入激励

在激励代码中,尽可能在时钟无效沿对输入赋值,而不要使用固定的#延迟,这是一个很好的创建验证平台的策略。因为使用固定延迟有缺点,如果工程师要尝试其他的频率,所有使用固定延迟的代码都需要修改。但是如果要对使用时钟无效沿改变激励的验证平台尝试其他的频率,就很少需要修改。

verilog验证平台技巧(避免竞争的办法)相关推荐

  1. 路由器的System Verilog验证平台

    目录 1.RTL模块框架 2.SV验证平台 微信公众号 ​    本文主要以路由器(Router)为例分享SV的验证平台,建议观看代码的读者有一定的SV基础.分享的文件是我搭建Router的SV验证平 ...

  2. 网页版的svn怎样同步代码_学会使用Hdlbits网页版Verilog代码仿真验证平台

    大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...

  3. 学会使用Hdlbits网页版Verilog代码仿真验证平台

    大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...

  4. UVM验证方法学之一验证平台

    UVM验证方法学之一验证平台 在现代IC设计流程中,当设计人员根据设计规格说明书完成RTL代码之后,验证人员开始验证这些代码(通常称其为DUT,Design Under Test).验证工作主要保证从 ...

  5. UVM实战 卷I学习笔记8——UVM验证平台的运行(2)

    目录 *build阶段出现UVM_ERROR停止仿真 *phase的跳转 phase机制的必要性 phase的调试 超时退出 *build阶段出现UVM_ERROR停止仿真 之前的代码中,如果使用co ...

  6. 从0开始搭建基于UVM的验证平台 ----- phase0.0

    从0开始搭建基于UVM的验证平台-----phase 0.0 0. Introduction 1. Creating simple test 2. Build your own test case 3 ...

  7. SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案

    本文目的在于分享一下把DPI稿能用了的过程,主要说一下平台其他部分搭建好之后,在完成DPI相关工作阶段遇到的问题,以及解决的办法. 工作环境:win10 64bit, Questasim 10.1b ...

  8. uvm 形式验证_验证平台自动化篇之二:UVM Framework

    原标题:验证平台自动化篇之二:UVM Framework 一个UVM使用者,从新手到精通大致会经历三年的时间,而在经过这三年之后,verifier会有倦怠期.除了不可避免地在80%以上工作处于重复性劳 ...

  9. 利用VMM建立基于事务的层次化验证平台

    摘要:VMM是一种基于 SystemVerilog语言的验证方法学,它通过引入断言.抽象化.自动化与重用这四种机制提高了项目验证的生产率.本文通过一个实例介绍怎样利用VMM建立基于事务的可重用的层次化 ...

最新文章

  1. 『ExtJS』01 001. ExtJS 4 类的定义
  2. C#中方法的参数的四种类型(转)
  3. Java 并发编程中使用 ReentrantLock 替代 synchronized 关键字原语
  4. 疯狂秀才权限管理系统,开源了
  5. linux route 刷新_linux基础命令介绍十五:推陈出新
  6. php oracle视图,Oracle v$database视图分析
  7. “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
  8. linux Centos下磁盘分区及文件系统创建与挂载
  9. new与malloc的不同
  10. 微信公众号接入百度天气API接口
  11. Baxter学习笔记
  12. 建筑工地人脸识别门禁通道闸机如何安装
  13. 数字化转型中基于交付价值数据治理的6大原则
  14. 数据挖掘之人工神经网络
  15. Excel操作:如何锁定单元格、有几种方法实现分类汇总
  16. 关于swiper在移动端,快速上下滑动出现白边的解决办法
  17. 做相关性分析时,如何排除奇异值Outliers,以增加相关分析的准确性
  18. 因对某产品的一丝质疑而到被洗脑式怼,引起对于社交电商的一丝看法
  19. 剧情/惊悚基因危机:天才科学家的五日
  20. javascript 省市区三级联动 附: json数据

热门文章

  1. html中加hover啥意思,css中hover是什么意思
  2. 仿微信发送位置(高德地图定位)
  3. php爬取html内容,php抓取网页html,curl和file_get_contents通过get或post方式抓取网页内容,源代码
  4. 浅谈javascript面向对象理解
  5. ETH数据集下载及相关问题
  6. Android调用聚 合 API
  7. 关于图片存储格式的整理(BMP)
  8. PDF在线编辑器的实现
  9. 计算机上自带的打字游戏,在学校上电脑课打字游戏的日子
  10. 【Web_接口爬虫_Python3_58同城_requestosetreeproxies】58同城,商铺出租,爬取标题、内容、链接地址,保存文本_20200401