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)
在这种情况下,>>运算符不是逻辑移位,但称为流运算符。
流运算符确定数据块的传输顺序:>>导致数据块按从左到右的顺序流式传输,而<<导致数据块按从右到左的顺序流式传输。
例如,考虑以下几行:
$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(字节队列)。
| 归档时间: |
|
| 查看次数: |
7334 次 |
| 最近记录: |