工學碩士學位請求論文 - dspace.inha.ac.kron 4-input data (x, y, z, w or r, g, b, ɑ)...

56

Upload: others

Post on 01-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

  • http://creativecommons.org/licenses/by/2.0/kr/legalcodehttp://creativecommons.org/licenses/disclaimer-popup?lang=kr

  • 工學碩士學位請求論文

    벡터화된 SIMD 프로그래머블 셰이더를

    위한 부동소수점 연산기 설계

    Design of Floating Point Unit for Vectorized

    Programmable Shader

    2008年 2月

    仁荷大學校 大學院

    電子工學科(情報工學專攻)

    尹 俊 喆

  • 工學碩士學位請求論文

    벡터화된 SIMD 프로그래머블 셰이더를

    위한 부동소수점 연산기 설계

    Design of Floating Point Unit for Vectorized

    Programmable Shader

    2008年 2月

    指導敎授 崔 相 昉

    이 論文을 工學碩士學位 論文으로 提出함

    仁荷大學校 大學院

    電子工學科(情報工學專攻)

    尹 俊 喆

  • 이 論文을 尹俊喆의 碩士學位論文으로 認定함

    2008年 2月

    主審:____________________

    副審:____________________

    委員:____________________

  • - i -

    요 약

    오늘날 3차원 컴퓨터 그래픽 기술은 컴퓨터 분야뿐만 아니라, 게

    임, 영상, 교육, 출판, 군사 의료분야 등 모든 분야에 걸쳐서 사용되

    는 핵심 기반 기술로 응용분야가 확대되고 있다. 3차원 그래픽은 멀

    티미디어 데이터처리 및 3차원 영상을 나타내기 위해 많은 데이터

    를 연산해야 하며 그 연산과정 또한 매우 복잡하기 때문에 일반 범

    용 프로세서 또는 CPU 에서 처리하기에는 한계가 있다. 이에 3차원

    그래픽을 전담하여 고속 고성능으로 처리하기 위해 별도의 그래픽

    프로세서가 필요하게 되었다.

    본 논문에서는 3차원 그래픽 처리를 좀 더 효율적으로 처리하기

    위한 부동소수점 연산기를 설계하였다. 제안된 연산기는 프로그래머

    블 셰이더 프로세서의 연산유닛으로 사용될 수 있다. 부동소수점 연

    산기의 구조는 연산유닛과 컨트롤 파이프라인 유닛으로 구분하였다.

    연산유닛은 4개의 입력(x, y, z, w 또는 r, g, b, ɑ) 에 대해 동시에

    연산이 가능한 하나의 모듈로 구현하였으며, 실행되는 명령어는

    DirectX 9.0 Vertex Shader와 Pixel Shader 명령어를 수행할 수 있

    도록 설계 하였다. 컨트롤 파이프라인 유닛은 연산유닛이 정확한 명

    령어를 실행 할 수 있도록 그에 맞는 제어 신호를 발생한다.

    마지막으로 기능적 레벨 시뮬레이션을 통해 본 논문에서 설계

    한 부동소수점 연산유닛의 동작을 검증하였으며, 개별 연산에 대한

    동작 검증과 조합 연산에 대한 동작을 검증하였다. 타겟 FPGA는

    Xilinx 사의 Viretx 4 lx200으로 전체 모듈의 하드웨어 수는 6200

    slices 이며, 100 ㎒의 속도로 동작이 가능 하다.

  • - ii -

    Abstract

    The application of Three-dimensional graphic technology has

    been expanded to the fields of not only the computer, but also

    the game, image, education, publication, military, and medical

    services as a core based technique. Three-dimensional graphic

    should operate on numerous data to display multimedia data

    processing and Three-dimensional images, and because the

    operations are very complex, there is a limit to process them in

    the general-purpose processor or CPU.

    So, we need a special graphic processor that is wholly

    responsible for Three-dimensional graphic processing to operate

    them in high speed and efficiency.

    In this paper, we design floating point unit for efficient

    Three-dimensional graphic processing. The floating point unit

    consists of calculation unit and control pipeline unit. It operates

    on 4-input data (x, y, z, w or r, g, b, ɑ) simultaneously. and,

    The instruction which is executed DirectX in order it will be

    able to execute 9.0 Vertex Shader and a Pixel Shader instruction.

    The control pipeline unit it will be able to execute the instruction

    where the floating point unit is accurate in order, generates the

    control signal.

    Finally, the simulation result shows that the designed ALU

    operates correctly with the clock frequency higher than 100㎒ and

    consumes 6200 slices in Virtex-4 implementation.

  • - iii -

    목 차

    요 약·············································································································· i

    Abstract ········································································································· ii

    목 차 ············································································································ iii

    제 1 장 서 론 ·····························································································1

    제 2 장 3D 그래픽 처리과정 ····································································3

    2.1 3D 그래픽 처리과정 ·······································································3

    2.1.1 응용단계·····················································································3

    2.1.2 기하단계·····················································································4

    2.1.2.1 모델변환과 시야변환 ························································5

    2.1.2.2 조명처리와 셰이딩 ····························································6

    2.1.2.3 투영 ······················································································8

    2.1.2.4 클리핑 ··················································································9

    2.1.2.5 화면매핑 ············································································10

    2.1.3 셋업단계···················································································11

    2.1.4 레스터화단계···········································································11

    제 3 장 프로그래머블 셰이더 프로세서 ···············································12

    3.1 프로그래머블 셰이더 구조 ··························································12

    3.1.1 정점 셰이더·············································································13

    3.1.2 픽셀 셰이더·············································································14

  • - iv -

    3.2 벡터연산 SIMD 셰이더 프로세서 모델 ····································15

    제 4 장 부동소수점 연산기 설계 ···························································20

    4.1 셰이더 명령어 분석 ······································································20

    4.2 ALU 설계·······················································································25

    4.2.1 swizzle 설계 ············································································26

    4.2.2 modifier 설계 ··········································································27

    4.2.3 MAC 설계················································································29

    4.2.4 컨트롤 파이프라인 설계·······················································31

    4.2.5 명령어 간의 지연···································································35

    4.3 SFU 설계 ························································································36

    4.3.1 sin/cos 모듈 설계 ···································································37

    제 5 장 HDL 합성 및 시뮬레이션 ·························································39

    5.1 설계 로직 합성 및 기능 검증 방법 ··········································39

    5.2 부동소수점 연산기의 기능 검증 ················································40

    5.2.1 개별연산에 대한 기능적 레벨 시뮬레이션 ·······················40

    5.2.2 조합연산에 대한 기능적 레벨 시뮬레이션 ·······················41

    제 6 장 결 론 ···························································································43

    참고문헌 ·······································································································45

  • - v -

    그 림 목 차

    그림 1. 3차원 그래픽 파이프 라인의 기본구성 ····································3

    그림 2. 3차원 그래픽 기하 파이프라인 ··················································5

    그림 3. 오브젝트 좌표에서 월드 좌표로의 변환 ··································6

    그림 4. 세 가지 광원의 종류 ····································································7

    그림 5. 원근 투영 ························································································8

    그림 6. 클리핑 과정 ····················································································9

    그림 7. 화면 매핑 과정 ············································································10

    그림 8. 정점 셰이더 모델 ········································································14

    그림 9. 픽셀 셰이더의 모델 ····································································15

    그림 10. 이미진 프로세서 구조 ······························································16

    그림 11. ATTILA의 셰이더 구조 ··························································17

    그림 12. 벡터연산 SIMD 셰이더 프로세서 모델 ································18

    그림 13. ALU 전체구조 ···········································································25

    그림 14. 스위즐 구조 ················································································27

    그림 15. input modifier 구조 ··································································28

    그림 16. instruction modifier ··································································29

    그림 17. mac 구조 ·····················································································30

    그림 18. 컨트롤 파이프라인 구조 ··························································33

    그림 19. sin/cos 모듈 구조 ·····································································38

    그림 20. DP 연산에 대한 시뮬레이션 파형 ·········································41

    그림 21. MAD 와 ADD 연산에 대한 시뮬레이션 파형 ···················42

  • - vi -

    표 목 차

    표 1. 정점 셰이더와 픽셀 셰이더 비교 ················································13

    표 2. 버텍스/픽셀 셰이더 3.0 명령어 ····················································21

    표 3. 각 명령어별 파이프라인 depth ····················································31

    표 4. 컨트롤 파이프라인 정보 ································································33

    표 5. 각 명령어별 mux 신호 ··································································34

    표 6. 각 명령어별 상관관계····································································36

    표 7. 합성 결과 ··························································································39

  • - 1 -

    제 1 장 서 론

    최근 컴퓨터 산업의 눈부신 발전으로 인해, 사용자는 컴퓨터를

    통하여 단순히 정보를 획득하는 것에 만족하지 않고 보다 사실적이

    고 시각적인 영상의 정보를 선호한다. 텍스트 기반의 정보는 음향,

    이미지, 동영상 등의 형태로 발전하였고, 최근에는 실사 수준의

    3D(3-Dimension) 영상으로 제공되고 있다. 3D 영상의 표현은 특정

    분야에 국한된 것이 아니라 게임, 영화, 교육, 출판, 군사, 의료 등

    모든 분야에서 걸쳐서 그 영역이 확대 되고 있다. 그러나 많은 양의

    데이터로 구성되는 3D 영상을 사용자에게 제공하는 것은 복잡한 연

    산이 요구되므로, 연산 능력도 뛰어나며 많은 양의 데이터를 처리

    할 수 고성능 프로세서가 필요하다.

    오늘날 3차원 컴퓨터 그래픽 기술은 컴퓨터 분야뿐만 아니라, 게

    임, 영상, 교육, 출판, 군사 의료분야 등 모든 분야에 걸쳐서 사용되

    는 핵심 기반 기술로 응용분야가 확대되고 있다. 또한 3차원 그래픽

    데이터 처리를 위해 개발된 그래픽 프로세서는 과거에는 고가의 컴

    퓨터 시스템에서만 채택되었지만, 현재에는 개인용 컴퓨터에 기본적

    으로 장착되고 있으며, 점차 휴대폰, PDA 등 차세대 휴대용 정보기

    기에서도 3차원 그래픽 프로세서에 대한 수요가 늘어날 전망이다.

    여기서 3차원 그래픽은 멀티미디어 데이터처리 및 3차원 영상을 나

    타내기 위해 많은 데이터를 연산해야 하며 그 연산과정 또한 매우

    복잡하기 때문에 일반 범용 프로세서 또는 CPU 에서 처리하기에는

    한계가 있다. 이에 3차원 그래픽을 전담하여 고속 고성능으로 처리

    하기 위해 별도의 그래픽 프로세서가 필요하게 되었다. 이러한 수요

  • - 2 -

    에 따라 3D 그래픽 데이터를 효과적으로 처리하기 위해 여러 가지

    기법들이 발표 되고 있다[1~6]. 본 논문에서는 3차원 그래픽에 대

    한 처리를 효율적으로 처리하기 위해 4개의 입력(x, y, z, w 또는

    r, g, b, ɑ) 각 32bit 부동소수점 연산이 가능한 연산유닛을 설계하였

    다. 그리고 기능적 시뮬레이션을 통하여 동작을 검증하였다.

    본 논문은 다음과 같이 구성된다. 2장에서는 일반적인 3D 그래

    픽 처리 과정을 소개하고 3장에서는 본 논문에서 제안하는 부동소

    수점 연산기가 적용될 프로그래머블 셰이더 프로세서의 구조에 대

    해 알아본다. 4장에서는 본 논문에서 제안하는 프로그래머블 셰이더

    프로서세 모델에 적용 가능한 부동소수점 연산기에 대하여 설명하

    고 설계 모델에 대하여 설명한다. 5장에서는 설계된 연산기를 기능

    적 레벨 시뮬레이션을 통하여 기능을 검증하고 HDL 합성 결과를

    보여주며, 마지막으로 6장에서는 본 논문의 결론 및 향후 연구 방향

    을 제시하며 본 논문을 마친다.

  • - 3 -

    제 2 장 3D 그래픽 처리과정

    2장에서는 3D 그래픽 처리과정에 관한 내용에 대해 알아본다.

    2.1 3D 그래픽 처리과정

    3D 그래픽 처리과정을 단계 별로 나누어 보면 그림 1과 같이 4

    단계로 나누어진다. 각 단계는 응용 단계, 기하학 처리 단계, 셋업

    단계, 레스터화 단계라 한다.

    그림 1. 3차원 그래픽 파이프 라인의 기본구성

    Figure 1. Basic organization of 3D graphic pipeline

    2.1.1 응용단계

    응용단계는 응용 프로그램에 의해 동작되며, 따라서 소프트웨어

    로 구현된다. 이 단계의 끝단에서 렌더링 될 기하 구조가 3차원 그

    래픽 파이프라인의 다음단계로 공급된다. 여기서 기하구조는 마지막

  • - 4 -

    으로 화면에 그려지게 될 점, 선, 삼각형과 같은 렌더링 기본요소를

    가진다. 여기에는 충돌 검출, 가속 알고리즘, 애니메이션, 포스 피드

    백(fore feedback) 등이 포함될 수 있다.

    2.1.2 기하단계

    기하 단계는 정점 단위의 조작이나 다각형 단위의 조작을 주로

    담당한다. 기하 단계에서 연산처리는 삼각형의 세 정점에 대해 이루

    어진 것이므로 우선 이들 세 정점을 이용하여 가상적인 삼각형을

    만들어야 한다. 이 세 정점을 가지고 삼각형을 이루는 요소인 각

    변의 기울기와 색상 정보의 증가분을 구하는 과정은 폴리곤 처리

    (polygon processing)라 한다. 폴리곤 처리를 한 후 각 변의 기울기

    와 색상정보의 증가분을 이용하여 각 변을 이루는 픽셀의 색상정보

    를 구하게 되는데 이를 변 처리(edge processing)라고 한다. 변 처리

    과정을 거친 후, 마지막으로 각 주사선에 있는 모든 픽셀에 대해서

    색상정보를 구하는 것을 스팬 처리(span processing)라고 한다. 폴리

    곤 처리, 변 처리 및 스팬 처리를 주사선 변환(scan conversion)과정

    이라고도 하며, 이와 같은 과정을 통하여 삼각형 내부의 픽셀들에

    대한 색상정보를 구하고 이를 메모리에 저장하게 된다.

    기하 단계는 어플리케이션 단계에서 처리된 모델 데이터의 정보

    들을 입력 받음으로써 시작된다. 모델 데이터는 한 좌표의 정보, 각

    좌표의 노말 벡터(normal vector), 색깔 정보와 각 단계에서 요구되

    는 파라미터들이 포함된다. 기하 처리는 객체에 대한 공간상의 위치

    변환과 빛에 대한 계산이 이뤄지는 과정이다. 이 단계는 그림 2에서

    보듯이 크게 변환부분과 빛 처리 부분으로 분류된다. 변환부분은 모

    델/시야변환, 투영, 클리핑, 화면 매핑으로 다시 분류가 된다. 빛 처

  • - 5 -

    리 부분은 실제 빛 처리를 하기 전에 빛 처리에 필요한 요소들을

    미리 계산하는 부분과 실제 빛 처리를 하는 부분으로 분류된다[7].

    그림 2. 3차원 그래픽 기하 파이프라인

    Figure 2. 3D graphic geometry pipeline

    2.1.2.1 모델변환과 시야 변환

    최종적으로 화면에 그려지기까지 하나의 모델은 여러 개의 다른

    공간 또는 좌표계로 변환된다. 원래 하나의 모델은 자신의 고유한

    모델 공간에 존재하는데, 이러한 모델에 자신의 위치와 방향을 정하

    도록 해주는 모델/시야 변환이 적용된다. 그러면 고유 모델 공간에

    존재하던 물체들이 하나의 월드 좌표로 모이게 된다. 동일한 모델에

    여러 가지 다른 모델/시야변환이 적용되는 것도 가능하다. 이것은

    동일한 모델에 대해서 기본적인 기하구조를 복제하지 않고도 서로

    다른 위치, 방향, 크기를 가지는 복사본을 만들 수 있도록 해준다.

  • - 6 -

    모델/시야 변환에 의해 변형되는 대상은 모델의 정점과 법선 벡

    터들이다. 물체의 좌표는 모델 좌표라고 불리면, 모델 변환이 이 좌

    표들에 적용되고 나면 그림 3과 같이 그 모델은 월드 좌표계 또는

    월드 공간에 위치한다. 월드 공간은 유일하며, 모델들이 고유의 모

    델/시야 변환에 의해 변환되고 나면 모든 모델들은 동일한 공간에

    존재하게 된다.

    그림 3. 오브젝트 좌표에서 월드 좌표로의 변환

    Figure 3. object angular transform to world angular

    2.1.2.2 조명처리 와 셰이딩

    모델이 좀 더 현실감 있게 보이도록 하기 위해서 장면에 한 개

    혹은 그 이상의 광원들을 집어넣을 수 있다. 사용자는 광원을 끄거

    나 켬으로써 그 광원이 최종 이미지에 영향을 미치도록 선택할 수

    있다. 기하 모델은 각 정점과 연관된 색상을 가질 수 있고, 자신에

  • - 7 -

    게 덧씌워질 텍스쳐(이미지)를 가질 수 있다. 조명을 사용하지 않고

    도 텍스쳐를 이용하여 표면에 3차원 효과를 줄 수 있지만, 색상만으

    로는 어렵다. 광원의 종류에는 방향광원(directional light), 점 광원

    (point light), 집중 조명 광원(spot light)이 있다. 그림 4는 광원의

    종류에 대해서 나타낸다.

    그림 4. 세 가지 광원의 종류

    Figure 4. Three kinds of light

    광원에 의해 영향을 받게 되는 모델들이 정해지면 조명계산식

    을 이용하여 모델의 각 정점 색상을 계산한다. 이 수식은 실세계에

    서 광자와 표면 간에 일어나는 현상을 근사적으로 표현한 것이다.

    실세계에서 광자는 광원으로부터 방출되어 표면에서 반사되거나 흡

    수된다. 실시간 그래픽스에서는 이러한 현상을 완벽하게 표현할 만

    큼 시간이 넉넉하지 않다. 예를 들어 자연계에서 일어나는 실제 반

    사현상과 그림자는 이 수식으로 다 표현할 수 없다. 모델들은 보통

    삼각형의 집합으로 표현되는데, 그리 이유는 대부분의 그래픽스 하

    드웨어에서 기본 기하 요소로 삼각형을 사용하기 때문이다. 표면의

    각 정점에서의 색상은 광원의 위치와 속성, 정점의 위치와 법선 벡

    터, 정점을 포함하고 있는 물체의 특성(물성)을 이용하여 계산한다.

    삼각형의 각 정점들에서의 색상은 화면상에 렌더링 되는 시점에서

    삼각형 위의 모든 점들로 보간 된다. 이러한 보간 기법을 Gouraud

  • - 8 -

    셰이딩 이라고 한다. 또한 좀 더 정교한 조명 효과를 표현하기 위해

    레스터화 과정에서 픽셀 셰이딩 기법이 사용된다.

    2.1.2.3 투영

    조명 처리를 하고 나면 3차원 그래픽 시스템은 투영을 한다. 이

    것은 시야 영역을 양끝 모서리 점이(-1, -1, -1)와 (1, 1, 1) 좌표를

    가지는 단위 정육면체로 변환하는 것이다. 이러한 단위 정육면체를

    정규 시야 영역(canonical view volume)이라고 한다. 대표적인 두

    가지 투영방법으로는 직교투영(orthographic projection)과 원근 투영

    (perspective projection)이 있다. 직교 투영에서 시야 영역은 보통

    직사각형 상자 모양이고, 직교투영에 의해 이러한 시야 볼륨은 단위

    정육면체로 변환된다. 직교투영의 주된 특징은 평행선이 변환 후에

    도 평행을 유지한다는 것이다. 이 변환은 평행 이동과 크기 변환의

    조합으로 표현된다.

    그림 5. 원근 투영

    Figure 5. Perspective projection

    원근 투영은 좀 더 복잡하다. 그림 5에서 보듯이 물체가 카메라

    에서 멀어질수록 투영한 후에 더 작게 보인다. 또한 평행선은 수평

    선에서 한 점으로 수렴할 수도 있다. 그러므로 원근 투영변환은 인

    간이 물체의 크기를 인지하는 방법을 흉내 낸 것이라고 할 수 있다.

    기하학적 용어로 절두체(frustum)라 불리는 시야 영역은 직사각형

  • - 9 -

    바닥 면을 가지고 정점이 잘려진 피라미드 모양을 가진다[8][9].

    2.1.2.4 클리핑

    전체 또는 일부가 시야 영역에 포함되는 기하 요소들만이 레스

    터화 단계로 전달되어야 한다. 레스터화 단계에서는 시야영역에 포

    함된 요소들을 화면에 그려준다. 시야영역에 완전히 포함되는 기하

    요소들은 그대로 다음 단계에 전달된다.

    그림 6 클리핑 과정

    Figure 6. Clipping processing

    시야 영역에서 완전히 벗어나 있는 기하 요소들은 렌더링이 되

    지 않으므로 더 이상 다음 단계로 넘기지 않는다. 시야 볼륨 내에

    부분적으로 포함되는 기하 요소들에 대해서는 클리핑이 필요하다.

    그림 6 에서 보듯이 한 정점은 시야 볼륨의 바깥쪽에 있고, 다른 정

    점은 안쪽에 있는 선분은 시야 볼륨의 경계를 기준으로 클리핑 되

    어 바깥쪽에 있는 정점은 그 선분과 시야 볼륨의 교차점에 위치하

    는 새로운 정점으로 대치된다[8][9].

  • - 10 -

    2.1.2.5 화면 매핑

    시야 영역의 안쪽에 있는 기하 요소들망이 화면 매핑 단계로 전

    달된다. 이 단계에 진입할 때까지 좌표는 아직 3차원이다. 각 기하

    요소의 x와 y좌표들은 그림 7과 같이 화면 좌표계를 형성하기 위해

    변환된다. z 좌표를 포함하는 화면 좌표계를 윈도우 좌표계라고 한

    다.

    그림 7. 화면 매핑 과정

    Figure 7. Screen Mapping Processing

    하나의 장면은 (x1, y1)을 최소 모서리로 가지고 (x2, y2)룰 최대

    모서리로 가지는 윈도우 내에 렌더링 되어야 한다. 여기서 x1 < x2

    이고, y1

  • - 11 -

    2.1.3 셋업단계

    기하단계에서 처리된 부동소수점 데이터를 정수 데이터로 변환

    하고 삼각형의 기울기를 구하게 된다. 그리고 삼각형 데이터들은 레

    스터화 단계에 들어가서 트라이앵글 셋업, 변 처리, 스팬 처리, 텍스

    쳐 매핑, 투명도 처리, 안개 처리, 깊이 비교 등의 과정을 거쳐 색상

    정보를 가진 픽셀들을 이루게 되다. 이 픽셀들이 디스플레이 장치에

    보내지면 한의 영상을 이루어 화면에 보여 지게 된다.

    2.1.4 레스터화 단계

    변환되고 투영된 정점과 색상 그리고 텍스쳐 좌표가 주어졌을

    때(이것들은 모두 기하단계로부터 제공되는 것들이다) 레스터화 단

    계의 주목적은 이미지를 올바르게 만들어내기 위해 각 픽셀에 정확

    한 색상을 지정하는 것이다. 이 과정을 “레스터화” 또는 “스캔(scan

    conversion)"이라고 부른다. 이것은 각각의 z값(깊이값), 하나 또는

    두 개의 색상 그리고 각 정점과 연관된 하나 또는 그 이상의 텍스

    쳐 좌표 값을 가지는 화면 공간상의 2차원 정점을 화면의 픽셀들로

    변환하는 것이다. 다각형 단위의 조작을 하는 기하단계와 달리, 레

    스터화 단계는 픽셀 단위 조작을 한다. 각 픽셀의 정보는 색상 버퍼

    에 저장된다. 색상버퍼는 (빨강, 초록, 파랑 성분으로 구성된) 색상

    을 저장하는 2차원 배열이다.

  • - 12 -

    제 3 장 프로그래머블 셰이더 프로세서

    3장에서는 프로그래머블 셰이더 프로세서의 구조와 벡터연산

    SIMD 프로세서 모델을 살펴본다.

    3.1 프로그래머블 셰이더 구조

    예전에는 좌표변환이나 조명계산이 CPU가 담당하는 역할이었다.

    하지만 그래픽 처리를 담당하는 전용 프로세서인 GPU의 등장으로

    인해 좌표변환이나 조명계산이 GPU에서 가능하게 되었다. 이처럼

    GPU에 관한 계산을 제어하고 유연성 문제를 극복하기 위해서 렌더

    링 방식을 소프트웨어적으로 프로그래밍 가능한 것이 셰이더 프로

    세서이다.

    3D 그래픽은 연산 집약적인 특징을 갖는다. 하나의 영상은 지오

    메트리 연산과 렌더링 연산을 거쳐 완성된다. 지오메트리 연산이란

    기하학적 형태를 나타내는 과정이고 렌더링은 조명이나 주변 사물

    에 의한 효과를 고려하여 색과 음영을 입히는 것이다. 특히 렌더링

    과정은 다양한 효과를 반영하기위해 많은 연산을 요구하는 복잡한

    알고리즘을 필요로 한다. 한편, 3D 그래픽은 영상을 구성하기위해

    많은 양의 데이터를 필요로 하는 특징을 갖는다. 그러므로 처리 속

    도를 빠르게 하기위해 각각의 데이터에 대해 병렬로 수행될 필요가

    있다. 즉, 영상을 구성하는 하나의 픽셀은 x, y, z, w 성분을 갖고

    있는데, 각각에 대하여 동일한 연산이 동시에 요구되는 데이터 단의

    병렬처리(DLP: Data-level parallelism)가 필요하다. 프로그래밍 가

  • - 13 -

    능한 셰이더에는 정점 셰이더와 픽셀 셰이더 두 종류가 있다. 두 종

    류의 셰이더는 입력데이터 형식은 비슷하지만 서로 다른 목적으로

    사용된다. 이것의 차이는 표 1과 같다

    명칭 정점 셰이더 픽셀 셰이더

    주목적

    폴리곤 정점 좌표를 변

    환해서 화면에서의 위

    치 산출

    스크린에 표시되는 픽셀

    색을 결정

    입력데이터 정점의 위치 좌표 값렌더링되는 픽셀의 색과

    텍스쳐좌표

    출력데이터투명 좌표계에서 위치

    좌표화면에 출력될 색

    렌더링 공정 주사선 변환 전

    주사선 변환 후, 어떤 픽

    셀에 출력될지 결정된

    분기 명령 OX(삼항 연산자? : 정도는

    가능)

    렌더링 위치 변경 O X

    텍스쳐 읽기△(변위 맵핑에서 제한

    적으로 가능)O

    포그 색 변경 O X

    표 1. 정점 셰이더와 픽셀 셰이더 비교

    Table 1. Vertex shader and Pixel shader compare

    3.1.1 정점 셰이더

    정점 셰이더는 응용으로부터 받은 입력 레지스터의 정점 데이터

    를 가공해서, 출력 레지스터에 결과를 출력한다. 입력되는 데이터는

    1개의 정점에 관한 위치 좌표 정보이다. 출력되는 데이터는 동일한

  • - 14 -

    정점에 관한 좌표가 된다. 단 입력된 정점의 수를 늘리거나 줄일 수

    없다. 그림 8은 정점 셰이더의 데이터 입출력 처리에 관한 블록도

    이다.

    그림 8. 정점 셰이더 모델

    Figure 8. Vertex shader model

    3.1.2 픽셀 셰이더

    픽셀 셰이더는 정점 셰이더에서 처리되어 출력된 정점 색이나

    텍스쳐 좌표를 사용하여 화면에 출력되는 하나의 화소의 색을 계산

    한다. 픽셀 셰이더에서는 초대 4개의 색과 1개의 깊이 값을 출력 할

    수 있다. 즉, 4개의 프레임 버퍼 혹은 텍스쳐, 깊이 버퍼에 각각 다

    른 색을 동시에 출력할 수 있다. 그림 9는 픽셀 셰이더의 데이터

    입출력 처리에 관한 블록도이다.

  • - 15 -

    그림 9. 픽셀 셰이더의 모델

    Figure 9. Pixel shader model

    3.2 벡터연산 SIMD 셰이더 프로세서 모델

    일반적으로 그래픽의 각 픽셀은 (x, y, z, w)로 구성되는 위치정

    보와 (R, G, B, ɑ(투명도))로 구성되는 색채 정보로 표현된다. 때문

    에 명령어는 각각의 데이터에 대해 4가지 정보를 처리해야 하므로

    이를 위해서는 동시에 여러 개의 데이터를 처리할 수 있는

    SIMD(Single Instruction Multiple Data) 구조를 갖는 프로세서가

    효율적이다[12]. 한편 그래픽 프로그램의 특성상 특정 사물의 움직

    임을 표현하는 과정이 많기 때문에 즉, 개개 픽셀의 위치를 동일한

    패턴으로 이동시키는 연산을 자주 요구하기 때문에 여러 개의 데이

    터(개개 픽셀)에 대해서 동일한 연산을 취해야 하는 경우가 대부분

    이다. 따라서 이러한 3D 그래픽 처리의 특성을 이용하여 성능을 극

    대화하기 위해 최근에는 많은 데이터에 대해 연속적으로 연산을 수

    행할 수 있는 스트림 구조에 대한 연구가 각광을 받고 있다.

  • - 16 -

    그림 10은 그래픽 프로세서 모델로 스트림 구조를 이용하는 대

    표적인 프로세서인 스탠포드 대학의 Imagine processor의 구조를 보

    여준다. Imagine processor의 특징은 스트림 구조로 데이터를 처리

    하기 위하여 8개의 ALU 클러스터를 이용하여 최대 8개의 데이터를

    동시에 처리할 수 있도록 하였다. 각 ALU 클러스터는 독립적으로

    명령어를 수행할 수 있어, 마치 8개의 프로세서를 병렬로 연결한 것

    과 같이 동작함으로써 연속적인 데이터 처리의 효율을 높이고 있다.

    그러나 동일한 명령어를 처리한다 하더라도 다른 데이터에 대해서

    는 또다시 동일한 명령어 셋을 패치한 후 ALU가 수행하는 방식이

    므로 동일한 명령어를 계속해서 패치 하는 과정이 요구된다. ALU

    클러스터의 내부구조는 곱셈 연산과 더하기 연산 유닛이 개별 모듈

    도 구성되며 그래픽 처리에 필요한 연산을 수행하기 위해 모든 연

    산 유닛이 크로스바로 연결되어 서로 데이터를 주고받을 수 있는

    구조로 되어 있다[4].

    그림 10. 이미진 프로세서 구조

    Figure 10. Imagine processor architecture

  • - 17 -

    그림 11은 또 다른 셰이더 모델인 ATTILA의 구조를 보여준다.

    이 프로세서는 4 개의 쓰레드를 하나로 묶어 병렬로 처리하는 방식

    이며, 각 쓰레드는 4개의 데이터를 동시에 처리할 수 있는 SIMD 구

    조로 되어있다. 이것은 한 번의 명령어 패치로 4개의 쓰레드를 동시

    에 수행한다. 명령어의 형식은 VLIW(very long instruction word)

    형식을 기반으로 동시에 여러 개의 연산을 수행한다[5].

    그림 11. ATTILA의 셰이더 구조

    Figure 11. Shader architecture of ATTILA

    이 장에서는 마이크로소프트사에서 지원하는 HLSL의 ASM 셰

    이더(vertex shader, pixel shader)를 기반으로 하고 동시에 4입력(x,

  • - 18 -

    y, z, w 또는 r, g, b, ɑ) IEEE 754 단정도 부동소수점 연산이 일어

    나는 SIMD 와 vector computing의 특징을 가지고 있는 프로세서

    모델인 그래픽 SIMD 프로세서 구조를 기반으로 하였다.

    그래픽 SIMD 프로세서는 그래픽의 복잡한 연산을 수행하기 위

    하여 4입력(x, y, z, w 또는 r, g, b, ɑ)이 각각 IEEE 754 단정도 부

    동소수점 연산을 지원하며, 연속적으로 들어오는 명령어들을 실행

    시킬 수 있게 스트림 처리를 지원하고 각 명령어들을 반복적으로

    실행함으로써 벡터 컴퓨팅을 지원하는 프로세서 모델이며, 그 구조

    는 그림 12와 같다.

    그림 12. 벡터연산 SIMD 셰이더 프로세서 모델

    Figure 12. shader processor model of vector operation

    SIMD

  • - 19 -

    그림 12의 프로세서 모델은 벡터연산 SIMD 셰이더 프로세서이

    다. 각각의 구성은 호스트로부터 처리될 데이터를 입력받고 처리된

    데이터를 호스트로 전달할 수 있는 interface unit, 처리할 명령어를

    저장하는 instruction memory, 데이터간의 의존(dependency)이 발생

    하는 문제를 해결하기 위해 명령어를 이슈하기 전에 소스와 오퍼랜

    드들의 사용가능 상태를 검사하는 스코어보드의 개념을 적용한

    RST(register status table), instruction memory로부터 실행될 명령

    어를 패치하고 해석하여 필요한 제어신호 및 정보를 생성하는 패치

    &디코더, 레지스터 사용가능을 판단 후 연산유닛으로 전달하며,

    RAW(Read After Write) 해저드 문제를 해결하기 위해 연산결과가

    레지스터 파일로 갱신되고 동시에 공통의 데이터버스를 통하여 브

    로드 캐스팅하는 기능을 담당하는 이슈유닛, 연산 과정에서 발생된

    중간 결과 값이나 초기 입력데이터를 저장하는 멀티포트 방식의 레

    지스터 파일, 파이프라인 구조로 되어 실제 그래픽 연산을 담당하는

    연산유닛으로 구성된다[13~15]. 이와 같이 그래픽 처리를 하기 위

    해 여러 부분으로 나뉘어 동작된다. 그래픽 처리는 많은 양의 데이

    터를 빠르게 처리하기 위해 모든 부분이 빠르게 동작되어야 하며,

    전체적인 동작의 성능을 좌우할 수 있는 연산 유닛이 필요하다. 본

    논문에서는 위의 그림 12의 전체 구조에 나타난 부분 중 프로세서

    성능과 직결될 수 있는 연산 유닛인 ALU를 설계하였다.

  • - 20 -

    제 4 장 부동소수점 연산기 설계

    이 장에서는 셰이더 명령어를 분석하고 명령어 분석 결과를 토

    대로 그에 맞는 셰이더 프로세서의 연산기인 ALU를 설계한다.

    4.1 셰이더 명령어 분석

    본 논문에서는 DirectX ASM Shader referance의 버텍스/픽셀

    셰이더 3.0[10]을 기준으로 설계하였으며, 표 2에 나타낸 명령어를

    실행할 수 있는 연산기를 설계하기 위해 각 명령어의 실행과정을

    분석하였다.

    전체명령어를 수행과정에 따라 크게 2종류로 분리하였다. 일반

    연산을 담당하는 ALU와 특수 연산을 담당하는 SFU로 나누어진다.

    본 논문에서는 ALU명령어를 수행할 수 있는 연산 유닛과 SFU 연

    산을 수행하는 연산 유닛을 설계하였다. ALU 명령어 수행과정은 크

    게 4가지(곱셈연산, 덧셈연산, 비교연산, 뺄셈연산)로 나눌 수 있으

    며, 이 4가지 연산유닛을 기본으로 단일연산, 조합연산으로 동작하

    여 모든 ALU 연산을 수행할 수 있는 구조를 설계하였다.

    표 2에 표시된 명령어중 그래픽 연산에서 빈번하게 수행되는

    ALU 연산은 DP (dot product), MAD (multiply and add), MUL

    (multiply), ADD, COMPARE이며, 개별연산은 하나의 모듈로 구성

    이 가능 하지만 조합연산을 수행하기 위해 DP 연산과 MAD 연산의

    실행과정을 연산이 실행되는 세부 코드를 살펴보도록 한다.

  • - 21 -

    명령어 연산유닛 버전

    ABS ALU vs3.0/ps3.0

    ADD ALU vs3.0/ps3.0

    CRS ALU vs3.0/ps3.0

    CMP ALU ps3.0

    DP2ADD ALU ps3.0

    DP3 ALU vs3.0/ps3.0

    DP4 ALU vs3.0/ps3.0

    DST SFU vs3.0

    EXP SFU vs3.0/ps3.0

    FRC SFU vs3.0/ps3.0

    LIT SFU vs3.0

    LOG SFU vs3.0/ps3.0

    LRP ALU vs3.0/ps3.0

    MAD ALU vs3.0/ps3.0

    MAX ALU vs3.0/ps3.0

    MIN ALU vs3.0/ps3.0

    MOV ALU vs3.0/ps3.0

    MUL ALU vs3.0/ps3.0

    NRM SFU vs3.0/ps3.0

    POW SFU vs3.0/ps3.0

    RCP SFU vs3.0/ps3.0

    RSQ SFU vs3.0/ps3.0

    SET_COMP ALU vs3.0/ps3.0

    SGE ALU vs3.0

    SGN ALU vs3.0

    SINCOS SFU vs3.0/ps3.0

    SLT ALU vs3.0

    SUB ALU vs3.0/ps3.0

    표 2. 버텍스/픽셀 셰이더 3.0 명령어

    Table 2. Vertex/Pixel Shader 3.0 instruction

  • - 22 -

    각 명령어의 ASM code 아래 같으며, dst는 destination register

    를 나타내며 src는 source register이다.

    DP4 dst, src0, src1

    MAD dst, src0, src1, src2

    MUL dst, src0, src1

    ADD dst, src0, src1

    CMP dst src0, src1

    위 예제 코드의 입력데이터는 IEEE 754 단정도 부동소수점 형식

    이며, 각 src는 (x, y, z, w 또는 r, g, b, ɑ)로 구성된다. 또한 하나

    의 명령어에 최대 입력되는 소스의 수가 3개 이므로 연산유닛의 소

    스입력 포트는 128bit의 입력 3개를 동시에 받을 수 있는 구조로 설

    계되어야 한다. 다음은 DP4의 연산 식이다. 입력되는 두 개의 소스

    를 입력받아 각각의 x, y, z, w의 값을 곱셈연산을 수행한 후 그 결

    과를 모두 합하여 나온 결과를 destination register의 x, y, z, w에

    동일하게 저장을 한다.

    DP4 dst, src0, src1

    dst.w = (src0.x * src1.x) + (src0.y * src1.y) +

    (src0.z * src1.z) + (src0.w * src1.w);

    dst.x = dst.y = dst.z = dst.w;

    다음으로 mad의 연산 식이며 입력되는 3개의 소스를 입력받아

    src0와 src1의 x, y, z, w의 값을 각각 곱셈연산을 수행하고 나온 결

  • - 23 -

    과와 src2의 x, y, z, w의 값을 더하여 나온 결과를 destination

    register의 x, y, z, w에 연산된 결과를 저장 한다.

    MAD dst, src0, src1, src2

    dst.x = src0.x * src1.x + src2.x;

    dst.y = src0.y * src1.y + src2.y;

    dst.z = src0.z * src1.z + src2.z;

    dst.w = src0.w * src1.w + src2.w;

    ADD, MUL, CMP 연산은 개별 유닛으로 이루어지며, DP, MAD

    연산은 개별 연산유닛의 조합으로 연산결과를 얻을 수 있다. 이것은

    개별 연산 유닛간의 데이터의 연결을 담당하는 멀티플렉서가 필요

    하며, 멀티플렉서의 동작에 의해 어떤 명령어가 수행 될지가 결정되

    게 된다. 기존의 연산기의 구조는 모든 명령어에 대한 수행이 가능

    하지만 수행하는 연산이 개별 유닛으로 구성되어 있으며, 조합연산

    의 경우도 연산유닛간의 버스로 연결된 구조로 구성되어 있다. 이것

    은 하나의 명령어가 실행될 때 해당하는 명령어를 수행하는 연산유

    닛 이외의 다른 유닛들은 수행되지 않으므로 연산의 효율이 떨어지

    며, 스트림 처리에 적합하지 않다.

    SFU 연산은 위에서 설명한 일반 연산이 아닌 특수 연산을 수행

    하는 연산 유닛이다. 수행되는 연산은 표 2에 나타낸 것과 같으며

    그 중 sin/cos 과 dst 연산의 명령어 구조를 살펴보도록 한다. 명령

    어 형식은 다음과 같다. sin/cos 연산은 하나의 명령어로 sin과 cos

    연산이 동시에 이루어지는 명령어 구조이다. 입력 소스는 하나이며

    입력 소스 중 x, y만이 유효하며 연산결과 역시 write mask 값에

  • - 24 -

    의해 x, y만이 유효하다. x는 cos 연산이며, y는 sin 연산을 수행한

    다.

    sincos dst.{x|y|z|w}, src0{x|y|z|w|}

    - write mask가 x 일 경우

    dest.x = cos( V )

    dest.y is not touched by the instruction

    dest.z is not touched by the instruction

    dest.w is not touched by the instruction

    - write mask가 y 일 경우

    dest.x is not touched by the instruction

    dest.y = sin( V )

    dest.z is not touched by the instruction

    dest.w is not touched by the instruction

    - write mask가 xy 일 경우

    dest.x = cos( V )

    dest.y = sin( V )

    dest.z is not touched by the instruction

    dest.w is not touched by the instruction

    다음으로 dst의 연산 식이며 입력되는 2개의 소스를 입력받아 거

    리벡터를 구하는 연산을 수행한다. dest의 각 컴포넌트 x, y, z, w의

    값은 다음과 같은 연산으로 구해진다.

    DST dest, src0, src1

    dest.x = 1;

    dest.y = src0.y * src1.y;

  • - 25 -

    dest.z = src0.z;

    dest.w = src1.w;

    4.2 ALU 설계

    셰이더 연산을 수행하는 ALU의 전체 구조는 그림 13과 같으며,

    Swizzle

    Input_modifier

    multiply and accumulation

    Instruction_modifier

    ControlPipeline

    To issue unit and register file

    To issue unti and reigster file

    From issue unit From register file(x, y, z, w)

    그림 13 ALU 전체구조

    Figure 13. Architecture of ALU

    swizzle, input modifier, instruction modifier, write mask, mac 연산

    유닛, 컨트롤 파이프라인으로 구성되며, 각 부분의 기능과 설계 모

  • - 26 -

    델은 다음과 같다. mac 연산 유닛에서 사용된 개별 모듈은 Xilinx의

    IP인 floating-point operator v3.0을 이용하여 구현하였으며, 그 외

    의 조합논리 회로는 각 기능을 VHDL로 구현하였다.

    4.2.1 스위즐 기능 및 설계

    swizzle의 동작은 ALU의 구성에서 최상위에 위치한 모듈로 첫

    입력데이터를 받아들이는 부분이다. 입력되는 각 소스의 x, y, z, w

    데이터를 원하는 연산에 적합한 위치에 입력하기 위한 부분이다.

    swizzle의 구조는 그림 14와 같이 구성되며, 입력 레지스터로부터

    들어오는 데이터의 x, y, z, w를 레지스터간의 데이터 이동 없이 원

    하는 위치로 입력해주는 기능을 한다. swizzle을 사용은 실제 레지

    스터의 데이터를 변경 시키는 것이 아닌 입력단계에서 데이터의 위

    치를 변경하므로 효율적이다. swizzle의 구성은 조합논리회로인 4입

    력 1출력 멀티플렉서 4개를 이용하여 구현하였다. 각 멀티플렉서는

    입력되는 x, y, z, w의 값을 모두 입력으로 받고 swizzle 선택 신호

    에 의해 출력되는 값을 선택하게 된다.

  • - 27 -

    x y z w

    MUX MUX MUX MUX

    X_XX_YX_ZX_W

    Y_XY_YY_ZY_W

    Z_XZ_YZ_ZZ_W

    W_X

    W_YW_ZW_W

    그림 14 스위즐의 구조

    Figure 14. Architecture of swizzle

    4.2.2 modifier 기능 및 설계

    modifier는 두 부분으로 나누어진다. swizzle의 출력을 입력으로

    받아 입력 값에 대한 처리를 담당하는 input modifier와 mac의 연산

    된 결과 값을 입력으로 받아 처리를 담당하는 instruction modifier

    로 구분된다. 먼저 input modifier는 swizzle 단으로부터 입력된 데

    이터를 mac 연산부로 전달한다. 이 과정에서 입력데이터를 그대로

    전달하거나 입력데이터의 abs연산한 결과를 전달하거나 negate 연

    산을 한 결과를 전달한다. 이것은 프로그램에 맞게 변경하여 전달하

    는 기능을 담당한다. input modifier의 구조는 그림 15에 보여 지는

    것과 같이 구성되며, 사용된 모듈은 조합논리회로인 4입력 1출력의

    멀티플렉서, abs 연산을 수행하는 모듈, negate 연산을 수행하는 모

    듈로 구현 하였다.

  • - 28 -

    MUX

    X n ABS

    MUX

    X n ABS

    MUX

    X n ABS

    SwizzleSwizzle Swizzle

    그림 15. input modifier 구조

    Figure 15. Architecture of input modifier

    abs 모듈은 입력되는 데이터가 IEEE 754 부동 소수점 데이터 이므

    로 최상위 비트인 부호비트를 보고 부호가 음수일 경우 부호비트를

    양수로 바꾸어 입력 데이터의 결과를 변경한다. negate 모듈은 입력

    데이터의 최상위 비트인 부호비트를 반전시켜 입력 데이터의 결과

    를 변경한다.

    instruction modifier는 mac 연산부에서 처리된 결과를 레지스터

    에 쓰기 전에 연산결과 값을 그대로 전달하거나 saturation 하여 결

    과를 저장한다. saturation 과정은 연산결과를 [0,1] 사이의 값으로

    만들어 레지스터에 저장한다. instruction modifier의 구조는 그림 16

    과 같은 구조로 설계 되었다. instruction modifier에 사용된 모듈은

    2입력 1출력 멀티플렉서, 비교기(less than, greater than), 4입력 1출

    력 멀티플렉서, stage를 이용하여 구현하였다. 연산결과의 [0,1]사이

    의 값을 추출하기 위해 입력된 데이터를 각각 비교기를 이용하여 0

    이하의 값인지 1이하의 값인지를 비교한다. 비교결과를 이용하여 결

  • - 29 -

    과를 출력하는 멀티플렉서의 선택 신호로 사용하도록 구현 하였다.

    MUX

    X C S

    MUX

    X C S

    MUX

    X C S

    MUX

    X C S

    그림 16 instruction modifier 구조

    Figure 16. Architecture of instruction modifier

    4.2.3 MAC 기능 및 설계

    mac(multiply and accumulation) 유닛은 전체 셰이더 명령어의

    연산이 이루어지는 유닛이다. 이것은 분석된 명령어 형식에 따라 실

    행을 효율적으로 수행할 수 있는 구조의 mac를 설계하였다. 개별유

    닛은 ADD/SUB, MUL, COMPARE를 사용하였으며 그 외의 조합연

    산 DP, MAD의 연산은 개별 유닛의 조합에 의해 수행될 수 있는

    구조로 구현 하였다. mac의 전체 구조는 그림 17과 같으며 입력 데

    이터의 수는 최대 3개이며 각각 x, y, z, w의 입력을 동시에 받을

    수 있는 구조이다. 또한 그래픽 연산이 동일한 연산을 서로 다른 데

    이터에 대해 반복적으로 수행하는 특징을 가지고 있으므로 각 단계

    를 파이프라인화 하여 동일한 연산에 대한 연속적인 수행이 가능하

    도록 하여 전체적인 성능을 높일 수 있는 구조로 설계되었다.

  • - 30 -

    그림 17. mac 구조

    Figure 17. Architecture of mac

    그림 17에서 S(stage)는 mad 연산을 수행할 때 mul 연산의 결과가

    계산되기 까지 소스2의 값을 mul 연산의 파이프라인 단계만큼 동일

    하게 데이터를 이동 시켜주는 기능을 한다. 각 명령어 수행별 파이

    프라인 단계는 표 3과 같이 구현되었다.

  • - 31 -

    No. 명령어 파이프라인 단수

    1 ADD/SUB 5

    2 MUL 8

    3 MAD 13

    4 DP3 18

    5 DP4 18

    6 COMPARE 3

    7 MIN/MAX 3

    8 ABS 0

    9 CRS 13

    10 DP2ADD 18

    11 CMP 3

    12 SET_COMP 3

    13 SGN 0

    14 MOV 1

    15 SGE/SLT 3

    표 3. 각 명령어별 파이프라인 depth

    Table 3. Each instruction depth

    4.2.4 컨트롤 파이프라인 기능 및 설계

    그림 17과 같은 구조에서 단일 연산과 조합연산의 유기적인 제

    어가 ALU의 성능과 직결된다고 할 수 있으며 이러한 연산의 제어

    를 위하여 ALU 컨트롤 파이프라인 유닛이 필요하며 그 구조는 그

    림 18과 같이 설계된다. ALU 컨트롤 파이프라인 유닛은 ALU내부

    에서 연산 유닛간의 데이터 흐름을 연산의 종류에 맞게 제어하여

    원하는 연산의 결과를 얻을 수 있도록 ALU를 제어 하며, 컨트롤 파

    이프라인의 구조는 그림 18과 같이 설계 한다. 각 연산의 종류마다

  • - 32 -

    파이프라인 단계 수가 다르기 때문에 모든 연산에 대해 해당하는

    단계에서 데이터의 흐름을 결정하기 위하여 파이프라인과 mux를

    조합하여 ALU 컨트롤 파이프라인 유닛을 설계 한다. 컨트롤 파이프

    라인의 최대 단계 수는 ALU에서 수행되는 연산 종류 중 파이프라

    인 단계 수가 가장 큰 연산의 단계 수만큼 되도록 한다.

    컨트롤 파이프라인의 동작은 입력 데이터가 연산유닛으로 입력

    되는 시점에 수행 되고자 하는 연산의 제어 정보가 컨트롤 파이프

    라인으로 입력된다. 입력된 제어 정보를 분석하여 현재 수행되어야

    할 연산의 종류를 판별하고 해당되는 단계에서 제어정보를 파이프

    라인으로 입력한다. 이렇게 입력된 제어정보는 파이프라인을 타고

    흐르며 각 연산마다 필요한 제어 신호를 연산유닛으로 전달한다. 그

    림 18에서 컨트롤 파이프라인의 각 mux의 입력 데이터는 파이프라

    인을 거친 제어정보와 파이프라인을 거치지 않은 제어정보 중 연산

    의 종류에 맞는 신호를 판별하여 다음 단계의 파이프라인으로 전달

    하도록 설계한다. 입력되는 제어정보의 형식은 연산의 종류를 구분

    하는 5비트, compare의 비교 조건을 결정하는 6비트, 연산결과의 유

    효성을 나타내는 1비트로 구성되며, 제어정보의 유효성을 판단하는

    비트는 연산의 결과가 출력 될 때 같이 출력되어 연산결과가 레지

    스터나, 다음 연산의 입력으로 주어질 때 이 연산결과가 유효한지를

    판별하기 위해 추가된 비트이다. 컨트롤 파이프라인은 ALU의 연산

    종류에 따라 정확한 연산을 수행 할 수 있도록 연산유닛의 데이터

    흐름을 결정한다.

  • - 33 -

    그림 18. 컨트롤 파이프라인 구조

    Figure 18. Architecture of control pipeline

    컨트롤 파이프라인으로 입력되는 제어 정보의 구성은 표 ?와 같

    이 구성된다.

    valid maskinstruction

    modifier

    input

    modifiercounter

    register

    typeswizzle

    compare

    conditionalu op

    표 4. 컨트롤 파이프라인 정보

    Table 4. control pipeline infomation

    valid 비트는 입력되는 값의 유효함을 나타내며, 연산결과와 같

    이 출력되어 연산 결과에 대한 유효성을 판단하기 위한 신호이다.

    mask 값은 x, y, z, w 4개의 결과 값 중 실제 레지스터에 쓰여 질

  • - 34 -

    값에 해당되는 신호만 1로 설정된다. instruction modifier 정보는

    mac에서 처리된 결과를 그대로 레지스터로 전달하거나 instruction

    modifier 동작을 수행한 후 레지스터로 전달할 것인지를 결정하는

    정보이다.

    No. 명령어 mux 선택 신호

    1 ADD/SUB 00000010001

    2 MUL 00010010111

    3 MAD 00000101110

    4 DP3 00111001100

    5 DP4 00111111100

    6 COMPARE 00100010001

    7 MIN/MAX 01000010001

    8 ABS 01010110011

    9 CRS 00000111111

    10 DP2ADD 00111000100

    11 CMP 01110110011

    12 SET_COMP 10010010001

    13 SGN 01100110011

    14 MOV 10000000001

    15 SGE/SLT 10100010001

    표 5. 각 명령어별 mux 신호

    Table 5. Each instruction mux signal

    input modifier는 소스로 입력되는 입력 값을 입력 값 그대로 mac

    으로 전달하거나 input modifier 동작을 수행한 후 mac 으로 전달할

    것인지를 결정하는 정보이다. counter 정보는 하나의 명령어를 몇

    개를 수행할 지를 결정하며, 레지스터 타입은 연산된 결과를 저장할

    레지스터의 타입 정보이다. swizzle은 입력되는 소스 여기서는 최대

  • - 35 -

    3개의 소스가 동시에 입력될 수 있으므로 3개의 소스에 대한

    swizzle 정보를 가지고 있으며, 비교 조건은 ALU 연산에서 비교 연

    산과 관련된 연산을 수행할 때 어떤 비교 연산을 수행 할 것인지에

    대한 정보이다. alu op 정보는 mac 내부의 mux 선택 정보이며, 이

    선택 신호에 의해 어떤 연산이 수행될지가 결정된다. 명령어별 mux

    선택 신호는 표 5와 같다.

    4.2.5 명령어 간의 지연

    본 논문에서 구현한 ALU에서 수행되는 명령어는 모두 파이프라

    인 구조로 동작되며, 각 명령어별 파이프라인 depth는 연산의 종류

    마다 차이가 있다. 그러므로 연속적으로 여러 명령어를 실행하기 위

    해서는 명령어 간의 지연 상관관계에 따라 수행되어야 한다. 각 명

    령어별 파이프라인 depth에 따른 명령어간 지연은 표 5와 같다. 표

    5에 나타난 명령어별 지연은 앞에 수행되는 명령어의 depth가 현재

    수행될 명령어보다 클 때 현재 수행하고자 하는 명령어는 위의 표

    에 따라 일정 클럭을 대기한 후 입력되어 실행되어야 한다.

  • - 36 -

    앞ADD MUL MAD DP COMP MOV ABS

    ADD 0 0 0 0 4 5 6

    MUL 4 0 0 0 6 8 9

    MAD 9 6 0 0 11 13 14

    DP 14 11 6 0 16 18 19

    COMP 0 0 0 0 0 3 4

    MOV 0 0 0 0 0 0 2

    ABS 0 0 0 0 0 0 0

    표 6. 각 명령어별 상관관계

    Figure 6. Each instruction interrelation

    4.3 SFU 설계

    SFU (special function unit)는 ALU에서 수행하는 일반연산과는

    차별화된 특수연산을 수행하는 유닛이다. 표 2에서 SFU에서 수행되

    어야 할 명령어를 표시하였으며, 여기서는 sin과 cos 모듈의 구현

    방법과 dst 연산에 대한 모듈 구현에 대하여 살펴본다. 그 외의 다

    른 명령어들은 Xilinx의 IP인 floating-point operator v3.0을 이용하

    여 구현하였다.

  • - 37 -

    4.3.1 sin/cos 모듈 설계

    sincos 모듈은 테이블을 이용하여 설계 하였다. Xilinx FPGA의

    블록 메모리에 sin 과 cos 데이터를 각각 저장한 후 구하고자 하는

    값에 해당하는 결과를 테이블에서 읽어와 출력하도록 구현 되었다.

    sincos 모듈의 구조는 그림 19와 같으며, 블록 메모리에 저장되는

    sin/cos 값과 그것을 읽어오기 위한 방법은 아래의 방법은 다음과

    같다.

    먼저 를 구하고 입력 데이터를 구해진 값으로 나

    누어 메모리 인덱스( )로 사용을

    하며, 입력 데이터는 부동소수점 데이터 이다. 각 메모리에 저장되

    는 데이터는 와 로 구해진 값

    을 각 메모리에 저장하며, 테이블의 크기는 32 * 2048의 크기를 갖

    도록 설계하였다.

  • - 38 -

    divider

    converterfloating => fixed

    sin table32 * 2048

    cos table32 * 2048

    Data in value

    Addr index

    sin result cos result

    그림 19 sin/cos 모듈 구조

    Figure 19. Architecture of sin/cos

  • - 39 -

    제 5 장 HDL 합성 및 시뮬레이션

    앞장에서는 ALU의 구조와 모듈별 구성을 살펴보았다. 이번 장에

    서는 본 논문에서 제안하는 ALU의 구조를 구현하고, 동작에 대한

    시뮬레이션 결과를 살펴본다. 구현은 ISE 9.2를 사용하였으며, 시뮬

    레이션은 Modelsim 6.0을 사용하여 ALU 기능을 검증하였다.

    5.1 설계 로직 합성 및 기능 검증 방법

    본 논문에서 제안한 ALU의 구조는 앞장에서 설명한 각 모듈을

    VHDL로 구현하였다. 사용된 FPGA는 Xilinx 사의 Virtex 4 lx200

    을 타겟으로 하여 설계 되었으며, 구현된 모듈 중 부동소수점 연산

    을 담당하는 부분은 Xilinx 사의 Core Generator의 IP(Intellectual

    Property)인 Floating-point Operator v3.0[11]을 사용하였다. ALU의

    로직 합성 결과는 표 6과 같다.

    세부 모듈 Slices 동작속도

    swizzle 384 150 ㎒

    input modifier 6 180 ㎒

    mac 4288 117 ㎒

    instruction modifier 592 200 ㎒

    control pipeline 633 180 ㎒

    total 6200 100 ㎒

    표 6. 합성 결과

    Table 6. Synthesize result

  • - 40 -

    표 6에 나타난 합성결과에서 전제 Slices의 수가 세부모듈별 결

    과를 모두 더한 결과와 같지 않다. 그 이유는 전체 모듈로 합성되면

    서 발생하는 모듈별 연결을 위한 증가 양 이며, 동작속도 또한 전제

    합성을 하면서 발생되는 와이어 딜레이가 증가하기 때문에 개별 모

    듈의 동작속도가 전체 모듈 합성 후 줄어들게 된다.

    사용된 FPGA는 Xilinx 사의 Virtex 4 lx200 으로 사용할 수 있

    는 하드웨어의 전체 크기는 89088 slices, 18 kb 블록 메모리 336개,

    DSP48 96개를 가지고 있다.

    5.2 부동소수점 연산기의 기능 검증

    본 논문에서 설계한 ALU의 기능 검증은 Modelsim 6.0 을 사용

    하여 기능적 레벨 시뮬레이션을 수행하였다. 사용된 테스트 벡터는

    각 명령어별 기능을 검증할 수 있도록 작성하였으며, 단일 연산유닛

    을 사용하는 명령어와 조합 연산을 수행하는 명령어에 대한 검증을

    하며, 그 다음 조합 연산과 개별 연산을 혼합하여 테스트 하였다.

    5.2.1 개별연산에 대한 기능적 레벨 시뮬레이션

    개별 연산에 대한 시뮬레이션은 셰이더 명령어를 간단한 테스트

    벡터를 작성하여 시뮬레이션 하여 결과를 얻었으며, 동일한 입력을

    직접 계산한 결과와 비교하여 개별 연산에 대한 기능 검증을 하였

    다. 아래 그림 19는 개별 연산의 시뮬레이션 결과 중 그래픽 연산에

    서 가장 빈번하게 나오는 DP 연산을 수행한 결과 이다.

  • - 41 -

    그림 20. DP 연산에 대한 시뮬레이션 파형

    Figure 20. Simulation wave of DP operation

    그림 19의 시뮬레이션 파형은 연속된 입력 값을 랜덤하게 발생하

    여 DP 연산을 5번 수행한 결과이다. 입력 소스 값의 valid 함을 나

    타내는 신호와 그때의 입력 값이 실제 연산에 사용되게 된다. 입력

    되는 컨트롤 정보에는 ALU연산을 결정하는 제어정보와 각 소스

    swizzle 제어정보, 비교연산을 위한 조건 제어정보, input modifier의

    제어정보, insturction modifier의 제어정보와 valid 정보로 구성된다.

    5.2.2 조합연산에 대한 기능적 레벨 시뮬레이션

    하나의 명령어에 대한 기능 검증이 완료되고, 두 개 이상의 명령

    어를 테스트 벡터로 입력하여 동작에 대한 검증을 한다. 여기서는

    mad 연산과 add 연산을 연속해서 입력하여 두 개 연산의 결과를

    검증하였다. 테스트에 대한 시뮬레이션 파형은 그림 20이다.

  • - 42 -

    그림 21. MAD 와 ADD 연산에 대한 시뮬레이션 파형

    Figure 21. Simulation wave of MAD and ADD operation

    그림 20에 나타난 시뮬레이션 파형은 mad 연산을 수행하고 이어

    서 add 연산을 수행한 시뮬레이션 파형이다. 두 연산이 수행 되는

    중간에 연산 종류별 입력 지연을 고려하여 수행된다. ALU의 구조가

    하나의 모듈에서 모든 연산을 실행하는 구조로 되어 있으므로, 입력

    되는 연산의 종류에 따른 입력 지연이 발생한다.

  • - 43 -

    제 6 장 결 론

    본 논문에서 제안하는 부동소수점 연산기는 프로그래머블 셰이

    더 프로세서에서 사용 가능한 연산유닛을 설계하였다. 설계된 부동

    소수점 연산기의 구조는 기존의 셰이더 프로세서 구조와 차별화된

    구조로 설계 되었으며 하나의 연산유닛에서 DirectX 9.0 Vertex

    Shader 3.0과 Pixel Shader 3.0 명령어중 앞에서 제시한 ALU 연산

    에 해당되는 명령어를 모두 수행할 수 있는 구조로 설계 되었다.

    제안된 부동소수점 연산기는 4개의 입력(x, y, z, w 또는 r, g, b,

    ɑ), 각 32bit 부동소수점 연산이 가능하며, 연산유닛 내부가 모두 파

    이프라인화 되어 있어 연산의 효율이 높으며, 명령어의 연속적인 수

    행이 가능하여 많은 양의 데이터를 처리하는 3D 그래픽 처리가 가

    능한 연산유닛이며 프로그래머블 셰이더 프로세서의 연산유닛으로

    적합하다.

    HDL 합성을 통하여 하드웨어의 크기는 Virtex 4 lx200에서 전체

    slices 중 하나의 연산유닛이 7%를 차이하며, 동작 속도는 전체 연

    산유닛이 100 ㎒에서 동작되며, 시뮬레이션을 통하여 개별 명령어의

    동작과 여러 명령어에 대한 동작을 검증하였으며 여러 개의 데이터

    를 연속적으로 입력하여 연속적인 동작에 대한 부분도 검증하였다.

    또한 그래픽 데이터의 병렬 성을 이용하여 처리율의 증가와 설계된

    통합 연산유닛을 여러 개 연결하여 사용함으로써 선형적인 성능향

    상을 기대할 수 있을 것 이다.

    마지막으로 본 논문에서 다루지 못한 부분, 앞으로의 과제에 대

    해 살펴본다. 본 논문에서는 프로그래머블 셰이더 프로세서 구조에

  • - 44 -

    적합한 부동소수점 연산기를 설계하였다. 그러나 실제 셰이더 처리

    에서 텍스쳐 명령어에 관한 처리도 필요하며 그 부분에 대한 연구

    와 동작 속도를 높이기 위한 하드웨어 설계 방법에 관한 연구가 이

    루어 져야한다. 또한 분기 명령어와 반복 명령어 처리를 어떻게 구

    현할 것인지에 대한 논의도 차후 중요한 과제의 하나가 될 것이다.

  • - 45 -

    참고문헌

    [1] Woo Kyeong Jeong, “A SIMD-DSP/FPU for

    High-Performance Embedded Microprocessors,” Phd Thesis,

    Yonsei University, Dec, 2002

    [2] Ujval J. Kapasi, William J. Dally, Scott Rixner, John D.

    Owens, and Brucek Khailany. The Imagine Stream Processor.

    In Proceedings of the 2002 IEEE International Conference on

    Computer Design: VLSI in Computers and Processors

    (ICCD’02).

    [3] Ju-Ho Sohn., Ramchan Woo., Hoi-Jun Yoo. A Programmable

    Vertex Shader with Fixed-point SIMD Data Path for Low

    Power Wireless Applications. Graphics Hardware, 2004

    [4] B. Khailany, “The VLSI Implementation And Evaluation Of

    AREA-And Energy-efficient Streaming Media Processors,”

    Ph.D. dissertation, Stanford University, Jun. 2003.

    [5] V. Moya, C. Gonzalez, J. Roca, A. Fernandez, and R. Espasa,

    “Shader Performance Analysis on a Modern GPU

    Architecture,” Proceedings of the 38th Annual IEEE/ACM

    International Symposium on Microarchitecuture (MICRO'05),

    pp. 355-364, Nov. 2005.

    [6] D. Kim, K. Chung, C. Yu, C. Kim, I. Lee, J. Bae, Y. Kim, J.

    Park, and N. Seong, “An SoC with 1.3Gtexels/s 3-D Graphics

    Full Pipeline for Consumer plications,” IEEE Journal of Solid

    State Circuits, Vol 40, No.1, Jan. 2006.

    [7] Cheol-Ho Jeong, “The Design of Geometry Processor for 3D

    Graphics,” Master Thesis, Yonsei University, Dec, 1998

  • - 46 -

    [8] Foley, Van Dam, Feiner, Hughes, “Computer Graphics

    Principle and Practice,” Addison & Wesley, 1996

    [9] Takashi Imagire, “DirectX9 Shader Programming Book,”

    Tuttle-Mori, 2004

    [10]Microsoft MSDN Asm Shader Reference

    Vertex/Pixel Shader 3.0

    [11] Xilinx Core generator Floating point operator 3.0 datasheet

    [12] J. Hennessy, and D. Patterson, Computer Architecture : A

    quantitative Approach, 3rd edition, Morgan Kaufmann,

    pp.109-127, 2002.

    [13]이윤섭, 정진하, 김도형, 최상방, “그래픽 스트림 프로세서의 마

    이크로 아키텍쳐와 제어부 설계에 관한 연구,” 대한전자공학회

    하계종합학술대회 논문집Ⅱ, pp. 571-572, July, 2007

    [14]윤준철, 정진하, 신광식, 김도형, 최상방, “3D 그래픽처리를 위한

    ALU 설계,” 대한전자공학회 하계종합학술대회 논문집Ⅱ, pp.

    569-570, July, 2007

    [15]김경섭, 장문석, 윤완오, 최상방, “벡터연산 SIMD 그래픽 프로

    세서를 위한 멀티포트 레지스터 파일 설계,” 대한전자공학회 하

    계종합학술대회 논문집Ⅱ, pp. 563-564, July, 2007

    제1장 서론제2장 3D 그래픽 처리과정2.1 3D 그래픽 처리과정2.1.1 응용단계2.1.2 기하단계2.1.2.1 모델변환과 시야변환2.1.2.2 조명처리와 셰이딩2.1.2.3 투영2.1.2.4 클리핑2.1.2.5 화면매핑

    2.1.3 셋업단계2.1.4 레스터화단계

    제3장 프로그래머블 셰이더 프로세서3.1 프로그래머블 셰이더 구조3.1.1 정점 셰이더3.1.2 픽셀 셰이더

    3.2 벡터연산 SIMD 셰이더 프로세서 모델

    제4장 부동소수점 연산기 설계4.1 셰이더 명령어 분석4.2 ALU 설계4.2.1 swizzle 설계4.2.2 modifier 설계4.2.3 MAC 설계4.2.4 컨트롤 파이프라인 설계4.2.5 명령어 간의 지연

    4.3 SFU 설계4.3.1 sin/cos 모듈 설계

    제5장 HDL 합성 및 시뮬레이션5.1 설계 로직 합성 및 기능 검증 방법5.2 부동소수점 연산기의 기능 검증5.2.1 개별연산에 대한 기능적 레벨 시뮬레이션5.2.2 조합연산에 대한 기능적 레벨 시뮬레이션

    제6장 결론참고문헌