28
VHDL 프로그래밍 VHDL 프로그래밍 11. 단순 디지털 회로 설계 한동일 학습 목표 학습 목표 버퍼 삼상태 버퍼의 동작 원리를 이해한다 버퍼 삼상태 버퍼의 동작 원리를 이해한다. std_logic 신호의 사용 이유를 이해한다. 입출력 버퍼의 동작 원리를 이해한다. 버스에 연결된 입출력 버퍼의 동작을 제어할 버스에 연결된 입출력 버퍼의 동작을 제어할 다. 유한 상태 기계의 상태 천이도 표현을 이해한다. 주어진 문제로부터 상태 천이도를 작성할 있다 주어진 문제로부터 상태 천이도를 작성할 있다. 상태 천이도를 VHDL 코드로 변환할 수 있다. 파일 입력문을 사용할 수 있다. 생성문을 활용할 있다 2/55 생성문을 활용할 있다.

11. 단순디지털회로설계 한동일dasan.sejong.ac.kr/~dihan/vhdl/VHDL11.pdf ·  · 2013-04-29상태천이도를VHDL 코드로변환할수있다. ... -- camera clock interface

Embed Size (px)

Citation preview

VHDL 프로그래밍VHDL 프로그래밍

11. 단순 디지털 회로 설계

한 동 일

학습 목표학습 목표버퍼 및 삼상태 버퍼의 동작 원리를 이해한다 버퍼 및 삼상태 버퍼의 동작 원리를 이해한다.

std_logic 신호의 사용 이유를 이해한다.

입출력 버퍼의 동작 원리를 이해한다.

버스에 연결된 입출력 버퍼의 동작을 제어할 수 있 버스에 연결된 입출력 버퍼의 동작을 제어할 수 있다.

유한 상태 기계의 상태 천이도 표현을 이해한다.

주어진 문제로부터 상태 천이도를 작성할 수 있다 주어진 문제로부터 상태 천이도를 작성할 수 있다.

상태 천이도를 VHDL 코드로 변환할 수 있다.

파일 입력문을 사용할 수 있다.

생성문을 활용할 수 있다

2/55

생성문을 활용할 수 있다.

버퍼(buffer) 설계버퍼(buffer) 설계

단순 버퍼(b ff ) 단순 버퍼(buffer) 출력 신호의 팬 아웃(fan out)을 증가시키는 용도

in out

in out

0 0

1 1

3/55

버퍼(buffer) 설계버퍼(buffer) 설계

단순 버퍼(b ff )의 사용 예 단순 버퍼(buffer)의 사용 예

architecture spartan3 top of spartan3 top isarchitecture spartan3_top of spartan3_top is

component BUFG

port ( I : in std logic;port ( I : in std_logic;

O : out std_logic );

end component;end component;

-- 중략

beginbegin

-- camera clock interface

camclk proc :camclk_proc :

BUFG port map ( I => camclk_in, O => camclk);

중략

4/55

-- 중략

버퍼(buffer) 설계버퍼(buffer) 설계

삼상태 버퍼(t i t t b ff ) 삼상태 버퍼(tri-state buffer)

enable in enable out

0 0 z

1 0 zin out

1 0 z

0 1 0

1 1 1

enable n in enable n outenable_n in enable_n out

0 1 z

in out1 1 z

0 0 0

5/55

1 0 1

버퍼(buffer) 설계버퍼(buffer) 설계

td l i td l i 형의 정의 std_logic, std_ulogic 형의 정의 IEEE 라이브러리의 std_logic_1164 패키지에 정의

type std_ulogic is ( 'U', -- Uninitialized'X', -- Forcing Unknown'0', -- Forcing 0'1', -- Forcing 1'Z' High ImpedanceZ , -- High Impedance 'W', -- Weak Unknown'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care

););

function resolved ( s : std_ulogic_vector ) return std_ulogic;

6/55

subtype std_logic is resolved std_ulogic;

버퍼(buffer) 설계버퍼(buffer) 설계

td l i 형의 9가지 값의 의미 std_ulogic 형의 9가지 값의 의미 'U' : 초기화가 안 되었을 경우의 기본값으로 사용됨

'X' : ‘0’값과 ‘1’ 값의 충돌로 값이 정의가 안 되는 경우

'0' : 0 :

'1' : 트랜지스터가 VCC 값이 됨

'Z' : 삼상태 버퍼 출력이 고저항 상태일 때 Z : 삼상태 버퍼 출력이 고저항 상태일 때

'W‘ : ‘L’값과 ‘H’ 값의 충돌로 값이 정의가 안 되는 경우

'L' : pull down 저항에 의해서 연결되어 외부 신호가 없을 때 ‘0’으로 출력되는 경우

'H' : pull up 저항에 의해서 연결되어 외부 신호가 없을때 ‘1’로 출력되는 경우

7/55

'-' : Don't care, 어떠한 값이 되어도 상관없는 경우

버퍼(buffer) 설계버퍼(buffer) 설계

l d 함수의 정의 resolved 함수의 정의function resolved ( s : std_ulogic_vector ) return std_ulogic is

variable result : std_ulogic := 'Z'; -- weakest state default

begin

if (s'LENGTH = 1) then

return s(s'LOW);

else

for i in s'RANGE loop

result := resolution_table(result, s(i));

end loop;

end if ;

return result;

8/55

end resolved;

버퍼(buffer) 설계버퍼(buffer) 설계

l ti t bl 의 내용 resolution table의 내용constant resolution_table : stdlogic_table := (

--| U X 0 1 Z W L H - | |

( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |

( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |

( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |

( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |

( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |

( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |

( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |

( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |

( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |

9/55

);

버퍼(buffer) 설계버퍼(buffer) 설계

삼상태 버퍼의 VHDL 표현 삼상태 버퍼의 VHDL 표현library ieee ;

use ieee.std_logic_1164.all ;

entity tribuf is

port (

i, enable : in std_logic;

o : out std_logic

);

end tribuf;

architecture behavioral of tribuf is

begin

o <= i when enable = '1' else 'Z';

10/55

end ;

버퍼(buffer) 설계버퍼(buffer) 설계

삼상태 버퍼의 테스트 벤치 구성 삼상태 버퍼의 테스트 벤치 구성library ieee; use ieee.std_logic_1164.all;

tit tb t ib f ientity tb_tribuf isend tb_tribuf;architecture sim of tb tribuf is_

component tribuf port ( i, enable : in std_logic;

t td l i )o : out std_logic );end component;signal i, enable : std logic; g , _ g ;

begini <= '0', '1' after 15 ns, '0' after 25 ns, '1' after 35 ns, '0' after 45 ns,

'1' ft 55 '0' ft 65 '1' ft 75 '0' ft 85'1' after 55 ns, '0' after 65 ns, '1' after 75 ns, '0' after 85 ns;enable <= '0', '1' after 20 ns, '0' after 40 ns, '1' after 70 ns, '0' after 90 ns;u0 : tribuf port map (i=>i, enable=>enable, o=>open);

11/55

p p ( , , p );end sim ;

버퍼(buffer) 설계버퍼(buffer) 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

12/55

버퍼(buffer) 설계버퍼(buffer) 설계

입출력 버퍼(IO b ff ) 입출력 버퍼(IO buffer)

enable

d_in data

d_in enable data d_out

0 0 z z_

1 0 z z

0 1 0 00 1 0 0

1 1 1 1

d_out

13/55

버퍼(buffer) 설계버퍼(buffer) 설계

입출력 버퍼의 VHDL 표현 입출력 버퍼의 VHDL 표현library ieee ;

use ieee.std_logic_1164.all ;

entity iobuf is

port ( d_in, enable : in std_logic;

d_out : out std_logic;

data : inout std_logic);

end iobuf;

architecture behavioral of iobuf is

begin

data <= d_in when enable = '1' else 'Z';

d_out <= data;

14/55

end ;

버퍼(buffer) 설계버퍼(buffer) 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

15/55

버퍼(buffer) 설계버퍼(buffer) 설계

버스의 공유 버스의 공유enable1

bus

data1d_in1

data1enable2

d_in2data2

d_out1

d out2…

16/55

d_out2

버퍼(buffer) 설계버퍼(buffer) 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

17/55

버퍼(buffer) 설계버퍼(buffer) 설계

잘못된 버스 제어 예 잘못된 버스 제어 예

18/55

유한 상태 기계 설계유한 상태 기계 설계

유한 상태 기계(fi it t t hi ) 유한 상태 기계(finite-state machine) 디지털 회로의 동작을 유한개의 상태와 상태 사이의 전

이 및 동작으로 서술하는 방법

유한 상태 기계의 분류 Moore Machine

유한 상태 기계의 출력이 현재 상태의 함수로 결정

VHDL에서 추천하는 설계 방식

Mealy machine 유한 상태 기계의 출력이 현재 상태와 입력의 함수로 결정

두 방식의 혼합 모델

19/55

유한 상태 기계 설계유한 상태 기계 설계

무어 방식의 상태 기계 무어 방식의 상태 기계

current

next state

state outputlogic

state

next outputstatelogic

register logic

input

nextstate

p

clk

20/55

유한 상태 기계 설계유한 상태 기계 설계

밀리 방식의 상태 기계 밀리 방식의 상태 기계

outputlogic

currentstate output

next statelogic

state registernext

t tinput

logic state

clk

21/55

유한 상태 기계 설계유한 상태 기계 설계

상태 천이도( t t t iti di ) 사용 형식 상태 천이도(state transition diagram) 사용 형식

transitionconditiontransition

t t

state 1 state 2

condition 1state

state 1

output 1

state 2

output 2

condition 2action

22/55

유한 상태 기계 설계유한 상태 기계 설계

유한 상태 기계 설계 예 신호기

pulse = ‘0’

유한 상태 기계 설계 예 : 신호기

red

p

r_on = ‘1’

pulse = ‘1’ pulse = ‘1’

green yellowpulse = ‘0’ pulse = ‘0’

green

g_on = ‘1’

yellow

y_on = ‘1’pulse = ‘1’

23/55

유한 상태 기계 설계유한 상태 기계 설계

신호기의 VHDL 표현 신호기의 VHDL 표현

type light_state is (red, green, yellow);signal current_state, next_state: light_state;-- 중략

state_register: process (dispclk, reset_disp_n)begin

if ( t di '0') thif (reset_disp_n='0') thencurrent_state <= red;

elsif (dispclk='1' and dispclk'event) thenelsif (dispclk 1 and dispclk event) thenif pulse = '1' then

current state <= next state;_ _ ;end if;

end if;

24/55

end process;

유한 상태 기계 설계유한 상태 기계 설계

신호기의 VHDL 표현 신호기의 VHDL 표현

next state logic : process (pulse, current state)_ _ g p (p , _ )begin

case current_state iswhen red => r_on <= '1'; g_on <= '0'; y_on <= '0';

next_state <= green;h > < '0' < '1' < '0'when green => r_on <= '0'; g_on <= '1'; y_on <= '0';

next_state <= yellow;when yellow => r on <= '0'; g on <= '0'; y on <= '1';when yellow > r_on < 0 ; g_on < 0 ; y_on < 1 ;

next_state <= red;when others => r_on <= '0'; g_on <= '0'; y_on <= '1';

next_state <= red;end case;

25/55

end process;

유한 상태 기계 설계유한 상태 기계 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

26/55

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기 설계 문제 패턴 검출기 설계 문제 클럭을이용하여 생성한 비트스트림이 지속적으로 입력

입력 예) 111101101011110110110110111010

입력 비트스트림에서 다음의 패턴을 검출 “011011”

위의 패턴이 입력될 경우 detect_flag를 ‘1'로 출력하고나머지 경우에는 ’0‘을 출력

위의 패턴이 연속적으로 입력될 경우에도 마지막 6번째‘1’이 입력될 때마다 detect_flag를 ‘1’로 출력

27/55

패턴 검출기의 설계패턴 검출기의 설계

상태 천이도 작성 예 상태 천이도 작성 예

28/55

패턴 검출기의 설계패턴 검출기의 설계

올바른 상태 천이도 올바른 상태 천이도

29/55

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기의 VHDL 표현

state_reg: process (dispclk, reset_disp_n)

패턴 검출기의 VHDL 표현

beginif (reset_disp_n='0') then

current state <= idle;

library ieee ;use ieee.std_logic_1164.all ;entity pattern detector is _ ;

elsif (dispclk='1' and dispclk'event) thencurrent_state <= next_state;

end if;

y p _port (

bitstream : in std_logic;detect flag : out std logic; end if;

end process;

t t t ( t t bit t )

detect_flag : out std_logic;reset_disp_n : in std_logic;dispclk : in std_logic);d tt d t t next_state : process (cur_state, bitstream)

begincase cur_state is

end pattern_detector;architecture behavie of pattern_detector istype state_type is

when idle => detect_flag <= '0';if bitstream = '1' then

next_state <= idle;

(idle, tap1, tap2, tap3, tap4, tap5, tap6);signal cur_state, next_state: state_type;begin

30/55

_else next_state <= tap1; end if;

g

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기의 VHDL 표현

when tap1 => detect_flag <= '0';

패턴 검출기의 VHDL 표현

when tap5 => detect_flag <= '0';if bitstream = '1' then

t t t < t 6

if bitstream = '1' thennext_state <= tap2;

else next state <= tap1; end if;next_state <= tap6;

else next_state <= tap1; end if;when tap6 => detect_flag <= '1';

_ p ; ;when tap2 => detect_flag <= '0';

if bitstream = '1' thennext state <= tap3;

if bitstream = '1' thennext_state <= idle;

else next state <= tap1; end if;

next_state < tap3;else next_state <= tap1; end if;

when tap3 => detect_flag <= '0';if bit t '1' th

_ p ; ;when others => detect_flag <= '0';

next_state <= idle;end case;

if bitstream = '1' thennext_state <= idle;

else next_state <= tap4; end if;end case;

end process;end ;

when tap4 => detect_flag <= '0';if bitstream = '1' then

next_state <= tap5;

31/55

_ pelse next_state <= tap1; end if;

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기의 테스트 벤치 구성 예 패턴 검출기의 테스트 벤치 구성 예

-- 중략bitstream <= '1', '1' after 10 ns, '1' after 20 ns, '1' after 30 ns,

'0' after 40 ns, '1' after 50 ns, '1' after 60 ns, '0' after 70 ns, '1' after 80 ns '0' after 90 ns '1' after 100 ns '1' after 110 ns1 after 80 ns, 0 after 90 ns, 1 after 100 ns, 1 after 110 ns, '1' after 120 ns, '1' after 130 ns, '0' after 140 ns, '1' after 150 ns,'1' after 160 ns, '0' after 170 ns, '1' after 180 ns, '1' after 190 ns,'0' ft 200 '1' ft 210 '1' ft 220 '0' ft 230'0' after 200 ns, '1' after 210 ns, '1' after 220 ns, '0' after 230 ns,'1' after 240 ns, '1' after 250 ns, '1' after 260 ns, '0' after 270 ns, '1' after 280 ns, '0' after 290 ns;

u0 : pattern_detector port map(bitstream => bitstream,

detect flag => opendetect_flag > open, reset_disp_n => rst_n, dispclk=>clk);

d i

32/55

end sim ;

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기의 시뮬레이션 파형 예 패턴 검출기의 시뮬레이션 파형 예

33/55

패턴 검출기의 설계패턴 검출기의 설계

파일 입력을 통한 검증 파일 입력을 통한 검증 짧은 데이터 :

대용량 데이터의 테스트 경우 파일 처리 필요 데이터가 파일 형태로 저장되어 있는 경우

34/55

패턴 검출기의 설계패턴 검출기의 설계

패턴 검출기의 테스트 벤치 구성 예 패턴 검출기의 테스트 벤치 구성 예use STD.TEXTIO.all;

중략-- 중략process (dispclk, reset_disp_n)file INFILE_BS : text open read_mode is "bitstream.txt";

i bl b l li i bl b i t i t 0 t 1variable bs_val : line; variable bs_int : integer range 0 to 1;begin

if (reset_disp_n='0') thenbitstream <= '0';

elsif (dispclk='1' and dispclk'event) thenif not (endfile(INFILE BS)) then( ( _ ))

readline(INFILE_BS, bs_val);read(bs_val, bs_int);

end if;end if;if bs_int = 0 then bitstream <= '0';else bitstream <= '1'; end if;

end if;

35/55

end if; end process;

패턴 검출기의 설계패턴 검출기의 설계

파일 입력을 이용한 패턴 검출기의 시뮬레이션 파형 파일 입력을 이용한 패턴 검출기의 시뮬레이션 파형

36/55

패턴 검출기의 설계패턴 검출기의 설계

파일 입력을 이용한 패턴 검출기의 시뮬레이션 파형 파일 입력을 이용한 패턴 검출기의 시뮬레이션 파형

37/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

디지털 데이터의 동기 신호 정보 표현 디지털 데이터의 동기 신호 정보 표현

HSYNC

DigitalD

1280T362T4T 4T

EAV SAV Video DataBlanking Codewords EAVDataStream

eav0000FF sav0000FF

38/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

디지털 데이터의 EAV/SAV 시퀀스 정보 디지털 데이터의 EAV/SAV 시퀀스 정보

4567 0123Bit number

MSB LSB

1111 1111FF

0000 000000

00 0000 0000

HVF1 P0P1P2P3eav/sav

39/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

동기 신호 검출기 설계 문제 동기 신호 검출기 설계 문제 클럭을이용하여 이용하여 생성한 영상 데이터 스트림이

지속적으로 입력 입력 예) 23 35 129 210 255 0 0 80

입력 영상 데이터 스트림에서 다음의 패턴을 검출 255 0 0

위의 패턴이 입력될 경우 detect_flag를 ‘1'로 출력하고나머지 경우에는 ’0‘을 출력

40/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

상태 천이도 상태 천이도

41/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

42/55

디지털 동기 신호 검출기 설계디지털 동기 신호 검출기 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

43/55

ALU의 설계ALU의 설계

ALU의 종류 및 기능 ALU의 종류 및 기능

44/55

ALU의 설계ALU의 설계

ALU 설계 시 고려사항 ALU 설계 시 고려사항 각각 4비트의 두 개의 입력 데이터

A(3 downto 0), B(3 downto 0)

자리 올림 데이터 입력 Cn, 출력 Cn+4

입력 제어 신호 S(2 downto 0)

4비트의 출력 데이터 F(3 downto 0)

45/55

ALU의 설계ALU의 설계

자리 올림과 자리 빌림 규칙 자리 올림과 자리 빌림 규칙

82

뎃셈 연산

82

뺄셈 연산

55 5580 5682+ 17

99

82+ 17+ 1

00

55- 55

00

55- 55- 1

99

80+ 17+ 1

98

56- 55- 1

0099 001

00 99-1

Cn = ‘0’ Cn = ‘1’ Cn = ‘1’ Cn = ‘1’ Cn = ‘0’ Cn = ‘0’

98 00

Cn 0 Cn 1 Cn 1 Cn 1 Cn 0 Cn 0Cn+4 = ‘0’ Cn+4 = ‘0’ Cn+4 = ‘1’ Cn+4 = ‘1’ Cn+4 = ‘1’ Cn+4 = ‘0’

46/55

ALU의 설계ALU의 설계

ALU의 VHDL 표현library ieee;

ALU의 VHDL 표현

use ieee.std_logic_1164.all ;use ieee.std_logic_unsigned.all;entity ls382a isyport ( cn : in std_logic;

s : in std_logic_vector(2 downto 0);a, b : in std logic vector (3 downto 0);a, b : in std_logic_vector (3 downto 0);f : out std_logic_vector(3 downto 0);cn4: out std_logic);

end;end;architecture behavioral of ls382a is

constant CLEAR : std_logic_vector(2 downto 0) := "000";B MINUS A d l i (2 d 0) "001"constant B_MINUS_A : std_logic_vector(2 downto 0) := "001";

constant A_MINUS_B : std_logic_vector(2 downto 0) := "010";constant A_PLUS_B : std_logic_vector(2 downto 0) := "011";

47/55

-- 중략

ALU의 설계ALU의 설계

ALU의 VHDL 표현 계속begin

ALU의 VHDL 표현 - 계속

process (s, a, b, cn)begin

case s iswhen CLEAR => f <= "0000"; cn4 <= '0';when B_MINUS_A => -- 중략when A MINUS B => -- 중략when A_MINUS_B 중략when A_PLUS_B => -- 중략when A_XOR_B => f <= a XOR b; cn4 <= cn;when A OR B => f <= a OR b; cn4 <= cn;when A_OR_B => f <= a OR b; cn4 <= cn;when A_AND_B => f <= a AND b; cn4 <= cn;when PRESET => f <= "1111"; cn4 <= cn;

h th f "0000" 4 '0'when others => f <= "0000"; cn4 <= '0';end case;

end process;

48/55

end behavioral;

ALU의 설계ALU의 설계

시뮬레이션 파형 예 시뮬레이션 파형 예

49/55

ALU의 설계ALU의 설계

ALU의 8비트 확장 ALU의 8비트 확장

A(3:0) B(3:0)A(7:4) B(7:4)

ALU(U1)S ALU(U0)S

c(0)c(4)c(8)F(3:0)F(7:4)

c(0)c(4)c(8)

50/55

ALU의 설계ALU의 설계

8비트 ALU의 VHDL 표현 8비트 ALU의 VHDL 표현

architecture behavioral of ALU 8bit isarchitecture behavioral of ALU_8bit issignal carry : std_logic;component ls382a

t ( i td l i i td l i t (2 d t 0)port ( cn : in std_logic; s : in std_logic_vector (2 downto 0);a, b : in std_logic_vector (3 downto 0); f : out std_logic_vector (3 downto 0); cn4: out std_logic);

end component;beginu0 alu : ls382a port map ( cn => cin, s(2 downto 0) => s(2 downto 0), _ p p ( , ( ) ( ),

a(3 downto 0) => a(3 downto 0), b(3 downto 0) => b(3 downto 0), f(3 downto 0) => f(3 downto 0), cn4 => carry);

u1 alu : ls382a port map ( cn => carry s(2 downto 0) => s(2 downto 0)u1_alu : ls382a port map ( cn > carry, s(2 downto 0) > s(2 downto 0), a(3 downto 0) => a(7 downto 4), b(3 downto 0) => b(7 downto 4), f(3 downto 0) => f(7 downto 4), cn4 => cout);

end behavioral;

51/55

end behavioral;

ALU의 설계ALU의 설계

8비트 ALU의 시뮬레이션 파형 예 8비트 ALU의 시뮬레이션 파형 예

52/55

ALU의 설계ALU의 설계

생성문을 이용한 32비트 ALU

a, b : in std_logic_vector (31 downto 0);

생성문을 이용한 32비트 ALU

-- 중략begincarry(0) <= cin;y( ) ;g0 : for i in 0 to 7 generate

u0_alu : ls382aport map (port map (

cn => carry(i),s(2 downto 0) => s(2 downto 0),(3 d t 0) > (4*i+3 d t 4*i)a(3 downto 0) => a(4*i+3 downto 4*i),

b(3 downto 0) => b(4*i+3 downto 4*i),f(3 downto 0) => f(4*i+3 downto 4*i),cn4 => carry(i+1));

end generate;cout <= carry(8);

53/55

y( )end behavioral;

ALU의 설계ALU의 설계

제네릭과 생성문을 이용한 ALUgeneric (N : integer := 8);port ( a b : in std logic vector (4*N 1 downto 0);

제네릭과 생성문을 이용한 ALU

port ( a, b : in std_logic_vector (4*N-1 downto 0);-- 중략

begin(0) < icarry(0) <= cin;

g0 : for i in 0 to N-1 generateu0_alu : ls382a

port map (cn => carry(i),s(2 downto 0) => s(2 downto 0),( ) ( )a(3 downto 0) => a(4*i+3 downto 4*i),b(3 downto 0) => b(4*i+3 downto 4*i),f(3 downto 0) => f(4*i+3 downto 4*i),f(3 downto 0) f(4 i+3 downto 4 i),cn4 => carry(i+1));

end generate;cout <= carry(8);

54/55

cout <= carry(8);end behavioral;

생성문 사용 시 콤포넌트 연결 구조생성문 사용 시 콤포넌트 연결 구조

55/55