SystemVerilog:byte型の代入メモ

こちらのブログにて、
SystemVerilog String Literal "Gotcha"

ぱっと見ると、意味がわからなったけど少し眺めてみると内容が理解できた。
つまり、byte型に対して、文字列(本来ありえないけど)を代入した場合に、どの部分が代入されるかということ。

番号 9 8 7 6 5 4 3 2 1 0
文字列 n o t a b y t e

SystemVerilogでは、番号0であるeが代入される。
ここで???って思ったのが、C/C++だと配列への代入が異なるから。

配列 0 1 2 3 4 5 6 7 8 9
文字列 n o t a b y t e
  • サンプルコード(C++)
#include <stdio.h>

int main(void) {
  char str[] = {"not a byte"};
  for(int i=0; i<10; i++) {
    printf("str[%d] = %c\n",i, str[i]);
  }
  return 0;
}
  • 出力結果
str[0] = n
str[1] = o
str[2] = t
str[3] =
str[4] = a
str[5] =
str[6] = b
str[7] = y
str[8] = t
str[9] = e

ってことはもしかしたら、シミュレータの内部では

bar = "not a byte";

は↓のような感じの代入になっているのかもしれませんね。

  char str[] = {"not a byte"};
  for(int i=0; i<10; i++) {
    bar = str[i];
  }