makefile在IC设计中的使用笔记
1 makefile在IC设计中的地位
关于makefile的详细介绍可以参考第一个连接,里面的内容很多也很详细。但在数字IC设计中,并不会把所有的用法都用到,下面记录一下主要用到的规则。
2 IC设计涉及到的主要用法
2.1 变量的定义和使用
在makefile的使用过程中,存在变量的定义和使用。首先,关于变量的定义包括了环境变量的定义和普通变量的定义,也包括了从makefile执行命令行输入的变量。变量的定义方式有几种下面只给出其中一种。
一般来说makefile在执行过程中会自动加载环境变量,如果在某些情况下不能自动加载识别,可以通过变量定义的方式实现。
在makefile文件中定义普通变量:
variable = xxxxx
test_case = case_name
如果makefile的命令行输入了variable的值,则会用命令行的值代替makefile文件中定义的值。比如:
make sim test_case=case_name_0
注:上一句中的sim是makefile中的一个target,表示之行makefile中的sim目标,其中test_case为case_name_0
这里就用case_name_0代替了makefile文件中预先定义的case_name。
变量的引用格式如下:
$(test_case)
变量也可以传递,比如
variable1 = henghenghaha
variable2 = tuntuntutu
variable3 = $(variable1)_$(variable_2)
variable3展开后则是henghenghaha_tuntuntutu
变量还可以追加,比如发现variable1少了个后缀,
则可以使用如下方法追加:
variable1+=后缀
当然变量追加一般用不到,如果真少了什么可以直接在该变量定义处修改。
2.2 目标定义
标准的makefile语法格式如下,包含了目标target,依赖文件filename,和相应的命令行语句(用table键开头)
target:filename
命令行1
命令行2
如果没有依赖文件,则称为伪目标。而在IC设计的flow中用得最多的是伪目标,比如,编译-compile,仿真-sim,打开波形-verdi,清除生成的文件-clean。
注:伪目标不能和任何一个相关文件同名,如果同名,则需在makefile的前面显式声明伪目标名,如下:
.PHONY : clean
2.3 命令行的定义
命令行是指在该目标下要执行的操作,每一行代表一组相关命令。每两行之间的命令没有关系,即该命令依赖于前面命令的执行结果,则需要将它们放在同一行中,并用分号隔开。
如果要在target中先进到subdir目录下,新建一个new_file的文件,则应该如下写
target:cd /subdir; mkdir new_file
如果写成如下这样,则表示先进到subdir目录,然后在makefile当前目录新建一个new_file的文件。
target:cd /subdirmkdir new_file
2.4 通配符的使用
常用到的通配符有*,*代表任意符号。
*.v指所有的.v文件
2.5 makefile的错误处理
makefile是按照顺序一行一行的执行的,如果其中某条指令的结果出现错误则会导致后续指令的之行。但可以通过设置忽略出现的错误,继续往下之行,方法有两种:
局部方法,在出错的命令前加减号-,用于忽略该条指令的错误结果,不影响后续的指令执行,如:
clean :-rm -rf *.o
全局的方法,定义相关参数,用-i或者--ignore--errors或者-k或者--keep--going
2.6 显式打印信息
@echo $(test_case)
则会打印出具体的test_case的名字
2.7 条件语句的使用
在满足A条件时之行A组命令,在满足B条件时执行B组命令时需要用到条件语句,这里的条件格式如下:
ifeq($(variable_a),A)
xxxxx
endif或者ifeq($(varialbe_a),A)
xxxxx
else
xxxxx
endif
当然ifeq和ifneq的用法一样,前者是条件等于时执行,后者是条件不等时之行。$(varialbe_a)是变量,A是目标值或者参考值。
2.8 举例
1 vcs_options = -V -Mupdate -full64 -debug_pp -sverilog +v2k +notimingcheck +no_tchk_msg \
2 -p $(VERDI_HOME)/share/PLI/VCS/linux64/verdi_tab \
3 $(VERDI_HOME)/share/PLI/VCS/linux64/pli.a \
4 +vcs_v2k+pathpulse+delay_mode_path+fsdb+sva_success \
5 +vcs+initreg+config \
6 -cm line+cond+tgl+fsm+branch -cm_dir ../../cov/$(TC).vdb -cm_hier ../cov_config.f \
7 +error+1000\
8 +nospecify \
9 +lint=TFIPC-L \
10 -assert report=../../log/$(tc_name)_assert.report+verbose \
11 +define+vcs+sdfverbose+ASIC+FSDB+BT_EMPTY+$(DF)+$(TARGET)+$(TC)+RD=0.1 \
12 -Marchive=128+noinline-transport-pathpulse -timescale=1ns/1ps -notice
13
14 find_testcase:15 matlab:
16 matlab xxxxxxxxx
17
18 compile:
19 vcs $(VCS_OPTIONs) \
20 +incdir+../../tb/reg_model/ \
21 -f ../../tb/reg_model/reg_model.f \
22 -y ../../tb/reg_model/ +libext+.v \
23 -f ../../filelist/design.f \
24 ./$(tc_name).sv \
25 -f ../../filelist/tb.f \
26 -top $(TB_SIM_TOP) \
27 -l ../../log/$(tc_name)_vcs_compile.log \
28 ./simv +ntb_random_seed=$(seed) +no_pulse_msg +fsdb+force+region +fsdb+sva_success 29 -cm line+cond+tgl+fsm+branch \
30 -l ../../log/$(tc_name)_vcs_sim.log; \
31 mv -f ./*.fsdb /fsdb/ \
32 perl log_check.pl -TC $(tc_name)
33
34
35 verdi:
36 @echo $(tc_name)
37 @test -d $(tc_name) || mkdir -p ./$(tc_name)
38 @echo "verdi -sv -logdir . +systemverdilogext+.sv+define+ASIC+$(DF)+$(TARGET)+$(TC)+RD=0.1 \\" >vdrun
39 @echo "+incdir+../../tb/reg_model/ "\
40 @echo "-f ../../tb/reg_model/reg_mode.f" \
41 @echo "-y ../../tb/reg_model/ +llibext+.v" \
42 @echo "-f ../../filelist/design.f \\" >>vdrun
43 @echo "./$(tc_name).sv \\" >>vdrun
44 @echo "-f ../../filelist/tb.f \\" >>vdrun
45 @echo "-ssf /fsdb/*.fsdb \\" >>vdrun
46 @echo "-top $(TB_SIM_TOP)" "&" >>vdrun
47 mv vdrun ./$(tc_name); cd/$(tc_name); source ./vdrun; cd ../
例子是功能仿真makefile的部分内容,里面涉及到了变量的定义和使用,目标的建立,命令的执行等内容。
3 相关链接:
Makefile教程(绝对经典,所有问题看这一篇足够了)-CSDN博客
Makefile入门(介绍、规则、语法、函数、实例)_mak file 单冒号-CSDN博客
最近在思考flow的东西,所以再次梳理整理了一下makefile的内容,笔记先记到这里,这是一个工具,还是要多用才会熟能生巧。后续有修改或补充再增删文件内容……
相关文章:
makefile在IC设计中的使用笔记
1 makefile在IC设计中的地位 关于makefile的详细介绍可以参考第一个连接,里面的内容很多也很详细。但在数字IC设计中,并不会把所有的用法都用到,下面记录一下主要用到的规则。 2 IC设计涉及到的主要用法 2.1 变量的定义和使用 在makefile…...
Suno声称在受版权保护的音乐上训练模型属于“合理使用“
继美国唱片业协会(RIAA) 最近对音乐生成初创公司 Udio 和 Suno 提起诉讼之后,Suno 在周四提交的一份法庭文件中承认,该公司确实使用了受版权保护的歌曲来训练其人工智能模型。但它声称,根据合理使用原则,这…...
Java | Leetcode Java题解之第316题去除重复字母
题目: 题解: class Solution {public String removeDuplicateLetters(String s) {boolean[] vis new boolean[26];int[] num new int[26];for (int i 0; i < s.length(); i) {num[s.charAt(i) - a];}StringBuffer sb new StringBuffer();for (in…...
Taro学习记录
一、安装taro-cli 二、项目文件 三、项目搭建 1、Eslint配置 在项目生成的 .eslintrc 中进行配置 {"extends": ["taro/react"], //一个配置文件,可以被基础配置中的已启用的规则继承"parser": "babel/eslint-parser…...
Spring Cache框架详解
Spring Cache框架详解 Spring Cache是Spring框架提供的一个强大的缓存抽象层,旨在简化缓存技术的集成和使用。自Spring 3.1版本开始,Spring Cache就被引入以支持在Spring应用程序中添加缓存功能。随着Spring版本的迭代,Spring Cache的功能日…...
解决Html iframe 内嵌video标签导致视频无法全屏展示的问题
原因: 由于浏览器的安全策略所限制的。为了防止恶意网站利用全屏播放功能进行滥用或欺骗用户,浏览器对iframe中的视频播放做了限制。 在iframe标签中播放视频时,浏览器会根据安全策略阻止视频全屏播放。这是因为iframe标签中的内容被认为是第…...
谷粒商城实战笔记-110~114-全文检索-ElasticSearch-查询
文章目录 一,110-全文检索-ElasticSearch-进阶-两种查询方式二,111-全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all三,112-全文检索-ElasticSearch-进阶-match全文检索四,113-全文检索-ElasticSearch-进阶-match_ph…...
【开源】嵌入式Linux(IMX6U)应用层综合项目(1)--云平台调试APP
目录 1.简介 1.1功能介绍 1.2技术栈介绍 1.3演示视频 1.4硬件介绍 2.软件设计 2.1连接阿里云 2.2云平台调试UI 2.3Ui_main.c界面切换处理文件 2.4.main函数 3.结尾(附网盘链接) 1.简介 此文章并不是教程,只能当作笔者的学习分享&…...
AI人工智能分析王楚钦球拍被踩事件的真相
在2024年巴黎奥运会乒乓球混双决赛的热烈氛围中,中国队王楚钦与孙颖莎以出色的表现夺得金牌,然而,赛后发生的一起意外事件——王楚钦的球拍被踩坏,引起了广泛关注和热议。为了探寻这一事件的真相,我们可以借助AI人工智…...
C++客户端Qt开发——多线程编程(一)
多线程编程(一) ①QThread 在Qt中,多线程的处理一般是通过QThread类来实现。 QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。 QThread对象管理程序中的一个控制线程。 run() 线程的入口…...
安装pnpm
安装pnpm(Performant npm),即高性能的npm包管理工具,可以通过多种方式进行。以下是详细的安装步骤: 一、通过npm全局安装 打开命令行工具:在你的计算机上打开命令行工具,例如Windows的CMD、Pow…...
CSS平移实现双开门效果
CSS平移实现双开门效果 一共要三张图片,一张作为父级背景,两张为兄弟左右布局 父子结构布局 一张作为父级背景,两张为兄弟左右布局。之后添加鼠标悬停效果,两张子图分别从左右平移 [外链图片转存失败,源站可能有防盗链机制,建议…...
3096. 得到更多分数的最少关卡数目
3096. 得到更多分数的最少关卡数目 题目链接:3096. 得到更多分数的最少关卡数目 代码如下: class Solution { public:int minimumLevels(vector<int>& possible) {int s0;//两个玩家能得到的分数和for(int x:possible){sx0?-1:1;}int t0;/…...
AGI思考探究的意义、价值与乐趣Ⅳ
探究in context或Prompt对于LLM来说其根本意义,in context & Prompt Learning带给我们更深一层的提示是什么? 文章里的探索希望能够将in context或Prompt置身于一个更全局的视角来看待:将其视为在真实世界中时空认知流形所映射为数据流形…...
《数据结构》(C语言版)第1章 绪论(上)
第1章 绪论 1.1 数据结构的研究内容1.2 基本概念和术语 1.1 数据结构的研究内容 N.沃思(Niklaus Wirth)教授提出: 程序算法数据结构 电子计算机的主要用途 早期:主要用于数值计算 后来:非数值计算,复杂的具有一定结构…...
【Pyhton】数据类型之详讲字符串(上)
本篇文章将详细讲解字符串: 1、定义 定义字符串时,字符串的内容被双引号,单引号,三单引号,三双引号中的其中一个被括住。 例如: 双引号: v1"haha" 单引号: v1hahah…...
算法小白的进阶之路(力扣6~8)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
【期货】收盘点评。昨天说的,p2409棕榈油在今天或者周一会走出行情
收盘点评 昨天说的,p2409棕榈油在今天或者周一会走出行情。事实就是如此。震荡了几天了,波幅不大的来回震荡,其实主力是不想震荡的,但是不震荡自己的货和行情走不出来。所以我昨天就说,应该就是这一两天会走出一波小行…...
LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!
为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务(LBS)开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…...
VS Code设置C++编译器路径
C_Cpp.default.compilerPath是C/C编译器路径; python.condaPath是conda路径....
laravel项目配置
创建laravel项目 composer create-project --prefer-dist laravel/laravel 项目名称生成项目key php artisan key:generate.清理配置缓存 php artisan config:clearlaravel生成代码 官网链接 php artisan make:model Flight --all生成Flight类相关的文件,对应数…...
Python试讲
Python试讲 导语Python简介Python及其特点如何使用Python Python与计算计算变量 导语 本次试讲内容如下:Python简介与使用,Python与基本运算 辅助教材为 《趣学Python编程》和《Python编程从入门到实践》 Python简介 Python是目前入门最简单最好学的…...
RESTful API
RESTful API是一种基于REST (Representational State Transfer) 架构风格的应用程序编程接口。它通过使用HTTP协议的不同方法(如GET、POST、PUT、DELETE等)来对资源进行操作和传输数据。 使用RESTful API构建web应用程序需要遵循以下几个步骤࿱…...
NEEP-EN2-2020-Text1
英二-2020-Text 1 摘自新科学家(New scientist)2018年11月的文章《Rats can make friends with robot rats and will rescue them when stuck》。 以下为个人解析,非官方公开标准资料,可能有误,仅供参考。(…...
摩托罗拉E6系统研究
这是很久以前研究摩托罗拉E6刷机包时总结的一些经验,不一定准确但留个纪念,希望会制作刷机包的高手交流学习。 ------------------------------------------------------------------------------------------------------------------------------- 摩…...
Spring中,ApplicationContext主要的实现类型包括?
Spring中,ApplicationContext主要的实现类型包括FileSystemXmlApplicationContext、ClassPathXmlApplicationContext、XmlWebApplicationContext、AnnotationConfigWebApplicationContext。 FileSystemXmlApplicationContext:这个实现从一个…...
JavaScript青少年简明教程:事件及处理
JavaScript青少年简明教程:事件及处理 在编程语言中,事件(Event)是一种使程序能够响应特定操作或条件发生的机制。它允许程序中的不同部分(比如对象、类或模块)在发生某些特定情况时互相通信或协作。事件驱…...
node_exporter
目录 指标详解常用指标 指标详解 指标描述node_arp_entriesARP(Address Resolution Protocol)表中的条目数量,用于将IP地址映射到MAC地址。node_boot_time_seconds系统启动时间的Unix时间戳,表示从1970年1月1日以来的秒数。node…...
近期在看
1. C Primer 2. 深入理解 FFmpeg 3. 鸿蒙 sdk 开发...
C++篇:C++入门基础(1)
C前言: C 的发展历史可以追溯到1979年,当时C语言以其效率和灵活性成为广泛使用的系统编程语言,但它也有一些限制,例如缺乏直接支持面向对象编程(OOP)的特性。 之后Bjarne Stroustrup(也就是C之父)是C的创始…...
jsp新闻网站/谷歌seo怎么优化
■■集合运算(UNION、UNION ALL、INTERSECT、MINUS)集合运算组合两个或多个部分查询的结果到一个结果中。包含集合运算的查询称为复合查询。OperatorReturnsUNION(联合)由每个查询选择的所有不同的行(无重复值)UNION ALL由每个查询选择的所有的行,包括所有重复的行I…...
男人与女人做视频网站/站长工具seo推广 站长工具查询
一、下载安装文件百度网盘:链接:https://pan.baidu.com/s/1SerJrXnVS774lcHY58KIww提取码:txyr二、安装openoffice1、将下载的安装文件上传到linux你指定的目录下,这个没有固定的目录,你放在那里的可以。如图ÿ…...
贵州建设监理协会网站/百度知识营销
资源下载地址:https://download.csdn.net/download/sheziqiong/85709349 资源下载地址:https://download.csdn.net/download/sheziqiong/85709349 目 录 1 绪论 1 1.1系统开发的背景 1 1.2系统开发的意义 1 2 系统分析 1 2.1需求分析 1 2.2 可行性分析 …...
怎么做二级网站/杭州seo排名优化
文章目录1.读MPS5023芯片:0x03ff即将前6位屏蔽2.读PXE1410CDM电压和电流:一个数&0x7ff,将这个数前5位全变为0,其余位不变2.1 1ine112.2 1ine16:一种方法2.3 1ine16:另一种方法3.读ADS7830的8个channel电…...
网站建设服务采购方案模板/英雄联盟最新赛事
JAVA中数据库事务处理的实现张蔓 陈景春成都电子科技大学计算机学院摘要 本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean、Ejb组件实现J2EE应用服务器支持的JDBC事务、JTA(Java Transaction API)事务。关键词 Ja…...
武汉做网站华企加速器/网络广告的计费方式
文章目录引言1、Master选举中的几个重要角色2、选举何时会发生(何时触发选举)2.1 节点失效检测2.2 触发选举的两种情况3、选主流程3.1 连接线程实现:innerJoinCluster3.2 发现节点:DiscoveryNode3.3 选举临时Master节点࿱…...