哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

關(guān)于TCL的基礎(chǔ)知識淺析

電子工程師 ? 來源:CSDN技術(shù)社區(qū) ? 作者:空白MAX ? 2021-04-15 14:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是TCL?

TCL,Tool Command Language,是一種腳本語言,主流的EDA工具都支持TCL進行操作。TCL經(jīng)常被用于 快速原型開發(fā),腳本編程, GUI和測試等方面。

TCL學習

接下來以一個實際的tcl腳本為例,簡單介紹TCL的使用。這個腳本是用于modelsim/qusetasim仿真的腳本,mentor將tcl進行拓展,稱之為do文件,實際語法還是TCL。腳本來自鏈接:

# testbench name without .v , .vt , .vhd , .vht

set testbench_name conv

# simulation time ; ns/us/ms/min

set sim_time 1us

# auto add files when $auto_add_file==1; add file list when $auto_add_file==0

quietly set auto_add_file 1

# project path

set prj_path E:/conv_sim

# backup path

set bkp_path E:/conv_sim/backup

# monitor resolution ratio , for example : 1920 x 1080

quietly set m_width 1920

quietly set m_height 1080

if 0 {

my first program in Tcl program

Its very simple

}

首先,第一行,TCL采用#進行單行注釋,多行注釋使用判斷句注釋,就像末尾的if那樣。TCL是一種弱語言類型,不需要聲明類型,直接通過set聲明變量并進行賦值。字符串變量直接輸入即可,不需要額外的聲明。這里直接set的變量是全局變量。

proc new_prj {new_prj_name} {

global prj_path

set new_prj_path E:/conv_sim/$new_prj_name/

quit -sim

project close

if { [file exists $new_prj_path]==0 } {

file mkdir $new_prj_path

}

project new $new_prj_path $new_prj_name work

if { [file exists $new_prj_path/src]==0 } {

file mkdir $new_prj_path/src

}

file copy -force -- $prj_path/sim.do $new_prj_path

puts “create new project successfully!”

puts “current project path : ”

pwd

}

這里定義了一個用于創(chuàng)建工程的命令new_prj。

proc為procedure的縮寫,TCL使用proc聲明過程,用proc聲明后,過程就會成為腳本的一個命令,直接使用。對于在過程中定義的變量,因為它們只能在過程中被訪問,并且當過程退出時會被自動刪除,所以稱為局部變量;在所有過程之外定義的變量我們稱之為全局變量。TCL 中,局部變量和全局變量可以同名,兩者的作用域的交集為空:局部變量的作用域是它所在的過程的內(nèi)部;全局變量的作用域則不包括所有過程的內(nèi)部。如果我們想在過程內(nèi)部引用一個全局變量的值,可以使用 global 命令。這樣在new_prj中就能訪問到全局變量prj_path。

變量的引用通過$進行引用,會直接將表達式進行替換。

quit是qusetasim的命令,用于退出軟件,加上選項-sim將只退出仿真而不會關(guān)閉軟件。project close也是qusetasim的命令,用于關(guān)閉工程。

file exists path,判斷是否存在指定文件夾。file mkdir path,創(chuàng)建文件夾。file copy -force — source targetDir 復(fù)制文件到指定目錄,這個命令把 source 中指明的文件或目錄遞歸的拷貝到目的地址 targetDir,只有當存在-force選項時,已經(jīng)存在的文件才會被覆蓋。試圖覆蓋一個非空的目錄或以一個文件覆蓋一個目錄或以一個目錄覆蓋一個文件都會導(dǎo)致錯誤。

注意,-表示開關(guān)/選項,--表示這后面再沒有開關(guān)(switchs)了,即后面以’-‘開頭的參數(shù)將不作為 switch。

puts用于打印,和sv中的$display一個作用。

proc encrypt_src {} {

global prj_path

set encrypt_path $prj_path/encrypt_src/

file mkdir $encrypt_path

set paths {}

set paths [glob -nocomplain -directory $paths */]

lappend paths $prj_path

foreach one_path $paths {

set vfiles [glob -nocomplain -directory $one_path *.v *.vt *.sv]

foreach one_file $vfiles {

set one_file_path $prj_path

vencrypt [append one_file_path $one_file] -d $encrypt_path

}

}

puts “encrypt HDL design file(s) successfully!”

}

這里利用questasim的vencrypt將工程內(nèi)的文件全部進行加密。

set paths {}創(chuàng)建一個列表,列表是TCL中的一個數(shù)據(jù)類型。

glob和file是TCL提供的兩個進行文件名操作的命令,用來操作文件或獲取文件信息。glob 命令采用一種或多種模式作參數(shù),并返回匹配這個(些)模式的所有文件的列表,其語法為:glob switches pattern pattern 。-nocomplain是一個開關(guān),使用這個開關(guān)允許glob返回空列表,不開啟的話,如果結(jié)果是空,則會返回錯誤。-directory,用于指定目錄,讓glob在這個目錄下進行匹配。pattern代表正則匹配的模式,匹配成功的文件名將添加進返回的列表。

lappend在一個列表后添加一個元素。

foreach遍歷整個列表的元素,中間變量為one_path。

vencrypt是questasim的命令,用于將文件進行加密,加密后的文件可以被questasim識別編譯,但是無法閱讀。比如下面的代碼的后半段就是前半段進行加密后的內(nèi)容。-d用于指定加密后的文件生成加密文件的存放位置。

module relu_core (

input clk, //clk

input rst_n, //reset

input [255:0] pooling_in,

input relu_bypass,

output [255:0] relu_out //output of pooling

);

wire [255:0] relu_result;

genvar i;

generate

for(i=0; i《32; i=i+1) begin

assign relu_result[i*8+7:8*i] = pooling_in[i*8+7] ? 8‘h00 : pooling_in[i*8+:8];

end

endgenerate

assign relu_out = relu_bypass ? pooling_in : relu_result;

endmodule

`pragma protect begin_protected

`pragma protect version = 1

`pragma protect encrypt_agent = “QuestaSim” , encrypt_agent_info = “10.6c”

`pragma protect key_keyowner = “Mentor Graphics Corporation” , key_keyname = “MGC-VERIF-SIM-RSA-2”

`pragma protect key_method = “rsa”

`pragma protect encoding = ( enctype = “base64” , line_length = 64 , bytes = 256 )

`pragma protect key_block

NROTnsk8pETOxl4QiAgkLU/279V7O329exd+zzLCVEaVhofiC+ppJtC4dQapAZkK

4CZaxp/gcINr0jlEzm2pBtmqhJ5Kd71mtMNPuUCpphC+J/VJ0JNsOVsVnG6dGztB

+2p8OzoWDWF4F+yAF7L6O7Vksq5afDXEwJDlkIfxzxg3PfwWjDbssR5lq731UMSE

a9cfMZZxe8OO7itVsCz/zAK+WKSZvpAlArpT2mHg76CMXN5ybxCzwXtjeAZf0piM

61waCYBncD+dloA+5uhHJxOj10CAE7jsF8rgi3bfMG/XqmneMRzL8ODqaLtolytR

h2xcuR63Zyi3tgTOeUvXSg==

`pragma protect data_method = “aes128-cbc”

`pragma protect encoding = ( enctype = “base64” , line_length = 64 , bytes = 528 )

`pragma protect data_block

8v6OffgbV/rkWBfwQvGwkfKmdYvvLkohFDLb+Qy+qVnoZgIFOFAFomkEaZ5b32l7

Qmw1d80d+hxDgn4XFA3qbNpn80H3EDx8+HhZL8GeoZw1Wkp4dlFpUcQLEJ3tNh4d

j314qMHeKj8Uu/4928YoJVMzojlFbn+vWh0ZTyzs5jLJa+EspgVZCSIvlPY9WYOQ

1HmF3kaj/0rJ35hmJXvy+ZMshKS031slUm/7jSxVj0kzdrNLGNYdgKIOvKTTu9vT

lYCjfkZSbLEGAXKWFlWSGCfqgb4sGc6uB0j+oKpE2yVOrMJaQ4rqHg0ykJiwn1fM

MwByU4SVRJK024OPjQXEL4aSQHgi0gvw30Ihxvcr4Do15HVZCBn43R6SVNvQNa0s

Nj6PLcT3jYPk9HZs0ZiykRR+LMLLlfFD9NFaN1s1PNZugAywB9TmYh8Vq1CY5w0Y

GxucPCAqYDn+jet1wFh3Rk/ybjj8ageR/4W+U0eKXF+Uu7YWfUApRkGH75Ru3yE/

f9JiC/xdmH6As5aWGzvNZk2g2BLzamLp7d4tmCQbizQSby38hKW8VOJmOzEQPWHg

UxKcN/VZzW6yPVrJxPRHRIb/qarIrx75IdFRZjYrCI9FFchJ3TASPSviufKyAWOj

jWIkYe8Z9yQ5fTMZwe7NhT27PfRe46HR9YuMP9lCCGcYplKVbG5xFwX6bRdqAqwK

`pragma protect end_protected

proc create_file_list {} {

global prj_path

set prj_files [project filenames]

set paths {}

set paths [glob -nocomplain -directory $paths */]

lappend paths $prj_path

set fd [open $prj_path/hdl_design_file_list.tcl w+]

foreach one_path $paths {

set vfiles [glob -nocomplain -directory $one_path *.v *.vt *.vhd *.vht]

foreach one_file $vfiles {

set exists_num 0

set one_file_path {}

append one_file_path $prj_path

append one_file_path $one_file

foreach one_prj_file $prj_files {

if {$one_file_path == $one_prj_file} {

incr exists_num

}

}

if {$exists_num == 0} {

puts -nonewline $fd “# ”

}

puts $fd $one_file_path

}

}

close $fd

puts “create file list successfully!”

}

這里定義了一個創(chuàng)建文件列表的過程。

set fd [open $prj_path/hdl_design_file_list.tcl w+],open命令以特定模式打開文件,返回一個文件標識符。這與c語言類似,w+ 讀寫方式打開文件,如文件存在則清空文件內(nèi)容,否則創(chuàng)建新的空文件。puts -nonewline $fd ”# “,向fd中寫入內(nèi)容,不開啟-nonewline則會在末尾添加換行符。close關(guān)閉文件。

proc add_file {} {

global prj_path auto_add_file

set add_count 0

set del_count 0

set prj_files [project filenames]

if {$auto_add_file == 1} {

set paths [glob -nocomplain -directory $prj_path */]

lappend paths $prj_path

foreach one_path $paths {

set vfiles [glob -nocomplain -directory $one_path *.v *.vt *.vhd *.vht]

foreach one_file $vfiles {

set exists_num 0

foreach one_prj_file $prj_files {

if {$one_file == $one_prj_file} {

incr exists_num

}

}

if {$exists_num == 0} {

project addfile $one_file

incr add_count

}

}

}

} elseif {$auto_add_file == 0} {

if {[file exists $prj_path/hdl_design_file_list.tcl] == 0 ||

[file size $prj_path/hdl_design_file_list.tcl] 《= 1} {

create_file_list

}

set fd [open $prj_path/hdl_design_file_list.tcl r]

set old_content [read -nonewline $fd]

close $fd

regsub -all “ ” $old_content {} new_content

regsub -all + $new_content {} new_content

foreach one_file [split $new_content

] {

if {[regexp ^# $one_file] == 0 && $one_file != “

”} {

set exists_num 0

foreach one_prj_file $prj_files {

if {$one_file == $one_prj_file} {

incr exists_num

}

}

if {$exists_num == 0} {

project addfile $one_file

incr add_count

}

} elseif {[regexp ^# $one_file] == 1 && $one_file != “

”} {

set one_file [string trim $one_file “#”]

foreach one_prj_file $prj_files {

if { $one_file == $one_prj_file} {

project removefile $one_file

incr del_count

}

}

}

}

}

puts -nonewline “add ”

puts -nonewline $add_count

puts “ file(s) successfully!”

puts -nonewline “remove ”

puts -nonewline $del_count

puts “ file(s) successfully!”

}

創(chuàng)建了添加源文件的過程。

project filenames是questasim的命令,返回當前工程的文件列表。

regsub -all “ “ $old_content {} new_content,-all 沒有這個開關(guān)時,regsub只替換第一個匹配,有了這個開關(guān),regsub將把所有匹配的地方全部替換。第二項為正則匹配表達式,第三項為目標字符串,第四項為替換內(nèi)容。regsub通過第二項進行匹配,將第三項中匹配的目標,替換為第四項,存到第五項中。

proc wave_style_set {} {

global testbench_name default_color

foreach sig [find signals $testbench_name/*] {

switch -regexp -nocase -- $sig {

/*/*rst+ {add wave -radix binary -color [lindex $default_color 0] $sig}

/*/*clk+ {add wave -radix binary -color [lindex $default_color 1] $sig}

/*/*en+ {add wave -radix binary -color [lindex $default_color 2] $sig}

/*/*cnt+ {add wave -radix decimal -color [lindex $default_color 3] $sig}

/*/*data+ {add wave -radix hex -color [lindex $default_color 4] $sig}

/*/*flag+ {add wave -radix binary -color [lindex $default_color 5] $sig}

default {add wave -radix hex -color [lindex $default_color 6] $sig}

}

}

}

創(chuàng)建了一個修改波形格式的過程。

switch -regexp -nocase — $sig ,和c語言的switch一樣。TCL 支持三種匹配方式:-exact 方式, -glob方式, -regexp 方式,缺省情況表示-glob 方式。-exact 方式表示的是精確匹配, -glob 方式的匹配方式和 string match命令的匹配方式相同, -regexp 方式是正則表達式的匹配方式。-nocase是regexp的匹配選項,是大寫字母也被當作小寫來處理,相當于不區(qū)分大小寫字符。最后一個變量就是被用來作測試的值 。每行的開頭,比如/*/*rst+ ,用這個正則匹配進行選擇。

lindex $default_color 0引用列表default_color 的第0項。

alias ne “new_prj”

alias es “encrypt_src”

alias af “add_file”

alias br “backup_prj”

alias cf “create_file_list”

alias cc “compile_changed”

alias cr “.main clear”

alias rr “run”

alias ra “run_all”

alias sw “save_wave”

alias aw “l(fā)oad_wave”

alias wr “write_report”

alias df “display_info”

alias dh “do_help”

為過程創(chuàng)建別名。通過別名也能夠調(diào)用過程

8311e0a8-9dac-11eb-8b86-12bb97331649.gif

編輯:lyn

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

    關(guān)注

    11

    文章

    1815

    瀏覽量

    91809

原文標題:TCL簡單教程

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    關(guān)于磁芯損耗的基礎(chǔ)知識

    磁芯損耗是磁芯材料內(nèi)交替磁場引致的結(jié)果。某一種材料所產(chǎn)生的損耗,是操作頻率與總磁通擺幅(ΔB)的函數(shù)。
    的頭像 發(fā)表于 03-27 16:43 ?880次閱讀
    <b class='flag-5'>關(guān)于</b>磁芯損耗的<b class='flag-5'>基礎(chǔ)知識</b>

    labview編程及基礎(chǔ)知識分享

    最近建了一個公眾號,本人會在上面進行l(wèi)abview編程知識的分享,歡迎大家關(guān)注;公眾號叫:上位機知識分享LABVIEW
    發(fā)表于 02-13 10:08

    阻燃系列基礎(chǔ)知識

    我很榮幸有機會在這里與大家分享我對阻燃系列基礎(chǔ)知識的研究。今天,我們將探討的主題是“阻燃系列基礎(chǔ)知識”。在我們?nèi)粘I钪校馂?zāi)事故頻發(fā),造成巨大的財產(chǎn)損失和人員傷亡。因此,了解阻燃材料的基礎(chǔ)知識對于
    的頭像 發(fā)表于 02-06 08:07 ?596次閱讀
    阻燃系列<b class='flag-5'>基礎(chǔ)知識</b>

    TCL牽手索尼,承接索尼家庭娛樂業(yè)務(wù)#索尼#Sony#TCL#電視

    TCL
    jf_15747056
    發(fā)布于 :2026年01月22日 10:51:27

    嵌入式基礎(chǔ)知識-系統(tǒng)調(diào)度

    恢復(fù)任務(wù)的優(yōu)先級高于正在運行任務(wù)的優(yōu)先級,則會發(fā)生任務(wù)切換,將該任務(wù)將再次轉(zhuǎn)換任務(wù)狀態(tài),由就緒態(tài)變成運行態(tài)。 5、總結(jié) 本篇介紹了系統(tǒng)調(diào)度的基礎(chǔ)知識,包括進程的三種基本狀態(tài),進程切換,AUTOSAR與RTOS的任務(wù)切換基礎(chǔ)知識
    發(fā)表于 12-16 08:15

    無刷電機驅(qū)動器的基礎(chǔ)知識

    本文將從技術(shù)角度出發(fā),對三相無刷電機的電機驅(qū)動器的作用、種類和規(guī)格進行介紹。通過本文,您可以學習到電機驅(qū)動器選型所需的基礎(chǔ)知識。
    的頭像 發(fā)表于 12-10 14:13 ?6905次閱讀
    無刷電機驅(qū)動器的<b class='flag-5'>基礎(chǔ)知識</b>

    關(guān)于“AI(人工智能)芯片”基礎(chǔ)知識的詳解;

    【博主簡介】本人“愛在七夕時”,系一名半導(dǎo)體行業(yè)質(zhì)量管理從業(yè)者,旨在業(yè)余時間不定期的分享半導(dǎo)體行業(yè)中的:產(chǎn)品質(zhì)量、失效分析、可靠性分析和產(chǎn)品基礎(chǔ)應(yīng)用等相關(guān)知識。常言:真知不問出處,所分享的內(nèi)容
    的頭像 發(fā)表于 12-05 08:31 ?861次閱讀
    <b class='flag-5'>關(guān)于</b>“AI(人工智能)芯片”<b class='flag-5'>基礎(chǔ)知識</b>的詳解;

    Linux驅(qū)動開發(fā)的必備知識

    內(nèi)核基礎(chǔ)知識: 1、熟悉 Linux 內(nèi)核的架構(gòu)、模塊系統(tǒng)、進程管理、內(nèi)存管理等。 了解內(nèi)核的編譯和加載過程。 2、C編程技能: 精通 C 語言編程,包括指針操作、內(nèi)存管理、結(jié)構(gòu)體等
    發(fā)表于 12-04 07:58

    RK?平臺?Vendor Storage?開發(fā)指南:基礎(chǔ)知識、流程與實用技巧

    備可靠性校驗、掉電恢復(fù)等關(guān)鍵特性,是保障設(shè)備身份標識、功能授權(quán)等核心信息安全的重要組件。本文將從基礎(chǔ)知識、開發(fā)流程、使用途徑三方面,為開發(fā)者梳理完整的開發(fā)邏輯。 一、核心基礎(chǔ)知識:了解?Vendor Storage?是什么? 1.?核心定位與核心特性 Vendor Sto
    的頭像 發(fā)表于 11-22 07:11 ?1168次閱讀
    RK?平臺?Vendor Storage?開發(fā)指南:<b class='flag-5'>基礎(chǔ)知識</b>、流程與實用技巧

    視覺工程師必須知道的工業(yè)相機基礎(chǔ)知識

    工業(yè)相機基礎(chǔ)知識概述。
    的頭像 發(fā)表于 09-19 17:04 ?1694次閱讀
    視覺工程師必須知道的工業(yè)相機<b class='flag-5'>基礎(chǔ)知識</b>

    同步電機失步淺析

    純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:同步電機失步淺析.pdf【免責聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請第一時間告知,刪除內(nèi)容!
    發(fā)表于 06-20 17:42

    工業(yè)化超聲波清洗設(shè)備的基礎(chǔ)知識:原理、優(yōu)勢與應(yīng)用

    工業(yè)化超聲波清洗設(shè)備的基礎(chǔ)知識:原理、優(yōu)勢與應(yīng)用工業(yè)化超聲波清洗設(shè)備在現(xiàn)代制造業(yè)中扮演著重要的角色,它們利用超聲波技術(shù)來進行高效的零件和產(chǎn)品清潔。本文將深入探討這些設(shè)備的基本原理、它們的優(yōu)勢以及廣泛
    的頭像 發(fā)表于 06-10 15:55 ?1015次閱讀
    工業(yè)化超聲波清洗設(shè)備的<b class='flag-5'>基礎(chǔ)知識</b>:原理、優(yōu)勢與應(yīng)用

    CMOS超大規(guī)模集成電路制造工藝流程的基礎(chǔ)知識

    本節(jié)將介紹 CMOS 超大規(guī)模集成電路制造工藝流程的基礎(chǔ)知識,重點將放在工藝流程的概要和不同工藝步驟對器件及電路性能的影響上。
    的頭像 發(fā)表于 06-04 15:01 ?3010次閱讀
    CMOS超大規(guī)模集成電路制造工藝流程的<b class='flag-5'>基礎(chǔ)知識</b>

    漫畫圖解 電感器 抗干擾元器件指南(全彩PDF版)

    漫畫圖解電感基礎(chǔ)知識(高清PDF) 內(nèi)容:很形象的漫畫和語言圖解關(guān)于電感器的入門基礎(chǔ)知識,讓電子初學者也能輕松的看懂電子電路。 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點贊、評論支持一下
    發(fā)表于 05-13 15:49

    電源完整性基礎(chǔ)知識

    的關(guān)系: 所以,基礎(chǔ)知識系列里還是得講講電源完整性。話不多說,直接上圖:、 01區(qū)別 記得剛接觸信號完整性的時候,對電源完整性(PI)和電源工程師之間的關(guān)系是分不清的。后來才漸漸了解這里面的千差萬別
    發(fā)表于 05-13 14:41
    崇礼县| 土默特右旗| 茂名市| 夏河县| 宁晋县| 庄浪县| 鹤山市| 清流县| 柏乡县| 南岸区| 太和县| 阿拉尔市| 民乐县| 龙山县| 太湖县| 泽州县| 江北区| 乐清市| 石泉县| 江山市| 泽普县| 宝应县| 纳雍县| 卓资县| 株洲市| 特克斯县| 汝城县| 台东市| 宁国市| 曲麻莱县| 大余县| 三台县| 墨玉县| 四子王旗| 三门峡市| 台南市| 乌兰浩特市| 苍溪县| 裕民县| 高尔夫| 永和县|