SystemVerilog: как преобразовать двоичный вектор в целое число

У меня есть 8-битный вход A, а также 3-битный вход n. Я хочу сместить A n раз влево или вправо, но этот код не работает (вывод x):

w = A << n;

Но когда я ставлю целое число как 2 вместо n, код работает без проблем. Так как же преобразовать n в целочисленное значение, чтобы операция сдвига могла работать без проблем?

1 ответ

Операторы сдвига всегда обрабатывают выражение в RHS как беззнаковое. Вам также нужно объявить n как переменную со знаком или привести к

bit signed [2:0] n;
assign w = (n >= 0) ? A << n : A>> -n;
bit [2:0] n;
assign w = (signed'(n) >= 0) ? A << n : A >> -n;
Другие вопросы по тегам