73
VLSI 시시시 시시 © 시시시시 , 2008 시 1 VLSI 시시시 시시 Project Motion Estimator 시시

VLSI 시스템 설계 Project

  • Upload
    nodin

  • View
    80

  • Download
    1

Embed Size (px)

DESCRIPTION

VLSI 시스템 설계 Project. Motion Estimator 설계. Motion Estimation (ME). 블록별 움직임 추정 기본 블록 : 8 x 8 Block 탐색 윈도우 : 16 x 16 Block 탐색 알고리즘 : Full Search 최종 출력 데이터 움직임 벡터 : MVx, MVy. Full search (1). 탐색 방법. -. Full search (2). - PowerPoint PPT Presentation

Citation preview

Page 1: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 1

VLSI 시스템 설계 Project

Motion Estimator 설계

Page 2: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 2

Motion Estimation (ME)

• 블록별 움직임 추정– 기본 블록 : 8 x 8 Block– 탐색 윈도우 : 16 x 16 Block– 탐색 알고리즘 : Full Search

• 최종 출력 데이터– 움직임 벡터 : MVx, MVy

Page 3: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 3

Full search (1)

• 탐색 방법

-

Page 4: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 4

Full search (2)

• current block 과 탐색 윈도우 내에 있는 모든 블록들 과의 SAD 값을 구하는 탐색 방법이다 .

• 계산 구조– 매 클럭 데이터를 처리 하기 위한 구조로 설계한다 .– 한 클럭에 처리 되는 데이터는 4x1 block 이다 .

1 clk

1 clk

1 clk

1 clk

4 clk 당 4x4 block의 SAD 값 계산

Page 5: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 5

Frame 정보

• 실습에 사용된 영상 – 32 x 32 Block

한 픽셀 정보 표시 비트- 8 bit

Page 6: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 6

Frame 정보

• 메모리에 저장된 방법

012

●●●

101112

●●●

255

32 bit

[7:0]

Page 7: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 7

실 습 과 제 Ⅰ

Sum of Absolute Differences(SAD) UNIT

Page 8: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 8

TOP Block Diagram (ME)

Mem_cur Mem_ref

AGU

Top_sad_unit

CC

cur_data ref_data

start_tran data_bus

sig_sad_out sad_out

clk reset enable

cur_addr ref_addr

mvx mvy

Mem_cur moduleMem_ref module

AGU moduleSAD moduleCC module

MODULE

8 bit : cur_addr, ref_addr32 bit : cur_data, ref_data

1 bit : start_tran64 bit : data_bus

1 bit : sig_sad_out14 bit : sad_out4 bit : mvx, mvy

SIGNAL

Page 9: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 9

TOP Block (ME)

INPUT - Clock, Reset, EnableOUTPUT - mvx : Motion Vector X - mvy : Motion Vector Y

TOP module

INPUT - cur_addr : 현재 블록 주소 정보OUTPUT - cur_data : 현재 블록 데이터

Mem_cur module

INPUT - ref_addr : 참조 블록 주소 정보OUTPUT - ref_data : 참조 블록 데이터

Mem_ref module

INPUT - cur_data : 현재 블록 데이터 - ref_data : 참조 블록 데이터OUTPUT - start_tran : 현재 블록 데이터 전달 신호 - data_bus : 현재 블록 데이터와 참조 블록 데이터 출력 - cur_addr : 현재 블록 주소 정보 - ref_addr : 참조 블록 주소 정보

AGU module

Page 10: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 10

TOP Block (ME)

INPUT - start_tran : 현재 블록 데이터 전달 신호 - data_bus : 현재 블록 데이터와 참조 블록 데이터OUTPUT - sig_sad_out : SAD 연산 결과 출력 신호 - sad_out : SAD 연산 결과

SAD module

INPUT - sig_sad_out : SAD 연산 결과 출력 신호 - sad_out : SAD 연산 결과OUTPUT - mvx : Motion Vector X - mvy : Motion Vector Y

CC module

AGU module

Page 11: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 11

SAD Top Block Diagram

SAD unit Block Diagram

2's complement

Reg_file

Carry Lookahead Adder

Absolute unit

Carry Lookahead Adder

Carry Lookahead Adder

Carry Lookahead Adder

Acc_adderCarry

LookaheadAdder

clk reset cur_startdata_in[63:0]

sig_sad_out sad_out[13:0]

counter

Page 12: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 12

Ripple Carry Adder

• n- 비트 캐리 전파 덧셈기 (RCA : Ripple Carry Adder) 의 블록 다이어그램

• n 개의 full adder(FA) 를 직렬로 연결하여 구성• 각 carry-out 의 지연시간으로 인하여 비트수가 증가함에 따라

계산지연시간이 선형적으로 증가

FA

A0 B0

C0

S0

FAFA

An-1 Bn-1

Sn-1

A1 B1

C1

S1

. . .

. . .

Cn-2

Page 13: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 13

Carry Lookahead Adder (1)

• Carry Lookahead Adder (CLA) – FA 의 캐리를 미리 예측하여 계산 결과를 구하는 덧셈기 (RCA

의 단점 극복 )

• i 번 째 stage 에 서 의 carry generate function(Pi), carry

propagate function(Gi):

– Gi : i 번째 stage 에서의 carry-in 에 관계없이 발생하는 주캐리 (primary carry) 의 유무를 나타내는 함수

– Pi : i 번째 stage 에서의 carry-in 이 carry-out 으로 되는지 를 나타내는 함수

iii BAG

iii BAP

Page 14: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 14

Carry Lookahead Adder (2)

• i 번째 stage 에서의 덧셈합

• i 번째 stage 에서의 carry-out

• Pi 와 Gi 를 이용한 Si 와 Ci 의 재표현

• Pi 와 Gi 는 동시 발생이 가능하므로 모든 stage 의 carry-out 은 stage간의 전달 지연 없이 구함

1 iiii CBAS

1 iiiiii CBABAC

1 iii CPS

1 iiii CPGC

Page 15: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 15

Carry Lookahead Adder (3)

• 16- 비트 CLA 의 설계 트리

– CLA 블록에서 carry-in 의 입력수가 통상 허용되는 fan-in 을 초과하므로 4- 비트 BCLU (Block CLU) 와 8- 비트 CLU 로 나누어 모델링

TOP_CLA

PGU BCLU CLU SU

PGU

BCLU

CLU

SUa

b

cinc

s

cout

c

p

gps

gs

Page 16: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 16

Carry Lookahead Adder (4)

• 캐리 전달함수 및 발생함수 발생기 (PGU)– 각각 16 비트의 P, G 신호 동시에 출력

PGU a

b

p

g16

16

16

16

module name : pgu_16bit

Input (16bit) : a, bOutput (16bit) : p, g

iii BAG

iii BAP

Page 17: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 17

Carry Lookahead Adder (5)

Input a, b

Output p, g

a : 0011110110111011b : 1010001110111101

a : 1100011000101011b : 0011011110111110

p : 1001111000000110g : 0010000110111001

p : 1111000110010101g : 0000011000101010

• PGU

Page 18: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 18

Carry Lookahead Adder (6)

• 블록 캐리 예측기 (BCLU)– 16- 비트 CLU 의 fan-in 문제를 고려 ,

– 4 개의 4- 비트 BCLU 와 1 개의 CLU 를 이용 , 2- 레벨로 구성

4bit BCLU

CLU

4bit BCLU·····

·····

c0c1c2

c3c7

c4c5c6

ps0 gs0ps1 gs1

Page 19: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 19

Carry Lookahead Adder (7)

module name : bclu_16bit

Input (1bit) : cinInput (4bit) : p, g

Output (3bit) : cOutput (1bit) : ps, gs

• BCLU

•BCLU unit 은 4 비트씩의 P 와 G, 그리고 1 비트의Cin 을 입력으로 취하여 3 비트의 캐리 (C) 와 블록 전달함수 (ps) 와 블록 발생 함수 (gs) 의 출력을 가진다 .

cn = gn + pn·cn-1

ps = p0 · p1 · p2 · p3

gs = g3 + g2 · p3 + g1 · p3 · p2 + g0 · p3 · p2 · p3

Input cin = 1’b0, p, g

Output c, ps, gs

Page 20: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 20

Carry Lookahead Adder (8)

• 캐리 예측기 (CLU)

module name : clu_16bit

Input (1bit) : cinInput (4bit) : ps, gs

Output (3bit) : c

•CLU unit 은 전체 16 비트 덧셈기의 캐리인과 4 개의 BCLU 로부터 출력 ps 와 gs 를 입력으로 하며 총 3 비트의 캐리 신호를 출력시킨다 .

c4k+3 = gsk + gsk-1·psk-1 + · · · + gs0·psk·psk-1· · ·ps1 + cin · psk · · · ps0

Input cin, ps, gs

Output c

Page 21: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 21

Carry Lookahead Adder (9)

• 덧셈 블록 (SU)

module name : su_16bit

Input (15bit) : cInput (1bit) : cinInput (16bit) : p

Output (16bit) : s

•SU unit 은 16 비트 p 와 16 비트 c 의 입력을 받아 16 비트 덧셈 합을 출력으로 한다 .

s = p xor c

Input cin, c, p

Output s

Page 22: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 22

Carry Lookahead Adder (10)

• CLA top block

module name : cla_16bit

Input (16bit) : a, bInput (1bit) : cin

Output (16bit) : s

•Top block 은 16 비트의 두 입력을 받아 16 비트의덧셈 결과를 출력한다 . 전체 캐리 아웃은 고려하지않았다 . 전체 block diagram 을 참고하여 각각의모듈을 연결한다 .

Input a, b, cin

Output sCarry out

Page 23: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 23

Register File (1)

•Register file

module name : reg_file

Input (1bit) : clk, reset, cur_startInput (64bit) : data_in

Output (64bit) : cur_data, ref_dataOutput : cnt1, cnt2

•Register 모듈은 64 비트의 데이터를 입력 받아서 8 클럭 동안 current block 데이터를 register 에 저장하고 이 후에는 current block 데이터와 referenceblock 데이터를 출력으로 내보낸다 .

CurrentData

register

ReferenceData

register

Counter

Register fileclk

reset

cur_start

data_in

cnt1

cnt2

cur_data

ref_data

Page 24: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 24

Register File (2)

카운터의 출력 중 cnt, cnt0 두 개의 출력을 사용하여 cnt 가 0~7 까지 현재 블록의 정보를 current register 8 개에 저장하고 , cnt0 가 8~16 까지 현재 블록의 정보와 참조 블록의 정보를 출력으로 내보낸다 . 이 때 register file 에 들어오는 입력을dat_in_tmp 에 저장하여 한 클럭 후에 current register 에 저장하고 register file 의 출력으로 사용한다 .count_16

input : clk, reset, load(cur_start) output : cnt_out(cnt), cnt_out0(cnt0), cnt_out1(cnt1), cnt_out2(cnt2)

cnt0 값에 의해 register file 의 출력 값이 정해지지 않을 경우에는 Hiz 를 출력으로 내보낸다 .

•Register file

Page 25: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 25

Register File (3)

Input clk, reset, cur_start, data_in

Output cur_data, ref_data Hiz output

•Register file

Page 26: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 26

2’s Complement

module name : twos_com

Input (8bit) : ref_data_8bit

Output (16bit) : com_out

•입력으로 들어오는 8bit unsigned 참고 DATA 값을 16bit signed 값으로 전환하고 이 값의 보수 값을 구한다 .

• 2’s complement

Input ref_data_8bit

Output com_out 146 → -146 23 → -23 200 → -200

Page 27: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 27

Absolute Block

module name : abs_mode

Input (10bit) : abs_in

Output (10bit) : abs_out

•첫 번째 ADDER 로부터 얻은 DATA 값(10 비트 값만을 취함 ) 의 절대값을 구한다 .

• Absolute

Input abs_in

Output abs_out -393 → 393 362 → 362 -118 → 118

Page 28: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 28

SAD Top Block (1)

Register file 의 입 · 출력과 top block 을 연결한 후 , 이 값을 complement unit 에 연결 한다 . 전체 Adder 에 대해서 캐리인은 ‘ 0’ 으로 정해주고 complement unit 의결과값을 첫 번째 Adder (8 개 ) 에 연결한다 . 이 결과를 Absolute unit 에 연결하여절대 값을 구하고 , 이 결과를 두 번째 Adder(4 개 ) 에 연결하여 덧셈 결과를 구한다 .이 값을 세 번째 Adder(2 개 ) 에 연결하고 이 결과를 네 번째 Adder(1 개 ) 에 연결하여8 X 1 의 결과를 얻는다 . 이렇게 얻은 결과 (8 X 1 의 결과 8 개 ) 를 더하여 8 X 8 에 대한 SAD 값을 구하여 출력한다 . 카운터로부터 얻은 두 개의 카운터 값 (cnt1, cnt2) 를 이용하여 최종 SAD 결과가출력될 때마다 CC Block 의 입력이 되는 enable (sig_sad_out) 신호를 생성한다 .

module name : top_sad_unit

Input (1bit) : clk, reset, cur_startInput (64bit) : data_in

Output (1bit) : sig_sad_outOutput (14bit) : sad_out

• SAD top

Page 29: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 29

SAD Top Block (2)

Input clk, reset, cur_start, data_in

Output sad_out, sig_sad_out

Current block dataReference block data SAD Value

• SAD top

Page 30: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 30

실 습 과 제 Ⅱ

Motion Vector Generation

Page 31: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 31

MV generation block

clk

reset

en

SAD

[13:0]

MV_X

[3:0]

MV_Y

[3:0]

MV generation

count

Compare

MV_gen

Count

[6:0]

exch

SAD 의 입력을 받아서 Search Window 내에서 SAD 값이 가장 적은 부분의 MV 값을 생성 .

Page 32: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 32

용도 : Search Window 내에서의 MB 의 이동 횟수를 셈 입력 신호 : clk, reset, en

en : 전 단인 SAD 를 구하는 블록에서 새로운 SAD 가 유효할 때마다 전송됨 ,

en 신호가 들어올 때마다 count

출력 신호 : count[6:0]

Counter (1)

clk

reset

en

Counter

Count

[6:0]

Page 33: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 33

Counter (2)

하나의 Search Window 내에서 MB 가 이동 할 수 있는 횟수를 count 하나의 Search Window 내에서 총 81 개의 MV 가 나옴 MB 가 Search Window 내에서 왼쪽 윗 부분부터 이동을 하기 때문에 이 부분의

count 가 1 이 되고 이동을 하면서 Search Window 의 마지막 부분에 도달했을 때에는 count 가 81 이 됨

Count : 81

Count : 1

Search Window16x16

Current MB8x8

Page 34: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 34

Counter (3)

1. 총 81 개를 count 하고 초기화 됨

2. Counter 는 초기 상태 0 을 유지 하고 있다가 en 신호가 들어올 때 count

Page 35: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 35

Compare (1)

clk

reset

en

SAD [13:0]

Compareexch

용도 : 현 MB 가 Search Window 에서 이동하면서 계산되어 나오는 SAD 의 최소값을 구함

입력 신호 : clk, reset, en, SAD[13:0] en : 전 단인 SAD 를 구하는 블록에서 새로운 SAD 가 유효할 때마다 전송됨

en 신호가 들어올 때마다 count SAD[13:0] : 전 단에서 들어오는 SAD 값 ,

출력 신호 : exch exch : 새로 들어온 SAD 값이 compare 에서 가지고 있던 이전 블록의

최소값보다 작다면 exch 신호를 내보내서 mv 값을 변경시킴

Page 36: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 36

Compare (2)

입력으로 SAD 값을 받음 Compare_old 는 처음에

최대값을 가지고 있음-> 현 Search Window 의 첫

SAD 가 들어오면 compare_old 에 SAD 값을 넣기 위함

->Search Window 가 바뀌면 다시 최대값으로 변함

Compare block 에서 새로 들어온 SAD 와 compare_old 를 서로 비교 SAD 가 더 작으면

compare_old update, exch 신호 high

SAD 가 더 크면 compare_old 그대로 유지 , exch 신호 low

compareold

SADSAD [13:0]

compare

exch

Page 37: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 37

Compare (3)

1. Compare 는 초기에 최대값을 가지고 있음 .

2. Compare 는 Search Window 가 바뀌기 전에 비교할 값을 최대값으로 바꿈 .-> 다음 Search Window 의 처음 SAD 값으로 비교값을 update 하기 위함

Page 38: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 38

Compare (4)

3. 비교값보다 SAD 값이 크면 exch 값이 high, 비교값은 SAD 값으로 update.

4. 비교값보다 SAD 값이 크면 exch 값이 low, 비교값은 그대로 유지 .

Page 39: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 39

MV_generation (1)

용도 : 전 블록에서 count 와 exch 입력을 받아 그에 맞는 MV 를 생성 .

MB 가 Search Window 의 왼쪽 위부터 검색을 하므로 초기 값은 -4, -4 를 가짐

입력 신호 : clk, reset, count[6:0], exch Count : count 에 따라 MV 위치 변화 Exch : MV 교체 신호 .

출력 신호 : MV_X[3:0], MV_Y[3:0]

MV_X

[3:0]

MV_Y

[3:0]

MVgeneration

Count

[6:0]

exch

clk

reset

Page 40: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 40

Compare 블록에서 나온 exch 신호와 Counter 블록에서 나온 count 신호를 이용해 MV 값을 생성

Exch 신호는 SAD 값이 생성 될 때마다 high 가 되며 , 그 때 count 로 현재 MB 가 Search Window 의 어디에 있는지를 알 수 있음

Search Window 내에서 갱신되는 MV 값을 가지고 있다가 카운트가 마지막에 도달하면 MV 값을 전송함

MV_generation (2)

MV_X

[3:0]

MV_Y

[3:0]

MVgeneration

Count

[6:0]

exch

clk

reset

Page 41: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 41

MV_generation(3)

• MV 값 생성 원리– exch 값이 high 가 될 때마다 count 의 값을 참조해서 MV 값을 생성

(case 문 이용 )• 예 ) count 가 1 일 경우 (-4,-4),

count 가 9 일 경우 (-4,4), count 가 81 일 경우 (4,4)

– SAD 가 모든 블록에 대해서 동일하다면 MV 값은 (0,0) 이어야 함

Count : 81

Count : 1

Search Window16x16

Current MB8x8

-4,4, count9

-4,2, count7

-4,0, count5

-4,-4, count1

Page 42: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 42

MV_generation (4)

1. 초기값 (-4,-4), exch 신호가 high 이면 그 때의 count 수에 따라서 MV 값 결정

2. Count 가 81 이 되면 하나의 Search Window 가 끝났기 때문에 MV 가 초기화 됨

Page 43: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 43

실 습 과 제 Ⅲ

Address Generation Unit(AGU)

Page 44: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 44

Memory (1)

• 실습에 사용된 메모리– current frame

mem_cur

CLK

WE

A

SPO

D

– CLK : 클럭– WE : write enable (1 이면 쓰기 , 0 이면 읽기 )– A : 주소– D : 메모리에 쓸 data– SPO : 메모리에서 읽어온 data

Page 45: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 45

Memory (2)

• 실습에 사용된 메모리– reference frame

mem_ref

CLK

WE

A

SPO

D

– CLK : 클럭– WE : write enable (1 이면 쓰기 , 0 이면 읽기 )– A : 주소– D : 메모리에 쓸 data– SPO : 메모리에서 읽어온 data

Page 46: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 46

Address Generation Unit (AGU) (1)

• 메모리로부터 데이타를 읽기 위한 주소 생성 유닛

주소를 생성해서 메모리의 데이타를 받고 필요한 데이타 값을 가공하여 다음 모듈로 넘기는 동작을 한다 .

– clk : posedge 에 동기화하여 동작– rst : set 경우 초기화– enable : set 유지되는 동안 동작

– data_bus : 4 x 1 블록의 데이터 (64bit) 가 clk 당 전송– start_tran : 현재 블록의 데이터가 전송 되는 동안 set

AGUenable

cur_addr

ref_addr

data_bus

start_tran

clk

rst

cur_data

ref_data

Page 47: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 47

Address Generation Unit (AGU) (2)

• 메모리와의 연결

AGUenable

cur_addr

ref_addr

data_bus

start_tran

clk

rst

cur_data

ref_data

mem_cur

CLK

WE

A

SPO

D

mem_ref

CLK

WE

A

SPO

D

Page 48: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 48

Address Generation Unit (AGU) (3)

• 출력 데이타

– data_bus : 4 x 1 블록 전송– start_tran : 세 가지 의미

• 데이터가 전송 시작 알림• set 되어있는 동안은 current block 데이터가 전송 .• clear 되어있는 동안은 reference block 데이터가 전송 .

– 다음 모듈에서 전송된 데이타를 가지고 SAD 값을 생성한다 .

Page 49: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 49

AGU 구조

• AGU 모듈의 두가지 기능– 메모리 액세스를 위한 어드레스 생성 .

– SAD 계산을 위한 data 를 다음 단에 전송 .

Page 50: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 50

현재 프레임 주소 생성 (1)

• 실습 (I)– 메모리로 부터 읽어올 타이밍을 발생 시키는 모듈 설계

ctrl_cur_addr_genenable

get_cur_row_block

cur_block_cnt

cnt_1block

clk

rst

– get_cur_row_block : 어드레스 생성 타이밍 .– cur_block_cnt : 처리중인 현재 블록 번호 .– cnt_1block : current 의 한 블록을 처리하는 동안의 카운트 .

모듈간의 동기화를 담당한다 .

설계에서 만들어야 할 타이밍 시기

Page 51: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 51

현재 프레임 주소 생성 (2)

• ctrl_cur_regAB 모듈– 내부에 레지스터 A,B (32bit x 8) 를 둔다 .

– 이 두 레지스터에 current block 의 데이터를 저장해 둔다 .

– 데이터 전송이 필요할 때 레지스터의 내용을 읽어 전송한다 .

01234567

A

01234567

B

Page 52: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 52

현재 프레임 주소 생성 (3)

• 현재 블록을 읽어오는 시기– 한 개의 블록에 대해서 탐색하는데 걸리는 클럭 수 : 672 clk

• 최초 16 clk 동안 현재 블록에 대한 정보를 읽어 온다 .

• 이와 동시에 탐색윈도우 내 첫 블록의 정보를 읽어 온다 .

• 현재 블록 정보를 전송하기 시작 .

• 이와 동시에 다음 참조 블록을 읽어 오기 시작 .

• 데이터를 재사용하기 위해서 한 픽셀씩 쉬프트 하면서 참조 블록을 재전송

설계에서 만들어야 할 타이밍 시기

C D E F

0 1A B

Page 53: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 53

현재 프레임 주소 생성 (4)

• 현재 프레임의 블록 넘버 (cur_block_cnt)– 한 블록에 연산을 마친 후 블록 넘버를 증가 시킨다 .’

– 한 블록 탐색 시 걸리는 클럭 수 : 672 clk

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

Page 54: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 54

현재 프레임 주소 생성 (5)

• 실습 (II)– 타이밍 신호를 기준으로 주소 생성 모듈 설계

cur_block_addr_genget_cur_row_block

cur_addr

clk

rst

cur_block_cnt

– cur_block_cnt : 처리중인 현재 블록 번호 .– get_cur_row_block : 주소 생성 타이밍 .– cur_addr : 타이밍 신호가 들어올 때 블록 번호에 맞게 주소 출력 .

설계에서 만들어야 주소

Page 55: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 55

현재 프레임 주소 생성 (6)

• 주소 생성 방법– 세로로 8 씩 증가하는 점을 이용– current 의 한 블록 8x8

– 0, 8, 16 ... 56, 1, 9 ...

16 clk, 현재 블록 데이터 읽기

Page 56: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 56

현재 프레임 데이터 전송 (I)

• 실습 (III)– cnt_1block 에 맞추어 데이터를 레지스터 AB 에 저장 및 데이터 전송 모듈 설계

ctrl_cur_regABcur_data_from_mem

data_bus_cur

clk

cnt_1block

– data_bus_cur : cnt_1block 보고 타이밍에 맞춰 데이터 출력설계에서 전송해야 할 시기

설계에서데이터 입력 받는 시기

Page 57: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 57

현재 프레임 데이터 전송 (II)

• 데이터 전송 방법– 세로로 8 씩 증가하는 점을 이용– current 의 한 블록 8x8

– 0, 8, 16 ... 56, 1, 9 ...

8 clk, 현재 블록 데이터 전송

16 clk, 현재 블록 데이터 입력 reg AB

Page 58: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 58

참조 프레임 주소 생성 (1)

• 실습 (IV)– 참조 블록을 메모리로부터 읽어 올 타이밍을 발생 시키는 모듈 설계

ctrl_ref_addr_genenable

get_ref_row_block

ref_x

ref_y

clkrst

– get_ref_row_block : 어드레스 생성 타이밍 1– get_bottom_row_block : 어드레스 생성 타이밍 2– ref_x, ref_y : get 신호 발생시 레퍼런스 블록의 첫 픽셀 좌표

cnt_1blockcur_block_cnt

get_bottom_ref_row_block

( -4, -4 )

설계에서출력할 픽셀 좌표 설계에서출력할 주소 출력 타이밍 1

Page 59: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 59

참조 프레임 주소 생성 (2)

• 참조 프레임– 블록의 첫 픽셀 좌표 : ref_x, ref_y

-4 , -4

– get_xxx 신호가 발생할 때 원하는 블록의 첫 픽셀 좌표 를 출력 한다 .

– 다음 모듈에서 이 값을 가지고 순차적으로 어드레스를 만들어 낸다 .

Page 60: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 60

참조 프레임 주소 생성 (3)

• 주소 생성 타이밍– 읽기 1 의 신호는 get_ref_row_block 으로 .– 읽기 2 의 신호는 get_bottom_row_block 으로 발생 시킨다 .

32 clk, 데이터 읽기 1

4 clk, 데이터 읽기 2

Page 61: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 61

참조 프레임 주소 생성 (4)

• 실습 (V)– 타이밍 신호를 기준으로 어드레스 생성 모듈 설계

ref_block_addr_genref_x

ref_addr

clkrst

ref_y

– ref_addr : 타이밍 신호가 들어올 때 블록 번호에 맞게 어드레스 출력 .– overflow : 생성된 어드레스가 프레임을 벗어나 있을 경우 신호를 set 시켜 둔다 .

get_ref_row_blockget_bottom_ref_block

overflow

이전 모듈에서 준 첫 픽셀 좌표

설계에서 출력할 주소와 overflow 신호

Page 62: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 62

참조 프레임 주소 생성 (5)

• Overflow 란– 프레임을 벗어난 부분– overflow 가 난 부분의 픽셀 값은 모두 0 으로 한다 .

overflow 난 부분

Page 63: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 63

참조 프레임 주소 생성 (6)

• 좌표로부터 주소 생성하는 방법– overflow 가 난 부분의 주소는 0 으로 한다 .

– 입력으로 들어온 ref_x, ref_y 의 값을 임시 변수 tref_x, tref_y 에 복사 .

– 좌표를 변경 시켜 가면서 아래 식으로 주소 생성 . ref_addr = 8 * (tref_y) + tref_x/4

• (x, y)• (0, 0) = 0• (4, 0) = 1 • (8, 8) = 8 * 8 + 2 = 66

• (-4, 0) = 0• (0, -4) = 0

x

y

Page 64: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 64

참조 프레임 데이터 전송 (I)

• 실습 (IV)– cnt_1block 에 동기화 시켜 참조 블럭의 4x1 데이터 전송 모듈 설계

ctrl_ref_regCDEFcnt_1block

data_bus_ref

clk

overflow

– ref_data_from_mem : 메모리로 읽어 들인 데이터– data_bus_ref : cnt_1block 보고 타이밍에 맞춰 데이터를 내보낸다 .

– 내부에 네 개의 레지스터 그룹 (C,D,E,F) 을 두어서 참조 블럭 데이터를 받어 기록해 두거나 출력을 내보낸다 .

rst

ref_data_from_mem

Page 65: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 65

참조 프레임 데이터 전송 (II)

• 파형 설계에서 출력이 나오는 타이밍

내부 레지스터 CDEF 읽는 타이밍

Page 66: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 66

참조 프레임 데이터 전송 (2)

• 데이터 전송 방법

C D E F

– 네 개의 레지스터를 임시 버퍼로 사용하여 데이터를 재사용한다 .– 데이터를 연속적으로 전송할 수 있다 .– 8 x 8 블록을 전송한 후 한 픽셀 쉬프트한다 .– 다시 8 x 8 블록을 전송한 후 한 픽셀 쉬프트한다 .– 9 개의 블록을 처리한다 .

C D E F

Page 67: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 67

참조 프레임 레지스터 (1)

• 데이터 재사용 방법– 내부에 레지스터 C,D,E,F (32bit x 8) 를 둔다 .

– 이 네 레지스터에 탐색 윈도우의 reference block 의 데이터를 저장해 둔다 .

– 데이터 전송이 필요할 때 레지스터의 내용을 읽어 전송한다 .

C D E F

Page 68: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 68

참조 프레임 레지스터 (2)

• 데이터 재사용 방법– 1 row 의 데이터 전송이 끝나면 2 row 의 전송을 시작 한다 . – 여기서 녹색의 부분이 다시 사용 되므로 아래 한 줄의 데이터만 읽어 오면 된다 .

C D E F

tC tD tE tF

Page 69: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 69

참조 프레임 레지스터 (3)

• 데이터 재사용 방법– 첫 번째 row 탐색이 끝나기 전에 한 픽셀씩 위로 복사해 두자 .– 주의 , 필요한 레지스터를 전부 보낸 후 한 픽셀씩 위로 복사한다 .

C D E F

tC tD tE tF

Page 70: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 70

참조 프레임 레지스터 (4)

• tC, tD, tE, tF 레지스터 데이터 받는 타이밍설계에서 출력이 나오는 타이밍

내부 레지스터 CDEF 읽는 타이밍

Page 71: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 71

참조 프레임 최종 출력

• 최종 출력 조합– data_bus_cur 와 data_bus_ref 를 AGU 의 출력 data_bus 에 연결하기– start_tran 신호로 구분하여 출력 하도록 한다 .

data_bus_cur

data_bus_ref

data_bus

start_tran

Page 72: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 72

Next Generation System Engines

• Wireless Modem Technology Trend– 과거 : Dedicated Modem H/W

– 현재 : DSP + Processor

– 미래 : ASDSP + Processor + Reconfigurable DSPs

• 개발 환경의 중요성– 새로운 Architecture 의 H/W 구현은 시간이 많이 요구– S/W 적 접근에서 바로 H/W 설계 가능한 새로운 개발환경 요구

• 새로운 Paradigm 의 S/W tool 필요 – Reconfigurable DSP 의 등장으로 S/W 개발 요소 중요성 증대

System 개발 환경 구축 (Simulator / DSP 개발 )

Page 73: VLSI  시스템 설계  Project

VLSI 시스템 설계 © 선우명훈 , 2008 년 73

Next Generation System Engines

• Future SOC Architecture

– Application-specific– Reconfigurable– Heterogeneous– Multi-CPU

– Multi-CPU, Multi-DSP 를 채택한 high performance SOC 구조– Flexible 한 시스템 구현 (Reconfigurable Logic)

– Multi-standard, Multi-carrier, Multi-service 지원 ( 다양한 Peripheral)

Peripheral(bluetooth, WLAN,USB, UART etc)

Peripheral(bluetooth, WLAN,USB, UART etc)

CPUCPU

ASDSPASDSP

BUS SystemBUS System

MemoryMemory

ReconfigurableLogic

ReconfigurableLogic

Multi CPU

Multi DSP