请解释此SystemVerilog语法{>> byte {...}}

mit*_*050 3 verilog bit-shift system-verilog

以下程序的答案是{6,7,8},但我不明白为什么,请解释一下:

module q ();
  typedef byte byteq[$];
  initial begin
    byte ans[$];

    ans = byteq'({>>byte{24'h060708}});
    $display("A:expect '{6,7,8} get %p", ans);
  end
endmodule
Run Code Online (Sandbox Code Playgroud)

Ari*_*Ari 6

在这种情况下,>>运算符不是逻辑移位,但称为流运算符。

流运算符确定数据块的传输顺序:>>导致数据块按从左到右的顺序流式传输,而<<导致数据块按从右到左的顺序流式传输。

例如,考虑以下几行:

$display ("%h",  {>>byte{24'h060708}} );
$display ("%h",  {<<byte{24'h060708}} );
Run Code Online (Sandbox Code Playgroud)

两者都应首先将数字24'h060708切成字节(称为slice_size)。第一个从左到右打印字节,而第二个从右到左打印字节。因此,输出为:

060708
080706
Run Code Online (Sandbox Code Playgroud)

现在,在行中,ans = byteq'({>>byte{24'h060708}});您正在使用位流转换,该转换24'h060708将从左到右表示的字节切片的数字转换为byteq(字节队列)。