В основном вы просто отслеживаете зависимости и суммируете зависимости для каждого маршрута с помощью логики. Обычно проще всего проследить в обратном направлении от выхода к нужным входам. Например:
cout <= not(t1 or t2) and t4) after 2 ns;
Итак, последний этап для cout имеет задержку 2 нс. Его входами являются t1, t2 и t4, поэтому его задержка в 2 нс не может начаться до тех пор, пока все t1, t2 и t4 не будут готовы (т. Е. Одна самая длинная из этих задержек определяет время запуска для последней стадии).
В этом случае t1 и t2 задерживаются на 1 нс за штуку, а t4 задерживается на 2 нс. Поэтому последний этап начинается через 2 нс после начального ввода. Это дает 2 + 2 = 4 нс от начального ввода до конечного вывода.
Глядя на это с алгоритмической точки зрения, мы могли бы заявить, что задержка для любого сигнала - это задержка конечной «ступени» для этого сигнала плюс максимум задержек для любого из его входов.
Для S:
total = 2 + max_delay(B, t3, t5)
total = 2 + delay(t5);
total = 2 + 2 + max_delay(t3, B)
total = 2 + 2 + delay(t3)
total = 2 + 2 + 2 + max_delay(t1, t2, A, cin)
total = 2 + 2 + 2 + delay(t1) (or delay(t2) -- they're the same).
total = 2 + 2 + 2 + 1