Действительно ли разбиение большой комбинационной логики на маленькую логику уменьшает задержку? - PullRequest
1 голос
/ 23 апреля 2019

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

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

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

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

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

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

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

Какая разница, если я использую:

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

1 Ответ

0 голосов
/ 23 апреля 2019

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

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

...