流操作符-sv
sv把一个bit[7:0] digest[32]变成一个bit[31:0] cdigest[8]在 SystemVerilog 中最简洁的写法是使用流操作符streaming operator直接将 unpacked 数组打包成另一个 unpacked 数组systemverilogbit [7:0] digest[32]; bit [31:0] cdigest[8]; cdigest {{digest}}; // 按原顺序流digest[0]作为高字节解释{{digest}}表示从第一个元素digest[0]的最高位开始依次取出所有位形成一个 256 位的位流。赋值给cdigest时位流按顺序填充cdigest[0]的最高位到最低位、cdigest[1]……因此cdigest[0]{digest[0], digest[1], digest[2], digest[3]}高位到低位cdigest[1]{digest[4], digest[5], digest[6], digest[7]}依此类推。这是大端序高位字节在前的拼接方式。若需小端序每4个字节内部反转即希望cdigest[0]{digest[3], digest[2], digest[1], digest[0]}可以使用字节反转的流操作systemverilogcdigest { byte {digest}}; // 按字节反转整个位流但这样会整体反转所有字节digest[31]到digest[0]导致cdigest[0]得到{digest[31], digest[30], digest[29], digest[28]}不符合分组要求。若仅希望每组内字节反转而组顺序不变则不能直接用一个流操作完成需改用循环或组合systemverilogforeach (cdigest[i]) cdigest[i] { byte {digest[4*i : 4]}};