当前位置: 首页 > news >正文

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题去除重复字母

题目&#xff1a; 题解&#xff1a; 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"], //一个配置文件&#xff0c;可以被基础配置中的已启用的规则继承"parser": "babel/eslint-parser…...

Spring Cache框架详解

Spring Cache框架详解 Spring Cache是Spring框架提供的一个强大的缓存抽象层&#xff0c;旨在简化缓存技术的集成和使用。自Spring 3.1版本开始&#xff0c;Spring Cache就被引入以支持在Spring应用程序中添加缓存功能。随着Spring版本的迭代&#xff0c;Spring Cache的功能日…...

解决Html iframe 内嵌video标签导致视频无法全屏展示的问题

原因&#xff1a; 由于浏览器的安全策略所限制的。为了防止恶意网站利用全屏播放功能进行滥用或欺骗用户&#xff0c;浏览器对iframe中的视频播放做了限制。 在iframe标签中播放视频时&#xff0c;浏览器会根据安全策略阻止视频全屏播放。这是因为iframe标签中的内容被认为是第…...

谷粒商城实战笔记-110~114-全文检索-ElasticSearch-查询

文章目录 一&#xff0c;110-全文检索-ElasticSearch-进阶-两种查询方式二&#xff0c;111-全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all三&#xff0c;112-全文检索-ElasticSearch-进阶-match全文检索四&#xff0c;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.结尾&#xff08;附网盘链接&#xff09; 1.简介 此文章并不是教程&#xff0c;只能当作笔者的学习分享&…...

AI人工智能分析王楚钦球拍被踩事件的真相

在2024年巴黎奥运会乒乓球混双决赛的热烈氛围中&#xff0c;中国队王楚钦与孙颖莎以出色的表现夺得金牌&#xff0c;然而&#xff0c;赛后发生的一起意外事件——王楚钦的球拍被踩坏&#xff0c;引起了广泛关注和热议。为了探寻这一事件的真相&#xff0c;我们可以借助AI人工智…...

C++客户端Qt开发——多线程编程(一)

多线程编程&#xff08;一&#xff09; ①QThread 在Qt中&#xff0c;多线程的处理一般是通过QThread类来实现。 QThread代表一个在应用程序中可以独立控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 QThread对象管理程序中的一个控制线程。 run() 线程的入口…...

安装pnpm

安装pnpm&#xff08;Performant npm&#xff09;&#xff0c;即高性能的npm包管理工具&#xff0c;可以通过多种方式进行。以下是详细的安装步骤&#xff1a; 一、通过npm全局安装 打开命令行工具&#xff1a;在你的计算机上打开命令行工具&#xff0c;例如Windows的CMD、Pow…...

CSS平移实现双开门效果

CSS平移实现双开门效果 一共要三张图片&#xff0c;一张作为父级背景&#xff0c;两张为兄弟左右布局 父子结构布局 一张作为父级背景&#xff0c;两张为兄弟左右布局。之后添加鼠标悬停效果&#xff0c;两张子图分别从左右平移 [外链图片转存失败,源站可能有防盗链机制,建议…...

3096. 得到更多分数的最少关卡数目

3096. 得到更多分数的最少关卡数目 题目链接&#xff1a;3096. 得到更多分数的最少关卡数目 代码如下&#xff1a; class Solution { public:int minimumLevels(vector<int>& possible) {int s0;//两个玩家能得到的分数和for(int x:possible){sx0?-1:1;}int t0;/…...

AGI思考探究的意义、价值与乐趣Ⅳ

探究in context或Prompt对于LLM来说其根本意义&#xff0c;in context & Prompt Learning带给我们更深一层的提示是什么&#xff1f; 文章里的探索希望能够将in context或Prompt置身于一个更全局的视角来看待&#xff1a;将其视为在真实世界中时空认知流形所映射为数据流形…...

《数据结构》(C语言版)第1章 绪论(上)

第1章 绪论 1.1 数据结构的研究内容1.2 基本概念和术语 1.1 数据结构的研究内容 N.沃思&#xff08;Niklaus Wirth)教授提出&#xff1a; 程序算法数据结构 电子计算机的主要用途 早期&#xff1a;主要用于数值计算 后来&#xff1a;非数值计算&#xff0c;复杂的具有一定结构…...

【Pyhton】数据类型之详讲字符串(上)

本篇文章将详细讲解字符串&#xff1a; 1、定义 定义字符串时&#xff0c;字符串的内容被双引号&#xff0c;单引号&#xff0c;三单引号&#xff0c;三双引号中的其中一个被括住。 例如&#xff1a; 双引号&#xff1a; v1"haha" 单引号&#xff1a; v1hahah…...

算法小白的进阶之路(力扣6~8)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

【期货】收盘点评。昨天说的,p2409棕榈油在今天或者周一会走出行情

收盘点评 昨天说的&#xff0c;p2409棕榈油在今天或者周一会走出行情。事实就是如此。震荡了几天了&#xff0c;波幅不大的来回震荡&#xff0c;其实主力是不想震荡的&#xff0c;但是不震荡自己的货和行情走不出来。所以我昨天就说&#xff0c;应该就是这一两天会走出一波小行…...

LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!

为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…...

VS Code设置C++编译器路径

C_Cpp.default.compilerPath是C/C编译器路径; python.condaPath是conda路径....

动物森友会岛屿设计终极指南:用Happy Island Designer轻松规划你的梦想岛屿

动物森友会岛屿设计终极指南&#xff1a;用Happy Island Designer轻松规划你的梦想岛屿 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会…...

从需求到开发的全流程

一、流程图二、各阶段拆解&#x1f50d;第一阶段&#xff1a;需求细化与设计&#xff08;会前关键&#xff09;此阶段的目标是产出一份清晰、可评审的PRD初稿。步骤核心动作与目的产出物与实战技巧1. 深度需求调研目的&#xff1a;消化方案&#xff0c;与原始需求方及关键用户深…...

Claw-ED:基于教学风格学习的AI助教,一键生成个性化教学包

1. 项目概述&#xff1a;一个为教师而生的AI教学助手 如果你是一位一线教师&#xff0c;每天被备课、写教案、做课件、设计学生活动、准备分层材料这些繁琐工作压得喘不过气&#xff0c;同时又对市面上那些“通用”的AI工具生成的、充满“AI腔”的教案感到失望&#xff0c;那么…...

嵌入式Linux SPI屏驱动踩坑实录:fbtft模块加载失败与dmesg排错指南

嵌入式Linux SPI屏驱动深度排错指南&#xff1a;从dmesg到硬件配置的全链路解析 当你在树莓派或全志H3开发板上折腾那块SPI接口的TFT屏幕时&#xff0c;是否经历过这样的绝望时刻&#xff1f;设备树配置看起来完美无缺&#xff0c;insmod命令执行后却只收获一片漆黑的屏幕和满屏…...

DDR内存接口测试:从信号完整性到电源噪声的工程实践指南

1. DDR内存测试的核心挑战与价值在任何一个涉及高速数字信号的设计项目中&#xff0c;内存接口的验证都是决定系统稳定性的关键一环。从早期的SDRAM到如今主流的DDR4、DDR5乃至LPDDR系列&#xff0c;双倍数据速率&#xff08;DDR&#xff09;技术通过在每个时钟周期的上升沿和下…...

高性能PDF转SVG矢量转换架构解析:基于Poppler与Cairo的技术实现

高性能PDF转SVG矢量转换架构解析&#xff1a;基于Poppler与Cairo的技术实现 【免费下载链接】pdf2svg A simple PDF to SVG converter using the Poppler and Cairo libraries 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2svg 在数字化文档处理领域&#xff0c;PD…...

避坑指南:NRF52832低功耗调试,为什么你的电流下不去?

NRF52832低功耗调试实战&#xff1a;从百微安到个位数的终极指南 当你满怀期待地将NRF52832的低功耗模式配置完毕&#xff0c;却发现实际电流依然高达几十甚至上百微安时&#xff0c;那种挫败感我深有体会。这不是简单的数据手册参数未达标问题&#xff0c;而往往是一系列隐蔽陷…...

不止于下载:用Active-HDL给你的Lattice FPGA设计做个“体检”(功能仿真实战)

从功能仿真到可靠设计&#xff1a;Active-HDL在Lattice FPGA开发中的深度实践 当LED灯在你的FPGA开发板上如期闪烁时&#xff0c;那种成就感确实令人振奋。但作为经历过多次调试煎熬的工程师&#xff0c;我必须告诉你&#xff1a;能下载运行只是FPGA开发的起点&#xff0c;而非…...

基于Fabric.js与Next.js的浏览器端视频编辑器开发实战

1. 从零到一&#xff1a;在浏览器里造一个视频编辑器几年前&#xff0c;当我第一次尝试在网页上做视频剪辑时&#xff0c;感觉就像在用瑞士军刀盖房子——工具很多&#xff0c;但都不趁手。市面上的在线编辑器要么功能简陋&#xff0c;要么就是“黑盒”操作&#xff0c;你根本不…...

航空摇篮长岛:从早期飞行到现代航空工业的技术演进与创新集群

1. 项目概述&#xff1a;从长岛的天空回望航空摇篮如果你对航空史感兴趣&#xff0c;或者像我一样&#xff0c;是个对机械、工程和人类如何突破物理极限着迷的工程师&#xff0c;那么“长岛”这个名字绝对绕不开。它不仅仅是纽约市旁边的一个地理名词&#xff0c;在航空史上&am…...