FPGA輔助設計腳本——Tcl


Tcl(讀Tickle) 全稱(Tool Command Language),是一種簡單易學又十分強大的腳本語言,在數字集成電路設計中應用十分廣泛。

  • 利用Tcl腳本,就可以完成工程的創建、綜合、布局布線、引腳約束時序約束等過程。
  • Tcl腳本還可以輕松的保存和導出現有工程文件的約束和配置,然后移植到其他工程中。
  • Tcl腳本在 Modelsim 仿真中也有着十分廣泛的應用。

一、Vivado Tcl使用 

1.建立工程

  利用Tcl建立工程,配置相關芯片信號、設置工程路徑、建立工程名稱相關工程的基本參數,一鍵完成新工程使用。

    #設置器件型號
    set device_model xc7z035fbg676-2
    #設置工程創建路徑
    set dev_dir {G:\DeskTop\ZynqCode\11_Tcl_test} #切換到工程路徑
    cd $dev_dir
    #顯示工程路徑
    puts "The home_dir is $dev_dir now!"
    #工程名稱
 set project_name tlc_test #創建工程
    create_project $project_name $dev_dir -part $device_model
    #設置仿真語言為 verilog
    set_property simulator_language Verilog [current_project]

2.添加文件

  利用Tcl腳本將工程所需要的文件添加進入工程。減少手動添加過程。

    # 添加仿真tb文件
    add_files -fileset sim_1 ./Sources/hdl/cpu_tb.v # 添加VHDL文件
    add_files [ glob ./Sources/hdl/bftLib/*.vhdl ] add_files ./Sources/hdl/bft.vhdl # 添加verilog文件
    add_files [ glob ./Sources/hdl/*.v ] add_files [ glob ./Sources/hdl/mgt/*.v ] add_files [ glob ./Sources/hdl/or1200/*.v ] add_files [ glob ./Sources/hdl/usbf/*.v ] add_files [ glob ./Sources/hdl/wb_conmax/*.v ] # 添加約束文件
    add_files -fileset constrs_1 ./Sources/top_full.xdc set_property library bftLib [ get_files [ glob ./Sources/hdl/bftLib/*.vhdl ]]

3.添加初始化腳本

  Tcl腳本在Vivado軟件還可以自定義初始化腳本,添加圖標,這樣軟件可以通過點擊圖標自動運行腳本,非常方便。zynq內嵌了ARM核和FPGA,在工程設計中添加ARM核應該是最常用的操作,因此這里就用添加ARM核作為初始化腳本功能來進行示例。

3.1.設計腳本

首先建立一個Tcl腳本,腳本大致內容為:
1.生成 block design;
2.添加 “processing_system7” IP 核;
3.配置使用的DDR 型號為"MT41J256M16 RE-125"

 1     # 生成block design,命名為“design_1”
 2     create_bd_design "design_1"
 3     # 編譯文件 sources_1
 4     update_compile_order -fileset sources_1  5     # 生成zynq ps的IP核
 6  startgroup  7     create_bd_cell -type ip -vlnv xilinx.com:ip:processing_system7:5.5 processing_system7_0  8  endgroup  9     # 配置IP核所用的DDR為“MT41J256M16 RE-125”
10     set_property -dict [list CONFIG.PCW_UIPARAM_DDR_PARTNO {MT41J256M16 RE-125} CONFIG.PCW_UART1_PERIPHERAL_ENABLE {1}] [get_bd_cells processing_system7_0]

3.2.建立命令

  通過vivado 的Tools -> Custom Commands -> Customize Commands,進行配置。

進入配置命令頁面:
1.左側"+" ,添加命令的名稱;
2.右側錄入描述,在Source Tcl file 中添加剛才寫好的腳本路徑;
3.命令可以自己上傳圖片作為命令的工具欄圖標。勾選 “Add to the toolbar”,選擇我們的圖標,點擊"Apply"便完成了一鍵配置添加、配置PS核的腳本操作。

  由於是在軟件中自定義的命令操作,因此重新建立工程也無須重新配置。使用vivado軟件時,將通用、重復軟件操作配置為命令,在工具欄一鍵自動完成操作,將大大節省時間,提高工作效率。
下面是剛才建立的Command的相關演示。

4.help使用

  把help 單獨立一小節是因為在使用Tcl腳本的過程中,偶爾會忘記腳本使用或者命令名稱等。這就需要常常使用Vivado 自帶的Tcl help 功能。類似matlab一樣,help相關命令會顯示相關命令的使用方法、變量參數等,實在是很方便也很重要。

 

 二、Quartus Tcl使用

1.工程復制

  找一個已經編譯好的小工程,在Quartus II中打開,點擊Project -> Generate Tcl File for Project。

  這時在工程目錄下,會生成一個后綴為.tcl的文件。然后,大家把這個Tcl文件,與這個工程的源文件(.v)復制到一個新的文件夾下,注意文件名不要有中文字符。在文件下新建一個空白的txt文檔,輸入“quartus_sh -t xxx.tcl”,注意后面的tcl名需要與自己的tcl文件相同,最終的結果是這樣的。

 

  最后,將txt文檔的后綴改為.bat。當雙擊這個.bat文件時會將原有的工程文件復制到當前目錄下。這對於復制一個很大的工程時,只需要把腳本文件與源文件拷貝即可。

2.Tcl腳本介紹

  在Quartus II中,Tcl腳本有3個層次,分別是命令行可執行語句(Command-Line Executables)、Tcl內的包(Packages)與包內的命令(Package commands).

  在Win+R命令行中輸入quartus_sh --qhelp,可以打開Quartus II自帶的關於Tcl腳本的幫助文檔。

  命令行可執行語句(Command-Line Executables)的形式全部為quartus_xx,是直接寫入批處理腳本中的。

  這里用的 quartus_sh,其實是所謂的 Quartus shell,是為所有的步驟提供了一個入口。

  為了實現可執行命令所執行的功能,Quartus II里為每一個可執行命令提供了不同的。 而包內的命令,是我們真正要往Tcl腳本里寫入的。

指令與包之間的關系如下。

  實心圓代表可執行語句默認加載了這個包。比如說,所有的可執行語句即quartus_xxx都加載了project這個包。這意味着,不管用任何可執行命令執行Tcl腳本,腳本中都可以調用project包下的指令,如 set_global_assignment。

  空心圓代表可執行語句無法加載這個包,比如假如用quartus_sh這條語句執行sdc這個包下的語句,就是不行的。

  半空半滿圓代表可執行語句沒有默認加載這個包,要是想用的話需要自己進行手動加載。在Tcl腳本內寫入 load_package <package name>;之后,就可以使用對應包內的指令了。比如,使用quartus_sh這個指令去執行腳本,又需要執行flow這個包下的指令,如execute_flow,那么我們就需要在Tcl文件中寫入 load_package flow 這句話。

  總結:批處理文件(.bat)中寫可執行指令,如quartus_xxx;腳本(Tcl)文件中寫可執行指令下Tcl包內的指令;如果沒有包沒有默認導入的話還要在Tcl文件中導入。

3.示例

  前面示例工程生成的Tcl腳本包含兩部分,第一部分為工程檢測,第二部分為工程配置約束。

 1 package require ::quartus::project  2 
 3 set need_to_close_project 0
 4 set make_assignments 1
 5 
 6 # Check that the right project is open
 7 if {[is_project_open]} {  8   if {[string compare $quartus(project) "led_test"]} {  9     puts "Project led_test is not open"
10     set make_assignments 0
11  } 12 } else { 13   # Only open if not already open
14   if {[project_exists led_test]} { 15     project_open -revision led_test led_test 16   } else { 17     project_new -revision led_test led_test 18  } 19   set need_to_close_project 1
20 }

  這一部分主要是檢查目前待創建的工程是否存在,如果不存在的話,就project_new -revision led_test led_test,即創建led_test這個工程。其中-revision后面跟的是一同被創建的qsf文件的名字。

當然如果自己寫腳本的話其實沒有必要這么多判斷,創建工程直接寫 project_new -revision <qsf文件名> <工程名> 這樣即可。

 三、Modelsim Tcl使用

  以 modelsim <安裝路徑>/examples/tutorials/verilog/basicSimulation 這個路徑下的文件 countrer.v 和 tcounter.v 為例進行說明。

  • 新建一個文件夾,將這兩個文件放入,這里取名為modelsim_test。

  • 啟動Modelsim,將路徑切換到剛才我們新建的文件夾下。

       

 

  Modelsim會把文件的編譯結果放到一個虛擬的Work庫中。我們要把這個虛擬的work庫,與電腦硬盤上一個真正的文件夾聯系起來,這個步驟就是所謂的映射。通常這個文件夾我們也會叫work,當然也可以叫其他名字。

  • 新建一個庫,取名為work。

 按下圖操作,創建真實的work文件夾,和把文件夾與虛擬work庫相連的過程。

 

 

 

 這時Transcript的輸出是:

vlib work
vmap work work

vlib work是說,在Modelsim中建立了那個真實的work文件夾。

vmap work work是說,將Modelsim中的虛擬work庫關聯到我們vlib的那個真實的work文件夾。

所以也可以寫成:

vlib dework
vmap work dework

  執行這一步后,文件夾下多了一個名為work的文件夾。同時,Modelsim中也多了一個叫做work的庫。

點擊Compile > Compile,將兩個文件都編譯到work庫下。

【注】如果文件中包含IP核的話,也要將IP核的庫文件復制到這個文件夾下,然后一同編譯。

  之后點擊 compile -> done。此時,work庫下面出現了這兩個文件。

注意Transcript的輸出,這里的vlog就是"編譯"的Tcl代碼。

vlog -reportprogress 300 -work work C:/Users/13613/Desktop/modelsim_test/counter.v vlog -reportprogress 300 -work work C:/Users/13613/Desktop/modelsim_test/tcounter.v

  接下來可以進行仿真了,點擊Simulate > Start Simulation 將work庫中的tcounter選中。將Optimization的小勾去掉(防止非預期優化,也是大多數情況下不出波形的原因)。

以下是Transcript的輸出,vsim是Tcl中"仿真"的意思。

vsim -gui -novopt work.test_counter

將信號添加到波形圖中。對應輸出的Tcl腳本:

add wave sim:/test_counter/*

最后點擊執行,對應Tcl腳本。

run

之后就出現波形了。

腳本自動化仿真:

1. 首先建立一個test文件夾,里面放着仿真文件 XX_tb.v,然后在這test文件夾里放一個sim文件夾,在此文件夾內新建一個sim.tcl文件,這樣后面的工程和亂七八糟的文件都在內部的sim文件夾里。

2. 在sim .tcl文件里寫好以下代碼,這些代碼建議保存或制作成代碼片段,以后只需要稍微改一改就能用。

 1 # ==========================================================================  2 # == 清空軟件殘留信息  3 # ==========================================================================  4 
 5 # 退出之前仿真
 6 quit -sim  7 
 8 # 清空信息
 9 .main clear 10 
11 # ========================================================================== 12 # == 建立工程並仿真 13 # ========================================================================== 14 
15 # 建立新的工程庫
16 vlib work 17 
18 # 映射邏輯庫到物理目錄
19 vmap work work 20 
21 # 編譯仿真文件
22 vlog ./../*.v 23 
24 # 編譯設計文件
25 vlog ./../../rtl/*.v 26 
27 # 無優化simulation *** 請修改文件名 ***
28 vsim -novopt work.fsm_tb 29 
30 # 打開波形窗口
31 view wave 32 view structure 33 
34 #打開信號窗口
35 view signals 36 
37 
38 # ========================================================================== 39 # == 狀態機名稱查看器,如若不用請刪除!!! 40 # ========================================================================== 41 
42 # 結構體設置
43 virtual type { 44     {4'b0001 S0} 45  {4'b0010 S1} 46     {4'b0100 S2} 47  {4'b1000 S3} 48 } fsm_type; 49 
50 # 結構體和信號名關聯,命名為state_name
51 virtual function {(fsm_type)/fsm_tb/u_fsm/state} state_name 52 
53 # ========================================================================== 54 # == 加載波形 55 # ========================================================================== 56 
57 # 添加波形,高度30,以unsigned格式顯示 *** 請修改路徑名 ***
58 add wave -height 30 -radix unsigned /fsm_tb/u_fsm/*
59 
60 #運行
61 run 10 ms 62 
63 # 跑完
64 run -all

 

3.之后在文件夾下再新建一個文本文件,輸入

::請按任意鍵繼續...
pause

::打開Modelsim並執行do sim.tcl
vsim -do sim.tcl

再將后綴由.txt改為.bat,使用的時候雙擊這個bat文件即可。


————————————————
原文鏈接1:Vivado Tcl使用 —— 自定義命令設計

原文鏈接2:手把手教你用Tcl腳本進行Modelsim仿真

原文鏈接3:Modelsim——工程建立和常用設置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM