Оператор по умолчанию в SystemVerilog Case

Я пытаюсь понять следующий сценарий:

typedef enum logic [2:0] {
   ONE, TWO, THREE, FOUR, FIVE
} enum_t;

Оператор case с типом enum_t в выражении case:

enum_t case_expression;
logic [2:0] result;

case (case_expression)
   ONE: result = 3'b000;
   TWO: result = 3'b001;
   THREE: result = 3'b010;
   FOUR: result = 3'b011;
   FIVE: result = 3'b100;
endcase

Я не уверен в следующем:

  • Можно ли не использовать инструкцию default case для result? case_expression - это enum только с 5 действительными значениями. Однако это 3 бита. Так как же инструмент синтеза оценит эту логику? Будет ли выводиться защелка?
  • Все предметы в кейсе исключают друг друга. Могу ли я использовать ключевое слово unique здесь, чтобы помочь инструменту синтеза оптимизировать дизайн?

У меня не так много опыта в синтезе. Так что я буду признателен за любые отзывы. Спасибо!


person newbie    schedule 28.04.2017    source источник
comment
Поскольку вы используете systemverilog, вы можете поместить оператор case внутри always_comb. Это гарантирует, что инструмент синтеза будет выводить комбинационную логику, а не защелку.   -  person nav    schedule 02.05.2017


Ответы (3)


Это зависит от того, насколько строго типизирован ваш инструмент синтеза. К сожалению, есть несколько способов, которыми ваше case_expression могло иметь значение 3'b111 (из-за приведения типов и плохой проверки ошибок в некоторых инструментах моделирования). Так что лучше всего в целях безопасности поставить значение по умолчанию.

person dave_59    schedule 28.04.2017
comment
Можно, но unique здесь не помогает. Невозможно, чтобы ваше выражение case могло соответствовать нескольким элементам case. - person dave_59; 29.04.2017

Если case_expression принимает значение x, оператор case не сможет определить, какой регистр вводить. Если указать регистр по умолчанию, он плавно перейдет в регистр по умолчанию. Вы увидите ошибку времени выполнения, если case_expression принимает значение x, если значение по умолчанию не указано.

person Ravi m r    schedule 08.01.2021

Я считаю, что уникальный случай - это указание на инструмент синтеза, в котором перечислены все случаи. Это предотвратит защелку. Если при моделировании ни одно из значений ENUM не находится в выражении case, то во время моделирования будет сообщено об ошибке выполнения.

person SSalvi    schedule 15.03.2021