Я хочу синтезировать ячейку стробирования часов в коде Verilog следующим образом:
reg clk_en_i;
always @(clk_in or clk_en)begin
if(!clk_in)
clk_en_i <= clk_en;
end
assign clk_out= clk_in&clk_en_i;
но после синтеза FPGA функция стробирования не работает. Я просмотрел схему списка соединений от Vivado и обнаружил, что synplify синтезирует ячейку синхронизации часов в ячейку LUT6: LUT6
Это не глючная свободная ячейка! Вот почему функция не работает!
Я пытался прощупать внутренний сигнал с помощью Identification, но после синтеза FPGA функция работает правильно! И я снова посмотрел схему списка соединений: LDCE+AND
Один и тот же код Verilog дает разные результаты синтеза. Почему? Я уверен, что LUT6 является неправильным логическим результатом. Кто-нибудь может объяснить эту странную ситуацию?