1.字符串變量的長度是字符串中字符的個數。
2.字符串類型的變量是動態的,因為他們的長度在仿真的過程中可能發生變化。
3.通過對字符串變量的索引,可以對字符串中的單個字符讀或寫。
4.字符串的行為類似於長度為8bits倍數的packed arrays.
5.賦給不同大小的整型變量的packed arrays的字符串要么被截斷為變量的大小,要么在必要時在左邊用0填充。
6.字符串數據類型的變量可以是任意長度。
7.當將字符串賦給字符串類型或在字符串類型操作數的表達式中使用時,字符串字面值會隱式轉換為字符串類型。
8.字符串變量的索引應該從0到N-1(其中N是字符串的長度)編號,因此索引0對應於字符串的第一個(最左邊)字符,索引N-1對應於最后一個字符(最右邊)字符串的字符。9.字符串變量可以采用特殊值"",即空字符串。索引一個空字符串變量應該是越界訪問。
10.字符串變量不能包含特殊字符"\0"。將值0賦給一個字符串字符將被忽略。
11.字符串類型變量的聲明:string variable_name [= initial_value];
parameter string default_name = "John Smith";
string myName = default_name;
12.如果沒有對字符串變量賦初始值,變量自動初始化為“”,空字符串。一個空字符串的長度為零。
13.一個字符串可以賦值給字符串類型的變量或整型數據類型。
14.當賦值給一個整型數據類型的一個變量時,如果數據對象的的bit數不等於字符串中的字符數乘以8的倍數時,字符串是右對齊,左邊的截斷或左邊添0。
byte c = "A"; // assigns to c "A"
bit [10:0] b = "\x41"; // assigns to b 'b000_0100_0001
bit [1:4][7:0] h = "hello" ; // assigns to "hello"
15.賦給字符串變量的字符串按照以下步驟進行轉換:
*字符串字面值中的所有“\0”字符將被忽略(即從字符串中刪除)。
*如果第一步的結果是空字符串字面量,則該字符串被賦值為空字符串。
*該字符串將被賦值為字符串字面量中的剩余字符。
16.整型值可以賦給字符串變量,但需要進行類型轉換cast。
將整型值轉換為字符串變量的步驟如下:
*如果整數值的大小(以位為單位)不是8的倍數,則該整數值將繼續擴展並填充為0,直到其位大小為8的倍數。然后,擴展的值被視為一個字符串字面值,其中每個連續的8位表示一個字符。
*然后將前面描述的字符串轉換步驟應用於擴展值。
string s0 = "String literal assign";// sets s0 to "String literal assign"
string s1 = "hello\0world"; // sets s1 to "helloworld"
bit [11:0] b = 12'ha41;
string s2 = string'(b); // sets s2 to 16'h0a41 //string=bit
typedef logic [15:0] r_t;
r_t r;
integer i = 1;
string b = "";
string a = {"Hi", b};
r = r_t'(a); // OK
b = string'(r); // OK //string=logic
b = "Hi"; // OK
b = {5{"Hi"}}; // OK
a = {i{"Hi"}}; // OK (non-constant replication)
r = {i{"Hi"}}; // invalid (non-constant replication)
a = {i{b}}; // OK
a = {a,b}; // OK
a = {"Hi",b}; // OK
r = {"H",""}; // yields "H\0". "" is converted to 8'b0
b = {"H",""}; // yields "H". "" is the empty string
a[0] = "h"; // OK, same as a[0] = "cough"
a[0] = b; // invalid, requires a cast
a[1] = "\0"; // ignored, a is unchanged