Инструкция по умолчанию в случае SystemVerilog

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

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

Заявление о ситуации с enum_t введите в случае выражения:

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 Ключевое слово здесь, чтобы помочь синтезу инструмент для оптимизации дизайна?

У меня нет особого опыта в синтезе. Поэтому я был бы признателен за любые отзывы. Спасибо!

3 ответа

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

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

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

Другие вопросы по тегам