Studyhard/VHDL2010.01.05 00:45

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 이 나오게 된다

 

Posted by 리얼한놈

티스토리 툴바