1) Mожете описать сдвиговый регистр нагляднее (используя <= ):
reg [2:0] shift_rg;
always @(posedge CLK posedge RST)
begin
if (RST)
shift_rg[2:0] <= {3{1'b0}};
else
// Сдвиг влево
shift_rg[2:0] <= {shift_rg[1:0],INP};
end
assign OUTP=shift_rg[2];
2) "Чем же плоха система "четные по фронту, нечетные по спаду" - тем что максимальная тактовая частота в 2 раза ниже
3) " я знаю точно, что когда переключается, исключается "гонка сигналов", так всегда есть время на распространение равное в пол-такта" - это очень большое заблуждениен!
При роботе по одному фронту - у Вас будет аж ЦЕЛЫЙ такт.
Время распространения контролируется синтезатором (точнее плейсером+роутером+clock tree инсертером) а никак не Вами.
В этом и есть суть синхронного дизайна и забота тулзы.
Подумайте, как увеличение задержки в линии влияет на HOLD тайм destination тригера - улутшает или ухудшает это требование?
4) "физическая частота прежняя -> меньше потребляемая мощность" мощность потребления зависит от КОЛИЧЕСТВА и ЧАСТОТЫ переключения тригеров. В Вашем случае, количество=конст и частота переключения=конст. Мощность потребления=клнст соотв.
5) "Если работать по одному фронту, то получается, что я вынужден полностью отказаться от предсинтезной симуляции, так как ее результаты не соответствуют реальности" - а зачем-же по Вашему существуют RTL симуляторы? У Вас просто ошибка в коде.
6) "Можно ли при функциональном моделировании задать некую каждому триггеры условную "задержку", чтобы результаты досинтезного моделирования соответствовали постсинтезному?" - Можна, но не нужно. В технологии <=0.35u существенно влияют задержки в линии чем задержки гейта. Их как задавать будете (после синтеза все цепи обычно переименовываються)?