makefile脚本常用知识点

发布时间:2026/11/2 6:37:51
makefile脚本常用知识点 1. 如何运行makefile脚本makefile在当前目录b makemakefile不在当前目录b make ./script/makefile run642. makefile最核心的模版目标: 依赖1 依赖2 依赖3 命令1 命令2 命令3注意命令前面必须是【Tab 制表符】不能是空格举个例子vcs64: compile_dep file_list echo start vcs compile vcs -full64 UVM_VERBOSITYmedium ...执行顺序先跑 compile_dep、file_list全部完成才执行 vcs 编译命令。3. shell里面常用指令有哪些echo: 打印提示信息echo start VCS compile ls列出目录里面的文件ls $(tc_dir) ls *.vcp复制文件cp rom.txt $(tc_dir)/rm删除rm -rf $(tc_dir)/simvpwd打印当前所在路径find查找文件#find 【搜索起点目录】 【匹配条件】 【动作】 find ./run_dir -name sim.log # 在 ./run_dir 下面找名字严格等于 sim.log 的文件 find . -name tc*_log # 找 tc开头、_log结尾的文件grep过滤、查找关键字抓 ERROR、FATAL、PASS/FAILgrep ERROR sim.log grep -i fatal sim.log # -i 忽略大小写date获取时间、时间戳date %Y%m%d # 年月日4. makefile内置函数$wilcardifeq (A, $(wildcard A)) cp A ./ endifA是完整文件路径$(wildcard A)去看 A 这个文件有没有5. 仿真常用指令编译指令vcs运行仿真执行 ./simv-sverilog开启 SystemVerilogUVM 必须加-full6464 位模式现在项目标配debug_all全 debug支持 Verdi 看波形-f filelist.f从 f 文件读取源码列表incdirxxx头文件 include 搜索路径defineXXX宏定义-cm linecondfsmtgl打开覆盖率收集-l run.log输出 log 文件-top xxx显式指定顶层# -timescale 全局时间精度后仿/高速接口经常指定 vcs -timescale1ns/1ps -f filelist.f # -cm 开启覆盖率line cond fsm tgl branch回归用 vcs -cm linecondfsmtgl -cm_dir ./cov.vdb -f filelist.f # 指定随机种子复现bug超级常用 ./simv ntb_random_seed12345 # 直接拉起verdi仿真一边跑一边dump波形 ./simv -verdi # 把仿真日志单独输出到文件 ./simv -l sim.log # 直接加载文件列表看RTL代码 verdi -f filelist.f6. 覆盖率收集常用指令编译加-cm开启覆盖率采集 → 跑 simv 仿真生成.vdb覆盖率数据库line行覆盖率代码行有没有跑到cond条件覆盖率if、、|| 判断的所有分支是否都走到fsm状态机覆盖率状态、状态跳转tgltoggle 翻转覆盖率信号 0→1、1→0 是否都翻转branch分支覆盖率case、if else 分支assertSVA 断言覆盖率断言是否触发成功 / 失败-cm_hier:后面跟一个文本配置文件用来告诉 VCS哪些模块统计覆盖率、哪些模块排除。举个例子-cm_hier cov.cfg其中cov.cfg可以是下面内容# tree 包含这个层次统计覆盖率 # -tree 排除这个层次不统计覆盖率 # 只保留DUT作为覆盖率统计对象 tree tb_top.u_dut # DUT里面有些第三方IP不想统计单独排除 -tree tb_top.u_dut.u_external_sram_ip -tree tb_top.u_dut.u_analog_model-cm_name给本次仿真产生的覆盖率数据起一个标签名字属于 VCS 编译参数写在 vcs 编译命令不是 simv 后面vcs -cm linecond -cm_dir ./cov_case1 -cm_name $(TC_NAME) -top tb_top -f filelist.f跑完之后在./cov_case1/这个 vdb 库里面这一组覆盖率数据的名字就叫$(TEST_NAME)覆盖率合并方案1每个 case 单独一个 vdb-cm_name ${TEST_NAME}_${SEED} -cm_dir ${SESSION_DIR}/coverage 每个 test/seed 都会生成独立目录类似 run_seed1/coverage/simv.vdb run_seed2/coverage/simv.vdb run_seed3/coverage/simv.vdb # 新版urg推荐输出merge.vdb urg -full64 -dir run_seed1/coverage -dir run_seed2/coverage -dir run_seed3/coverage \ -merge \ -out ./cov_merge.vdb \ 打开覆盖率的方法 verdi -cov -covdir ./cov_merge.vdb 方案2编译一次 simv多次跑仿真追加到同一个 vdbvcs -cm linecond -cm_dir ./cov_total7.一个常用makfile脚本makefile脚本TC TB MOD MY_DF IS_COV TIME_SCALE1ns/1ps SEED data %N CMDbusb -IP -P xxx -q queue_name ifeq($(IS_COV),1) cov_opt -cm condfsmtglbranchline -cm_heir $(VCS_COV) -cm_name $(TEST_NAME)_$(SEED) -cm_dir $(SESSION_DIR)/coverage endif SIM_LIST defineAXIM_AGENT_ENRTLSIM_TRCB \ define$(MY_DF) \ incdir$(FILE_PATH)/$(TC_BRANCH)/$(MOD)/testcase/$(TC)/tc_vlg \ incdir$(FILE_PATH)/$(TC_BRANCH)/$(MOD)/tc_public_v \ incdir$(FILE_PATH)/tb/tb_$(TB) \ $(FILE_PATH)/tb/eda/tb_top.v \ -f $(FILE_PATH)/tb/eda/tb_$(TB)/tb_$(TB).f ifeq $(SIM_BRANCH) rtl FILE_LIST $(SIM_LIST) \ -f $(FILE_PATH)/tb/tb_$(TB)/rtl.f else endif ifeq $(MY_DF) tc_dir$(TC)_$(MY_DF) else tc_dir$(TC) endif cmp_opt -full64 -debug_accppdmptf -debug_regioncellencrypt vcswait -sverilog -l vcs_cmp.log -top $(TOP_NAME) \ notimingcheck -kdb \ $(cov_opt) \ assert svaext \ -timescale$(TIME_SCALE) sim_opt ntb_random_sees$(SEED) -l vcs_run.log $(cov_opt)\ fsdbsva_success\ fsdbpower mk_dir: if [ -d $(tc_dir) ]; then \ echo $(tc_dir); \ else \ mkdir $(tc_dir); \ fi sim64: mk_dir cd $(tc_dir) rm -rd simv* csrc *.txt ifeq (/path/$(MOD)/irom.txt, $wilcard(/path/$(MOD)/irom.txt) ) cp $(tc_dir) cp /path/$(MOD)/irom.txt ./iram.txt endif cd $(tc_dir) $(CMD) vcs $(cmp_opt) $(FILE_LIST) cd $(tc_dir) $(CMD) ./simv $(sim_opt)如何调用这个makefile脚本set tc_num 000 # 默认case号000 if ( $#argv 1 ) then # 判断传入参数个数1 echo WRONG FILE! Please Input Again! exit # 参数太多报错退出 endif if ( $#argv 1 ) then # 如果传了1个参数 unset tc_num set tc_num $1; # 把传入的参数赋值给tc_num就是testcase编号 endif b make -f ../script/makefile TB... MOD... TC$tc_num vcs64 IS_COV1

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询