原创 第5 章 综合后仿真

2009-11-19 20:44 4957 3 3 分类: FPGA/CPLD

第5 章 综合后仿真






5.1 工具介绍


 


RTL 级的源设计综合成门级电路后,我们需要对这生成的门级网表进行门级仿真,以 验证功能是否正确。 Synopsys 的 VSS 工具提供了门级仿真的仿真机制。 VSS 工具的介绍请 参照系统行为级仿真中的介绍。对于门级仿真, VSS 的操作没什幺大的区别。门级电路仿 真与系统行为级仿真的区别在于网表的不同以及所加的工艺库的不同。



5.2 工艺库的产生
5.2.1 工艺库介绍
综合后仿真与系统行为级仿真的主要区别是它需要加入库的延时信息。即在综合后的
源文件上加上时序工艺库的说明。综合后仿真所需的时序工艺库可以是 FTGS(full-timing
gate-level simulation)库,也可以是 VITAL(VHDL initiative toward ASIC library)。
仿真工具用到的工艺库模型有五种:
FTBM(full-timing behavioral  model):提供非常精确的模型,但是有最慢 的仿真速度。
UDSM (unit-delay structural model):不考虑时序,用于功能仿真.组合单 元实例有 1ns 的 rise/fall delay.时序单元实例有 2ns 的 rise/fall delay 。即它用 一个常数的时序延时信息来模拟各个单元的功能。它有着比 FTBM 更快的仿真速度,但 是时序精度不及。冒险监测,时序约束检查和 X-Generation 都不能执行。
FTSM  (full-timing  structural  model):用于功能验证和普通的时序验证。 它用精确的传播延时模拟每一个单元。延时模型包括 0 延时,功能网络上的传输线延 时和管脚间延时。它的仿真速度比 UDSM 略慢,时序的精确度比 FTBM 略差。只能进行 有限的时序违约检查,如最小的脉冲宽度,建立时间,保持时间,和恢复时间等检查。 时序约束违约作为警告报告。它不能执行冒险监测和 X-Generation 。
FTGS  (full-timing  gate-level  simulation  model):给门级设计提供了快 而又非常精确的仿真模型(和 FTBM 一样)。延时模型包括传输线延时和管脚间延时。除 了警告,可选的输出 X 也被预定为时序约束违约和电路的冒险。这使得 FTGS 对 sigh-off 验证和细节验证一样有用。
VITAL(VHDL initiative toward ASIC library):给 ASIC 库提供一个 VITAL 适应仿真模型.它的延时模型包括传输先验时和管脚间延时.除了警告,可选输出 X 被 安排为时序约束违约和电路冒险。
各种仿真库模型的用法比较:


2009102711202035944.jpg 



如果芯片制造商没有给你提供仿真所需的工艺库,你可以从工艺库的.lib 或.db 格式
产生你所需的仿真所需的工艺库。在这里我们将主要介绍 FTGS 和 VITAL 库的产生。先前我


们实验室不能进行综合后,版图后等时许仿真就是因为没有时序的 VITAL 库。
 综合库转换为仿真库
Synopsys 的库分析器可以帮你把综合库(.db)转换为加密的 VHDL 仿真库。 VSS 环境中 的库分析器如图 5.1 所示:


 


 2009102711221667841.jpg


图 5.1 VSS 环境中的库分析器


库分析器的输入文件为综合的库文件(.db),输出文件为各种仿真所需的  VHDL  工艺 库: FTBM , USDM , FTSM , FTGS , VITAL 。
FTBM , USDM , FTSM , FTGS 模型的输出文件是: libname_model.E(加密后的 VHDL 库文件)
libname_component.vhd(器件文件)
VITAL 模型的输出文件是:
libname_VITAL,vhd.E
libname_Vtables.vhd.E
libname_Vcomponents,vhd(器件文件)
调用库分析器 liban:
% liban  [options] lib_name.db
lib_name.db 为综合的库文件。
options 包括你想生成的时序模型,冒险处理算法以及是否打开 X-Generation.
库分析器能产生的时序模型有 5 种: FTBM , UDSM , FTSM , FTGS , VITAL 。各种模型 的含义见前面的说明。各种时序模型选项为:-arch ftbm  | udsm  | ftsm  | ftgs  | vital
 确省为 ftbm 模型。
冒险处理算法:-hazard spike  | glitch  | inertial  | transport 使用 X-Generation:  -xgen
分析加密的 VHDL 库文件:
例如:
% vhdlan  -w ASICLIB asiclib_FTSM.vhd.E asiclib_components.vhd 这样生成后 vhdl 库文件在 VHDL 设计源文件中的调用为:
library asiclib;


use asiclib.components.all;
实例:
编译 FTGS library:
liban  -arch FTGS  -output  ???_FTGS 库名.db  >  ???.log vhdlan  -spc  -w  ???_FTGS 库名_cmponents.vhd
vhdlan  -w  ???_FTGS 库名_FTGS.vhdl.E
 工艺库.lib 格式转换为仿真库
如果你没有综合库(.db),则你也可以用库编译器从最初的工艺库.lib 格式产生你仿 真所需的仿真库。这库编译器(Library  Compiler)能产生四种类型的仿真库:  UDSM  , FTSM , FTGS , VITAL 。它们的介绍详见前面。
VHDL 仿真需要后注释时序信息到你的设计中去。注释时序信息到模型中有三种方法:
1. 通过使用外部的时序计算器(如 DC),直接后注释或前注释到设计的每一个单
元中。
2. 使用 VHDL 标准配置块(standard configurationblock)进行后注释。你在 VHDL
代码的配置块中加入延时信息,然后重新编译。
3. Synopsys 的 VSS 工具也可用 SDF 文件来作为后注释。
下面我们将只介绍 FTGS 和 VITAL 库的产生,其他库的产生方法雷同,这里不在一一介
绍。
FTGS 库的创建(图 5.2)


2009102711222516821.jpg
图 5.2 FTGS 库的创建


 



1. 产生 FTGS 库:(图 5.3)
在编写 FTGS 模型代码时,你必须确定.lib 文件中的描述的时序特性和.sdf 文件中的 一样。


2009102711223624033.jpg
图 5.3 产生 FTGS 库


1)   调整工艺库的源文件(可选)
编写依赖状态的时序特性
工艺库的条件时序检查
2) 检查或设置环境变量



vhdllib_architecture variable vhdllib_timing_mesg
vhdllib_timing_xgen      vhdllib_glitch_handle
-……
3)   调整 gs_libcore 包  (可选)
read_lib vendor_library_source_name.lib 4) 写 Synopsys FTGS VHDL 库
write_lib  -format vhdl vendor_library_source_name
5)   确定唯一的包名称(可选)
2 。验证 FTGS 模型(图 5.4)


 


2009102711224535055.jpg
图 5.4 FTGS 库的验证


1) 调整 setup file,使 vhdllib_logical_name 变量设置的 logicalname 付值为分析了的
仿真文件存放的子目录。
分析工艺库:
在模型上运行 vhdlan 去产生可执行的仿真代码。具体的语法规则请参照 VSS 手册。
2) 后注释时序信息
vhdlsim  -sdf sdf_filename design_name  .
你必须在命令行中后注释,而不能使用仿真器的 include 命令。
3)    在 VHDL 代码的配置块(configuration block)中加入延时语句。仿真模型


3 。比较不同模型的仿真结果
4 。加密文件(可选)
使用库分析器(liban)呵 encrytp_lib 命令产生 VHDL 库文件。 VITAL  库的创建
创建 VITAL 库的方法和 FTGS 库的方法雷同,只是输出文件不同。这里将只给出流程。 (见图 5.5)


 


2009102711225494833.jpg
图 5.5 VITAL 库的创建



实例:
生成 VITAL 库:
1.   创建你的目录和目录文件:
目录文件: run.inc /*运行 simulator 的批处理文件;至少包含 run, quit 两个 命令*/
.synopsys_vss.setup :    含: vhdllib_logical_name  : LIBVUOF
Set the SDF naming file for VITAL model SDF back-annotation. 目录: LIBVUOF, WORK
2. %lc_shell
3.  lc_shell> read_lib std_cell.lib
4.  lc_shell> vhdllib_architecture=vital
5.  lc_shell> vhdllib_tb_x_eq_dontcare=false
6.   lc_shell> vhdllib_tb_compare=5 /*不设的话 testbench 不产生,各个值的含义请参
照在线帮助*/
7.   lc_shell> write_lib  -f vhdl std_cell
8.   运行 testbench ,仿真库文件
library.csh



5.3 综合后的门级仿真
综合后的门级仿真在工具或命令的操作上与系统行为级的仿真没什幺区别,故这里对 命令的执行不再详诉,只给出简单的流程。
1.  修改综合好的 VHDL 网表文件
a)   给 VHDL 网表文件加 configuration ;
假设设计文件为  design.vhd  ,entity 的名字为  design1,architecture  名字为 behavior ,则加 configuration 为:
configuration cfg_design1 of design1 is for syn_behavior
end for;
end cfg_design1;
b)   在使用这个库的 VHDL 原文件开头指定时序库文件:
 library asiclib;
use asiclib.components.all;
2 。设置 setup 文件
在 setup  文件里映射泥的 VHDL  文件里 的  logic  library 到  the  VITAL  ASIC library 目录
在 setup 文件中设置 the simulation timebase 使之与 ASIC vendor library 一

3 。产生 testbench
什 testbench 文件为 tb_design,则在 tb_design.vhd architecture statement 中加 the using entity name:
for uut: design1 use entity work.DESIGN1(SYN_behavior) 4 。创建设计库
5 。分析各种源文件:
调用 VHDL Analyzer 分析 VHDL 库文件:
例如:  % vhdlan  -w ASICLIB asiclib_FTSM.vhd.E asiclib_components.vhd asiclib_components 对应于使用这个库的 VHDL 原文件开头指定的时序库文件
 library asiclib;
use asiclib.components.all;
调用 VHDL 分析器分析各个修改后的 VHDL 网表文件 6 。调用 VSS 仿真器进行门级仿真:
vhdlsim -i  filename -sdf_top /testbench_entity_name/uut -sdf  design.sdf
design_unit
其中 design_unit 为 testbench 的 configuration 的名字


注意:
1.   setup 文件中指定的 design_lib 一定要与你创建的库名一样,大小写是有区别的。
2.   目录中不能有同字母,不同大小的目录,否则他会无法删除和创建
3.   testbench 文件中的 wait 命令中时间单位前 必须有空格
4.   在 setup 文件中设定 timebase 可以修改仿真精度,或在 vhdlsim 命令中用-t base_time
 选项指定
5.   testbench 里的 uut 后面的名字是最顶层的 design 的名字
 设计实例
修改 DC 生成的网表文件:
为每一个 entity 加上 configuration 说明:
configuration configuration_name of entity_name is


for architecture_name
end for;
end configuration_name ;
为每一个 package 和 entity 加上使用的仿真 VITAL 库的说明: library csmc06core;
use csmc06core.VCOMPONENTS.all;
这里因为我们已经在 DC 的 setup 文件.synopsys_dc.setup 文件里加了加这些语句说 明的命令,所以不必加了。如果没有则必须加上。
创建 setup 文件
在工作目录上我们需创建 VSS 的 setup 文件,其内容如下; WORK  > DEFAULT
DEFAULT  : work
csmc06core  :  ../csmchdlib/lib
TIMEBASE  : ps
创建设计库
% mkdir work
分析各种源文件
分析各种源文件的命令,我们写在了一个脚本文件 analyze2.sh 里,内容如下:


#!/bin/csh  -f
if(-d work) then
rm  -rf work
echo  “------”
echo  “Creating work directory”
mkdir work
endif


vhdlan  -optimize  -event  -w xsmc06core  \
../csmchdlib/vital/csmc06core_Vcomponents.vhd  \ ../csmchdlib/vital/csmc06core_Vtables.vhd  \
../csmchdlib/vital/csmc06core_VITAL.vhd


vhdlan  -event  \
ddfs.vhd  \
vhdl/DDFS_TB.vhd


在命令行你执行此 analyze2.sh
% ananlyze2.sh
启动 VSS 工具进行仿真
仿真的命令文件同系统行为级仿真一样,放在 simfile 文件里,其内容最基本的为: trace  -wif  -waves  /DDFS_TB/*’signal
run  100000000
启动 VSS 工具开始仿真:
% vhdlsim  -i simfile  -sdf_top ddfs_tb/uut  -sdf ddfs.sdf TESTBENCH_FOR_DDFS 其仿真结果为:(见图 5.6)
从此波形中我们可以看到,信号已经有了延时。对比系统行为级仿真,系统行为级仿真 时是没有延时的,因为我们没有加入有延时信息的库,同时也没有加入延时信息的 SDF 文 件。这门级仿真的延时由库的延时和 DC 生成的延时时序 SDF 文件共同产生。  


 2009102711230998671.jpg


图 5.6 综合后仿真的仿真结果

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条