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

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

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

基于Project模式Vivado GUI使用的配置文件自動(dòng)化生成管理

454398 ? 來(lái)源:Xilinx工程師 ? 作者:盧昊 ? 2020-11-13 12:48 ? 次閱讀

BY 盧昊

曾就職于上海貝爾(阿爾卡特朗訊),任FPGA工程師。目前從事FPGA加速計(jì)算方面的工作。有多年使用FPGA開(kāi)發(fā)和應(yīng)用的經(jīng)歷,熟悉Xilinx FPGA的體系結(jié)構(gòu)。

Vivado相比與上一代開(kāi)發(fā)工具ISE,一個(gè)巨大的提升就是全面支持Tcl腳本語(yǔ)言。由于全面支持Tcl腳本,所以可以利用Tcl來(lái)做一些好玩的事情。這里拋磚引玉,分享一點(diǎn)關(guān)于Vivado Tcl的使用小心得。

通常的工程中,直接生成的文件是bit文件(如果需要調(diào)試,可能還需要ltx文件)。而量產(chǎn)項(xiàng)目中,bit文件的內(nèi)容通常需要放在flash中(除了早年的Spartan-3AN,Xilinx目前還沒(méi)有在售的內(nèi)置Flash的FPGA產(chǎn)品),這個(gè)時(shí)候常見(jiàn)的操作是將bit文件轉(zhuǎn)為mcs文件或者bin文件,利用Vivado或者第三方工具燒入到Flash中。

在ISE時(shí)代,有個(gè)很好用的工具iMPACT來(lái)完成bit到mcs/bin文件的轉(zhuǎn)換。到了Vivado時(shí)代,由于可以使用Tcl腳本,所以通常建議使用Tcl腳本來(lái)生成mcs/bin文件,具體命令是write_cfgmem。

不過(guò)每次生成bit文件之后需要手動(dòng)輸入命令來(lái)生成一次,這樣的操作是比較麻煩的。這里提供一個(gè)方法來(lái)自動(dòng)實(shí)現(xiàn)生成mcs/bin文件的功能,在此基礎(chǔ)上還能完善更多的細(xì)節(jié)功能。

注意,如果使用non-project模式,或者即使是project模式也使用全腳本模式,那么則直接寫(xiě)入Tcl腳本即可。本文論述的方法是基于Project模式Vivado GUI使用的。

Vivado在每一步操作的設(shè)置中,有兩個(gè)選項(xiàng)可以使用。

其中,tcl.pre和tcl.post是添加tcl文件的路徑。tcl.pre表示這一步之前運(yùn)行添加的tcl文件,tcl.post表示這一步之后運(yùn)行添加的tcl文件。綜合,實(shí)現(xiàn)和bit文件的生成這些步驟都有這兩個(gè)設(shè)置可以使用。

所以基本思路就是,將需要的操作以Tcl腳本的形式寫(xiě)在Tcl文件中,然后添加到Bitstream Settings中的tcl.post中,這樣生成bit文件之后,Vivado就會(huì)自動(dòng)運(yùn)行相關(guān)的Tcl文件來(lái)實(shí)現(xiàn)需要的功能。

1. 首先需要注意的問(wèn)題是,Tcl文件運(yùn)行路徑。當(dāng)Tcl文件設(shè)置到Bitstream Settings中的tcl.post中之后,在運(yùn)行時(shí),運(yùn)行的路徑就是最后生成bit文件所在路徑,而與所添加的Tcl文件存放的路徑無(wú)關(guān)。獲取當(dāng)前路徑的Tcl命令:pwd。這一步通常是最令人困惑的,經(jīng)常會(huì)因?yàn)槁窂讲徽_而無(wú)法正確的運(yùn)行。

2. 知道路徑之后,下一步是需要知道bit文件名,這里就有一個(gè)需要注意的地方。通常,在生成bit文件的路徑下只會(huì)有一個(gè)bit文件,文件名是固定的,每次生成新的bit文件會(huì)覆蓋掉舊文件。但是有時(shí)候會(huì)出現(xiàn)有多個(gè)bit文件的情況,例如:會(huì)將bit文件改名但是依然保存在當(dāng)前路徑下;用于備份、調(diào)試時(shí)臨時(shí)放置了多個(gè)bit文件等。雖然這些情況并不被推薦,但是如果一旦存在,會(huì)導(dǎo)致Tcl腳本無(wú)法知道應(yīng)該處理哪個(gè)文件。一個(gè)簡(jiǎn)單可用的方法是,遍歷出所有的bit文件,并取修改時(shí)間最新的一個(gè)。由于剛生成bit文件之后就運(yùn)行Tcl腳本,所以最新的文件自然就是剛剛生成的bit文件。

對(duì)應(yīng)的Tcl腳本如下

set pro_path "[pwd]//"
set bit_file_list [glob -path "$pro_path" "*.bit"]
set file_time  0
foreach file $bit_file_list {
    set ftime [file mtime $file]
    if {$ftime  == 0} {
        puts "Error File!"
    }
    if { $ftime > $file_time} {
        set file_time $ftime 
        set file_name $file
    }
}

上述代碼中,glob是用來(lái)查找bit文件的,file mtime是用來(lái)獲取文件的更新時(shí)間,用來(lái)對(duì)比。第一行用pwd獲取的路徑是絕對(duì)路徑, 后面加上“//”是用來(lái)作為一個(gè)目錄路徑,便于glob搜索并合成出新的文件名。為了防止出問(wèn)題,如果文件的修改時(shí)間查到是0,則認(rèn)為該文件不正確,會(huì)打印信息做提示。

3. 獲取文件之后,就可以生成mcs文件了。此時(shí)bit文件的文件名以完整的絕對(duì)路徑存儲(chǔ)在file_name變量中,最簡(jiǎn)單的做法是直接將文件的后綴“.bit”替換為“.mcs”即可。

Tcl代碼: set mcs_file "[file rootname $file_name].mcs" file rootname會(huì)獲取除了文件后綴之外的文件名全部信息,后面加上”.mcs”即可使用。如果要生成bin文件,修改mcs為bin即可。

4. 生成mcs文件。這里使用write cfgmem命令。具體格式依據(jù)需要進(jìn)行調(diào)整即可。最好加上-force來(lái)實(shí)現(xiàn)覆蓋舊文件。下面時(shí)write cfgmem的一個(gè)使用范例。

write_cfgmem -format MCS -size 256 -interface BPIx16 -loadbit "up 0x0 $file_name" -file $mcs_file -force

需要注意的是,這條指令中flash的容量及支持的接口模式需要用戶根據(jù)自己的開(kāi)發(fā)板進(jìn)行配置。另外,Zynq及Zynq Ultrascale+系列器件不是很適合用本文的方法來(lái)生成mcs文件。

到次,Tcl文件已經(jīng)完成自動(dòng)生成mcs文件的工作。每次生成好bit文件之后,就會(huì)在bit文件的路徑下自動(dòng)生成mcs文件。

不過(guò),通常的項(xiàng)目開(kāi)發(fā),對(duì)配置文件的需求還不止于此。這種每次生成的bit文件都放在工程默認(rèn)目錄下的操作,并不利于文件/版本的管理,也不利于發(fā)送/提交。較為常見(jiàn)的做法是將bit文件作為原始文件,附上燒錄Flash用的mcs文件、調(diào)試用的ltx文件等,一起轉(zhuǎn)存到其他路徑(例如公司的內(nèi)部私有網(wǎng)盤(pán))進(jìn)行備份/分發(fā),便于各個(gè)工程師按需所取。而這一步轉(zhuǎn)存,也可以集成在這個(gè)Tcl文件中。

首先,上文已經(jīng)點(diǎn)明,Tcl文件運(yùn)行的路徑和Tcl文件本身的路徑無(wú)關(guān),所以這個(gè)Tcl文件可以放在任意路徑下。如果需要將bit文件和mcs文件放置于某個(gè)固定路徑下保存,可以將該Tcl文件放于這個(gè)路徑下。然后運(yùn)行時(shí),從Tcl腳本中獲取Tcl文件所在路徑即可。

Tcl文件獲取文件本身路徑的命令 set dest_path "[ file dirname [ info script ] ]"

這樣Tcl文件的絕對(duì)路徑就存儲(chǔ)在dest_path這個(gè)變量中了,后續(xù)如果需要復(fù)制/移動(dòng)文件,可以以這個(gè)路徑作為基礎(chǔ)進(jìn)行相關(guān)修改。

復(fù)制文件的相關(guān)Tcl命令:

file copy -force $file_name "$dest_path/bitfile/"
file copy -force $mcs_file  "$dest_path/mcsfile/"

需要注意的是,目的路徑需要確實(shí)存在,比如上面的bitfile子文件夾和mcsfile子文件夾。如果不存在的話,可以添加相關(guān)命令,生成子文件夾之后再進(jìn)行復(fù)制。

編輯:hfy

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

    關(guān)注

    0

    文章

    35

    瀏覽量

    13264
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    804

    瀏覽量

    66224
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Vivado工程模式和非工程模式的比較

    01. Vivado的兩種工作模式 Vivado設(shè)計(jì)有工程和非工程兩種模式: 1. 工程模式: 工程模式
    的頭像 發(fā)表于 11-09 17:15 ?4473次閱讀
    <b class='flag-5'>Vivado</b>工程<b class='flag-5'>模式</b>和非工程<b class='flag-5'>模式</b>的比較

    善用Vivado工程配置文件xpr快速工程創(chuàng)建

    善用Vivado工程配置文件xpr快速工程創(chuàng)建對(duì)于第一次新建工程,沒(méi)啥捷徑,建議大家規(guī)規(guī)矩矩的使用VivadoGUI創(chuàng)建工程。完成工程創(chuàng)建后,我們找到這個(gè)新建工程下的.xpr
    發(fā)表于 10-19 18:05

    Zybo Board開(kāi)發(fā)記錄: 讓 Vivado有Zybo Board的配置文件

    下載配置文件 我們可以透過(guò) git 或是直接下載 Digilentinc 位于 GitHub 的 配置文件 ,這邊采用 wget 進(jìn)行下載。 coldnew@gentoo ~ $ wget https://github.com/Digilent/
    發(fā)表于 02-08 01:15 ?454次閱讀

    Vivado調(diào)試模式下,如何保存波形配置文件?

    什么辦法把之前配置好的波形顯示屬性保存下來(lái),重復(fù)利用? 上述案例是實(shí)際調(diào)試中經(jīng)常會(huì)碰到的問(wèn)題,回答是可以的。 方法如下: 打開(kāi)file->Save Waveform Configuration As...菜單,保存修改好的波形配置文件
    發(fā)表于 02-08 08:38 ?1573次閱讀
    在<b class='flag-5'>Vivado</b>調(diào)試<b class='flag-5'>模式</b>下,如何保存波形<b class='flag-5'>配置文件</b>?

    ICD配置文件的詳細(xì)介紹和配置內(nèi)容的詳細(xì)概述

    配置文件配置文件是利用SCL語(yǔ)言描述變電站設(shè)備對(duì)象模型后生成文件,用于在不同廠商的配置工具之間交換配置
    的頭像 發(fā)表于 06-02 11:16 ?1.8w次閱讀
    ICD<b class='flag-5'>配置文件</b>的詳細(xì)介紹和<b class='flag-5'>配置</b>內(nèi)容的詳細(xì)概述

    Vivado生成、固化燒錄文件

    Vivado生成、固化燒錄文件方法說(shuō)明。
    發(fā)表于 04-21 11:08 ?49次下載

    關(guān)于Vivado non-project模式

    vivadoproject模式和non-project模式,project
    的頭像 發(fā)表于 10-17 10:09 ?3232次閱讀

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?530次閱讀
    KT142C語(yǔ)音芯片<b class='flag-5'>配置文件</b>總是不起作用?<b class='flag-5'>配置文件</b>的問(wèn)題集中歸納

    springboot的全局配置文件有幾種

    Spring Boot是一種快速開(kāi)發(fā)框架,其通過(guò)提供配置文件來(lái)實(shí)現(xiàn)對(duì)應(yīng)用程序的配置。全局配置文件在Spring Boot中起著非常重要的作用,可以用于配置各種不同的屬性,包括數(shù)據(jù)庫(kù)連接
    的頭像 發(fā)表于 12-03 15:28 ?1484次閱讀

    zookeeper的核心配置文件是什么

    ,Zookeeper被廣泛應(yīng)用于服務(wù)發(fā)現(xiàn)、分布式鎖、配置管理等場(chǎng)景中。在Zookeeper的設(shè)計(jì)中,核心配置文件是zoo
    的頭像 發(fā)表于 12-04 10:33 ?711次閱讀

    php的配置文件是什么

    配置文件的名稱(chēng)默認(rèn)為php.ini。該文件通常位于PHP安裝目錄下的conf文件夾中。當(dāng)PHP解釋器啟動(dòng)時(shí),會(huì)自動(dòng)加載php.ini文件,
    的頭像 發(fā)表于 12-04 15:55 ?1445次閱讀

    oracle配置文件類(lèi)型關(guān)聯(lián)

    Oracle是一種業(yè)界領(lǐng)先的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它在大型企業(yè)中被廣泛使用。Oracle的配置文件對(duì)于數(shù)據(jù)庫(kù)的穩(wěn)定運(yùn)行和性能優(yōu)化至關(guān)重要。在這篇文章中,我們將詳細(xì)討論Oracle的一些重要配置文件
    的頭像 發(fā)表于 12-06 10:17 ?448次閱讀

    labview的opc生成配置文件

    的數(shù)據(jù)交互和通信。在 LabVIEW 中生成 OPC 配置文件有助于實(shí)現(xiàn)與其他設(shè)備的數(shù)據(jù)傳輸和共享,本文將詳細(xì)介紹如何生成 OPC 配置文件。 首先,在 LabVIEW 中
    的頭像 發(fā)表于 12-26 17:57 ?1642次閱讀

    labview生成exe文件如何配置文件

    可執(zhí)行文件之前,您需要確保正確配置文件,以便應(yīng)用程序能夠在不同計(jì)算機(jī)上正確運(yùn)行。 下面是一個(gè)詳盡、詳實(shí)、細(xì)致的步驟指南,告訴您如何配置LabVIEW生成的可執(zhí)行
    的頭像 發(fā)表于 12-27 16:28 ?1998次閱讀

    如何禁止vivado自動(dòng)生成 bufg

    定和可靠。Vivado在編譯設(shè)計(jì)過(guò)程中會(huì)自動(dòng)檢測(cè)到時(shí)鐘信號(hào),并自動(dòng)生成BUFG來(lái)緩沖時(shí)鐘。然而,在某些情況下,我們可能希望手動(dòng)管理時(shí)鐘信號(hào)。
    的頭像 發(fā)表于 01-05 14:31 ?1850次閱讀