Действительно ли разбиение большой комбинационной логики на маленькую логику уменьшает задержку?

#verilog

#verilog

Вопрос:

Я пытаюсь понять дизайн verilog моего друга, он разбил большую логику на маленькую логику, он сказал, что это помогло ему устранить проблему с синхронизацией. Но я не понимаю, почему, потому что после синтеза это просто набор элементов И и ИЛИ, и логика та же, как это может уменьшить задержку? Вот исходный код:

     assign state0 = ({104{d0_xq}} amp; markerState0[519:416]) | 
                ({104{d1_xq}} amp; markerState1[519:416]) |
                ({104{d2_xq}} amp; markerState2[519:416]) |
                ({104{d3_xq}} amp; markerState3[519:416]);

assign state1 = ({104{d0_xq}} amp; markerState0[415:312]) |
                ({104{d1_xq}} amp; markerState1[415:312]) |
                ({104{d2_xq}} amp; markerState2[415:312]) |
                ({104{d3_xq}} amp; markerState3[415:312]);

assign state2 = ({104{d0_xq}} amp; markerState0[311:208]) |
                ({104{d1_xq}} amp; markerState1[311:208]) |
                ({104{d2_xq}} amp; markerState2[311:208]) |
                ({104{d3_xq}} amp; markerState3[311:208]);

assign state3 = ({104{d0_xq}} amp; markerState0[207:104]) |
                ({104{d1_xq}} amp; markerState1[207:104]) |
                ({104{d2_xq}} amp; markerState2[207:104]) |
                ({104{d3_xq}} amp; markerState3[207:104]);

assign state4 = ({104{d0_xq}} amp; markerState0[103:0]) |
                ({104{d1_xq}} amp; markerState1[103:0]) |
                ({104{d2_xq}} amp; markerState2[103:0]) |
                ({104{d3_xq}} amp; markerState3[103:0]);

always @(posedge clock) begin
    state_xq <= {state0, state1, state2, state3, state4};  
end
  

В чем разница, если я использую:

 assign state = ({520{d0_xq}} amp; markerState0) |
                ({520{d1_xq}} amp; markerState1) |
                ({520{d2_xq}} amp; markerState2) |
                ({520{d3_xq}} amp; markerState3);
always @(posedge clock) begin
    state_xq <= state;  
end
  

Комментарии:

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

Ответ №1:

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

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