在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

芯片設計中的Makefile簡單教程

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 17:41 ? 次閱讀

Makefile可以做什么?

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

Makefile的基本格式

目標:依賴 命令

目標是要生成的結果,依賴是生成結果需要的源文件和上一步驟的結果,命令是當目標不存在或者依賴更新時執行的命令。注意命令前必須用tab來縮進,不可以用空格。

示例一:

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

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

偽目標

有時候目標并不是真實要生成的文件,比如我們要用Makefile調用simv來仿真,并不存在一個目標文件,這種情況我們稱之為偽目標PHONY。

示例二:

sim: simv ./simv -xxx

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

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

示例三:

.PHONY: simsim: simv ./simv -xxx

這樣,我們在terminal里就可以用make sim來調用仿真命令。

默認目標

如果我們只是敲make(后面不跟目標),那么將調用Makefile里的第一個目標。那么我們為了防止出錯通常把第一個目標定義成all(執行完整的流程)或者help(顯示幫助菜單)。我更傾向于后者,可以幫助我們回憶如何使用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

這樣,當我們不記得如何使用Makefile的時候,直接敲make就會有使用幫助菜單。另外,我們還可以看到,一個目標后面可以執行多條命令,比如這里的三條echo命令。

隱藏回顯

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

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

看起來有點重復了。在命令前加@可以關閉回顯示,這正是我們需要的。改進過的Makefile如示例五。

示例五:

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

makefile內定義變量

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

示例六:

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

當要增減文件時,只需要修改文件開頭即可。

調用shell命令

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

示例七:

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

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

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

學到到這里你已經可以寫出大部分的Makefile腳本了。

為makefile增加選項

但我們還需要進一步學習兩個重要功能:選項和目錄遞歸。

我們常需要在仿真時提供一些選項,比如testcase名,是否是post仿真,是否要dump波形。那么怎么實現呢?其實Makefile允許從命令行提供額外的變量,格式為OPTION=value。如下面的例子,假設有三個選項,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)"

那么,使用時就可以通過命令行控制選項開關:

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的大殺器:目錄遞歸

另一個重要功能是目錄遞歸,目錄遞歸有一個典型的應用:make clean。在頂層目錄里make clean時,將會自動調用子目錄的make clean。這個怎么實現呢?看下面的例子:

示例九:

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 *~

我們看到一個make -C subdir clean,就是說可以通過-C來把目標clean傳遞給子目錄,相當于在Makefile里調用了另一個Makefile。這樣在頂到make clean時,將自動遞歸到所有的子目錄。

Makefile的引用與復用

最后還有一點,我們也會經常遇到,把共用的Makefile腳本寫到common.mk,然后再include common.mk,這樣可以讓Makefile看起來更簡潔。

示例十

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

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

與IC Flow的聯系

到這里,學了這么多,你已經可以寫一些復雜的Makefile了。但重在應用,在IC設計里,我們常常用Makefile串起多個工具,實現完整的流程。下面是一個啟發型的例子。

示例十一:

.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 ...

習題:

根據自己公司的情況,把示例十一補充完整。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11469

    瀏覽量

    212903
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19598
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    迅為RK3568開發板內核模塊實現-編寫 Makefile

    編譯驅動程序還需要使用 Makefile 文件。我們為 helloworld.c 編寫一個簡單MakefileMakefile 文件和源文件 helloworld.c 位于同一
    發表于 04-24 13:36

    芯片制造的淺溝道隔離工藝技術

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

    如何理解芯片設計的IP

    本文主要介紹如何理解芯片設計的IP 在芯片設計,IP(知識產權核心,Intellectual Property Core)是指在芯片設計
    的頭像 發表于 02-08 10:43 ?828次閱讀

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

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

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植之Makefile介紹

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

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

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

    鋁在芯片制造的作用

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

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

    至關重要的環節。對于電子設備廠家的采購人員來說,了解芯片燒錄的含義及其在整個生產流程的作用,對確保產品質量和提高生產效率具有重要意義。 一、什么是芯片燒錄? 芯片燒錄,
    的頭像 發表于 11-20 09:34 ?780次閱讀

    SOC芯片在汽車電子的應用

    隨著技術的飛速發展,汽車不再僅僅是簡單的交通工具,而是變成了一個高度集成的移動計算平臺。SOC芯片作為這一變革的核心,正在重塑汽車電子的面貌。 一、SOC芯片的定義與特點 SOC芯片
    的頭像 發表于 10-31 15:46 ?2158次閱讀

    stm32cubmx生成的makefile編譯無法啟動線程怎么解決?

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

    關于Makefile自動生成-autotools的使用

    在Linux應用開發,編寫Makefile是一項必備技能,因為它定義了工程中所有文件的編譯順序、規則和依賴關系,決定了哪些文件需要編譯以及它們的編譯順序。 雖然對初級開發者而言,編寫復雜
    的頭像 發表于 07-25 15:50 ?1768次閱讀
    關于<b class='flag-5'>Makefile</b>自動生成-autotools的使用

    SDK V1.10 Makefile導致編譯出錯的原因?

    V1.10的 Makefile 多出了 -ffunction-sections -fdata-sections 因此導致編譯例程時輸出 xt-xcc.exe WARNING
    發表于 07-22 07:37

    飛凌全志T527開發板進行簡單的性能測試

    本文主要使用CoreMark、Dhrystone和Stream對芯片性能進行初步檢測,并與ELFBorad進行了簡單的單核性能比較。 OK527N-C CoreMark 獲取CoreMark源碼
    發表于 07-15 09:56

    SDK 1.0移植到eclipse失敗,如何修改makefile文件呢?

    虛擬機編譯太麻煩,想把SDK 1.0移植到安信可的eclipse編譯環境,出現如下錯誤,是否需修改makefile文件?如何修改? 錯誤信息錯誤.png (5.31 KiB) Viewed 4998 times 另外,官方什么時候能推出基于eclipse的SDK呢?方便windows用戶啊!
    發表于 07-12 11:08
    主站蜘蛛池模板: 深夜视频在线播放视频在线观看免费观看 | 免费观看的黄色网址 | 91日本视频| 三级毛片在线看 | 国产人人干 | 日本.www| 婷婷综合五月天 | 天天色影视综合网 | 狠狠操夜夜 | 欧美天天综合 | 美女视频很黄很暴黄是免费的 | 亚洲一区二区视频 | 手机在线观看你懂得 | 欧美一区二区三区激情啪啪 | 色狠狠色综合久久8狠狠色 色狠狠网 | 亚洲视频一区二区在线观看 | 亚洲第一区视频 | 天堂中文在线观看 | 日本免费a级片 | 性欧美大胆高清视频 | 5g成人影院 | 免费看大尺度视频在线观看 | 国产午夜三区视频在线 | 激情福利| 亚洲人成网站色在线观看 | 亚洲免费网 | 四虎永久在线精品视频免费观看 | 亚洲一级香蕉视频 | 在线观看jyzzjyzz | 免费一级毛片 | 五月天福利视频 | 亚洲九色 | 1024手机在线观看视频 | 亚洲第一区精品日韩在线播放 | 国产乱码一区二区三区四川人 | 在线看你懂 | 色第一页 | 欧美在线视频二区 | 久草毛片| 亚洲无线码一区在线观看 | 视频一区在线观看 |