Использование безразличия в перечислении typedef в синтезируемом SystemVerilog

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

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?


person jkang    schedule 26.06.2019    source источник
comment
на какую линию он жаловался? в вашем примере это должно быть нормально, если нет других вариантов использования перечисления.   -  person Serge    schedule 27.06.2019
comment
Кстати, у вас есть синтаксическая ошибка в определении вашего enum. это должно быть CMD = 2``b1?, =, а не :. Это может вызвать вашу ошибку.   -  person Serge    schedule 28.06.2019
comment
Он жалуется на эту строку: CMD1: isCmd1 = 1'b1;   -  person jkang    schedule 28.06.2019


Ответы (1)


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

person Matthew Taylor    schedule 27.06.2019
comment
но это абсолютно нормально, если значение используется в качестве метки в casez (как в примере OP). У него будут проблемы в других случаях, например. если он появляется в правой части. - person Serge; 27.06.2019
comment
Это по-прежнему означает точно то же самое, что и z, даже в casez. Просто z в casez означает "все равно". - person Matthew Taylor; 27.06.2019
comment
верно, но это не вызовет проблем с синтезом в случае OP. - person Serge; 28.06.2019
comment
@Серж, я пробовал (не для того, чтобы ответить на этот вопрос, а чтобы ответить на вопрос клиента). Я не могу вспомнить, какой синтезатор я бы использовал (вероятно, FPGA), но я почти уверен, что он не сработал. - person Matthew Taylor; 28.06.2019