2014-04-12 26 views

回答

3

對於一個完整的說明,請參閱IEEE Std 1800-2012 § 11.4.14 流操作符(/去分組)

slice_size確定每個塊的大小,以位爲單位。如果未指定 slice_size,則缺省值爲1.如果指定,它可以是常量積分表達式或簡單類型。如果使用類型,塊大小應該是該類型中的位數。如果使用常量積分表達式,則表達式的值應該是零或負的錯誤。

stream_operator<<>>確定在其中的數據塊被流的順序:>>導致的數據塊中要被流左到右的順序,而<<導致數據的塊中的從右到被流 - 左邊的訂單。使用>>從左到右流式傳輸將導致 slice_size被忽略,並且不執行重新排序。使用<<從右到左流式傳輸應顛倒流中的塊順序,保留每個塊內的位順序。對於使用<<的從右到左流式傳輸,流將被劃分爲具有指定位數的塊,從最右邊的位開始。如果作爲最後(最左邊)塊的切片結果具有比塊大小更少的位,則最後的塊具有剩餘位的大小;沒有填充或截斷。

在你的情況{>>byte{24'h060708}創建流{8'h06, 8'h07, 8'h08}byteq'()正在將流轉換爲字節,但由於流已匹配正確的大小,因此不必要。 ans = {>>byte{24'h060708}};將有相同的結果。如果您將 stream_operator更改爲<<,則該流將爲{8'h08, 8'h07, 8'h06}

4

>>運算符在此上下文中不是邏輯移位,但它被稱爲流運算符。

流運營商確定,其中數據塊被流的順序:>>使塊中的數據 到在左到右的順序進行流式傳輸,而< <導致數據的塊中從右到流傳輸左命令。

考慮例如下列行:

$display ("%h", {>>byte{24'h060708}}); 
$display ("%h", {<<byte{24'h060708}}); 

在兩者中,數24'h060708應首先切成字節(稱爲slice_size)。第一個從左到右打印字節,而第二個從右到左打印它們。爲此,輸出爲:

060708 
080706 

現在,在線路ans = byteq'({>>byte{24'h060708}});您使用的比特流鑄,其投射在24'h060708表示的字節切片數從左至右進byteq,這是字節的隊列。