[英]Unarray shift operator in SystemVerilog Verilog?
我在SystemVerilog sim卡中遇到了這一行,我在Google上搜索了一下,但是不知道它在做什么:
data_w = { >> 32 { { >> { data } } } };
任何澄清將不勝感激! 謝謝!
這稱為流式傳輸。 它存在於SystemVerilog中。 不是Verilog。 有關完整說明,請參閱IEEE Std 1800-2012§11.4.14 流運算符(打包/解包)
determines the size of each block, measured in bits. 確定每個塊的大小,以位為單位。 is not specified, the default is 1. If specified, it may be a constant integral expression or a simple type. 如果未指定 ,則默認值為1。如果已指定,則它可以是常量整數表達式或簡單類型。 如果使用一種類型,則塊大小應為該類型的位數。 如果使用常量整數表達式,則表達式的值為零或負數將是一個錯誤。
<<
or>>
determines the order in which blocks of data are streamed:>>
causes blocks of data to be streamed in left-to-right order, while<<
causes blocks of data to be streamed in right-to-left order.<<
或>>
確定流數據塊的順序:>>
使數據塊以從左到右的順序流式傳輸,而<<
使數據塊以從右到右的順序流式傳輸。左訂單。 to be ignored and no re-ordering performed. 使用>>
的從左到右流將導致被忽略並且不執行任何重新排序。 使用<<
從右到左流式傳輸應逆轉流中各塊的順序,並保留每個塊內的比特順序。 對於使用<<
從右到左的流,將流切成具有指定位數的塊(從最右邊的位開始)。 如果切片的結果是,最后一個(最左邊的)塊的位數少於該塊的大小,則最后一個塊的剩余位數為該塊的大小; 沒有填充或截斷。
來自IEEE Std 1800-2012§11.4.14.2的示例通用流的重新排序
int j = { "A", "B", "C", "D" }; { >> {j}} // generates stream "A" "B" "C" "D" { << byte {j}} // generates stream "D" "C" "B" "A" (little endian) { << 16 {j}} // generates stream "C" "D" "A" "B" { << { 8'b0011_0101 }} // generates stream 'b1010_1100 (bit reverse) { << 4 { 6'b11_0101 }} // generates stream 'b0101_11 { >> 4 { 6'b11_0101 }} // generates stream 'b1101_01 (same) { << 2 { { << { 4'b1101 }} }} // generates stream 'b1110
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.