Verilog: Как определить диапазон значений как одно условие в выражении case? - PullRequest
2 голосов
/ 24 мая 2019

Я хочу описать большой мультиплексор с более чем 200 случаями, и каждый случай содержит десятки значений. Некоторые примеры случаев:

9000 - 9029 : addr <= 0;
9030 - 9065 : addr <= 1;
9066 - 9131 : addr <= 2;
...

Есть ли способ описать это так же, как VHDL

when 9000  to 9027  => addr_int <= 0;

или SystemVerilog's case(value) inside?

Я не смог найти ничего подобного, только решения разделяют отдельные значения запятыми или используют 'casez' с '?' и то, и другое вне вопроса - весь диапазон составляет 7000 значений, а диапазоны не являются регулярными.

Я довольно новичок в verilog, и любая помощь будет оценена.

1 Ответ

1 голос
/ 24 мая 2019

Вы не можете сделать это в Verilog, используя оператор case. Вместо этого вам придется использовать последовательность if ... else операторов.

if ((value >=9000) && (value<=9029))
  addr <= 0;
else if ((value >=9030) && (value<=9065))
  addr <= 0;
else if ((value >=9066) && (value<=9131))
  addr <= 0;
else ...

Оператор case в Verilog в основном совпадает с последовательностью операторов if ... else в любом случае.

...