library ieee;
use ieee.std_logic_1164.all;
entity divone is
port(clk : in std_logic;
clk_one : buffer std_logic);
end divone;
architecture arc of divone is
begin
process (clk)
variable cnt : integer range 0 to 7999999;
begin
if (clk'EVENT and clk='1')then
if (cnt=7999999)then
cnt:=0;
clk_one <= not clk_one;
else
cnt:=cnt+1;
end if;
end if;
end process;
end arc;
---
보드에 16Mhz 오실레이터를 1분주 하여 1hz 를 만들어 보았다.
테스트 보드에서 확인 해 본 결과 정확히 1초 마다 깜빡이는 걸 알 수 있었다.
근데 왜 7999999 일까?
0 부터 7999999 이기 때문(카운트는 8000000)이다. 그리고
오실레이터는 16Mhz 즉 16000000 이기 때문에
1Hz 라는 _______-------- 신호를 만들기 위해서는
16000000 의 절반인 8000000 를 반은 Low 신호, 반은 High 신호로 주어야
정확한 Clock 이 나오게 된다