簡體   English   中英

SystemVerilog Verilog中的非數組移位運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM