Пересечение тактовой области для сигнала импульса и уровня

Для импульса мы используем Pulse-Synchronizer, а для Level Signal мы используем 2-флоп синхронизатор, но что, если сигнал может иметь импульсный или Level уровень? Есть ли способ синхронизировать это?

2 ответа

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

// Prevent DRC violations if using scan
wire in_signal_n = scan_mode ? 1'b1 : !signal_in;

// Following code creates a flop with both async setb and resetb
reg sig_n_async;
always @ ( posedge outclk or negedge reset_n or negedge in_signal_n)
  if (!reset_n)
    sig_n_async <= 0;
  else if (!in_signal_n)
    sig_n_async <= 1;
  else
    sig_n_async <= 0;


// Synchronizer
reg [1:0] out_sync;
always @ (posedge outclk or negedge reset_n)
  if (!reset_n)
    out_sync <= 0;
  else
    out_sync <= {out_sync[0],sig_n_async};


// Rising edge
reg out_sync_del;
always @ (posedge outclk or negedge reset_n)
  if (!reset_n)
    out_sync_del <= 0;
  else
    out_sync_del <= out_sync[1];

wire signal_out = out_sync[1] & !out_sync_del;

Да, вы можете, но решение должно основываться на ширине входного импульса относительно выходного тактового сигнала.

Когда выходные тактовые импульсы очень медленные, и у вас есть импульс, вам нужно добавить встроенный растягивающий импульс, который работает во входной тактовой области. Растяжение определяется битовой шириной stretch_out ниже и "ДОЛЖЕН" быть больше одного такта в выходном домене clk.

reg [3:0] stretch_out;
always @ (posedge inclk)
begin 
   stretch_out <= in_signal ? 4'b1111 : {stretch_out[2:0],1'b0}; 
end

Теперь вы можете просто использовать свой синхронизатор с двойным флопом.

reg [1:0] out_sync;
always @ (posedge outclk)
begin 
    out_sync <= {out_sync[0],stretch_out[3]};
end

Это должно синхронизировать уровень и импульс из быстрого домена в медленный домен.

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

Другие вопросы по тегам