[VHDL] 03 - 클럭 위상차 만들기
하드웨어
2005/12/30 15:26
http://blog.naver.com/too_unique/100020646392
로직을 구성하다 보면, 속도 문제나 타이밍 문제가 발생할 경우 클럭의 속도를 조정해야 할 필요가있다. 시스템 클럭을 VCO(Voltage Control Oscilator)에서 4분주하면, 클럭의 속도 조정을 반클럭 단위가 아니라 1/4클럭 단위로 조정 할 수 있어서 속도 향상이나 타이밍 조정을 좀더 쉽게 할 수 있다.
-- Clk_Gen.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
Entity Clk_gen is
Port(
clk_in : in std_logic; --클럭입력
div2_r : out std_logic; --2분주 라이징 에지
div2_f : out std_logic; --2분주 폴링 에지
div4_r : out std_logic; --4분주 라이징 에지
div4_f : out std_logic; --4분주 폴링 에지
);
End Clk_gen;
Architecture arch_Clk_gen of Clk_gen is
signal div2_re : std_logic := '0';
signal div2_fe : std_logic := '0';
signal div4_re : std_logic := '0';
signal div4_fe : std_logic := '0';
Begin
div2_r <= div2_re;
div2_f <= div2_fe;
div4_r <= div4_re;
div4_f <= div4_fe;
Clock_div : Process(clk_in)
Begin
If clk_in'event and clk_in = '1' then
div2_re <= not div2_re;
--rizing-falling edge가 바뀐것은 클럭 이벤트와 동시에 판단하고, 이전값이 기준이므로
If div2_re = '1' then
div4_fe <= not div4_fe;
Else
div4_re <= not div4_re;
End If;
Elsif clk_in'event and clk_in = '0' then
div2_fe <= div2_re; --폴링에지는 항상 라이징에지 뒤에 오게 하기위해서 라이징에지값 이용
End If;
End process;
End Process;
End arch_Clk_gen;
댓글 없음:
댓글 쓰기