Что произойдет, если мы используем блок асинхронного сброса с синхронизированным сбросом? - PullRequest
0 голосов
/ 29 октября 2018

Учтите, что у меня есть общий модуль verilog, который я хочу экспортировать в 2 разных типа конструкций - один при сбросе синхронизации, а другой при асинхронном сбросе.

Каков будет правильный способ кодирования всегда блока в этом общем модуле, чтобы он отлично работал в обоих видах конструкций? Я думаю, что мы можем использовать блок асинхронного сброса, как это -

always @(posedge clk or negedge reset_) begin
  if(!reset_) temp <= 'd0;
  else <do something>
end

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

При сбросе синхронизации мы знаем, что позиция clk и необходимость возврата reset_ будут совпадать всегда, так есть ли проблема с этим?

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете сделать это:

always @(posedge clk or negedge async_reset) begin
  if(!async_reset) 
    temp <= 'd0;
  else 
    if (!sync_reset)
      temp <= 'd0;
    else
      <do something> 
end

, а затем привязать один или другой сброс к НЕАКТИВНО (1'b1 в этом случае). Если вы синтезируете в FPGA, я бы подумал, что это ничего не будет стоить вам ни по площади, ни по скорости. Если вы синтезируете в IC, я бы проверил, что синтезатор делает с ней.

...