大家好,又见面了,我是你们的朋友全栈君。
IC小白有感于第一次参与的流片工程,总结了一下参与过程中的Makefile配置,以及一些环境配置,希望能够帮助到大家;
首先VCS要进行VHDL和VERILOG的混合仿真,在进行仿真VHDL时要配置synopsys_sim.setup文件,配置如下
代码语言:javascript复制-- Mapping default work directory
WORK > DEFAULT
DEFAULT : ./work
-- Library Mapping
IEEE : $VCS_HOME/linux/packages/IEEE/lib
SYNOPSYS : $VCS_HOME/linux/packages/synopsys/lib
--Simulation variables
ASSERT_STOP = ERROR
TIMEBASE = ns
TIME_RESOLUTION = 1 ps
配置完synopsys_sim.setup文件后进行VCS的混合编译仿真,makefile如下
代码语言:javascript复制#!/bin/csh #虚拟路径
.PHONY: com sim cov clean debug
#DEFINE
ALL_DEFINE = define DUMP_VPD #预编译宏定义,本例程没有用到宏定义
#OUTPUHT
OUTPUT = simv #输出文件的文件名
# Code coverage command #覆盖率检查
CM = -cm line cond fsm branch tgl #收集的代码覆盖率类型
CM_NAME = -cm_name $(OUTPUT) #表示覆盖率的文件名
CN_DIR = -cm_dir ./$(OUTPUT).vdb #覆盖率文件的存放目录
# vpd file name
VPD_NAME = vpdfile $(OUTPUT).vpd #DVE波形文件,该工程使用的VERDI型波形文件,没有用到DVE
#SDF
SDF= neg_tchk -negdelay -sdf min/typ/max(三选一看后端给出的sdf文件):反标的位置(一般是顶层):反标文件 #定义反标文件,vhdl的反标只能在VCS的命令中反标,verilog的反标可以直接在RTL中反标
#Compile vhdl command #该工程是VHDL和VERILOG混合编程RTL,VCS编译要分三步走
VCS= vhdlan -nc #第一步用VCS编译VHDL文件,单独编译每个VHDL文件
VCS1= vhdlcom -nc #将VHDL文件编译成库,方便VERDI导入RTL
#Compile verilog command
VCS2= vlogan -nc v2k #编译VERILOG文件
VCS3= vericom -nc v2k #将verilog文件编译成库,方便verdi导入
#compile all
VCSALL= vcs -R -nc -debug_all #第三步,对RTL进行总和编译仿真
-error=IWNF #加强约束
lint=TFIPC-L #加强约束
-full64 #64位系统
tb_top_behavior #VHDL的top,要把结构体声明出来
$(CM) #覆盖率选项
$(CM_NAME) #覆盖率选项
$(CM_DIR) #覆盖率选项
-o $(OUTPUT) #输出文件,缺省为simv
-l compile.log #输出log
# nospecify #不对SPECIFY模块进行时序检查和路径延时的计算
# notimingcheck #不进行时序检查,但是还是把path延时加入仿真中 可以在后端用来查明是哪里的错误
# SDF #加入反标的sdf文件
# libext lib_ext #当用到很多库时这样加在库文件
# incdir inc_dir #RTL中有include文件,这样指定include文件的位置
# -v lib_file #RTL中用到工艺库时,用这个方法指定工艺库的位置
#wavefrom command
wavefrom = verdi -lib work -top tb_module -ss tb_module.fsdb & #打开verdi仿真面板,-lib work加载rtl库,-top指名顶层 -ss指名生成的fsdb文件
#simulation command #在vcs编译中加入-R就不用在分开编译仿真了
SIM = ./$(OUTPUT)
$(CM) $(CM_NAME) $(CM_DIR)
$(ALL_DEFINE)
-l $(OUTPUT).log
# start compile vhdl lib
com1:
$(VCS) -f file_vhdl.f #-f 编译加载在文档中所有的rtl文件
# start compile vhdl
com2:
$(VCS1) -f file_vhdl.f
# start compile verilog lib
com3:
$(VCS2) -f file_verilog.f #编译vhdl的文件时要加入 .f文件中要加入${NOVAS_HOME}/share/PLI/VCS/LINUX/novas.vhd 用来加载novas的库
# start compile vhdl
com4:
$(VCS3) -f file_verilog.f
# start compile
comall:
$(VCSALL)
#Start simulation
sim:
$(SIM)
#Start wavefrom
wave:
$(wavefrom)
#show the coverage
cov:
dve -covdir *vdb & #打开覆盖率检查,查看覆盖率情况
urg:
urg -dir simv.vdb -report both #生成覆盖率情况,用于外界观看
debug:
dve -vpd $(OUTPUT).vpd & #DVE debug选项,暂时没有用到
#start clean
clean: #清理命令
rm -rf ./csrc *.daidir ./csrc
*.log *.vpd *.vdb simv* *.key
race.out* novas* verdi* *fsdb apb2apb_asyncs
后续会发布一些DC综合脚本,PT脚本,加上UVM的VCS仿真,功能点描述等,以及ASIC的后仿总结,希望能够帮助到大家~~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191115.html原文链接:https://javaforall.cn