2007년 7월 19일 목요일

Emailing: [VHDL] 03 - 클럭 위상차 만들기

 

[VHDL] 03 - 클럭 위상차 만들기

하드웨어

2005/12/30 15:26

로직을 구성하다 보면, 속도 문제나 타이밍 문제가 발생할 경우 클럭의 속도를 조정해야 할 필요가있다. 시스템 클럭을 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;

출력하기 취소

댓글 없음: