작성일: 2004.03.05
동기 Preset 방식의 주파수 Counter를 사용하면 간단히 Programmable 분주 Counter를 만들 수 있습니다...
동작원리는 동기 Preset 방식인 Counter의 상태도에 의해 Up-counter를 사용하여 d, c, b, a에 입력된 Program 입력값부터 Q = "1111"이 될 때까지 Jump하도록 동작시킵니다... (실제 d, c, b, a 입력단에 인가되는 Binary data의 1의 보수에 +1을 한 값이 원하는 분주비가 됩니다...)
여기서는 ALTERA MAX+plus II에서 제공되는 Macrofunction중 하나인 74163 (4-Bit Binary Up Counter with Synchronous Load and Synchronous Clear)을 가지고 실제 구현 및 설명을 진행합니다...
실제 회로는 위의 그림처럼 간단하게 구현할 수 있습니다... 그림에서 74163에 의한 Gate Preset 방식의 Programmable 1/2 ~ 1/16 분주 Counter를 사용하고 있기 때문에 Q[D..A]=15에서 RCO=H로 되고 이 값을 반전한 "L"값이 LDN에 인가될 때 Program 입력을 Preset 합니다...
따라서 Program 입력과 분주비와의 관계는 표 1과 같고 분주비와 Program 입력 값은 16에 대한 보수로 됩니다...
분주비 |
1/2 |
1/3 |
1/4 |
1/5 |
1/6 |
1/7 |
1/8 |
1/9 |
1/10 |
1/11 |
1/12 |
1/13 |
1/14 |
1/15 |
1/16 |
|
Program 입력 |
d | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
c | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | |
b | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
a | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
Note: VHDL로 Coding시는 다음과 같이 하실수 있습니다...
LIBRARY ieee; USE ieee.std_logic_1164.ALL; LIBRARY altera; USE altera.maxplus2.ALL; ENTITY sn74ls163 IS PORT (clk, clrn, d, c, b, a : IN STD_LOGIC; out_p, out_n : OUT STD_LOGIC); END sn74ls163; ARCHITECTURE arch_sn74ls163 OF sn74ls163 IS SIGNAL vcc, rco_p, rco_n : STD_LOGIC; BEGIN freqdiv: a_74163 PORT MAP ( clk=>clk, ldn=>rco_n, clrn=>clrn, enp=>vcc, ent=>vcc, d=>d, c=>c, b=>b, a=>a, rco=>rco_p); vcc <= '1'; rco_n <= NOT rco_p; out_p <= rco_p; out_n <= rco_n; END arch_sn74ls163;
Target Device를 EP1K10TC100-3으로 하여 MAX+plus II에서 Function Simulation까지 완료된 Sample Project 파일을 아래에서 다운로드하실 수 있습니다... (Schematic으로 작업한 것과 VHDL로 작업한 것, 이렇게 두가지입니다...)