合成時に奇妙な動作をする VHDL コードがいくつかありますが、VHDL 合成に関する私の基本的な理解が間違っていると思われます。
「sync」は短いパルス (clk 周期の約半分) で、clk の立ち上がりエッジでハイになりますが、すぐにローになります。合成中、sync が High の場合、信号割り当ての一部のみが clk の立ち上がりエッジに割り当てられます。
最小限の期間、同期を高くする必要がありますか?
process(clk)
begin
if rising_edge(clk) then
if sync = '1' then
a <= '1';
y3 <= y2;
y2 <= y1;
y1 <= y0;
end if;
end if;
...
合成時に値が更新されるのは "a" だけです。