[SV] 流操作 - bulaqi/IC-DV.github.io GitHub Wiki

基础概念

  • SV中,流操作符>>和<<用在赋值表达式的右边,后面带表达式、结构或数组。
  • 流操作符用于把其后的数据打包成一个比特流。
  • 操作符>>把数据从左至右变成流,而<<则把数据从右至左变成流。
  • 你也可以制定一个片段宽度,把源数据按照这个宽度分段以后再转变成流。
  • 不能将比特流结果直接赋给非合并数据,而应该在赋值表达式的左边使用流操作符把比特流拆分到非合并数组中。如下面代码所示

示例

initial begin
	int h;
	bit [7:0] b, g[4], j[4] = '{8'ha, 8'hb, 8'hc, 8'hd};
	bit [7:0] q, r, s, t;

	h = {>>{j}};							//0a0b0c0d  把数组打包成整型。 左右值按照长度自动转换
	h = {<<{j}};							//b030d050 位倒序,注意是8'hd= 8'b1101,倒序后为1011,为b
	h = {<<byte{j}};						//0d0c0b0a 字节倒序,byte表示字节倒序,否则是bit倒序
	g = {<<byte{j}};						//0d,0c,0b,0a拆分成数组
	b = {<<{8'b0011_0101}};						//1010_1100位倒序。 注意8在括号外,与第二条类似
	b = {<<4{8'b0011_0101}}						//0101_0011半字节倒序,与第四五条类似,4在大括号外,表示4bit倒序
	{>>{q, r, s, t}} = j;						//把j分散到四个字节变量
	h = {>>{t, s, r, q}};						//把字节集中到h
end

解释说明

⚠️ **GitHub.com Fallback** ⚠️