Kal*_*icz 0 verilog system-verilog
我在SystemVerilog sim中遇到了这一行,我已经google了一下,但我不确定它在做什么:
data_w = { >> 32 { { >> { data } } } };
Run Code Online (Sandbox Code Playgroud)
任何澄清将非常感谢!谢谢!
它被称为流媒体.它存在于SystemVerilog中; 不是Verilog.有关完整说明,请参阅IEEE Std1800-2012§11.4.14 流媒体运营商(打包/解包)
所述slice_size确定每个块的大小,以位为单位.如果未指定slice_size,则默认值为1.如果指定,则它可以是常量整型表达式或简单类型.如果使用类型,则块大小应为该类型中的位数.如果使用常量积分表达式,则表达式的值为零或负数时应该是一个错误.
所述stream_operator<<
或>>
确定在其中的数据块被流的顺序:>>
使数据块在左到右的顺序进行流,而<<
数据的原因块中从右到左的顺序进行流式传输.从左到右的流式传输>>
将导致slice_size被忽略,没有重新排序.从右到左的流式传输<<
应该反转流中块的顺序,保留每个块内的比特顺序.对于从右到左的流使用<<
,流被切成具有指定位数的块,从最右边的位开始.如果作为切片的结果,最后一个(最左边)的块具有比块大小更少的位,则最后一个块具有剩余位的大小; 没有填充或截断.
例如形成IEEE标准1800至2012年 §11.4.14.2 通用流的重新排序
Run Code Online (Sandbox Code Playgroud)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
归档时间: |
|
查看次数: |
316 次 |
最近记录: |