AMBA TM Specification (AHB) By GH Lee ver. 1.2 Seoul National Univ. Design Automation Lab. http://poppy.snu.ac.kr Hynix Project Document ver. 2002-01
Chapter 1 Introduction to the AMBA Buses... 4 1.1 Overview of the AMBA specification... 5 1.2 A typical AMBA-based microcontroller... 5 1.3 Introducing the AMBA AHB... 6 Chapter 2 AMBA Signals... 7 2.1 AMBA signal names... 8 2.1.1 AHB signal prefixes... 8 2.1.2 ASB signal prefixes... 8 2.1.3 APB signal prefixes... 8 2.2 AMBA AHB signal list... 9 Chapter 3 AMBA AHB... 12 3.1 About the AMBA AHB... 13 3.2 Bus interconnection... 13 3.3 Basic transfer... 14 3.4 Transfer type... 17 3.5 Burst operation... 19 3.5.1 Early burst termination... 19 3.6 Control signals... 23 3.6.1 Transfer direction... 23 3.6.2 Transfer size... 23 3.6.3 Protection control... 24 3.7 Address decoding... 25 3.8 Slave transfer responses... 26 3.8.1 Transfer done... 26 3.8.2 Transfer response... 26 3.8.3 Two-cycle response... 27 3.8.4 Error response... 28 3.9.5 Split and Retry response... 29 3.9 Data buses... 30 3.10 Arbitration... 31 3.10.1 Signal Description... 31 3.10.2 Requesting Bus Access... 32 3.10.3 Granting Bus Access... 33 3.11 Split transfers... 36 2
3.11.1 Bus handover with split transfers... 37 3.12 Reset... 38 3.13 AHB bus interface... 39 Chapter 4 Design of the AMBA AHB... 41 4.1 Design Environment... 42 4.2 Used Signal list for Arbiter... 42 4.2.1 Prefix... 42 4.2.2 Functions... 42 4.2.3 Used Signal Description... 44 4.3 Arbiter FSM and VHDL coding... 46 4.3.1 OKAY RESP... 48 4.3.2 RETRY RESP... 48 4.3.3 SPLIT RESP... 48 4.3.4 ERROR RESP... 49 4.4 Other components... 50 4.4.1 Decoder... 50 4.4.2 Master Multiplexor... 50 4.4.3 Slave Multiplexor... 52 4.5 Connection of the All components... 53 3
Chapter 1 Introduction to the AMBA Buses 1.1 Overview of the AMBA specification 1.2 A typical AMBA-based microcontroller 1.3 Introducing the AMBA AHB 4
1.1 Overview of the AMBA specification Advanced Microcontroller Bus Architecture (AMBA) 는 embedded microcontroller 의설계를 위한 on-chip communication 의표준안이되고있다. AMBA의 Specification에는 3가지가있다. The Advanced High-performance Bus (AHB) The Advanced System Bus (ASB) The Advanced Peripheral Bus (APB) 1.2 A typical AMBA-based microcontroller AMBA-based microcontroller 는일반적으로 AHB 나 ASB 를 backbone bus 로사용한다. 여 기에는 ARM 과같은 CPU 나 DMA 등이연결될수있다. 또한 peripheral macrocell communication 을위해서 APB 가붙을수있는데이것은 ASB 나 AHB 의 local bus 처럼여겨지며 Bridge 를사용하여연결된다. Figure 1-1 typical AMBA system 이중에서가장널리사용되고있는 AMBA AHB 에대해서다음장에걸쳐서자세히알아보 고자한다. 5
1.3 Introducing the AMBA AHB AHB는 High-performance를위한 AMBA bus의새로운제안이다. 이를위한 AMBA AHB의특성은다음과같다. Burst transfer Split transaction Single-cycle bus master handover Single-clock edge operation Non-tristate implementation (separate WDATA and RDATA) Wider data bus configurations (64/128 bits) AMBA AHB 에는하나또는그이상의 bus master 가연결된다. 이러한것들에는 DMA 나 DSP 같은것들이연결될수있다. External memory interface 나 APB bridge 등은 AMBA AHB 의 slave 로연결될수있다. 그러 나 low-bandwidth 를갖는 peripheral 장치들은 APB 를통해서연결이되어야할것이다. AMBA AHB system 을구성하는요소는다음과같다. 구성요소 AHB Master AHB Slave AHB arbiter AHB decoder 설명 Bus Master는 Address나 control signal들을내보냄으로 read나 write의 operation을할수있도록해주는장치이다. 한번에하나의 Master만이전송을가능하게한다. Bus Slave는주어진 address-space안에서 read와 write를가능하게해주는장치이다. Slave는 ready등의 signal을통해서 master로하여금기다리게하거나전송이잘못되었음을알린다. Bus Arbiter는한번에오직하나의 Master가선택되도록하는역할을한다. 고유의 priority algorithm을가지고이러한 arbitration을하게되는데, AHB에는오직하나의 arbiter가존재하게된다. AHB decoder의역할은 Master로나오는 Address의상위비트를가지고서적절한 slave를선택해주는것이다. AHB에는역시하나의 Decoder가존재한다. 6
Chapter 2 AMBA Signals 2.1 AMBA signal names 2.2 AMBA AHB signal list 7
2.1 AMBA signal names AMBA의 signal들에는항상첫글자에특정한 letter가사용된다. 또한 n이라는문자가사용되는것은 active LOW라는의미를가지고있다. 그이외의 signal들은모두대문자로표현되며 active HIGH의의미를갖는다. H 2.1.1 AHB signal prefixes AHB signal 임을의미한다 2.1.2 ASB signal prefixes B ASB signal임을의미한다 A ASB의 arbiter와 master간에사용되는 signal임을의미한다 D ASB의 decoder에사용되는 signal임을의미한다 2.1.3 APB signal prefixes P APB signal 임을의미한다. 예를들어서 HREADY 라함은 AHB 의 HIGH 에서동작하는 signal 임을의미하고, BnRES 라 함은 ASB 의 LOW 에서동작하는 reset signal 임을알수있다. 8
2.2 AMBA AHB signal list 이번장에서는 AHB 에사용되는 signal 들의대략적인설명을볼수있다. 이후에나오는 장에서더욱자세히살펴볼수있을것이다. Signal 이름을잘살펴보면항상앞에 H 라는 letter 가붙어있음을확인할수있다. 이것은 AHB 의 signal 임을의미하는것이다. Table 2-1 AMBA AHB Signals Name Source Description HCLK Clock AHB의모든 clock은이 signal에동기화되어있으며항상 rising edge에서동작한다 HRESETn Reset 유일하게 LOW에서동작하는 signal로서 AHB의 reset역할을한다. HADDR[31:0] Master 32-bits address bus HTRANS[1:0] Master NonSequential, Sequential, Idle, Busy등의 transfer의성격을나타낸다. HWRITE Master HIGH일때는 write이고, LOW일때는 read를의미한다. HSIZE[2:0] Master Transfer의 data size를의미한다. 보통 byte(8-bits), halfword(16-bits), word(32-bits) 등으로나타나는데 AHB에서는최고 1024 bits까지지원한다. HBURST[2:0] Master 어떤 burst mode인지를알려주는역할을한다. 4, 8, 16또는 1개의 burst를지원하며, incrementing또는 wrapping으로나누어진다. HPROT[3:0] Master 추가적인정보로서현재의 transfer가 opcode fetch인지 data access인지등을알려주어전송을보호하는역할을한다. 이것외에도 cacheable, bufferable등의정보도알려준다. HWDATA[31:0] Master Write operation일때사용되며, 최소의 data bus size는 32 bits를추천한다. HSELx Decoder 각각의 Slave는고유의 Select 신호를가지게되며이것은 Decoder를통하여선택이된다. Transfer동안에어떠한 slave가선택되어질것인가를알려주는 signal이다. 9
Table 2-1 AMBA AHB Signals (continued) Name Source Description HRDATA[31:0] Slave Slave로부터 master에게전해지는 data를받는 signal로서 32 bits를추천한다. HREADY Slave HIGH일때에는전송이제대로이루어졌음을의미하고 LOW 일때에는 transfer를 extend하기를원한다는것을의미한다. HRESP[1:0] Slave Transfer에대한추가적인정보이다. OKAY, ERROR, RETRY, SPLIT으로구분된다. 10
AMBA는여러개의 Master를연결해서사용하기때문에 Arbitration과정이필요하게된다. 이를위해서사용되는 signal들이 Table 2-2에나와있다. 여기서 suffix x가의미하는바는 X라는 module로부터나오는 signal임을의미한다. 예를들어 Master0으로부터나오는 HBUSREQx는 HBUSREQ0으로표현될것이다. Table 2-2 AMBA AHB Arbiter Signal Descriptions Name Source Description HBUSREQx Master Bus Request 신호는 bus Master가 bus에대한 access를요청할때사용된다. 각각의 bus Master는각각 HBUSREQx라는 interface를가지게되며, Arbiter는최고 16개의 Master를다룰수있다. 즉HBUSREQ[15:0] 까자사용할수있다. HLOCKx Master Lock 신호는 bus Request 신호와동시에인가된다. HLOCKx 신호는 master가 burst trans를하려고할때, 중간에다른 Master에게 bus의소유를넘기지않을것을위해서사용된다. Locked transfer의첫번째전송이시작되면 Arbiter는현재의전송을끝마치기전에는다른 Master에게 bus의사용권을넘겨주지않을것이다. HGRANTx Arbiter Grant 신호는 arbiter에의해서발생된다. 이것은가장높은 priority를가진 master에게만 HIGH를준다. 그렇지만 Grant를얻었다고해서바로전송을시작할수있는것은아니다. HREADY가 HIGH일때에만비로소전송을시작할수있게된다. HMASTER[3:0] Arbiter 현재어떤 Maser가선택되어져있는가는 HMASTER[3:0] 신호를이용해서알수있다. 이것은 master들이연결되는 MUX에사용되어진다. Maser number는또한 SPLIT-capable slave에의해서도주어진다. 이것은 Master로하여금 SPLIT 전송을마무리할수있도록하는데사용된다. HMASTLOCK Arbiter HMASTLOCK 신호는현재전송하는것이 locked transfer 인지를알려준다. 이것은 address와 control signal과동시에나오게된다. HSPLIT[15:0] Slave (SPLITcapable) 16bit의 Split bus는 SPLIT-capable slave에의해서주어진다. 이를통해서 SPLIT 전송을마무리할수있도록하는데사용된다. 11
Chapter 3 AMBA AHB 3.1 About the AMBA AHB 3.2 Bus interconnection 3.3 Basic transfer 3.4 Transfer type about HTRANS[1:0] 3.5 Burst operation about HBURST[2:0] 3.6 Control signals about HSIZE[2:0] and HPROT[3:0] 3.7 Address decoding 3.8 Slave transfer responses about HRESP[1:0] 3.9 Data buses 3.10 Arbitration 3.11 Split transfers 3.12 Reset 3.13 AHB bus interface 12
3.1 About the AMBA AHB AHB는 High-performance를위한 AMBA bus의새로운제안이다. 이를위한 AMBA AHB의특성은다음과같다. Burst transfer Split transaction Single-cycle bus master handover Single-clock edge operation Non-tristate implementation (separate WDATA and RDATA) Wider data bus configurations (64/128 bits) 3.2 Bus interconnection AMBA 의 design 에는 Multiplexor, arbiter, decoder 가있어여러개의 Master 와 Slave 를중 개해주는역할을한다. Figure 3-1 에이에대한그림이나와있다. Figure. 3-1 Multiplexor interconnection 13
3.3 Basic transfer AHB의 transfer에는 2가지중요한사실이있다. Address phase에있어서오직 single cycle만으로구성된다. Data phase에서는 HREADY signal을사용하여몇 cycle동안의데이터의 extend가가능하다. Figure 3-2 에가장간단한 transfer 에대한그림이나와있다. 이그림에는 HREADY 에의한 wait 는나와있지않다. Figure. 3-2 Simple transfer Master 는항상 HCLK 의 rising edge 에서 address 와 control signal 을전송하게된다. 그다 음의 rising edge 에서 slave 는 address 와 control signal 을 sampling 하게되고그다음의 rising edge 에서해당 data 를받는다. 서로다른 clock period 를갖는개체사이에서전송을하기위해서 Slave 는 HREADY signal 14
을사용하여 data 를 extend 시키는데이에대한그림이 Figure 3-3 에나와있다. Figure 3-3 Transfer with wait states 여기에서주의할것은 write transfer 일경우에는 data phase 의전체 cycle 에걸쳐서 HWDATA 에 data 를담게되는데, read transfer 일경우에는 HREADY 가 HIGH 가되는부분에 서만 HRDATA 의 data 가유효하다는것이다. 15
서로상관이없는 address 들의전송에대한그림이 Figure 3-4 에나와있다. 여기서는 A, B, & C 의 Address 에대한전송을보여주고있다. Figure. 3-4 Multiple transfer A 와 C 는 zero wait state 로전송이이루어졌고, B 는 one wait state 의전송이이루어졌음 을볼수있다. B 의 data 를받는데사용되는 cycle 이 2cycle 이됨에따라서 C 의 Address 를전송하는것도 2cycle 이된것을확인할수있다. AHB 는이와같이 pipe-lined transfer 가가능하다. 16
3.4 Transfer type 모든 transfer 에는 HTRANS[1:0] 이라는신호를받으면서진행된다. 이에대한설명이 Table 3-1 에나와있다. Table 3-1 Transfer type encoding HTRANS[1:0] Type Description 00 IDLE 아무런전송이필요하지않음을의미한다. 즉해당 master에게 grant가이루어졌지만아무런전송을하지않으려할때에 IDLE transfer를하게된다. Slave는 zero wait state의 OKAY response를하며 transfer는 slave에의해서무시되어진다. 01 BUSY BUSY transfer는 burst transfer의중간에 IDLE cycle을넣으려고할때나타난다. 즉 master가계속하여 burst transfer를하려고하지만즉시다음전송이이루어질수없는상황에서 BUSY을나타낸다. BUSY의 cycle에서는현재의모든 control signal들이다음 cycle로전달되며 BUSY 상태의전송은 slave에의해서모두무시되어야한다. Slave는 IDLE 상태와같이 zero wait state의 OKAY response를해야한다. 10 NONSEQ Burst transfer의첫번째전송을의미하거나 single transfer를 의미한다. 또한현재 Address와 control signal들은전의 transfer와상관이없음을알려준다. 11 SEQ Burst transfer의나머지는모두 SEQUENTIAL로나타나며이것은전의 address와 control이현재의 transfer와상관이있다는것을알려준다. 그리하여현재의 address는전의 address에서 transfer size 만큼이더해져서나타나게된다. 17
Figure 3-5 에몇가지 transfer type 이사용된예를보여준다. Figure. 3-5 Transfer type example 위의그림에서첫번째전송은 NONSEQ로시작한것을볼수있다. Master가전송을바로할수없어서 BUSY transfer를통하여그다음의전송을한 cycle delay 시킨것을볼수있다. 세번째전송이되려고할때이번엔 slave쪽에서받을수없어서 HREADY를통해한 cycle의 delay를시킨것을볼수있다. 마지막전송은 zero wait state로마무리되었다. 18
3.5 Burst operation 4, 8, 또는 16개의 burst transfer가 AMBA AHB protocol에서정의된다. 또한 1개의전송도가능하며, incrementing이나 wrapping burst mode가지원된다. Incrementing burst는 address가순차적으로 burst size에따라서커지는것을의미한다. 그러므로다음의 address는전의 address에서 size만큼더해주면된다. Wrapping burst에서는 size*beat 만큼의 address boundary가설정이된다. 그러므로 Address가 incrementing burst와같이증가하다가 boundary에이르면다시밑의 boundary 에서시작하게된다. Table 3-2 에 8 가지가능한 burst mode 에대해서설명해놓았다. Table 3-2 Burst signal encoding HBURST[2:0] Type Description 000 SINGLE Single transfer 001 INCR Incrementing burst of unspecified length 010 WRAP4 4-beat wrapping burst 011 INCR4 4-beat incrementing burst 100 WRAP8 8-beat wrapping burst 101 INCR8 8-beat incrementing burst 110 WRAP16 16-beat wrapping burst 111 INCR16 16-beat incrementing burst Bursts 는 1kB 의 address boundary 를넘지못한다. 그러므로 master 가 fixed length 로 incrementing burst 를할때 boundary 를넘지않도록하는것은중요하다. Incrementing burst 는어떠한길이의 transfer 라도 1kB 의 boundary 를넘지않는선에서얼 마든지가능하다. 3.5.1 Early burst termination 상황에따라서는 burst의마지막전송을끝내기전에전송이 termination되는경우가있다. HTRANS signal을통해서 slave는 burst transfer가종료되었는지에대한것을판단할수있다. 중간에전송이종료되었다면 master 는나머지전송을위해서나머지개수에맞는새로운 burst 를시작해야할것이다. 19
Figure 3-6 에서부터 Figure 3-10 에이르기까지각 burst mode 에따른 example 을보여주고 있다. Figure 3-6 Four-beat wrapping burst 20
Figure 3-7 Four-beat incrementing burst Figure 3-8 Eight-beat wrapping burst 21
Figure 3-9 Eight-beat incrementing burst Figure 3-10 Undefined-length bursts 22
3.6 Control signals burst type외에도 transfer를이루기위해서몇가지 control signal들이사용된다. Transfer 의방향을설정해주는 HWRITE와 transfer size를알려주는 HSIZE[1:0] 과 protection control을위해서사용되는 HPROT[3:0] 이그것이다. 3.6.1 Transfer direction HWRITE 가 HIGH 일때, 이 signal 은 HWDATA[31:0] 을사용하여 write 하는과정임을알려준 다. HWRITE 가 LOW 일때는 HRDATA[31:0] 을사용하여 read 하는과정임을알려준다. 3.6.2 Transfer size HSIZE[2:0] 은 table 3-3 과같은 transfer size 를갖는 transfer 임을알려주는 signal 이다. Table 3-3 Size encoding HSIZE[2:0] Size Description 000 8 bits Byte 001 16 bits Half word 010 32 bits Word 011 64 bits 100 128 bits 4-word line 101 256 bits 8-word line 110 512 bits 111 1024 bits 23
3.6.3 Protection control HPROT[3:0] 은 opcode fetch 인지 data access 인지또는 privileged mode access 인지 user mode 인지등을알려주기위한것이다. 이에대한설명이 Table 3-4 에나와있다. Table 3-4 Protection signal encoding HPROT[3] HPROT[2] HPROT[1] HPROT[0] cacheable bufferable privileged Data/opcode Description - - - 0 Opcode fetch - - - 1 Data access - - 0 - User access - - 1 - Privileged access - 0 - - Not bufferable - 1 - - Bufferable 0 - - - Not cacheable 1 - - - cacheable 그러나이러한 protection mode 에도불구하고 HPROT 의사용을하지않는것을권장한다. 그러므로 slave 는 HPROT 의정보를사용할필요는없다. 24
3.7 Address decoding 각각의 slave 에붙어있는 HSELx 의 signal 을 enable 해주기위한장치가 decoder 이다. Select signal 은 high-order address signals 을사용하여구현된다. 주의하여야할것은 slave 는 HREADY 가 HIGH 일때에만 HSELx 의 signal 을바꾸어야한다 는것이다. 경우에따라서는 HREADY 가 LOW 일때 HSELx signal 을바꾸어도되지만이경 우에는 Slave 쪽에서마지막전송이끝날때에만선택되는 slave 가바뀌어야한다. 하나의 slave 가가질수있는 address 의 boundary 는 1kB 이다. Bus master 는 1kB 의 boundary 를넘어서 burst 를할수없도록 design 되어있기때문에이러한설정이가능하다. 이경우에도 default slave가있어야하는데 master가잘못된영역의 address에쓰려고하는경우에이 default slave가선택이되어야하며선택된 slave는 SEQUENTIAL이나 NONSEQUENTIAL일경우에는 ERROR response를 IDLE이나 BUSY일경우에는 OKAY response를내보내주어야한다. Figure 3-11 에 address 를 decoding 하는과정을보여주고있다. Figure 3-11 Slave select signals 25
3.8 Slave transfer responses 일단 master 가 transfer 를시작하면 slave 는이 transfer 가어떻게진행되어야할지를결정 해주어야한다. Slave 가선택이되어지면 slave 는 HREADY 와 HRESP[1:0] 을통하여 transfer 에대한 response 를하게된다. Slave가몇가지방법으로 transfer를마무리할수있다. 즉시 transfer를완성한다. 한개또는그이상의 wait state를준후에 transfer를완성한다. 현재의전송이잘못되었음을알리고 transfer를끝낸다. 다른 transfer를위해서현재의 transfer를다음으로미룬다. 3.8.1 Transfer done HREADY를통해서 AHB는 transfer를 extend시키거나끝을알릴수있다. 그러나 extend되는것에는미리예측할수있는 Maximum이있어서그이상을넘어가면서 HREADY를 LOW로지속할수는없다. 권장되는 maximum wait states는 16이다. 3.8.2 Transfer response HREADY가 HIGH일때와 OKAY response는 transfer가정상적으로이루어졌음을의미한다. 그리고 ERROR response는 ROM에다쓰려고하는등잘못된 address에데이터를 access 하려고할때나타난다. SPLIT 과 RETRY 는 transfer 를 delay 하기위한것이다. 이에대한자세한설명은다음장에 있다. 26
Table 3-5 에 HRESP[1:0] 에대한설명이나와있다. Table 3-5 Response encoding HRESP[1:0] Type Description 00 OKAY OKAY response와 HREADY가 HIGH이면정상적으로전송이이루어졌음을의미한다. 또한 OKAY를통하여추가적인 cycle을삽입하기위하여사용되기도한다. 01 ERROR Master에게 transfer가 Error가발생하였고더이상같은영역에 transfer를계속할수없음을알린다. Error condition을위해서 2-cycle이필요하다. 10 RETRY Transfer가아직성공적으로끝나지않았음을알리고 transfer를다시할것을알리는 response이다. Retry condition을위해서 2-cycle이필요하다. 11 SPLIT Transfer가아직성공적으로끝나지않았음을알리고다른 transfer를원하는 master에게그소유권을넘겨주기위한 response이다. Split condition을위해서 2-cycle이필요하다. 3.8.3 Two-cycle response 오직 OKAY response만이 single cycle동안에이루어지고다른 response는모두 two-cycle 동안에이루어진다. HREADY가 LOW인동안에 ERROR, RETRY 또는 SPLIT의 response가나타나고 HREADY가 HIGH로바뀌는순간에 transfer를끝낸다. ERROR 이나 RETRY SPLIT 의 response 를나타내기위해서 2 cycle 이상이소요될경우에는 OKAY response 와 HREADY 를 LOW 로함으로서 2 cycle 이상의시간을벌수있다. 이러한 two-cycle response 가필요한이유는 pipelined 구조때문이다. 즉 Master 가미리 fetch 해놓았던다음 address 를취소하고다시새로운 address 를 fetch 하기위해서 master 에게시간을주기위한이유이다. RETRY 나 SPLIT 의경우에는무조건다음전송이취소가되어야하지만경우에따라서 ERROR 는전송을취소할필요는없다. Figure 3-12 은 RETRY operation 에대한그림이다. 27
Figure 3-12 Transfer with retry response 위의그림에서다음과같은일이일어난다. Master가 address A로부터전송을시작한다. Response를받기전에 master는미리 A+4의 address를 bus에올려놓는다. Slave쪽에서는 address A의전송을제대로하지못했기때문에 RETRY를보내고 A+4의 address를취소하고 address A부터다시시작할것을요구한다. 3.8.4 Error response Slave 로부터 ERROR response 를받았을때 master 가항상전송을취소해야하는것은아 니다. Master 에따라서전송을계속해도되고취소해도된다. 28
Figure 3-13은 Error response를내보내기전에 OKAY와 LOW HREADY를통해서한 cycle만큼의 delay를주는것을볼수있다. 그리고서 two-cycle의 ERROR response 신호를보낸다. Figure. 3-13 Error response 3.9.5 Split and Retry response SPLIT이나 RETRY response는 bus에데이터를계속하여받을수없을때나타나는일련의작업이다. 두 response 모두전송을끝마칠수있는환경을주기때문에 priority가더높은 master에게 bus에대한권리를넘길수있다. SPLIT과 RETRY의차이점은이러한 response가발생한후에발생하는일에서차이가난다는것이다. RETRY의경우 arbiter는보통때사용되었던일반적인 priority algorithm을그대로사용할것이다. SPLIT의경우에는 split난것을제외한것을가지고 priority algorithm을적용하게된다. 그러므로더 priority가낮은 master에게 bus를사용할권리를줄수있게된다. Master 의입장에서보면 RETRY 나 SPLIT 의경우모두다같은방식으로 response 를다루게 된다. 즉전송이완전히마무리가될때까지계속 Request 를하거나 ERROR 로인하여전 송을취소하게될것이다. 29
3.9 Data buses AHB 는 endian 에대한고려가전혀없다. 그러므로 master 와 slave 간에스스로 endian 에 대한것을맞추어주어야한다. Endian 에관한설명은 table 3-6 과 3-7 에걸쳐나와있다. Table 3-6 Active byte lanes for a 32-bit little-endian data bus Table 3-7 Active byte lanes for a 32-bit big-endian data bus 30
3.10 Arbitration AMBA system에있어서 Arbiter의역할은어떤 Master가 Bus에대한 Access를얻는가를설정해주는것이다. 이를위해서, 모든 Master는 REQUEST/GRANT interface를가지고있어야하며, Arbiter에게 Request를했을때, Arbiter는고유의 Priority scheme을가지고, 어떤 Master가가장높은 Priority를갖는가를계산해서그해당 Master에게 Grant Signal을보낸다. 또한각각의 Master는 HLOCKx signal을갖는데이것은 Master가 bus의독점적인 access 를하려고할때발생된다. 즉현재 Grant된 Master의 LOCK이 enable상태일때에는다른 Priority가높은 Master가 Bus를요구했을지라도현재의 Master의전송이끝날때까지는 Bus를넘겨주지않는다. 3.10.1 Signal Description Arbiter 에사용되는 signal 에대한간략한설명이 Table 3-8 에나와있다. 이는 Table 2-2 에 도설명된바있다. Table 3-8 AMBA AHB Arbiter Signal Description Name Source Description HBUSREQx Master Bus Request 신호는 bus Master가bus에대한 access를요청할때 사용된다. 각각의 bus Master는각각 HBUSREQx라는 interface를가지게되며, Arbiter는최고 16개의 Master를다룰수있다. 즉 HBUSREQ[15:0] 까자사용할수있다. HLOCKx Master Lock 신호는 bus Request신호와동시에인가된다. HLOCKx 신호는 master가burst trans를하려고할때, 중간에다른 Master에게 bus 의소유를넘기지않을것을위해서사용된다. Locked transfer의첫번째전송이시작되면 Arbiter는현재의전송을끝마치기전에는다른 Master에게 bus의사용권을넘겨주지않을것이다. HGRANTx Arbiter Grant 신호는 arbiter에의해서발생된다. 이것은가장높은 priority 를가진 master에게만 HIGH를준다. 그렇지만 Grant를얻었다고해서바로전송을시작할수있는것은아니다. HREADY가HIGH일때에만비로소전송을시작할수있게된다. 31
Table 3-8 AMBA AHB Arbiter Signal Description (continued) Name Source Description HMASTER[3:0] Arbiter 현재어떤 Maser가선택되어져있는가는 HMASTER[3:0] 신 호를이용해서알수있다. 이것은 master들이연결되는 MUX 에사용되어진다. Maser number는또한 SPLIT-capable slave에의해서도주어진다. 이것은 Master로하여금 SPLIT 전송을마무리할수있도록하는데사용된다. HMASTLOCK Arbiter HMASTLOCK 신호는현재전송하는것이 locked transfer인지를알려준다. 이것은 address와control signal과동시에나오게된다. HSPLIT[15:0] Slave (SPLITcapable) 16bit의Split bus는split-capable slave에의해서주어진다. 이를통해서 SPLIT 전송을마무리할수있도록하는데사용된다. 3.10.2 Requesting Bus Access Arbiter 는 Request 신호를매번 cycle 의 rising edge 에서 sampling 하게된다. 그때마다내 부 priority algorithm 을가지고서다음 grant 를결정하게된다. 보통의경우에있어서 Arbiter 는 burst 가끝났을때에 grant 신호를바꾸게된다. 그렇지만어 떤경우에있어서는 burst 를갑자기종료하고다른 priority 가높은 master 에게 access 를넘 기기도한다. 이와같은이유에서원래는 burst를위해서한번만 Request를하면되지만, Re-Request를해야하는경우가발생하게된다. 즉중간에 burst가종료되었으면, 그나머지를전송하기위해서 Master는다시 Request를해야한다. 예를들어처음에 8개의전송을하다가 4개까지전송하고중단되었다면 4개짜리 burst나 1개짜리 burst를 4번요청하는등의방법으로새로운 burst를시작해야한다. 만약아무런 Request 가없는경우에도 Grant 의어떠한 bit 는항상 HIGH 로 setting 을해주 어야하는데이를위해서 Default Master 가필요하다. 이때는 Request 를하지않는경우 이므로 Master 의 HTRANS 값은 IDLE 상태를나타내야한다. 32
3.10.3 Granting Bus Access HREADY 가 HIGH 일때 HMASTER[3:0] 값이바뀌면서전송을시작하게될것이다. 이에 대한그림이 Figure 3-14 에나와있다. Figure. 3-14 Grant access with no wait states Figure 3-15 는 bus 를 handover 하는과정에서 wait states 가사용된그림이다. Figure. 3-15 Grant access with wait states 33
Data Bus의소유권은 Address Bus의소유에따르게된다. 즉, Burst의마지막 Address를전송하고난후에다른 Master로 Grant가넘어갔을지라도그마지막 Address에따른 Data는 HREADY가 HIGH일때까지, 계속 bus를소유하게된다. Figure 3-16는이러한 Bus의소유권을주고받는과정을보여준다. Figure. 3-16 Data bus ownership Figure 3-17 은 burst transfer 의마지막에서 bus 를넘겨주는과정을보여준다. Figure 3-17 Handover after burst 34
Arbiter 는 HGRANTx 신호를 penultimate (one before last) Address 가 sample 되었을때바 꾸게된다. Figure 3-18 는이에따른 Address 의 Multiplexing 과정을보여주는그림이다. delay 되는 HMASTER[3:0] 의값이 MUX 의 write data control 신호로사용된다. Figure. 3-18 Bus master grant signals 35
3.11 Split transfers Transfer가일어나고있는동안에 slave는현재의 transfer를나중으로미룰것인가에대한결정을하게된다. 이에대한결과로나타나는것이 Split이다. Split에대한내용은 4장에서자세히설명되어질것이다. Figure 3-19 에 SPLIT 에대한 sequence 를보여주고있다. Figure 3-19 basic stages of a SPLIT transaction 36
3.11.1 Bus handover with split transfers 전송을하다가 SPLIT 이발생하면 IDLE 의 cycle 을소비한후에다른 master 에게 bus 를사 용할권리를넘겨주게된다. Figure 3-20 은 SPLIT 이일어나는 sequence 를보여주고있다. Figure 3-20 Handover after split transfer 37
3.12 Reset HRESETn 신호는 AHB에있어서유일한 active LOW signal이다. Reset은언제나발생할수있지만 AHB가알게되는것은 HCLK의 rising edge에서 sampling하게된다. Reset이되는동안에 HTRANS[1:0] 은 IDLE을나타내어야하며 address와 control signal들은 valid level에있어야한다. 38
3.13 AHB bus interface AHB bus 의 interface 에대한그림이 Figure 3-21 부터 3-24 에걸쳐나와있다. Figure 3-21 AHB bus slave interface Figure 3-22 AHB bus master interface 39
Figure 3-23 AHB bus arbiter interface Figure 3-24 AHB bus decoder interface 40
Chapter 4 Design of the AMBA AHB 4.1 Design Environment 4.2 Used Signal list for Arbiter 4.3 Arbiter FSM and VHDL coding 4.4 Other components 4.5 Connection of the all components 41
4.1 Design Environment AMBA AHB 의 VHDL coding 을위해서 Synopsis 의 Cyclone Simulator 를사용하여 Simulation 하였다. 4.2 Used Signal list for Arbiter Arbiter 의 Interface 는 3.16 에서설명하였다. AMBA AHB Arbiter 를구현하기위해서는몇가 지 Constant value, Signal 그리고 Function 의정의가필요하다. 4.2.1 Prefix AMBA bus는 1개부터최대 16개의 Master를가질수있다. 어떻게 System을구성하는가에따라서 Master의개수는항상달라질수있을것이다. 이를위해서처음에몇가지상수값을정의하게된다. Table 4-1에 Define되는상수값들을나타내었다. Table 4-1 Defined constants Constant Name Description Data_bus_size Data bus의 Size이다. Address_bus_size Address bus의 Size이다. Number_internal_bus Internal bus의숫자이다. 이것은 AMBA bus등을몇개나사용할지에대한값을정의하게된다. Bus의개수가여러개인경우에는 Partition등을통해서더욱최적화된성능을얻을수있다. 그러나여기서사용되는 internal bus는 1개를기준으로하였다. Number_master AMBA AHB에붙는 Master의개수이다. Number_slave AMBA AHB에붙는 Slave의개수이다. Slave의 decoding은 Address의상위 bits를통하여이루어진다. 이러한이유에서 Slave로서붙을수있는개수는 Address에따라서달라지게되는데, 만약어떤 Master가 32bits의 Address bus를사용하고, 상위 16bits를 Decoding으로사용하게된다면, 최대 65536개의 Slave를연결할수있게된다. 4.2.2 Functions AMBA AHB의구현을위해서두가지함수를구현하였다. 그중에하나가 REQUEST되는 Master의개수를 Return해주는함수 (CHECK_REQNUM) 이고, REQUEST된것중가장 Priority가가장높은것을계산하여그에해당하는 Master number를 Return해주는함수 (CHECK_PRIORITY) 이다. 42
(1) CHECK_REQNUM 이 function은 HREQUEST[15:0] 를입력으로받아서 request하는 Master의개수를 Return 해주는함수이다. 계산하는방법은비교적간단하다. 우선 reqnum이라는변수를만들고초기값을 0으로 setting 한다. HREQUEST[15:0] 신호를받아서하나하나의비트를살펴보고비트값이 1일때에 reqnum을하나씩증가시켜주면된다. 예를들어 HREQUEST[15:0] 이 0x0301 라고할때이에대한 return 값 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 Figure 4-1 reqnum 을구하기위한 Example reqnum = 3 이될것이다. 이에대한 algorithm 을보면다음과같다. int reqnum = 0; for i=0 to Last bit if REQUEST(i) == 1 reqnum ++; end if; end for; Figure 4-2 Request Number 계산을위한 Algorithm (2) CHECK_PRIORITY Bus를 Request하는 Master가많을경우에는가장큰 priority를가진 master에게 grant 신호를내보내주어야한다. 이를계산하기위한함수가 CHECK_PRIORITY이다. 여기서는입력으로받은 HBUSREQ[15:0] 중에서낮은 bit의 master가 priority가높은것으로가정하게된다. 이를구현하기위한 Algorithm은다음과같다. int sel = 0; for i=last bit to 0 if REQUEST(i) == 1 sel = i; end if; end for; Figure 4-3 Max Priority Master 계산을위한 Algorithm 43
4.2.3 Used Signal Description Arbiter 의구현을위해서 Table 4-2 에 6 개의 Signal 을정의하였다. 또한 Arbiter 의 FSM 을 구현하기위한 state 에대한설명이 Table 4-3 에있다. Table 4-2 Defined Signals Signal Name Description ReqNum Integer형으로서 0에서 master_number-1의값을가질수있다. HBUSREQ[15:0] 가변할때마다예전에설명한바있는 CHECK_REQNUM 함수를사용하여그결과를 ReqNum이라는 Signal에저장하게된다. PriSel ReqNum과같은 integer형을갖는다. 현재 state가 REQ_GRAN, m0 또는 TRANS_SPLIT 일때에만 CHECK_PRIOITY 함수를사용하여 Priority가가장높은 Master의 Number를 PriSel이라는 Signal에저장하게된다. Master_Sig 4bit std_logic_vector signal이다. State가 FIRST_TRANS 또는 IDLE 일때에만 Update된다. Update될때에는 PriSel 값을 4 bits vector로변환하여 Master_sig에저장하게된다. MastLock_Sig Master_Sig와같이 FIRST_TRANS 또는 IDLE 일때에만 Update된다. Update될때에는 HLOCK[15:0] 의 vector들중에서 PriSel에해당하는 vector의 bit 값을 MastLock_Sig에저장하게된다. Burst_Cnt Burst mode에서 Count를세기위해서쓰이는 Signal이다. Burst transfer를할때에는 1개, 4개, 8개또는 16개의 data를한번의 Grant 동안에보낼수있어야한다. 이를위해서는현재몇개의 Transfer가이루어졌는지에대한 count가필요한데, Burst mode에따라서 count되는수의초기값이달라져야한다. 이를위해서사용하는 Signal이 Burst_Cnt이다. HBURST[2:0] 의값에따라서 1, 4, 8 또는 16의값을가지게된다. 이외에도 Grant_Variable 이라는 Variable 도정의하게된다. 이값은 16 bits vector 로서 PriSel 에해당하는 bit 만 1 을갖고그이외의 bit 들은 0 을갖는다. 이값은 PriSel 이 update 될때같이 update 되며 HGRANT[15:0] 를 update 하는데사용된다. 44
Table 4-3 States of the AMBA Arbiter FSM State Name Description IDLE Default master가 select되는상태이다. 아무런 Request가없을때는항상 IDLE 상태가된다. 또한 RESETn이 LOW일때에도 IDLE 상태가된다. ReqNum의값을살펴보고이값이 0보다큰경우 REQ_GRANT state로넘어가게된다. SETUP HREQUEST에대해서 Priority 계산하는데필요한 cycle을위한 state 이다. 여기서는단순히 lower bit의 Request가 priority가높은것으로가정하였기때문에이를위한계산은한사이클이면충분하다. 이상태에서만약 ReqNum이 0이된다면 IDLE상태로가고, 그이외에는 Enable state로갈것이다. PriSel을계산하는 state이기도하다. ENABLE HGRANT 신호를주는 state이다. HREADY를 check하여 HREADY가 HIGH가되면 XFER state로넘어가게된다. master_sig과 mastlock_sig을계산하는 state이기도하다. XFER 모든 Trans의첫번째 Trans는항상이 State를통하게되어있다. 첫번째 Trans를한후에는 HBURST[2:0] signal에따라서 m14, m6, m2 또는 Setup state로옮겨가게된다. m14-m2 Burst transfer에서 count를위한 states이다. HREADY= 1 이고, HRESP= 00, HTRANS(1)= 1 일때하나밑의숫자를갖는 state로넘어가게된다. 만약 RESP(1)= 1 일때는즉 SPLIT이거나 RETRY인경우에는다음 state는 setup이될것이다. 이것은 mx state에서모두동일하다. m1 Burst의마지막에서 2번째의 Trans이다. 마지막 Data를전송하려고할때 HGRANT의값이 update될수있다. 그러므로 PriSel을 update하기위한계산은 m1 state에서이루어져야할것이다. m0 Burst transfer에서마지막 Data를전송하고있음을의미한다. ReqNum 이 0일경우 IDLE 상태로가고, 그이외의경우에는 master_sig과 mastlock_sig을계산하고 Xfer state로옮겨가서새로운 trans를시작하게한다. 45
4.3 Arbiter FSM and VHDL coding Figure 4-4 는 Arbiter 의구현을위해서사용된 FSM 을그린것이다. Figure 4-4 Arbiter 의 FSM 일부 Figure 4-4 는위에서설명된각각의 state 를전부표현한것은아니다. 이 FSM 은굵은선 으로그려진 Xfer 라는 state 는 Figure 4-5 와같은 m14~m0 에이르는 state 들과연결되는 FSM 을갖는다. 46
Figure. 4-5 Arbiter 의전체 FSM Figure 4-5 는전체 state 를모두보여주는 FSM 이다. 여기서돌아가는화살표는그내부적 으로 m12, m11, m10 등의 state 가생략되었음을의미한다. 또한여기서의 Xfer 밑의모든화 살표는 HREADY='1' and HRESP[1:0]="00" and HTRANS(1)='1' 위의식을만족해야만다음상태로옮겨갈수있다. 47
여기서주의할것은 Count의하나하나에해당하는 m14에서 m1에서는 IDLE상태로갈수없다는것이다. Count가다될때까지즉, 모든 Burst transfer의과정이끝나기전에는 HGRANT[15:0] 의값을바꾸지않음을의미한다. 그러나 HRESP[1:0] 에따라서 Setup의 state로는언제든지빠져나갈수있으며이때에는상황에따라서 HGRANT[15:0] 의값이바뀔수있다. HRESP[1:0] 에따른 Response 는 2 cycle response 임을볼수있다. Trans 가시작되는때부터는즉, Figure 4-5 의 Xfer 부터 m14, m13, m0 까지의모든 state 에서는 HRESP[1:0] 의지배를받게된다. 4.3.1 OKAY RESP Figure 4-5 의 FIRST_TRANS 부터시작하는 TRANS 에서는위에서설명한바와같이, HREADY='1' and HRESP[1:0]="00" and HTRANS(1)='1' 의식을만족해야만 Transition이일어나게된다. 여기서 HRESP[1:0]= 00 에해당하는것이바로 OKAY Resp를받았을경우이다. OKAY Resp를받았다하더라도 HREADY가 1 이아니거나 HTRANS(1) 이 1 이아닌경우 (idle or busy) 에는항상그자리에멈추어있게된다. 4.3.2 RETRY RESP Figure 4-5의 Xfer, m14, m13,, m0의모든 state에서 HRESP[1:0] 가 RETRY인경우에는 Setup state에서다시 TRANS를시작하게된다. 물론 Setup으로옮겨가면 PriSel 값이 update될것이다. 4.3.3 SPLIT RESP Figure 4-5의 Xfer, m14, m13,, m0의모든 state에서 HRESP[1:0] 가 SPLIT인경우에는현재의 GRANT[15:0] 의정보가현재 Slave의 SPLIT[15:0] 으로넘어가게된다. 그리고 Arbiter에는 REQUEST[15:0] 과 SPLIT[15:0] 을 XOR시킨결과가입력으로들어가게된다. 이에대한 Example이 Figure 4-6에나와있다. 48
0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 HREQUEST[15:0] signal 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 HGRANT[15:0] signal 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 SPLIT[15:0] signal 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 Arbiter의입력으로들어가는 signal Figure. 4-6 Split 과정에의한 REQUEST 의조정 Figure 4-6 에서 HREQUEST[15:0] 가 0x0301이면 HGRANT[15:0] 는 0x0001이될것이다. 즉첫번째 master가 TRANS를주도하게될것이다. 그러나이때 Split이발생된다면현재의 HGRANT[15:0] 값이 SPLIT[15:0] 에저장된다. 그리고이값은 Arbiter의 Priority를정하는입력에 HREQUEST[15:0] 값과 XOR되어들어가게된다. 이와같을경우 Master(0) 가아무리 Request 를한다해도 Slave 가나중에받아들이겠다는 Split 을보내기때문에 Arbiter 는 Request 를하지않은것으로여기게된다. 그러므로 priority 가낮은다른 Master 에게 bus 를사용할수있는기회를주는것이다. 이와같은 Split 이일어난후에는 arbiter 의입력으로들어가는 Request 가달라지게되므로 다른 RESP 와달리다른 Master 에게 Grant 를주게되므로전체적인 latency 에좋은영향을 주게될것이다. 이때에는새롭게 Xfer 부터다른 Master 가 Trans 를시작하게된다. 그러나 Split 이발생했다고해서 master 가항상 bus 의 access 를잃는것은아니다. 만약 Locked transfer 를하고있는중이었다면, 아무리 Split 이나더라도 bus 의대한소유권을그 대로가지고있을것이다. 4.3.4 ERROR RESP Figure 4-5의 Xfer, m14, m13,, m0의모든 state에서 HRESP[1:0] 가 ERROR인경우에는더이상해당 Slave에전송을할수없음을의미한다. 그러나현재의코딩에서는 Slave에서전송자체를무시를하면서 Master는전송을계속유지하는방식을채택하였다. 49
4.4 Other components Arbiter 이외에도 AMBA 를구성하기위한 component 는더있다. Decoder 와 Master 쪽의 Multiplexor, Slave 쪽의 Multiplexor 가그것이다. 4.4.1 Decoder Decoder 는 Address 를받아서그상위 bits 를사용하여 Decoding 을하게된다. 여기서사 용되는방법은 Figure 4-7 에나와있다. 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 HADDR의상위 16 bits 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 HSEL signal Figure. 4-7 Decoding Example Figure 4-7 에서사용되는방법은상위 bits 를그대로 HSELx 에전해주는것이다. 즉 LSB 부 터 slave 의번호를붙일때, 4 번째 slave 가 Select 될것이다. Figure 4-7 에나와있는것과같이사용할경우몇가지제약이있어야한다. Master 의 Address Upper bits 는항상 16 bit 중하나만 1 로 set 되어야하며, 최대 16 개의 Slave 를가 질수있게된다. 또한 Slave 의 Address width 는 16 비트이하로제한된다. 4.4.2 Master Multiplexor Master Multiplexor는여러개의 Master 또는 Slave가내보내는 Signal 중에서 Grant 또는 Sel 되는것의 Signal만을선택하기위한장치이다. 주의할것은몇개의 Master가사용되느냐, 몇개의 Slave가사용되느냐에따라서 MUX의 bus크기가달라져야한다는것이다. 이를위해서 4.2.1 에서설명하였던것과같은 Constant 를 Define 하게된다. 50
Table 4-1 Defined constants for Master MUX Constant Name Source Description M_TransBusSet Master Trans가 2 bits 이므로 2 bits 크기의 bus set을구성하게된다. 만약 3개의 Master가쓰인다면 2 bits 의 3개의 Array를 Define하 는셈이다. M_AddrBusSet Master Address_bus_size 크기로 number_master 개수만큼의 Array를 Define 한다. M_WriteSigSet Master 1 bit 크기로 number_master 개수만큼의 Array를 Define 한다. M_SizeBusSet Master 3 bits 크기로 number_master 개수만큼의 Array를 Define 한다. M_BurstBusSet Master 3 bits 크기로 number_master 개수만큼의 Array를 Define 한다. M_ProtBusSet Master 4 bits 크기로 number_master 개수만큼의 Array를 Define 한다. M_WdataBusSet Master Data_bus_size 크기로 number_master 개수만큼의 Array를 Define 한다. M_ReadySigSet Slave 1 bits 크기로 number_master 개수만큼의 Array를 Define 한다. M_RespBusSet Slave 2 bits 크기로 number_master 개수만큼의 Array를 Define 한다. M_RdataBusSet Slave Data_bus_size 크기로 number_master 개수만큼의 Array를 Define 한다. 이와같이 Define 된 Set 들은 Master Multiplexor 의 IN 또는 OUT 의 type 에사용된다. 또한 MUX 를 control 하기위한 signal 이필요하게되는데이것은 Arbiter 가내보내는신호중에 HMASTER[3:0] 을이용하면된다. Master의신호를 Slave에전해주기위한것은 HMASTER[3:0] 에해당하는 array를받아들여서 MUX의출력으로보내주면된다. 예를들어, trans_o라는 OUT에 trans_i IN의 Array중하나를연결해주어야할때, trans_i의 array중 HMASTER[3:0] 에해당하는 bit vector를 trans_o에보내주면된다. 다음의경우를보자. 현재 HMASTER[3:0] 이 0010 일경우이것은 2 에해당하는 Master 가 Grant 되었음을의미한다. 그렇다면 trans_o 에 trans_i(2) 를넣어주는것이 MUX 의역할 이다. 반대로 Slave 로부터오는신호를 Master 에게전해주는과정은 Select 된 Slave 의 Signal 들을 그냥각각의 Master 에게모두연결해주기만하면된다. HGRANTx 에의해서 grant 가안된 Master 들은넘어오는 signal 을모두무시하고, grant 된 Master 만이 AMBA Bus 로부터정보 51
를받아들일것이다. 여기서주의할것은, Data bus는이전의 Master에게 ownership이있다는것이다. 예를들어현재 Master0이 Grant 되었다고하자. Master0가마지막전송을끝내어서이제 Master1 에게 Grant가넘어간다고하더라도 Master0의마지막 Data에대해서는 Master1이첫번째 Address를전송하는동안에전송이이루어져야할것이다. 그러므로 wdata_i 는한 cycle delay 된 HMASTER[3:0] 의값이 array 의입력으로들어가야 할것이며 update 되는시기는입력으로들어오는 ready 가 1 이되는시기즉마지막 data 가성공적으로전송이되었을때가되어야할것이다. 4.4.3 Slave Multiplexor Slave Multiplexor는여러개의 Slave 또는 Master가내보내는 Signal 중에서 Sel 또는 Grant 되는것의 Signal만을선택하기위한장치이다. 주의할것은몇개의 Master가사용되느냐, 몇개의 Slave가사용되느냐에따라서 MUX의 bus크기가달라져야한다는것이다. 이를위해서 4.2.1 에서설명하였던것과같은 Constant 를 Define 하게된다. Table 4-2 Defined constants for Slave MUX Constant Name Source Description S_ReadySigSet Slave 1 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_RespBusSet Slave 2 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_RdataBusSet Slave Data_bus_size 크기로 number_slave 개수만큼의 Array를 Define 한다. S_SplitBusSet Slave 16 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_AddrBusSet Master Address_bus_size 크기로 number_slave 개수만큼의 Array를 Define 한다. S_WriteSigSet Master 1 bit 크기로 number_slave 개수만큼의 Array를 Define 한다. S_TrsnsBusSet Master 2 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_SizeBusSet Master 3 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_BurstBusSet Master 3 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_WdataBusSet Master Data_bus_size 크기로 number_slave 개수만큼의 Array를 Define 한다. S_MasterBusSet Master 4 bits 크기로 number_slave 개수만큼의 Array를 Define 한다. S_MastlockSigSet Master 1 bit 크기로 number_slave 개수만큼의 Array를 Define 한다. 52
이와같이 Define 된 Set 들은 Slave Multiplexor 의 IN 또는 OUT 의 type 에사용된다. 또한 MUX 를 control 하기위한 signal 이필요하게되는데이것은 Decoder 가내보내는신호중 에 HSELx 를이용하면된다. Slave 쪽의 MUX 는이전에설명된바있는 Master MUX 와비슷하게구현이된다. 차이가있 다면 delay 되는 bus 가 Master MUX 는오직 wdata 였던반면에 Slave MUX 는 rdata, ready, resp, split 의 4 개가모두 delay 되어야한다는것이다. 4.5 Connection of the all components 최상위 schematic 인 AMBA 에는그래서이전에설명되었던 4 개의 component 를연결하면 된다. Figure 4-8 은이에대한전체 schematic 을보여주는그림이다. Figure 4-8 에서왼쪽의선들은모두 Master 에게연결되는 pin 이고오른쪽의선들은 Slave 에연결되는 pin 이다. 그림의밑에 HRESETn 과 HCLK 도살펴볼수있다. 53
Figure. 4-8 AMBA schematic 54