前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VCS入门教程(四)

VCS入门教程(四)

作者头像
数字芯片社区
发布2020-09-04 17:32:33
2K0
发布2020-09-04 17:32:33
举报
文章被收录于专栏:数字芯片

本文授权转发自知乎用户 橘子汽水 链接:https://www.zhihu.com/people/xing-qi-55-65/posts

一、前言

本文主要介绍VCS门级网表的仿真。当我们把所写的RTL进行的功能仿真通过之后,便输入到 Design Compiler工具中进行逻辑综合,逻辑综合的结果便是RTL代码转化为由与、或、非等门电路和触发器组成的电路,称为门级网表(netlist)。门级网表中便包含了电路的实际信息,例如逻辑门单元的扇入扇出系数,延迟等等。因此在逻辑综合完成之后,需要对网表再进行仿真验证,防止出现意想不到的错误。

二、逻辑综合

在此对逻辑综合做简单的介绍,具体细节可以去公众号查看相关链接:

对于实际电路,时钟信号并不是理想的“陡直”,门电路也存在延迟,这些电路的实际信息需要在逻辑综合的时候考虑到。RTL代码转换为门级电路,我们需要对电路施加一些约束。例如时序电路的工作频率,电路中组合逻辑块的延迟等等。综合工具会根据我们施加的约束做时序上的优化,从工艺库中挑选合适的单元,在面积,时序和功耗三个方面进行折衷。当然满足时序的要求是首要的,面积和功耗要越小越好。 为简单起见,以一个Moore状态机为实例,做最基本的不添加约束的逻辑综合,用以生成门级仿真所需要的文件。设计电路框图如下:

图1

由一个计数器和moore状态机组成。 RTL仿真图如下

图2

q_o 为三位计数器的输出,dout_out为状态机的输出,按 0000 0010 0100 1000 的顺序循环。

之后便在Design Compiler中进行综合生成后端和门级仿真的文件,我们在此关心VCS门级仿真所需要的文件。SDF文件包括设计中的时序信息,.v文件是以工艺库单元例化形成的verilog文件。

图3 sdf文件示例(部分)

图4 网表形式的verilog文件(部分)

由上图我们可以看到网表形式的verilog文件,由门电路和触发器例化组成。

三、网表仿真

下面进行网表仿真

图5 makefile更改

上图中,我们把入门教程(三)中的makefile模板添加了一个开关选项,由于网表.v文件是由工艺库单元例化的,工艺库中给出了一个verilog文件,包含各个单元。

图6 makefile更改

定义NET_SIM这个宏。用于testbench中代码块的打开和关闭。

代码语言:javascript
复制
initial begin
`ifdef NET_SIM
    $sdf_annotate("/mnt/hgfs/LINUX_EDA_Share/DC_Projects/netlist_simulation/Top.sdf",
    Top,,,
    "TYPICAL",
    "1:1:1",
    "FROM_MTM");
`endif
end

在testbench中添加上面的代码块,使用sdf_annotate()系统函数将sdf文件“反标”到设计中,第一个参数指定sdf文件,第二个参数指定反标到哪一层的module上,这里我们选择顶层文件。其他参数保持默认即可。具体sdf_annotate()各个参数的介绍可查阅相关博客。aijishu.com/a/106000000

设置完毕后使用 make com sim debug 命令查看门级仿真波形。

图7 门级仿真波形

我们可以看到输出信号的跳变与时钟上升沿已有一段延迟,这与RTL仿真是不同的。

四 结束语

本篇介绍使用VCS 进行门级网表仿真的基本操作,想更为深入了解的朋友可以再查看 user guide的相关资料,到此为止,面向新手的VCS入门教程系列结束。有错误的地方还请各位批评指正。

VCS教程源码链接:后台回复 VCS入门 即可

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字ICer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、逻辑综合
  • 三、网表仿真
  • 四 结束语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档