'VHDL'에 해당되는 글 9건

  1. 2010.06.12 Digital Clock - 디지털공학
  2. 2010.06.12 엘레베이터-정보제어기초실험
  3. 2010.01.09 VHDL Simulation
  4. 2010.01.09 VHDL Basic End
  5. 2010.01.09 VHDL Basic 6
  6. 2010.01.09 VHDL Basic 4 (2)
  7. 2010.01.09 VHDL Basic 3
  8. 2010.01.08 VHDL Basic 2
  9. 2010.01.08 VHDL Basic 1
크리에이티브 커먼즈 라이선스
Creative Commons License

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
크리에이티브 커먼즈 라이선스
Creative Commons License

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 02:57
크리에이티브 커먼즈 라이선스
Creative Commons License
-Quartus 6.0 Simulation 확인하기

File- New- Other Files 선택

Vector Waveform File 선택 


이렇게 생긴 창이 뜨게 된다. 
그럼 왼쪽 Name ,Value at 12.43ns 어쩌고 써있는 아래 하얀 부분에 마우스 오른쪽 버튼을 클릭한다.

그럼 왼쪽 과 같은 창이 하나 뜨게 된다. 여기서는 
 Insert Node of Bus 를 선택한다.










여기서는 OK 버튼 밑에 있는 Node Finder를 선택한다.


그럼 Node Finder 창이 뜨게 된다. 해당 창 위쪽 가운데 보이는 Filter -> Pins all -> 그리고 우측에 보이는 List 버튼을 누르게 되면 그림과 같이 컴파일 완료된 핀이 창에 뜨게 된다.

a 핀이 std_logic_vector (2 downto 0) 형이므로 우측 창에 넘기는 핀은 a 핀 하나면 된다
(a[0],a[1],a[2]) 핀은 선택할 필요가 없다)
 - 우측창에 넘긴다는 의미는 시뮬레이션 창에 추가시킨다는 의미



a, b 핀을 선택하고 가운데 있는 >   화살표 버튼을 누르면 우측으로 a,b 핀이 이동된걸 확인 할 수 있다.
그리고 OK, OK 버튼을 눌러 주면,

다음과 같이 아까 생성한 파일에 a, b 가 추가     된 것을 확인 할 수 있다.










Edit - End Time  
그리고 파형을 보기 좋게 확인 하기 위해서는 End Time 을 설정해 주어야     한다. 보통 16us , 혹은 20us 정도로 설정한다. 





Time 옆에 보이는 1.0 을 20us 로 변화 시켜 주자.. 물론.. 1s 도 가능하다. 하지만 Simulation 이 오래 걸린다. 
궁금하면 해보시길 

그 다음에는 Grid Size를 수정 해준다. 
End Time 이 20us 이기 때문에 1us 로 설정 한다.





설정한 뒤에 확인해 보면 end time 이 20.0us 로 설정 하였지만 보이는 것은 2.0us 까지 이다. 그렇다면!


View 에 Fit in Window 를 선택하거나.

좌측에 보이는 돋보기 아이콘을 선택해 조절해 주면 된다





완성된 VWF 파일이다.  
이제 해 주어야 할 일은 파형을 생생해 주는 일!

우선 파형을 생성할 핀을 선택하면 우측에 있는 Icon들이 활성화 된다. 
 자세히 살펴 보면.. 여러 가지가 있다. ^^ 
 우리는 Clock 을 만들어 주는 것이 목적이기 때문에 왼쪽 아래에 있는 C 를 선택한다. 
 C 는 Count Value 의 약자!  그럼 나머지는? 하나 하나 눌러보면 이해가 갈 것이다.















Count Value 창이 뜨게 된다.

Counting Tab 부분
 
Radix = Data Type 선택
Start Value = 시작할 값 선택
Increment by = 증가 할 값 선택















Timing Tab 부분
 
 Start Time = Count 시작할 시간
 End Time = Count 끝날 시간(End Time 이 20us  로 설정 하였으니 최대 20us)

 Count Every = 1 us 로 설정 
 - > 우리가 Grid size를 us 단위로 설정 하였기 
       때문에 1us 로 설정한다. 

 Multiplied by = Grid 마다 동작 설정
 - > 지금은 1us Grid Size 이고 1 Multiplied 로 설정 되었기 때문에 1us 마다 Count Value 가 바뀐다











완성된 Count Value 화면이다. 
a 가 std_logic_vector (2 downto 0) 이기 때문에 000, 001, 010 형식으로 증가 하는 것을 알 수 있고
a 옆에 놓여진 + 버튼을 누르면 a[2],a[1],a[0] 이 어떻게 변화 되는지 눈으로 직접 확인 하는 것을 알 수 있다. 물론 각 입력핀 하나 하나 세부 설정도 가능할 것이다. 

P.S 
Hard Ware 설계 전에 Simulation을 돌려 파형을 확인 하다는 것은 굉장한 작업이 아닐 수 없다. 실제로 Chip이 나오기 전에 Test 를 거친다면 소모되는 비용을 더욱더 줄일 수 있으며, 우리 같은 공대생들은 Bug 잡는 일이 한층 쉬워 지지 않을 까 생각한다.







저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 02:32
크리에이티브 커먼즈 라이선스
Creative Commons License
- Integer 형을 이용한 10 Counter 를 설계하시오

LIBRARY ieee;  
USE ieee.std_logic_1164.ALL;    
   
ENTITY mod_10_count IS     
PORT(n_cp, n_rd : IN std_logic;
q : BUFFER integer RANGE 0 TO 9);
END mod_10_count ;

ARCHITECTURE arc OF mod_10_count IS
BEGIN
PROCESS (n_cp, n_rd)
BEGIN
IF  (n_rd='0' OR q=9) THEN
q <= 0;
ELSIF (n_cp'EVENT AND n_cp='0') THEN
     q <=q+1;
END IF;
END PROCESS;
END arc;


- 20Mhz 를 1초로 분주시오

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 1999999;
begin
if (clk'EVENT and clk='1')then
if (cnt=1999999)then
cnt:=0;
clk_one <= not clk_one;
else
cnt:=cnt+1;
end if;
end if;
end process;
end arc; 
   

- 2상 여자 Stepmotor 구동기를 설계하시오 
LIBRARY ieee;  
USE ieee.std_logic_1164.ALL;  

ENTITY step IS
PORT(clk : IN STD_LOGIC;
clock  : buffer std_logic;
q : OUT STD_LOGIC_VECTOR(3 downto 0));
END step;

ARCHITECTURE arc OF step IS
type state_type is (s0, s1, s2, s3);
SIGNAL state: state_type;
BEGIN
process(clk)
variable cnt : integer range 0 to 49999; --49999 적정 
begin
if (clk'EVENT and clk='1') then
if (cnt=49999)then
clock <= not clock;
cnt:=0;
else 
cnt:=cnt+1;
end if;
end if;
end process;
PROCESS (clock)
BEGIN
IF clock'EVENT AND clock = '1' THEN
CASE state IS
WHEN s0 => state <= s1;
WHEN s1 => state <= s2;
WHEN s2 => state <= s3;
WHEN s3 => state <= s0;
END CASE;
END IF;
END PROCESS;

WITH state SELECT
q <= "1100" WHEN s0,
"0110"  WHEN s1,
"0011" WHEN s2,
"1001" WHEN s3;
END arc;


저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 02:31
크리에이티브 커먼즈 라이선스
Creative Commons License
과제
 * JK플립플롭이 Project 폴더 내에 있어야 한다.
library ieee;
use ieee.std_logic_1164.all;

entity upcount is
port( cclk, logic : in std_logic;
     q : buffer std_logic_vector (3 downto 0));
end upcount;

architecture arc of upcount is
component jk_f
port( j, k, clk : in std_logic;
      q, n_q  : buffer std_logic);
end component;
begin
ff3: jk_f port map(j => logic, k => logic, clk =>q(2), q=>q(3));
ff2: jk_f port map(j => logic, k => logic, clk =>q(1), q=>q(2));
ff1: jk_f port map(j => logic, k => logic, clk =>q(0), q=>q(1));
ff0: jk_f port map(j => logic, k => logic, clk =>cclk, q=>q(0));

end arc;


VHDL Basic 6

-상태머신(State Machine)
    -State Machine의 정의
- 순차회로시스템의 원하는 동작을 모델링하는 도구
- 외부 입력과 시스템 클럭에 의해 State가 천이되고, State에 의존되어 출력 값 결정 
- 여러 개의 State로 구성, 복잡한 시스템 설계에 적합 (예 : 마이크로프로세서)

   -State Machine의 종류
-Moore Machine
-Mealy Machine

    # Mealy Machine
출력이 현재상태와 입력값에 의존

# Moore Machine
출력이 현재 상태에만 의존되는 모델


 - 두 모델의 차이점


◯ Moore Machine : 출력회로의 입력이 현재의 상태인 레지스터의 값으로만 결정, 출력의 변화는  Clock과 동기되어 발생. 
◯ Mealy Machine : 출력회로의 입력이 현재 레지스터의 값과 입력값 두 가지를 가짐. 따라서 입력값의 변화가 있게되면 Clock과 동기하지 않더라도 그 출력값은 변화

    - 두 모델의 공통점
◯ 입력과 현재의 상태에 의해 다음 상태 변화

- 설계 예시

   architecture arc of mode is                  --Begin 시작 전에 삽입

type state_type is (stay, ready, action); -- State 머신 상태 설정(3가지 상태) 
signal state : state_type;                -- State_type 을 Signal 로 설정


- Integer 및 Variable 구문
 - Integer 변수
   - 알고 있는 Vector 형과 마찬가지로 사용할 변수의 범위를 지정하는데 사용
   - 벡터형 보다 변수가 차지하는 셀의 수가 더 작다
   - 범위를 좀더 자세히 지정할 수 있다.

   * 설계 예시
    entity Counter is
port ( a : in integer range 0 to 255; -- < = in std_logic_vector(7 downto 0);
     b : out integer range 0 to 255; -- < = out std_logic_vector(7 donwto 0);
    end counter ;

      범위를 실수형으로 지정함으로써 좀더 자세한 선언이 가능함을 알 수 있다.
 
 -Variable 구문 
  - Process 내에서만 사용 되며, 내적 변수이다
  - 합성 보다는 중간 연산 단계에서 주로 이용된다.
  - Variable에서 사용되는 대입기호는   :=    
  
   
  * 설계 예시
   Process(clk, clear, load)
Variable cnt : integer range 0 to 255;
begin
    if(조건) then
cnt := 0;

  
 *Variable은 내적 변수이기 때문에 Process 가 끝나면 그 값을 잊어버린다. 때문에 값을 보존 시키기 위해선
  Signal에 최종 값을 대입시켜야 한다. 



 
과제 
- Integer 형을 이용한 10 Counter 를 설계하시오
- 20Mhz 를 1초로 분주시오
- 2상 여자 Stepmotor 구동기를 설계하시오 

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 02:12
크리에이티브 커먼즈 라이선스
Creative Commons License
4 비트 전가산기 설계
 - 1비트 가산기
library ieee;
use ieee.std_logic_1164.all;

entity ADD is
port( a,b,c: in std_logic;
sum,cout : out std_logic);
end ADD;

architecture arc of ADD is
begin
sum <= (a xor b)xor c ;
cout <= (a and b) or ((a xor b) and c);
end arc;

 * 4비트 전 가산기 설계하기 전에 위의 1비트 가산기가 Project 폴더 안에 있어야 한다.

 - 4비트 전가산기
library ieee;
use ieee.std_logic_1164.all;

entity FA4 is
port(a, b :in std_logic_vector(3 downto 0);
cin : in std_logic;
sum : out std_logic_vector(3 downto 0);
cout: buffer std_logic_vector(2 downto 0);
carry: out std_logic);
end FA4;

architecture arc of FA4 is
 component ADD port( a,b,c: in std_logic;
sum,cout : out std_logic);
 end component;

begin
f0: ADD port map(a=>a(0),b=>b(0),c=>cin,cout=>cout(0),sum=>sum(0));
f1: ADD port map(a=>a(1),b=>b(1),c=>cout(0),cout=>cout(1),sum=>sum(1));
f2: ADD port map(a=>a(2),b=>b(2),c=>cout(1),cout=>cout(2),sum=>sum(2));
f3: ADD port map(a=>a(3),b=>b(3),c=>cout(2),cout=>carry,sum=>sum(3));
end arc;

 - 시뮬레이션 파형은 각자 확인해 보도록 한다.


VHDL Basic 4

- Clock Pulse 로 동작하기 
  - 일반적으로 if 구문을 쓸 때, 
if (A=1) then      < = 이런 식으로 Cording한다.
     그럼, Clock Pulse는 어떻게 Cording 할 수 있을까?

if(clock'EVENT and clock ='1') then   <= Rising Edge Trigger

if(clock'EVENT and clock ='0') then   <= Falling Edge Trigger 

     위의 보기처럼 Clock 과 동기화 시킬 경우 선언된 if 문 안에 원하는 Source를 Cording 하면 된다.

* 단, 비동기와 동기가 겹칠 경우 
ex) if(A=1) then
   elsif(clock'EVENT and clock='1')then
   elsif(B = 0) then

동기화된 EVENT를 먼저 코딩해주고 비동기 EVENT 를 아래쪽에 코딩하자



-래치 (Latch) 및 플립플롭(Flip Flop) 설계
 - 기본 개념
   • 안정 상태
- 회로의 외부로부터 입력을 가하지 않는 한 본래의 상태를 유지
   • 두 가지 안정 상태
- Q = 1, /Q = 0 상태 혹은 그 반대인 상태
   • 래치
- 레벨 트리거에 의해서 동작, 1상태인 동안 입력의 변화를 출력에 반영
   • 플립플롭
- 엣지 트리거(Edge Trigger)에 의해서 동작, 클럭 펄스가 나타나기 바로 이전의 입력이
 출력에 반영되어 다음 클럭 펄스가 나타날 때까지 그 상태를 유지함
   • 비동기 동작
- 입력 신호의 변화가 일어 나면 그에 따라 동작 하는 것
   • 동기식 동작
- 클럭 펄스라는 시간적인 신호로 모든 플립플롭이 펄스에 동기가 되어 동작을 하는 것

* 비동기와 동기식 동작의 차이점을 잘 이해하도록 한다.

○ S-R 플립플롭
그림 - S-R 플립플롭

- 펄스입력은 다른 2개의 입력에 대한 인에이블 신호의 역할을 한다.
  뒷 부분의 두 NAND 게이트 출력은 CP 입력이 0에 머물러 있는 한 논리 값 1을 갖는다. 
  이것이 기본 플립플롭의 정지 조건이다.

표 - S-R FF 의 진리표

○ D 래치 및 D 플립 플롭
 - D 래치(Latch)

그림 - D 래치.

- D래치는 제어 신호가 0 일 때 과거의 값을 가지고 오고, 과거의 값이 없으면 X(무변화)이다.
   제어신호가 1일 때, 1인 동안에 입력 값에 의해서 결과 값이 변화 한다.



 - D 플립플롭(Flip Flop)

 - D 래치와는 달리 클럭의 상승이나 하강일 때 입력값에 의해 출력 값이 정해진다

○ J- K 플립플롭
그림 - J-K 플립플롭

- J K 플립플롭은 SR 플립플롭에서의 비결정 상태를 명백히 구분해 준다. 입력 J,K는 플립플롭을 각각 셋하고 클리어학 위하여 S,R처럼 동작한다. J 입력은 셋, K 입력은 리셋을 위한 것이다. 


○ T 플립플롭

 - T 플립플롭은 J-K 플립플롭을 단일 입력 형태로 고쳐 놓은 것이다. T라는 이름은 플립플롭의 토글, 즉 그의 상태를 반전(보수화)시킬 수 있는데 기인한다.


- 과제
 - 각 래치, 플립플롭을 VHDL 언어로 코딩해본다.

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 01:57
크리에이티브 커먼즈 라이선스
Creative Commons License
(1) 7segment Decoder 동작을 하는 7447 IC를 설계

http://www.alldatasheet.com 에서 확인한 74ls47 BCD-to-SEGMENT Truth Table 이다 

library ieee;
use ieee.std_logic_1164.all;

entity segment is
port( s : in std_logic_vector(3 downto 0);
 o : out std_logic_vector(6 downto 0));
end segment;

architecture arc of segment is
begin
process (s)
begin
case s is
when "0000" => o <="0000001";
when "0001" => o <="1001111";
when "0010" => o <="0010010";
when "0011" => o <="0000110";
when "0100" => o <="1001100";
when "0101" => o <="0100100";
when "0110" => o <="1100000";
when "0111" => o <="0001111";
when "1000" => o <="0000000";
when "1001" => o <="0001100";
end case;
end process;
end arc;

Truth Table 을 참고하여 SEGMENT 에 0 - 9 까지 출력이 가능한 BCD TO SEGMENT DECODER 를 설계하였다. DECODER 설계와 마찬가지로 ENCODER 설계도 어렵지 않으니, 각자 DATA SHEET 를 참고하여 만들어 보기 바란다.

(2) MUX 와 DEMUX 를 각각 설계
MUX = > MULTIPLEXER 회로에서 입력되는 신호 중 어느 하나의 입력신호를 선택하여 출력회로에 실어 주 는 기능을 수행하는 데이터 선택 논리회로
DEMUX = > DEMULTIPLEXER, MULTIPLEXER의 정반대의 역할을 하는 논리회로

MUX 설계
library ieee;
use ieee.std_logic_1164.all;

entity Mux_4to1 is
port (a : in std_logic_vector(3 downto 0);
 Data : out std_logic;
 s : in std_logic_vector(1 downto 0));
end Mux_4to1;

architecture arc of Mux_4to1 is
begin
with s select
Data <= a(0) when "00",
       a(1) when "01",
       a(2) when "10",
       a(3) when "11",
'0' when others;
end arc;

위의 소스와 같이 MUX 는 SELECT 로 출력이 바뀌는 것을 알 수 있다. 




DEMUX 설계
library ieee;
use ieee.std_logic_1164.all;
 

entity Demux_1to4 is
port(a : in std_logic;
y : out std_logic_vector(3 downto 0);
sel : in std_logic_vector(1 downto 0));
end Demux_1to4;

architecture arc of Demux_1to4 is
begin
process (sel)
begin
y<="0000";
case sel is
when "00" => y(0)<=a;
when "01" => y(1)<=a;
when "10" => y(2)<=a;
when "11" => y(3)<=a;
when others=> y<="0000";
end case;
end process;
end arc;


VHDL Basic 3

우리가 Hardware 를 만들 때, 나중에 쓰기 위해 모듈을 만들거나, 사서 쓰는 경우가 있다. 모듈의 장점은 나중에 어디다 써도 분해 하지 않고 쓸 수 있다는 것이다. VHDL 언어도 이와 마찬 가지로 Component 라는 기능을 가지고 있다. 예를 들어, 디지털 시계를 만들 때, 초를 세는 부분, Segment 디스플레이 부분, Stopwatch 부분 등 따로 따로 분리해서 만들어 놓고 Component 로 합치면 디지털 시계가 만들어 지는 것이다. 

Component 
 - Component 로 합성할 Source 는 Main Source 와 같은 경로로 저장 되어 있어야 한다.
 - Architecture 아래에 놓여진다.
  ex)
architecture arc of x is 
component (모듈 부분 entity name) port ( a : in std_logic;
  d : out std_logic);
end component; 
* 모듈에서 port 가 a, b, c  가 입력이고 d 가 출력인데, 그중 a, d 만 필요하다면, 위와 같이 코딩 해주면 된다.

 - begin 후에 Main 부분의 포트와 Component 의 포트를 서로 연결해 주기만 하면 된다.
  ex)
begin
u0 : (모듈 부분 entity name) port map(모듈 포트 = > 연결 포트, 모듈 포트 => 연결 포트);
end arc;
* 단지 연결해 줄 뿐이다.  =>  ◀ 이 표시가 있다고 해서 대입이라는 의미가 절대 아니다
* 한 모듈을 여러 번 쓸 수 가 있다.


과제
library ieee;
use ieee.std_logic_1164.all;

entity ADD is
port( a,b,c: in std_logic;
sum,cout : out std_logic);
end ADD;

architecture arc of ADD is
begin
sum <= (a xor b)xor c ;
cout <= (a and b) or ((a xor b) and c);
end arc;

위 소스는 1비트 전가산기 소스이다. 다음을 참고하여 4비트 전가산기를 설계하라.



저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.08 00:30
크리에이티브 커먼즈 라이선스
Creative Commons License
AND, OR, NAND, NOR, XOR, XNOR 설계 예시

library ieee;
use ieee.std_logic_1164.all;

entity AAAA is
port(a, b : in std_logic;
    x  : out std_logic_vector(5 downto 0));
end AAAA;

architecture arc of AAAA is
begin
x(0) <= a and b;
x(1) <= a or b;
x(2) <= a nand b;
x(3) <= a nor b;
x(4) <= a xor b;
x(5) <= a xnor b;
end arc;
x : out std_logic_vector (5 downto 0);  <- ????

C 언어에서 배열과 같은 의미로 이해하면 빠를 듯 싶다. 
std_logic 형으로 여러개를 설계 하는 것보다, 같은 형태의 출력 핀이면 std_logic_vector 형이 간편하다.
입력도 마찬가지로 vector 형으로 정의가 가능하다

(5 downto 0) < =   000000     (왼쪽 첫 번째 비트가 5번, 오른쪽 마지막 비트가 0번)
(0 downto 5) < =   000000     (왼쪽 첫 번째 비트가 0번, 오른쪽 마지막 비트가 5번)  




VHDL Basic 2


VHDL 은 C 와 마찬가지로 조건문이 가능하다.

(1) IF ELSE 문 (괄호 안에 조건)
- IF (            ) THEN
- IF (  )THEN
 ELSIF(   ) THEN     < = 조건이 들어갈땐 ELSIF 
- IF (  ) THEN
 ELSE < = 조건이 없을 땐 ELSE 
* 마지막엔 항상 END IF 로 마무리를 해주는 센스!

(2) CASE 문
- CASE ( 대상   )   IS
WHEN " 상태  "   = > 출력 <=  값
WHEN OTHERS   = > 출력 <=  값
* 마지막엔 END CASE;

(3) FOR LOOP 문
- FOR I IN 0 TO 7 LOOP
Y(I) <= A(I) AND B(I);

(4) SELECT 문
WITH 대상 SELECT
출력 <= "값" WHEN 상태,
"값"    WHEN 상태,
"값" WHEN 상태,
"값" WHEN 상태;
* 마지막엔 END SELECT;
* VHDL에서 모든 조건문은 architecture 안에 process 문에 쓰여 져야 한다.
- 예
architecture arc of KITEL is
begin
process(a)   -- architecture 안에 process는 여러 개가 와도 된다.
begin   -- process 시작
if (a ="0")then   -- 조건문의 대상은 process(대상 ) 에 정의 되어야한다  
b <= '1';  -- 한 비트일 때는 ‘0’    2개 이상일 때는 “00”  
elsif(a ="1")then    
b <= '0';  -- 마땅히 조건이 없으면 NULL; 처리를 하여도 무방하다.
end if;
end process;              -- process 끝, process 가 여러개일 때는 병렬로 동시에 실행된다
end arc;  -- process 안에서는 순차 architecture안의 process는 병렬처리
과제
(1) 7segment Decoder 동작을 하는 7447 IC를 설계
(2) MUX 와 DEMUX 를 각각 설계













 

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.08 00:28
크리에이티브 커먼즈 라이선스
Creative Commons License
VHDL Basic 1
(1) 
 - 범용 IC : 일반적으로 쓰는 IC
 - 주문형 IC(ASIC): Application Specified Integrated Circuit
                          - 완전 : 개발비 ↑, 개발기간 ↑, LSI 급
                          - 반주문 : CAD설계, VLSI 급 => 완전형에 비해 칩면적이 더 크다

(2) 
 - PLD : Programmable Logic Device
          - 논리 기능을 직접 만들어 쓸 수 있는 IC
          - PROM : Programmable Read Only Memory : 한개의 Decoder, 이차원 OR
          - PLA : Programmable Logic Array : 입력 = AND 설계, 출력 OR설계
          - PAL : Programmable Array Logic : AND 설계, OR 고정, PLA 에 비해 속도↑
          - SPLD : Simple Programmable Logic Device : PAL 형식, GATE 200EA
          - CPLD : Complex Programmable Logic Device : 빠른 성능, 정확한 Timing 예측 
          - FPGA : Field Programmable Gate Array : GATE 수가 많다
CPLD 내부구조
FPGA 내부구조

- FPGA는 CPLD 에 비해 속도가 느리지만, GATE가 더 많다

(3) 칩 제조사
 - ALTERA : MAX, Flex, Apex
 - Xlinx : Virtex FPGA, Spartan
 - Vantis : Actel, Atmel, QuickLogic

(4)
VHDL 이란?
 - Very High speed integrated circuit Hardware Description Language 의 약자
 - 1981. 6~1993년 IEEE 제정
 - CAD 업계 및 IEEE 표준 언어
 - 칩의 집적화에 따라 VHDL 의 중요성 대두 (TR 수 : 486=100만개, 586=310만개, 686=55만개)

VHDL 이전?
 - AHPL(A Hareware Programming Language)
 - CDL(Computer Design Language)
 - C 언어
 - IDL (Interative Design Language)
 - ISPS(Instruction Set Processor Specification)
 - TDL(TEGAS HDL or Texas Instrument HDL)
 - UDL / I (Unfied Design Language for IC)
 - Verilog HDL
 - ZEUS
 - HILO

VHDL 특징
 - 전체적인 설계 비용↓, 쉬운 정보교환, 대규모 설계용이, 재사용이 쉬움
 - 미국 정부는 Hardware 문서화에 VHDL 사용
 - 유럽 연합에서도 채택

문제점
 - 설계 자체를 위한 것들을 위해서는 적합하지 않다
 - 정확한 Timing, 임계 경로의 계산이 어려움
 - 합성도구에 대한 지원 부족
 - 설계 도구들 간의 호환성 결여
 - Hardware Engineer 가 Software 설계 기법에 익숙치 못함
 - 아날로그 시스템 모델링의 어려움 => CAD 업체의 노력으로 극복 중

(5) VHDL 의 표현 방법
 동작적 모델링, 자료흐름 모델링, 구조적 모델링
   동작적 모델링 구조적 모델링 
 칩  알고리즘 MP, RAM, ROM 
 회로  미분 방정식 TR, R, L, C 
 게이트  부울 게이트 
 시스템 설계 명세  컴퓨터, 디스크 
 레지스터 RTL  ALU, 카운터, 레지스터 

(6)VHDL Language 의 특징
 - 대, 소문자 구별 X
 - 주석 은 --
 - Line 의 끝은 ; 
 - Space와 Tab으로 낱말 구분
 - Data Type 변형 용이

(7) VHDL 프로그래밍

AAAA.VHD

library ieee;      -- C언어의 Header File이라 생각하면 됨
use ieee.std_logic_1164.all; --ieee의 std_logic_1164.를 쓰겠다는 의미
   -- use ieee.std_logic_signed.all 도 있으며 다양함 

entity AAAA is             -- Entity 선언 다음에 오는 이름은 파일명과 같아야 한다
port (a, b : in std_logic;    -- 다르게 하고 싶다면
c : out std_logic);  -- Assignment-> Device-> General-> Top-level entity를 바꿔야 한다 
end AAAA;                 

architecture arc of AAAA is  -- arc 부분은 마음대로 쓸 수 있다.(ex :sample , ex 등) 
begin
c <= a and b;
end arc;

--> 사용할 Quartus 6.0은 ALTERA 사에서 WEB EDITION으로 무료로 제공하고 있다.
--> Project 시작시 저장 할 폴더를 귀찮더라도 폴더별로 정리를 하면 나중에 편하므로 폴더별로 저장할 것을 권장한다 



과제 
 AND, OR, NAND, NOR, XOR, XNOR 입력 2개 출력 6개로 설계 하고 시뮬레이션 확인
  


 







저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈

티스토리 툴바