一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

芯片設(shè)計(jì)中的Makefile簡(jiǎn)單教程

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Makefile可以做什么?

Makefile可以根據(jù)指定的依賴規(guī)則和文件是否有修改來執(zhí)行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。

Makefile的基本格式

目標(biāo):依賴 命令

目標(biāo)是要生成的結(jié)果,依賴是生成結(jié)果需要的源文件和上一步驟的結(jié)果,命令是當(dāng)目標(biāo)不存在或者依賴更新時(shí)執(zhí)行的命令。注意命令前必須用tab來縮進(jìn),不可以用空格。

示例一:

simv: tb.sv dut.v vcs -full64 -sverilog tb.sv dut.v

這個(gè)例子中,simv是目標(biāo),是我們要生成的仿真執(zhí)行文件。tb.sv和dut.v是依賴,執(zhí)行命令前會(huì)先檢查tb.sv和dut.v是否存在,以及是否有修改。當(dāng)依賴文件有修改時(shí),或者目標(biāo)不存在時(shí),則執(zhí)行命令vcs -full64 -sverilog tb.sv dut.v來生成simv。

偽目標(biāo)

有時(shí)候目標(biāo)并不是真實(shí)要生成的文件,比如我們要用Makefile調(diào)用simv來仿真,并不存在一個(gè)目標(biāo)文件,這種情況我們稱之為偽目標(biāo)PHONY。

示例二:

sim: simv ./simv -xxx

這個(gè)例子中,sim并不是要生成的結(jié)果文件,而只是我們給操作起的一個(gè)名字。由于偽目標(biāo)總是不存在,所以命令也一定會(huì)重新執(zhí)行,即使simv沒有修改。

我們常常在Makefile的開頭來用.PHONY顯式指明偽目標(biāo)。

示例三:

.PHONY: simsim: simv ./simv -xxx

這樣,我們?cè)?a href="http://www.www27dydycom.cn/tags/te/" target="_blank">terminal里就可以用make sim來調(diào)用仿真命令。

默認(rèn)目標(biāo)

如果我們只是敲make(后面不跟目標(biāo)),那么將調(diào)用Makefile里的第一個(gè)目標(biāo)。那么我們?yōu)榱朔乐钩鲥e(cuò)通常把第一個(gè)目標(biāo)定義成all(執(zhí)行完整的流程)或者h(yuǎn)elp(顯示幫助菜單)。我更傾向于后者,可以幫助我們回憶如何使用Makefile腳本。

示例四:

.PHONY: help simhelp: echo "make help" echo "make simv to compile" echo "make sim to run simulation"simv: tb.sv dut.v vcs -full64 -sverilog tb.sv dut.vsim: ./simv -xxx

這樣,當(dāng)我們不記得如何使用Makefile的時(shí)候,直接敲make就會(huì)有使用幫助菜單。另外,我們還可以看到,一個(gè)目標(biāo)后面可以執(zhí)行多條命令,比如這里的三條echo命令。

隱藏回顯

在執(zhí)行命令前,make會(huì)先回顯命令(就是打印出命令)。上面的make help會(huì)輸出:

echo "make help"make helpecho "make simv to compile"make simv to compileecho "make sim to run simulation"make sim to run simulation

看起來有點(diǎn)重復(fù)了。在命令前加@可以關(guān)閉回顯示,這正是我們需要的。改進(jìn)過的Makefile如示例五。

示例五:

.PHONY: helphelp: @echo "make help" @echo "make simv to compile" @echo "make sim to run simulation"

makefile內(nèi)定義變量

當(dāng)源文件比較多,且常需要增減,我們可以把依賴定義成一個(gè)變量,放成文件開頭,如下。

示例六:

tbfile := tb.sv env_pkg.sv test_pkg.svrtlfile := dut.v a.v b.v c.vsimv: $(tbfile) $(rtlfile) vcs -full64 -sverilog $(tbfile) $(rtlfile)

當(dāng)要增減文件時(shí),只需要修改文件開頭即可。

調(diào)用shell命令

如果rtl文件太多,還可以在Makefile里調(diào)用shell命令來幫助生成。如下面的例子:

示例七:

tbfile := $(shell ls *.sv)rtlfile := $(shell find rtl -name "*.v")simv: $(tbfile) $(rtlfile) vcs -full64 -sverilog $(tbfile) $(rtlfile)

例七中的tb和rtl文件寫兩遍,是不是有點(diǎn)麻煩。我們最好能簡(jiǎn)化一下。在Makefile中有幾個(gè)特殊變量,如$@表示目標(biāo),$^表示依賴。所以示例七中的命令可以簡(jiǎn)化成:

simv: $(tbfile) $(rtlfile)vcs -full64 -sverilog $^

學(xué)到到這里你已經(jīng)可以寫出大部分的Makefile腳本了。

為makefile增加選項(xiàng)

但我們還需要進(jìn)一步學(xué)習(xí)兩個(gè)重要功能:選項(xiàng)和目錄遞歸。

我們常需要在仿真時(shí)提供一些選項(xiàng),比如testcase名,是否是post仿真,是否要dump波形。那么怎么實(shí)現(xiàn)呢?其實(shí)Makefile允許從命令行提供額外的變量,格式為OPTION=value。如下面的例子,假設(shè)有三個(gè)選項(xiàng),TC、POST、DUMP:

示例八:

ifeq ($(POST),1)SRC := "netlist.v"else SRC := "rtl.v"endififeq ($(DUMP),1) DUMP_DEF := "+define+DUMP"else DUMP_DEF := ""endifsim: @echo "vcs -full64 -sverilog $(SRC) $(DUMP_DEF) +UVM_TESTNAME=$(TC)"

那么,使用時(shí)就可以通過命令行控制選項(xiàng)開關(guān):

make sim TC=basic_testmake sim TC=basic_test POST=1make sim TC=basic_test DUMP=1make sim TC=basic_test POST=1 DUMP=1

makefile的大殺器:目錄遞歸

另一個(gè)重要功能是目錄遞歸,目錄遞歸有一個(gè)典型的應(yīng)用:make clean。在頂層目錄里make clean時(shí),將會(huì)自動(dòng)調(diào)用子目錄的make clean。這個(gè)怎么實(shí)現(xiàn)呢?看下面的例子:

示例九:

cat ./Makefileclean: rm -f *~ make -C a clean make -C b cleancat ./a/Makefileclean: rm -f *~cat ./b/Makefileclean: rm -f *~ make -C c cleancat ./b/c/Makefileclean: rm -f *~

我們看到一個(gè)make -C subdir clean,就是說可以通過-C來把目標(biāo)clean傳遞給子目錄,相當(dāng)于在Makefile里調(diào)用了另一個(gè)Makefile。這樣在頂?shù)絤ake clean時(shí),將自動(dòng)遞歸到所有的子目錄。

Makefile的引用與復(fù)用

最后還有一點(diǎn),我們也會(huì)經(jīng)常遇到,把共用的Makefile腳本寫到common.mk,然后再include common.mk,這樣可以讓Makefile看起來更簡(jiǎn)潔。

示例十

# ../common/common.mkbasic: @ echo "call basic"# Makefiledep := $(shell depth)all: basic @ echo "call all"include $(dep)/common/common.mk

如果被include的文件使用相對(duì)路徑的話,必須相對(duì)敲make命令的目錄。當(dāng)然也可以像這個(gè)示例一樣,先獲取項(xiàng)目根目錄,然后再用變量來引用路徑。這樣比較易于移植。

與IC Flow的聯(lián)系

到這里,學(xué)了這么多,你已經(jīng)可以寫一些復(fù)雜的Makefile了。但重在應(yīng)用,在IC設(shè)計(jì)里,我們常常用Makefile串起多個(gè)工具,實(shí)現(xiàn)完整的流程。下面是一個(gè)啟發(fā)型的例子。

示例十一:

.PHONY: help clean rtl lint sim syn lec pr pt lvshelp: @echo "make help"clean: rm -rf *~ *.log *.fsdb csrc simv* ... make -C xxx cleanrtl: python3 ...lint: sg_shell/nLint ...sim: vcs/irun ...syn: dc_shell -64bit -topographical -f run_syn.tcl | tee log/syn.loglec: fm_shell/lec ...pt: pt_shell ...pr: innovus/icc ...lvs: calibre ...

習(xí)題:

根據(jù)自己公司的情況,把示例十一補(bǔ)充完整。

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213777
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19726
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    氧化層制備在芯片制造的重要作用

    本文簡(jiǎn)單介紹了氧化層制備在芯片制造的重要作用。
    的頭像 發(fā)表于 05-27 09:58 ?558次閱讀
    氧化層制備在<b class='flag-5'>芯片</b>制造<b class='flag-5'>中</b>的重要作用

    迅為RK3568開發(fā)板內(nèi)核模塊實(shí)現(xiàn)-編寫 Makefile

    編譯驅(qū)動(dòng)程序還需要使用 Makefile 文件。我們?yōu)?helloworld.c 編寫一個(gè)簡(jiǎn)單Makefile, Makefile 文件和源文件 helloworld.c 位于同一
    發(fā)表于 04-24 13:36

    芯片制造的淺溝道隔離工藝技術(shù)

    淺溝道隔離(STI)是芯片制造的關(guān)鍵工藝技術(shù),用于在半導(dǎo)體器件形成電學(xué)隔離區(qū)域,防止相鄰晶體管之間的電流干擾。本文簡(jiǎn)單介紹淺溝道隔離技術(shù)的作用、材料和步驟。
    的頭像 發(fā)表于 03-03 10:00 ?1627次閱讀
    <b class='flag-5'>芯片</b>制造<b class='flag-5'>中</b>的淺溝道隔離工藝技術(shù)

    如何理解芯片設(shè)計(jì)的IP

    本文主要介紹如何理解芯片設(shè)計(jì)的IP 在芯片設(shè)計(jì),IP(知識(shí)產(chǎn)權(quán)核心,Intellectual Property Core)是指在芯片設(shè)計(jì)
    的頭像 發(fā)表于 02-08 10:43 ?1028次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備樹之Makefile修改

    在arch/arm/boot/dts/目錄下會(huì)有很多.dts文件被編譯成.dtb文件,通過配置Makefile文件可以對(duì)這些dts文件進(jìn)行選擇性編譯,打開arch/arm/boot/dts
    發(fā)表于 01-10 09:23

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Makefile介紹

    elf@ubuntu:~/work/tmp$ make a = 678 b = 678 string簡(jiǎn)單賦值 變量的名稱 := 變量值變量的值決定于它在Makefile的位置,而不是整個(gè)
    發(fā)表于 01-04 10:40

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之Makefile介紹

    a = 678 b = 678 string 簡(jiǎn)單賦值 變量的名稱 := 變量值 變量的值決定于它在Makefile的位置,而不是整個(gè)Makefile展開后最終的值。 注意:復(fù)制粘
    發(fā)表于 01-03 09:39

    鋁在芯片制造的作用

    ????在半導(dǎo)體集成電路(IC)制造過程,鋁(Aluminum)是廣泛使用的一種金屬材料,特別是在金屬互連層(metal interconnect)和芯片外部連接的工藝。鋁的應(yīng)用不僅僅是簡(jiǎn)
    的頭像 發(fā)表于 12-20 14:21 ?1241次閱讀

    PCBA加工的靈魂:揭秘芯片燒錄的重要性

    至關(guān)重要的環(huán)節(jié)。對(duì)于電子設(shè)備廠家的采購人員來說,了解芯片燒錄的含義及其在整個(gè)生產(chǎn)流程的作用,對(duì)確保產(chǎn)品質(zhì)量和提高生產(chǎn)效率具有重要意義。 一、什么是芯片燒錄? 芯片燒錄,
    的頭像 發(fā)表于 11-20 09:34 ?899次閱讀

    SOC芯片在汽車電子的應(yīng)用

    隨著技術(shù)的飛速發(fā)展,汽車不再僅僅是簡(jiǎn)單的交通工具,而是變成了一個(gè)高度集成的移動(dòng)計(jì)算平臺(tái)。SOC芯片作為這一變革的核心,正在重塑汽車電子的面貌。 一、SOC芯片的定義與特點(diǎn) SOC芯片
    的頭像 發(fā)表于 10-31 15:46 ?2297次閱讀

    電源芯片U2281的簡(jiǎn)單介紹

    智能手表年銷售規(guī)模早已破百億,且出貨量連年遞增,可以說它已經(jīng)成為當(dāng)前最受青睞的智能穿戴設(shè)備。智能手表的電池續(xù)航?jīng)Q定了用戶的使用頻率和充電頻率,而在充電器電源芯片的測(cè)評(píng),深圳銀聯(lián)寶科技電源芯片U2281收獲了一眾好評(píng)!
    的頭像 發(fā)表于 10-08 18:03 ?992次閱讀

    stm32cubmx生成的makefile編譯無法啟動(dòng)線程怎么解決?

    stm32cubmx生成的makefile編譯無法啟動(dòng)線程,rt_thread_startup返回 RT_EOK無錯(cuò)誤 但是使用生成的 keil工程編譯就沒問題, 板子是 stm32f103vct6
    發(fā)表于 09-27 09:27

    物聯(lián)網(wǎng)系統(tǒng)的觸控技術(shù)方案解析_觸摸芯片

    物聯(lián)網(wǎng)系統(tǒng)為什么要使用觸摸芯片 在物聯(lián)網(wǎng)系統(tǒng)中使用觸摸芯片的原因主要體現(xiàn)在以下幾個(gè)方面: 1、提升用戶體驗(yàn) 直觀交互:觸摸芯片通過電容感應(yīng)技術(shù),使用戶能夠通過
    的頭像 發(fā)表于 09-20 17:40 ?1528次閱讀
    物聯(lián)網(wǎng)系統(tǒng)<b class='flag-5'>中</b>的觸控技術(shù)方案解析_觸摸<b class='flag-5'>芯片</b>

    關(guān)于Makefile自動(dòng)生成-autotools的使用

    在Linux應(yīng)用開發(fā),編寫Makefile是一項(xiàng)必備技能,因?yàn)樗x了工程中所有文件的編譯順序、規(guī)則和依賴關(guān)系,決定了哪些文件需要編譯以及它們的編譯順序。 雖然對(duì)初級(jí)開發(fā)者而言,編寫復(fù)雜
    的頭像 發(fā)表于 07-25 15:50 ?1825次閱讀
    關(guān)于<b class='flag-5'>Makefile</b>自動(dòng)生成-autotools的使用

    SDK V1.10 Makefile導(dǎo)致編譯出錯(cuò)的原因?

    V1.10的 Makefile 多出了 -ffunction-sections -fdata-sections 因此導(dǎo)致編譯例程時(shí)輸出 xt-xcc.exe WARNING
    發(fā)表于 07-22 07:37