2012-01-26 65 views
2

假設我們有一個變量'a',最後應該代表一個4位的值,例如。 a =「0011」。從VHDL實例中讀取進入該變量的單個位。TCL:連接變量中的輸出位

讓我們假設VHDL輸出的第一位是1,例如, result_from_VHDL_instance = 1 後來我這個最顯著位存儲在我的變量:

set a [BUS2INT result_from_VHDL_instance]; # a = 1 

現在我該怎樣來串聯這個變量的其餘位。假定VHDL輸出的第二位再次是1,例如1。 result_from_VHDL_instance = 1。我想將此位連接到已存儲在a中的位,例如a = 11。

因此,這繼續下一步,例如。 result_from_VHDL_instance = 0時, 的值應該是110等

編輯:

謝謝您的回答,到目前爲止,但我想我在這裏有一個更爲基本的問題。第一個問題是TCL中是否存在這樣的二進制表示的數據類型,例如。即a = 1011.如果不是,那麼我要麼將變量表示爲字符串或整數,對此有何建議?

+0

對於錯誤走開剛落第二$您的命令。但不清楚你真正想做什麼。 – schlenk

+0

是的錯誤消失了,但我沒有得到理想的結果。我編輯了我的帖子,希望它現在更有意義 – Patrick

+0

@Patrick,kostix在他的回覆中給出了更新問題的答案。 – TrojanName

回答

2

我覺得你只是想:

append a [BUS2INT result_from_VHDL_instance] 
+0

鑑於後面的問題編輯,我認爲kostix的答案更合適。 –

0

或者,你可能只是做:

set a "${a}[BUS2INT result_from_VHDL_instance]" 
3

我只想用一個字符串,添加字符0和1,然後,當該變量已收集所有輸入,將其轉換爲實數整數,使用binary formatb*說明符,如下所示:

set val "" 
append val 0 
append val 1 
... 
append val 1 
... 
set int [binary format b* $val] 
# or, in case the digit characters were pushed from the opposite end 
set int [binary format b* [string reverse $val]] 

您還可以expr玩遊戲:

set val 0 
set val [expr {($val << 1) | 0x00}] 
... 
set val [expr {($val << 1) | 0x01}] 
...