| 안녕하세요
한백전자의 이장겸입니다.
문의하신 부분에서 무엇이 1MHz에서 100Hz로 바꾸어주는게 필요한지 잘 이해가 되지 않습니다.
주파수 입력을 100Hz로 한다는 것인지, 아니면 클럭 분주하여서 1MHz의 입력을 받아 100Hz로 분주하여 출력하는 것인지....
문의하신 예제중 아래 부분에서 이 1MHz의 클럭을 받아 1Hz의 주파수로 분주하도록 구성되어 있습니다.
여기에서 주파수의 카운트 제한 값을 수정해 주면 해결을 할 수 있을 것 같습니다. (499999)
약간의 설명을 보태면 1MHz 즉, 1,000,000 Hz를 1Hz로 만들기 위해는 100만번의 카운트 즉 0~999,999의 카운트가 필요한데, 주파수는 0과 1의 반복이기 때문에 50만번의 카운트를 하였습니다.
0~499,999의 숫자가 그것입니다.
입력 클럭을 100Hz로 바꾼다면 1Hz로 만들기 위해서는 50번만 카운트하면 되겠죠..
반대로 1MHz의 클럭으로 100Hz의 클럭을 만든다고 였을 때, 5천번의 카운트가 필요합니다.
이런 방식으로 수정하시면 될 것 같습니다.
그럼, 좋은 하루 되세요.
-------------------------------------
process (clk, clear)
begin
if (clear = 1) then
cnts <= 0;
s_clk <= ;
elsif (clk = 1 and clkevent) then
if (cnts >=499999) then
cnts <= 0;
s_clk <= not s_clk;
else
cnts <= cnts + 1;
end if;
end if;
end process; |