Использование care-in в перечислении typedef в синтезируемом SystemVerilog - PullRequest
2 голосов
/ 27 июня 2019

У меня есть следующий код:

typedef enum logic [1:0] {
  CMD1 = 2'b1?,
  CMD2 = 2'b01,
  CMD3 = 2'b00
} cmd_t;

По сути, если MSB равен 1, это CMD1 (я буду использовать LSB для части индекса). И если MSB равен 0, то декодируйте оставшиеся биты для команды.

Затем я пытаюсь декодировать с помощью Always_comb:

cmd_t myCmd;
always_comb begin
  casez(myCmd)
    CMD1: isCmd1 = 1'b1;
    CMD2: isCmd1 = 1'b0;
    default: isCmd1 = 1'b0;
  endcase
end

К сожалению, я получаю это сообщение от Spyglass:

[12EE]   W467 Based number 2'b1? contains a don't-care (?) - might lead to simulation/synthesis mismatch

Этот код должен быть синтезируемым, нет? Можно ли безопасно отменить это предупреждение Spyglass?

1 Ответ

2 голосов
/ 27 июня 2019

Я сомневаюсь, что это будет правильно синтезировать. Я думаю, что сообщение Spyglass вводит в заблуждение. В Verilog (и SystemVerilog) ? означает , точно , то же самое, что и z. Вы указываете перечисление со значениями базового типа из 4 состояний, где CMD1 должно быть точно представлено 2'b1z.

...