Я бы реорганизовать это:
casez(A)
4'b1???: Y<=4'b1000;
4'b01??: Y<=4'b0100;
4'b001?: Y<=4'b0010;
4'b0001: Y<=4'b0001;
default: Y<=4'b0000;
endcase
Тогда нет необходимости беспокоиться о приоритете, каждый матч уникален.
От IEEE Std 1800-2009 (IEEE стандарт для SystemVerilog)
12.5.2 Постоянное выражение в случае заявления
Постоянное выражение может быть использовано для case_expression. Значение константного выражения сравнивается с case_item_expressions.
Следующий пример демонстрирует использование путем моделирования 3-битного приоритета кодера:
logic [2:0] encode ;
case (1)
encode[2] : $display("Select Line 2") ;
encode[1] : $display("Select Line 1") ;
encode[0] : $display("Select Line 0") ;
default $display("Error: One of the bits expected ON");
endcase
12.5.3 Уникальный случай, unique0-случай, и случай приоритетов
The case, casez и casex могут быть квалифицированы ключевыми словами приоритета, уникального или уникального0 для выполнения определенных проверок нарушения. Они в совокупности называются приоритетными, уникальными или уникальными. Приоритетный случай должен действовать только на первое совпадение. Уникальный случай и уникальный аргумент 0 утверждают, что нет перекрывающихся case_items и, следовательно, безопасно оценивать case_items параллельно.
...
priority casez(a) // values 4,5,6,7 cause a violation report
3’b00?: $display("0 or 1");
3’b0??: $display("2 or 3");
endcase
Я не уверен, насколько хорошо поддерживается заявления приоритетных тематических поддерживаются синтеза инструментов, хотя.
Ох. Тогда я сомневаюсь. Разве это не похоже на запись выражения if else? Тогда зачем писать заявление о делах? – aditya3524
@ aditya3524 case case является чище и, как правило, предпочтительнее, чем цепочки else. – Morgan
Лично я редко видел приоритетный кодировщик, написанный таким образом.Он должен быть эквивалентен набору операторов if/else. Это более компактно, но мне сложно читать, поскольку значение внутри case (...) является константой. – dwikle