VCS课时5:处理Missmatch

课程目标

仿真的结果和预计的的不一样(debugging simulation mismatches)

if (data=3) //这个语句用于为真

好的coding方式

if(3===data)

  • race 竞争冒险
  • vcddiff比较vcd文件是不是一样

1. Mismatches原因

PPT1

  • 仿真工具的不同,仿真工具不同的版本
  • RTL和门级仿真的结果的不一样,前仿和后仿的记过不一样

PPT2

PPT3 仿真事件队列

2. 竞争的例子

PPT1 同时读取

第10个仿真时间单位同时对a读取和写

PPT2

在数字电路中避免这种coding style

不定态指的是,仿真的时候,复位信号到来之前未知的状态,真实的情况是不存在的

PPT3

3. 零延时竞争

PPT1

最开始的时候不知道reset=x是多少,如果最开始是不知道是什么

改进后为

#### PPT2

最开始的时候rst给1,那么val是多少呢

4. 触发器的竞争

  • 仿真的结果是不是你想要的
  • 综合工具综合处理的电路是不是我们想要的

使用非阻塞电路的结构

5. Coding Style建议

多驱动,一般是在SoC顶层,双向端口

6. 发现并解决Race的方法

PPT1

PPT2

编译时加上开关选项

PPT3

更多的是依靠人的经验的,少了一个等于号,通过方法避免

PPT4

7. vcat和Vcdiff

8. 实验环节

  1. 增加style1和style2

Style1 是非阻塞赋值

Style2 是阻塞赋值

结果并不是晚一拍

定义宏的方式:

综合电路 `define DFF_STYLE2

综合结果,第一种非阻塞结果是两个触发器,第二种是也是两个触发器

结论:综合结果是对的,仿真是错的

  1. 增加增加了两种情况,放在一个always语句

两级的触发器

style3是两级的延迟,style4不是,是同一拍的,

Style4结果是只有1个触发器:

  1. 增加了第5种和第六种

    顺序颠倒了

第五种仿真的结果是对的

第六种电路仿真结果是对的!

综合结果也是两个触发器

  1. 第七种和第八种

结论:通过阻塞赋值,有些情况仿真通过,但是综合不通过;有些仿真不通过,综合通过

猜你喜欢

转载自www.cnblogs.com/ICworkman/p/12079145.html
VCS