VLSI 시시시 시시 © 시시시시 , 2008 시 1 VLSI 시시시 시시 Project Motion Estimator 시시
VLSI 시스템 설계 © 선우명훈 , 2008 년 1
VLSI 시스템 설계 Project
Motion Estimator 설계
VLSI 시스템 설계 © 선우명훈 , 2008 년 2
Motion Estimation (ME)
• 블록별 움직임 추정– 기본 블록 : 8 x 8 Block– 탐색 윈도우 : 16 x 16 Block– 탐색 알고리즘 : Full Search
• 최종 출력 데이터– 움직임 벡터 : MVx, MVy
VLSI 시스템 설계 © 선우명훈 , 2008 년 3
Full search (1)
• 탐색 방법
-
VLSI 시스템 설계 © 선우명훈 , 2008 년 4
Full search (2)
• current block 과 탐색 윈도우 내에 있는 모든 블록들 과의 SAD 값을 구하는 탐색 방법이다 .
• 계산 구조– 매 클럭 데이터를 처리 하기 위한 구조로 설계한다 .– 한 클럭에 처리 되는 데이터는 4x1 block 이다 .
1 clk
1 clk
1 clk
1 clk
4 clk 당 4x4 block의 SAD 값 계산
VLSI 시스템 설계 © 선우명훈 , 2008 년 5
Frame 정보
• 실습에 사용된 영상 – 32 x 32 Block
한 픽셀 정보 표시 비트- 8 bit
VLSI 시스템 설계 © 선우명훈 , 2008 년 6
Frame 정보
• 메모리에 저장된 방법
012
●●●
101112
●●●
255
32 bit
[7:0]
VLSI 시스템 설계 © 선우명훈 , 2008 년 7
실 습 과 제 Ⅰ
Sum of Absolute Differences(SAD) UNIT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 25
Register File (3)
Input clk, reset, cur_start, data_in
Output cur_data, ref_data Hiz output
•Register file
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
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
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
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 30
실 습 과 제 Ⅱ
Motion Vector Generation
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 값을 생성 .
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]
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 34
Counter (3)
1. 총 81 개를 count 하고 초기화 됨
2. Counter 는 초기 상태 0 을 유지 하고 있다가 en 신호가 들어올 때 count
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 값을 변경시킴
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 37
Compare (3)
1. Compare 는 초기에 최대값을 가지고 있음 .
2. Compare 는 Search Window 가 바뀌기 전에 비교할 값을 최대값으로 바꿈 .-> 다음 Search Window 의 처음 SAD 값으로 비교값을 update 하기 위함
VLSI 시스템 설계 © 선우명훈 , 2008 년 38
Compare (4)
3. 비교값보다 SAD 값이 크면 exch 값이 high, 비교값은 SAD 값으로 update.
4. 비교값보다 SAD 값이 크면 exch 값이 low, 비교값은 그대로 유지 .
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
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
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 42
MV_generation (4)
1. 초기값 (-4,-4), exch 신호가 high 이면 그 때의 count 수에 따라서 MV 값 결정
2. Count 가 81 이 되면 하나의 Search Window 가 끝났기 때문에 MV 가 초기화 됨
VLSI 시스템 설계 © 선우명훈 , 2008 년 43
실 습 과 제 Ⅲ
Address Generation Unit(AGU)
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
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
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
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 48
Address Generation Unit (AGU) (3)
• 출력 데이타
– data_bus : 4 x 1 블록 전송– start_tran : 세 가지 의미
• 데이터가 전송 시작 알림• set 되어있는 동안은 current block 데이터가 전송 .• clear 되어있는 동안은 reference block 데이터가 전송 .
– 다음 모듈에서 전송된 데이타를 가지고 SAD 값을 생성한다 .
VLSI 시스템 설계 © 선우명훈 , 2008 년 49
AGU 구조
• AGU 모듈의 두가지 기능– 메모리 액세스를 위한 어드레스 생성 .
– SAD 계산을 위한 data 를 다음 단에 전송 .
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 의 한 블록을 처리하는 동안의 카운트 .
모듈간의 동기화를 담당한다 .
설계에서 만들어야 할 타이밍 시기
VLSI 시스템 설계 © 선우명훈 , 2008 년 51
현재 프레임 주소 생성 (2)
• ctrl_cur_regAB 모듈– 내부에 레지스터 A,B (32bit x 8) 를 둔다 .
– 이 두 레지스터에 current block 의 데이터를 저장해 둔다 .
– 데이터 전송이 필요할 때 레지스터의 내용을 읽어 전송한다 .
01234567
A
01234567
B
VLSI 시스템 설계 © 선우명훈 , 2008 년 52
현재 프레임 주소 생성 (3)
• 현재 블록을 읽어오는 시기– 한 개의 블록에 대해서 탐색하는데 걸리는 클럭 수 : 672 clk
• 최초 16 clk 동안 현재 블록에 대한 정보를 읽어 온다 .
• 이와 동시에 탐색윈도우 내 첫 블록의 정보를 읽어 온다 .
• 현재 블록 정보를 전송하기 시작 .
• 이와 동시에 다음 참조 블록을 읽어 오기 시작 .
• 데이터를 재사용하기 위해서 한 픽셀씩 쉬프트 하면서 참조 블록을 재전송
설계에서 만들어야 할 타이밍 시기
C D E F
0 1A B
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
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 : 타이밍 신호가 들어올 때 블록 번호에 맞게 주소 출력 .
설계에서 만들어야 주소
VLSI 시스템 설계 © 선우명훈 , 2008 년 55
현재 프레임 주소 생성 (6)
• 주소 생성 방법– 세로로 8 씩 증가하는 점을 이용– current 의 한 블록 8x8
– 0, 8, 16 ... 56, 1, 9 ...
16 clk, 현재 블록 데이터 읽기
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 보고 타이밍에 맞춰 데이터 출력설계에서 전송해야 할 시기
설계에서데이터 입력 받는 시기
VLSI 시스템 설계 © 선우명훈 , 2008 년 57
현재 프레임 데이터 전송 (II)
• 데이터 전송 방법– 세로로 8 씩 증가하는 점을 이용– current 의 한 블록 8x8
– 0, 8, 16 ... 56, 1, 9 ...
8 clk, 현재 블록 데이터 전송
16 clk, 현재 블록 데이터 입력 reg AB
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 59
참조 프레임 주소 생성 (2)
• 참조 프레임– 블록의 첫 픽셀 좌표 : ref_x, ref_y
-4 , -4
– get_xxx 신호가 발생할 때 원하는 블록의 첫 픽셀 좌표 를 출력 한다 .
– 다음 모듈에서 이 값을 가지고 순차적으로 어드레스를 만들어 낸다 .
VLSI 시스템 설계 © 선우명훈 , 2008 년 60
참조 프레임 주소 생성 (3)
• 주소 생성 타이밍– 읽기 1 의 신호는 get_ref_row_block 으로 .– 읽기 2 의 신호는 get_bottom_row_block 으로 발생 시킨다 .
32 clk, 데이터 읽기 1
4 clk, 데이터 읽기 2
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 신호
VLSI 시스템 설계 © 선우명훈 , 2008 년 62
참조 프레임 주소 생성 (5)
• Overflow 란– 프레임을 벗어난 부분– overflow 가 난 부분의 픽셀 값은 모두 0 으로 한다 .
overflow 난 부분
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
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
VLSI 시스템 설계 © 선우명훈 , 2008 년 65
참조 프레임 데이터 전송 (II)
• 파형 설계에서 출력이 나오는 타이밍
내부 레지스터 CDEF 읽는 타이밍
VLSI 시스템 설계 © 선우명훈 , 2008 년 66
참조 프레임 데이터 전송 (2)
• 데이터 전송 방법
C D E F
– 네 개의 레지스터를 임시 버퍼로 사용하여 데이터를 재사용한다 .– 데이터를 연속적으로 전송할 수 있다 .– 8 x 8 블록을 전송한 후 한 픽셀 쉬프트한다 .– 다시 8 x 8 블록을 전송한 후 한 픽셀 쉬프트한다 .– 9 개의 블록을 처리한다 .
C D E F
VLSI 시스템 설계 © 선우명훈 , 2008 년 67
참조 프레임 레지스터 (1)
• 데이터 재사용 방법– 내부에 레지스터 C,D,E,F (32bit x 8) 를 둔다 .
– 이 네 레지스터에 탐색 윈도우의 reference block 의 데이터를 저장해 둔다 .
– 데이터 전송이 필요할 때 레지스터의 내용을 읽어 전송한다 .
C D E F
VLSI 시스템 설계 © 선우명훈 , 2008 년 68
참조 프레임 레지스터 (2)
• 데이터 재사용 방법– 1 row 의 데이터 전송이 끝나면 2 row 의 전송을 시작 한다 . – 여기서 녹색의 부분이 다시 사용 되므로 아래 한 줄의 데이터만 읽어 오면 된다 .
C D E F
tC tD tE tF
VLSI 시스템 설계 © 선우명훈 , 2008 년 69
참조 프레임 레지스터 (3)
• 데이터 재사용 방법– 첫 번째 row 탐색이 끝나기 전에 한 픽셀씩 위로 복사해 두자 .– 주의 , 필요한 레지스터를 전부 보낸 후 한 픽셀씩 위로 복사한다 .
C D E F
tC tD tE tF
VLSI 시스템 설계 © 선우명훈 , 2008 년 70
참조 프레임 레지스터 (4)
• tC, tD, tE, tF 레지스터 데이터 받는 타이밍설계에서 출력이 나오는 타이밍
내부 레지스터 CDEF 읽는 타이밍
VLSI 시스템 설계 © 선우명훈 , 2008 년 71
참조 프레임 최종 출력
• 최종 출력 조합– data_bus_cur 와 data_bus_ref 를 AGU 의 출력 data_bus 에 연결하기– start_tran 신호로 구분하여 출력 하도록 한다 .
data_bus_cur
data_bus_ref
data_bus
start_tran
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 개발 )
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