Добавление сигнала в список чувствительности синтезирует в буфер? - PullRequest
1 голос
/ 11 февраля 2020

Я пишу простой D-триггер в Verilog и смотрю, для чего он синтезирует. Вот что у меня есть:

module d_flip_flop(
    input d,
    input clr,
    input clk,
    input ce,
    output reg q
);

always @(posedge clk) begin: d_flip_flop
    if (clr) begin
        q <= 1'b0; 
    end else if (ce) begin
        q <= d;
    end
end

endmodule
И он синтезирует: *
module d_flip_flop(
    input d,
    input clr,
    input clk,
    input ce,
    output reg q
);

always @(posedge clk or posedge ce) begin: d_flip_flop
    if (clr) begin
        q <= 1'b0; 
    end else if (ce) begin
        q <= d;
    end
end

endmodule

Он синтезирует в: enter image description here

Что происходит? Почему добавление CE в список чувствительности приводит к синтезу в буфер?

Спасибо!

1 Ответ

3 голосов
/ 11 февраля 2020

Вы, вероятно, путаете инструмент синтеза с этой конструкцией, потому что это ненормально. (В FPGA нет ничего такого, что напрямую поддерживает это, и я сомневаюсь, что оно вообще вообще можно синтезировать.)

С другой стороны, если вы изменили ce на clr в списке чувствительности, вы должны получить зарегистрируйте clr в качестве асинхронного сброса, поскольку это нормальный способ кодирования этого для Xilinx.

Я попытался синтезировать его с помощью Vivado и получил странное предупреждение, которое не имело смысла. Вероятно, он достаточно близок к асинхронному шаблону сброса c, поэтому напрямую не выдает ошибку, но, в конечном счете, не синтезируется, поэтому заканчивается выводом, подключенным к GND.

...