EDA入门

0 前言

世界三大EDA厂商一般指的是Cadence, Synopsys. Mentor Graphics

数字IC前端设计:

  • 以RTL设计为起点,以生成可以布局布线的网表为终点;
  • 主要是实现用设计的电路实现想法

前端设计主要包括:

  • 基本的RTL编程和仿真
  • C系统设计
  • 功能验证
  • 综合
  • 静态时序分析
  • 逻辑等值验证

做IC前端设计常用的是Synopsys家的EDA工具:

  • 仿真使用的VCS(verilog compiled simulator)
  • 综合使用的DC(Design Compiler)
  • 时序分析使用的PT( PrimeTime)

其他EDA工具也有很多,如布线布局使用的ICC(IC Compiler),做物理验证的Herclues等
这里主要介绍下前面提到的VCS,DC,PT这三者

1 VCS(Verilog Compiled Simulator)

VCS是编译型Verilog模拟器,它完全⽀持OVI标准的Verilog HDL语言、PLI和SDF。 VCS具有目前行业中最高的模拟性能,其出色的内存管理能力足以支持千万门级的ASIC设计,而其模拟精度也完全满足深亚微米ASIC Sign-Off的要求。VCS结合了节拍式算法和事件驱动算法,具有高性能、⼤规模和高精度的特点,适⽤于从行为级、RTL到Sign-Off等各个阶段。VCS已经将CoverMeter中所有的覆盖率测试功能集成,并提供VeraLite、CycleC等智能验证方法。VCS和Scirocco也⽀持混合语言仿真。VCS和Scirocco都集成了Virsim图形用户界面,它提供了对模拟结果的交互和后处理分析。

2 DC

Design Compiler为Synopsys公司逻辑合成⼯具。DC得到全球60多个半导体⼚商、380多个⼯艺库的支持。据最新Dataquest的统计,Synopsys的逻辑综合工具占据91%的市场份额。DC是十多年来工业界标准的逻辑综合工具,也是Synopsys最核心的产品。它使IC设计者在最短的时间内最佳的利用硅片完成设计。它根据设计描述和约束条件并针对特定的工艺库自动综合出⼀个优化的门级电路。它可以接受多种输⼊格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提⾼设计性能。Synopsys发布的最新版Design Compiler综合解决方案——Design Compiler。新版本扩展了拓扑技术,以加速采用先进低功耗和测试技术的设计收敛,帮助设计人员提高生产效率和IC性能。拓扑技术可帮助设计人员正确评估芯片在综合过程中的功耗,在设计早期解决所有功耗问题。此外,还支持Design Compiler中新的测试压缩技术,在实现⾼质量测试的同时,减少测试时间和测试数据量超过100倍,并减少后续物理实现阶段由于测试电路带来的可能的布线拥塞。新的Design Compiler采用了多项创新综合技术,如自适应retiming和功耗驱动门控时钟,性能较以前版本平均提⾼8%,⾯积减少4%,功耗降低5%。此外,Synopsys Formality等效检测解决⽅案得到了增强,能够独立、彻底地验证这些技术,因此设计者⽆需舍去验证就可以实现更高的性能。

3 PT

PrimeTime是针对复杂、百万门芯片进行全芯片、门级静态时序分析的工具。PrimeTime可以集成于逻辑综合和物理综合的流程,让设计者分析并解决复杂的时序问题,并提高时序收敛的速度。PrimeTime是众多半导体厂商认可的、业界标准的静态时序分析工具。Galaxy™ 设计平台中的时序验证核心工具—PrimeTime®的最新版本凭借其静态时序分析能力和对数百万门设计进行认可的能力,成为新的时序工具标准。从用户使用情况显示,最新发布的PrimeTime的运行速度比之前版本平均提高了2到7倍,从而提升了设计者的设计能力,并实现快速的时序认可。PrimeTime强大的性能得益于在生成报告和基于标准延迟文件(SDF)的时序分析方面的算法的改进。PrimeTime提供全芯片级的静态时序分析,同时整合了延迟计算和先进的建模功能,以实现有效而又精确的时序认可。PrimeTime SI是全芯片门级信号完整性分析工具。PrimeTime SI建立在成功流片验证过的PrimeTime平台之上的,提供精确的串扰延迟分析,IR drop(电压降落)分析和静态时序分析。PrimeTime SI业界领先的超快运⾏时间和处理容量让数百万门的复杂设计⼀次流片成功,让设计者取得极快的进⼊市场时间

总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. scl
许可管理的

2.VCS( verilog compiled simulator )
Verilog 编译仿真器,现在公司主流的仿真器,和windows下modelsim一样的作用。

3.Verdi/dve
verdi是比较强大的debug工具,两个基本波形查看工具

4.DC( Design Compiler )
综合实现工具,要配合工艺库使用。

5.ICC( IC Compiler )
布局布线工具

6.PT( PrimeTime )
静态时序分析工具

7.coreConsultant
用于配置designIP

安装

  • SCL11.9 —— Synopsys官方的管理License文件的软件
  • VCS2016 —— Verilog仿真软件
  • Verdi2016 —— 一款可以生成仿真波形的软件,验证工程师必备
  • Formality2015 —— 形式化验证软件
  • SpyGlass2016 —— 有五大模块: lint,CDC,LP,Constraint,DFT,功能强大
  • Primetime2016 —— 针对STA(静态时序分析)的软件
  • Design complier2016 —— 用于做电路综合的核心工具
  • Installer3.2 —— Synopsys官方的安装软件,以上软件除SpyGlass外,均用它安装
  • License —— 用来生成license的文件

Ubuntu VCS安装

1.所有文件放到一个非中文目录!否则dve打开时swf文件会找不到

2.先安装installer

解压后,运行.run文件,之后会提示installer安装目录的指定

3.再安装scl进行破解

点就完了

4.生成破解文件(具体破解过程参考链接)

5.license生成、环境以及激活

启动scl_keygen生成器

image-20221208202204473

这个需要在window下进行,双击运行scl_keygen.exe.

需要填写这4项信息,HOST ID Daemon 和HOST ID Feature填写一样的,Port选择27000。

image-20221208202234765

进入虚拟机,打开terminal使用以下命令查找

1
2
hostname
ifconfig

我的填写如下,然后点击Generate生成license

image-20221208202330597

image-20221208202348560

打开生成licens文件,修改第二行,这个需要与虚拟机里面scl路径一致,不然license无效。修改好后把这个文件复制到共享文件中。这个文件最后需要放到这个“scl/2018.06/admin/license/”目录下,要与环境里面设置的路径一致

image-20221208202359357

5.设置bashrc

打开.bashrc环境文件,加入以下内容,对应自己安装路径。但是需要注意倒数第二行,需要确认主机名是否正确。保存退出,source一下

我的bashrc:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#synopsys
export DVE_HOME=/home/chang/opt/synopsys/vcs/O-2018.09-SP2
export VCS_HOME=/home/chang/opt/synopsys/vcs/O-2018.09-SP2
export VCS_MX_HOME=/home/chang/opt/synopsys/vcs-mx/O-2018.09-SP2
export VERDI_HOME=/home/chang/opt/synopsys/verdi/Verdi_O-2018.09-SP2
export SCL_HOME=/home/chang/opt/synopsys/scl/2018.06
export DC_HOME=/home/chang/opt/synopsys/syn/O-2018.06-SP1
export NOVAS_HOME=$VERDI_HOME
# 这个必须得打开, 否则FSDB 是不能dump 的
export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/VCS/LINUX64
# export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/IUS/LINUX64:$LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/lib/LINUX64:$LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/Ius/LINUX64:$LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=$VERDI_HOME/share/PLI/MODELSIM/LINUX64:$LD_LIBRARY_PATH
#dve
PATH=$PATH:$VCS_HOME/gui/dve/bin
alias dve="dve -full64"

#VCS
PATH=$PATH:$VCS_HOME/bin
alias vcs="vcs -full64"

#VERDI
PATH=$PATH:$VERDI_HOME/bin
alias verdi="verdi"

#DC
export SYNOPSYS=/home/chang/opt/synopsys #不加这个路径,直接运行 dc 会报错
PATH=$PATH:$DC_HOME/bin #改 Verdi 安装路径
alias dc='dc_shell'
alias dv='design_vision'


#scl
PATH=$PATH:$SCL_HOME/linux64/bin
export VCS_TARGET_ARCH="amd64"
export VCS_ARCH_OVERRIDE=linux #没这个vcs会提示"Sorry, Linux version 5.11.0-49-generic is not supported"
#LICENCE
export LM_LICENSE_FILE=27000@chang-virtual-machine
alias lmg_synopsys="lmgrd -c /home/chang/opt/synopsys/scl/2018.06/admin/license/Synopsys.dat"

6.激活(每次重启都要重新激活)

先使用以下命令设置开放端口:

1
2
firewall-cmd --zone=public --add-port=27000/tcp --permanent
firewall-cmd --reload

然后在输入“lmg_synopsys”进行激活,这个每次启动虚拟机都需要这样操作一下。但是这里提示缺少依赖库。输入以下命令进行安装:

1
2
lmg_synopsys
yum install redhat-lsb.i686

success图示:

image-20221208202423254

几个推荐链接

VCS Verdi安装问题

verdi缺少库

1
2
3
chang@chang-virtual-machine:~/下载/synopsys/synopsysinstaller_v5.0$ verdi
/home/chang/opt/synopsys/verdi/Verdi_O-2018.09-SP2/platform/LINUXAMD64/bin/Novas: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

解决指令:

1
2
3
sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0

参考链接:

lmgrd can’t make directory /usr/tmp/.flexlm when running server on Ubuntu问题:

这个问题,可以参考这个链接http://www.myir-tech.com/faq_list.asp?id=521

就是:

1
2
3
sudo -i              #切换到root权限
mkdir /usr/tmp/ #创建目录(Ubuntu下没有这个目录)
chmod 777 /usr/tmp/ #修改权限

生成fsdb时需要的链接

  • 方法一,vcs编译的时候使用,进行手动链接
1
-P ${LD_LIBRARY_PATH}/novas.tab ${LD_LIBRARY_PATH}/pli.a
  • 方法而,vcs编译的时候使用如下参数,自动链接
1
-debug_access+all: VCS2014之后加入debug_access,不需要手动配置verdi.tab,和静态库pli.a,只需要设置$VERDI_HOME,VCS会自动查找所需文件

DC安装问题

输入dc,会有以下的错误出现,关于libtiff.so.3

由于Ubuntu16.04已经安装了libtiff.so.5,这个文件可以在/usr/lib/x86_64-linux-gnu/下找到,输入locate libtiff.so.5即可找到它的路径
接下来直接做一个软链接即可

1
sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5  /usr/lib/x86_64-linux-gnu/libtiff.so.3

接着输入dc,又出现一个错误,关于libmng.so.1

解决方案也和上面差不多
可以先安装libmng2,如果已存在,就直接软链接到libmng.so.1

1
2
sudo apt-get install libmng2
sudo ln -s /usr/lib/x86_64-linux-gnu/libmng.so.2 /usr/lib/x86_64-linux-gnu/libmng.so.1

我的第一个VCS+VERDI联调

参考文章

VCS 各种参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
compile:
vcs \
-full64 \
-sverilog \
-cpp g++-4.8 \
-cc gcc-4.8 \
-LDFLAGS \
-Wl, --no-as-needed \
-debug_all \
-rdynamic \
-P ${LD_LIBRARY_PATH}/novas.tab \
${LD_LIBRARY_PATH}/pli.a \
-f filelist.f \
+vcs+lic+wait \
-timescale=1ns/1ps \
-l compile.log

-full64 : VCS以64位运行
-sverilog:如果你的文件后缀名用的是.sv,那么编译时要加上该参数
-cpp g++ -4.8 : 要根据的VCS的版本寻找对应的G++的版本
-cc gcc-4.8:对应gcc的版本
-LDFLAGS :这个参数和后面的参数不写有时还会报错,指用GCC等编译器中的一些优化参数
-Wl, --no-as-needed:把用户指定的链接库全部写入可执行文件中,而不是依赖的库写入
-debug_all:这个参数是肯定需要的
-rdynamic:指示需要加载的动态库
-R:表示在编译完成之后自动运行仿真
-f :filelist.f文件,用于表示所有源文件
-o :指定输出的可执行文件的名字,缺省是simv
-full64: 在64-bit模式下编译,生成64-bit模式仿真的可执行文件
-sverilog: 支持systemverilog语法
-timescale=1ns/1ns: 仿真时间刻度,要和tb保持一致
+v2k: 支持verilog2001
-debug_access+all: VCS2014之后加入debug_access,不需要手动配置verdi.tab,和静态库pli.a,只需要设置$VERDI_HOME,VCS会自动查找所需文件
-kdb -lca: 用于生成kdb.elab++,位于simv.daiddir目录下
-f file.f: 指定文件列表,file.f存着要编译文件的路径,可以通过shell命令find 该目录路径 -name "*.*v" 生成的文件名
例子中加入-cpp和-cc的主要原因是用的VCS2016.06, 而我电脑里用gcc7.5,所以在下载完gcc4.8之后需要显性的表示出vcs调用GCC的版本。之后动态库链接的一些参数也是因为同样的原因,如果不加-Wl,–no-as-needed会显示其他动态库找不到函数声明,因此需要我们链接的时候把一些链接库直接添加到可执行文件中

verdi:
verdi -ssf rtl.fsdb
-ssf rtl.fsdb: 加载fsdb波形文件。verdi是第三方软件,支持的波形文件为.fsdb,dve为vcs自带的软件,支持的波形文件为.vpd。
verdi -ssf rtl.fsdb: verdi加载.fsdb文件

主要内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKPLACE = .
VSRCS = $(shell find $(abspath $(WORKPLACE)/) -name "*.v")
FILELIST = $(WORKPLACE)/file.f

VCS = vcs -full64 -sverilog -timescale=1ns/1ns \
-cpp g++ -cc gcc -LDFLAGS -Wl,--no-as-needed\
+v2k \
-debug_access+all -kdb -lca\
-f file.f


comp:
find $(WORKPLACE) -name "*.v" > $(FILELIST)
$(VCS)

verdi:
verdi -ssf rtl.fsdb

clean:
rm -rf csrc simv* *.lib *.lib++ nLint*
rm -rf *.log *.vpd *.fsdb* *.key *log rtl.fsdb*

写一个简单的加法器

add.v

1
2
3
4
5
6
7
8
9
10
11
12
13
module add (

input [20:0] A ,
input signed [17:0] B ,

output signed [22:0] C);

wire signed [21:0] A_signed;

assign A_signed = {1'b0,A};
assign C = A_signed + B;

endmodule

test.v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
`timescale 1ns/1ns

module test;

reg clk;
reg rst_n;

reg [20:0] A;
reg signed [17:0] B;

wire signed [22:0] C;

initial begin
clk = 0;
rst_n = 0;
A = 21'b0;
B = 18'b0;
#10;
rst_n = 1;
repeat(80) @(posedge clk) begin
A = A + 21'b1;
end

#2000;
$finish;

end

always #5 clk = ~clk;

initial begin
$fsdbDumpfile("./rtl.fsdb");
$fsdbDumpvars("+all");
end

add add_inst(
.A(A),
.B(B),
.C(C));

endmodule

Makefile

假设你已经装上的 make 和 gcc,且熟悉make编译规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
WORKPLACE = .
VSRCS = $(shell find $(abspath $(WORKPLACE)/) -name "*.v")
FILELIST = $(WORKPLACE)/file.f

VCS = vcs -full64 -sverilog -timescale=1ns/1ns \
-cpp g++ -cc gcc -LDFLAGS -Wl,--no-as-needed\
+v2k \
-debug_access+all -kdb -lca\
-f file.f


comp:
find $(WORKPLACE) -name "*.v" > $(FILELIST)
$(VCS)

verdi:
verdi -ssf rtl.fsdb

clean:
rm -rf csrc simv* *.lib *.lib++ nLint*
rm -rf *.log *.vpd *.fsdb* *.key *log rtl.fsdb*

生成.fsdb有两种方法,一种是在vcs编译时生成,需要在tb顶层添加下面两个系统函数,然后在用verdi加载波形文件

1
2
$fsdbDumpfile("./rtl.fsdb");//生成rtl.fsdb波形文件
$fsdbDumpvars("+all");//把所有变量全都加进去

第二种方法是通过verdi界面生成fsdb。编译完后通过输入下面命令

1
./simv -gui=verdi

打开verdi界面,然后在verdi命令行输入run,也可以生成.fsdb文件,但是这种方法比较麻烦,而且每加一个变量都得重新run,不然看不到这个变量的波形。所以一般采用第一种方式

也可以通过输入下面命令通过dve仿真

1
./simv -gui

其他问题

VCS

1 vlogan找不到

编译程序失败,打印消息如下

1
2
3
4
5
6
7
8
9
10
11
12
chang@chang-virtual-machine:~/programs/study/luke/V2 X 代码/V2.1_SV实验/lab0$ make comp 
vlogan -full64 -sverilog -timescale=1ps/1ps -nc -l comp.log ../mcdt/v1/{arbiter.v,slave_fifo.v,mcdt.v} tb1.v

Warning-[MXIR-W] VCS-MX build is required
Please make sure that vlogan is from the intended build.


Error-[ILWOR] Incorrect Logical Worklib or Reflib
The incorrect logical lib is "work".
Please check your Synopsys setup file.

make: *** [Makefile:18:comp] 错误 255

解决方法:改VCS_HOME路径

image-20230207220111665

参考链接:https://bbs.eetop.cn/thread-842862-1-1.html

2.ubuntu进行vcs编译时:libvcsnew.so:underfined reference to xxx

image-20230207221919720

ubuntu上进行vcs编译时报错libvcsnew.so:underfined reference to xxx,问题原因是默认情况下 gcc 在 Debian/Ubuntu 上使用的链接器选项与在 Fedora 上使用的链接器选项略有不同(这是测试 VCS 的平台)

解决方法:编译添加参数-LDFLAGS -Wl,--no-as-needed

参考链接:

① 解决方法链接:https://blog.csdn.net/kissdragan/article/details/128599150

② 原因链接:https://github.com/chipsalliance/rocket-chip/issues/21


97756295_p0


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!