Приведенный ниже код должен продемонстрировать это для библиотек, имеющих логические элементы.Результаты моделирования будут одинаковыми, и формальная проверка докажет, что оба они идентичны.Однако первый, скорее всего, будет использовать меньше энергии и меньше площади.
//Instances 1 clock gate
reg [7:0] value;
always @(posedge i_clk)
if(enable)
value <= new_value;
//Instances 8 muxes
always @(posedge i_clk)
if(enable)
value <= new_value;
else //Exhaustive so assignment always occurs
value <= value;
В первом примере будет использоваться один тактовый шлюз для часов во всех восьми DFF.Во втором примере будет использовано 8 мультиплексоров, возвращающих выходные данные каждого DFF на вход.В зависимости от площади и соотношения мощности затворов часов и мультиплексоров, различия могут быть значительными.Это было проверено на Talus.
Конечно, условие else во втором примере бесполезно, но смысл эксперимента состоял в том, чтобы увидеть, насколько хорошо инструмент обрабатывает сложные операторы casez / x и разделяет разрешения для блоков всегда.Для FSM я бы предпочел использовать синтаксис, если FSM обнаружен.Я основываю это на том, как XST обрабатывает их, и на том, что оптимизация конечного автомата является очень зрелой темой.