VCS入门教程(四)

2020-09-04 17:32:33 浏览数 (1)

本文授权转发自知乎用户 橘子汽水 链接: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入门 即可

0 人点赞