关于quartus数字钟分频器的问题

从网上下载了一段代码 但是关于分频器有点看不懂
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fenpin is
port(clk:in std_logic;
-- q:out std_logic_vector(9 downto 0);
clk512,clk4,clk1,clk16,clk256:out std_logic);
end fenpin;
architecture behave of fenpin is
signal y:std_logic_vector(9 downto 0);
begin
process(clk)
begin
if(clk='1')then
if(y="1111111111")then
y<="0000000000";
clk512<=y(0);
clk256<=y(1);
clk16<=y(5);
clk4<=y(7);
clk1<=y(9);
else

y<=y+'1';
clk512<=y(0);
clk256<=y(1);
clk16<=y(5);
clk4<=y(7);
clk1<=y(9);
end if;
end if;
end process;
end behave;

这里的y什么时候被赋值 还有分频器的作用是啥

fpga是并行执行,但一个process内部是顺序执行,process后面的括号是敏感信号,这个代码里面是CLK,也就是说CLK变化时,process就开始执行,按照顺序走完整个process,然后等待CLK再发生变化。有C基础就能看懂PROCESS的代码,知道是把lck做了5种分频。
分频的作用当然是为了得到想要的时钟,CLK为系统时钟,是单一频率。但在设计某个项目时,一个时钟往往满足不了需求,需要倍频或者分频。比如,一个驱动电机的PWM,一般是几KHz,一个SPI通信时钟一般是几M Hz.等等等等不同的设计需求。