systemverilog - как работает несколько операторов приращения в одном выражении - PullRequest
0 голосов
/ 01 июня 2018

Произойдет ли приращение слева направо или справа налево в следующем случае:

desc.src_addr = {rdata[i++],rdata[i++],rdata[i++],rdata[i++],rdata[i++],rdata[i++],rdata[i++],rdata[i++]};

Предполагая i = 0 в начале вышеприведенного оператора, будет ли конечное разрешение, какое из двух ниже:

desc.src_addr = {rdata[0],rdata[1],rdata[2],rdata[3],rdata[4],rdata[5],rdata[6],rdata[7]};
desc.src_addr = {rdata[7],rdata[6],rdata[5],rdata[4],rdata[3],rdata[2],rdata[1],rdata[0]};

Есть ли что-то в LRM, что говорит об этом?

Очевидно, моя цель - избежать жесткого кодирования индексов в приведенном выше утверждении, чтобы избежать опечаток и проблем с надзором.

1 Ответ

0 голосов
/ 01 июня 2018

Да, было бы хорошо узнать, что говорит SystemVerilog LRM при написании кода SystemVerilog.У вас есть копия ?Смотрите section 11.4.2 Операторы увеличения и уменьшения и ищите слово undefined .

Гораздо лучший способ написания этого кода - использование оператора потоковой передачи, раздел 11.4.14 Операторы потоковой передачи (упаковка / распаковка)

desc.src_addr = {<<{rdata}}; //reverses bit order
...