ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
1176531 Топик полностью
misyachniy (21.02.2022 16:51, просмотров: 292) ответил POV на Прошлая тема не взлетела, т.к. телепаты в отпуске, а предложенные рекомендации поверхностные, не катят они. Вопрос по тому как внутри ПЛИС фиксируется фронт...
Попробую себя в телепатии. 

always @(posedge clk) должен преобразоваться в триггер.

Возмем например "D" триггер

На вход "С" триггера подается clk, на вход "D" логическая комбинация сигналов.

После положительного фронта клока на выходе получите требуемую логическую комбинацию и она буде зафиксирована до следующего клока.

В указанном примере буде производится сравнение с состоянием в предыдущем клоке, так как присваивание - неблокирующее.

last_sygnal <= sygnal;

if (sygnal)

На это нужно обратить внимание.


Чтобы не думать о сбросе флага нужно делать синхронную схему, когда все иззменения состояния делаются по одному тактовому сигналу.


Я использую такой модуль, доставшийся мне в наследство ;-)

module rising_edge_detector

( input clk, input in_signal, output reg rising_edge ); reg [1:0] edge_reg; always @ (posedge clk) begin edge_reg[0] <= in_signal; edge_reg[1] <= edge_reg[0]; rising_edge <= !edge_reg[1] & edge_reg[0]; end endmodule


В результате любой входной сигнал преобразуется в импульсный, который активный один такт и не нужно думать о его сбросе. В приведенном примере модуль тоже импульсный и работает по спаду "sygnal".


P.S. reg last_sygnal; без начального значения Modelsim моделирует как неизвестный.