Внешний сигнал запуска отправляется на ПЛИС. Сигнал запуска должен приниматься только в том случае, если значения and1 и and2 также высоки во время получения запуска. Если запуск принят, должен быть создан импульс запуска длительностью 10 микросекунд. Цель состоит в том, чтобы попытаться минимизировать время, необходимое FPGA для принятия / отклонения этого внешнего сигнала запуска.
module trigger(
input CLK,
input trigger,
input and1,
input and2,
output triggerOut,
);
Первая попытка решения была следующей;
assign triggerOut = trigger & and1 & and2;
Время реакции быстрое, но я не думаю, что это позволяет реализовать длительность триггера в 10 микросекунд.
Текущее решение следующее:
always @(posedge CLK) begin
if(trigger & and1 & and2)
triggerOut <= 1;
end
Это решение позволяет добавить счетчик, который позволяет реализовать 10-микросекундный импульс запуска. Предостережение заключается в том, что теперь время реакции на внешний триггер привязано к частоте CLK. Время реакции может быть улучшено путем увеличения частоты CLK, но есть предел того, насколько высоким может быть CLK.
Другим возможным решением может быть чувствительность к изменяющемуся триггерному входу;
always @(posedge trigger) begin
if(trigger & and1 & and2)
triggerOut <= 1;
end
Я читал, что это может быть плохой практикой. Мне было непонятно, почему использование @ (posedge CLK) предпочтительнее @ (триггер posedge). Что определяет время реакции ПЛИС на чувствительность, такую как @ (триггер постановки)? Я полагаю, что это все равно должно быть как-то связано с CLK - возможно, этот подход еще быстрее?
Существуют ли более эффективные подходы для улучшения времени реакции на вход триггера?