제퍼넷 로고

AXI 주소에 대한 슬레이브 브리지 주소 변환을 위한 BDF 테이블 프로그래밍 이해하기

시간

QDMA v4.0부터 AXI 주소에 대한 주소 변환은 BDF 테이블 프로그래밍을 기반으로 수행됩니다.

이러한 BDF 테이블 항목은 AXI4-Lite Slave CSR 인터페이스 s_axil_csr_*을 통해 프로그래밍할 수 있습니다. PCIe 버스의 8개 BAR과 유사한 8개의 창이 제공됩니다. BDF 테이블 프로그래밍의 각 항목은 하나의 창을 나타냅니다.

이 블로그는 BDF 테이블 프로그래밍 예제에 대해 자세히 설명합니다. (PG302) (v4.0). 

예 1: 64KB의 BAR 크기(창 1개 포함)

창 0: BAR 크기는 비트[4:0]에 대해 15xF의 주소 변환과 함께 12KB입니다. AXI 주소 버스 폭 = 64비트.

1.PNG

AXI 바 크기 : 64K = (64*1024) – 1 = 65535 = 0xFFFF = 16'b1111_1111_1111_1111 = [15:0] 비트
AXI BAR 크기의 64K를 주소 지정하려면 AXI 주소 버스에 [15:0] 비트가 필요합니다. [63:16] 비트에 대한 주소 변환은 GUI에서 설정됩니다. 이 예에서 [63:16] = 0x76AA입니다.
기본 주소 : 0x0000_0000_76AA_0000
상위 주소 : 0x0000_0000_76AA_{AXI 바 크기} = 0x0000_0000_76AA_Ffff

2.png

최대 8개의 Windows가 있을 수 있습니다. 따라서 창의 최대 크기는 다음과 같이 계산할 수 있습니다.

창 크기 = AXI BAR 크기 / 8 = 64K / 8 = 8K = (8*1024) -1 = 8191 = 13'b1_1111_1111_1111 = [12:0] 비트

그러나 이 예에서는 4K의 BAR 크기만 필요합니다. 따라서 4K의 창 크기에 대해 4K/4K = 0x1 0x2430비트[25:0]로 프로그래밍됩니다.

4K의 BAR 크기 = (4*1024)-1 = 4095 = 12'b1111_1111_1111 = [11:0] 비트

[15:12] 비트에 대한 주소 변환은 0x2420 및 0x2424에 프로그래밍됩니다. 이 예에서 비트 [15:12]에 대한 주소 변환은 다음으로 설정됩니다. 0xF. 비트 [15:12]가 0xF로 설정되고 나머지 LSB가 0(영)으로 설정되면 16'b1111_0000_0000_0000이 됩니다. 0x0000_F000.

3.PNG

이 예에서 AXI 주소 0x0000_0000_76AA_0101은 0x0000_0000_76AA_로 변환된 주소가 됩니다.F101.

4.PNG

예 2: 64KB의 BAR 크기(창 1개 포함)

창 0: BAR 크기는 8KB이고 비트[110:15]에 대한 주소 변환 값은 'b13'입니다. AXI 주소 버스 폭 = 64비트

5.PNG

AXI 바 크기 : 64K = (64*1024) – 1 = 65535 = 0xFFFF = 16'b1111_1111_1111_1111 = [15:0] 비트

AXI BAR Size의 64K를 주소 지정하려면 AXI 주소 버스에 [15:0] 비트가 필요합니다. [63:16] 비트에 대한 주소 변환은 GUI에서 설정됩니다. 이 예에서 [63:16] = 0x76AA입니다.

기본 주소 : 0x0000_0000_76AA_0000

상위 주소 : 0x0000_0000_76AA_{AXI 바 크기} = 0x0000_0000_76AA_Ffff

6.png

최대 8개의 Windows가 있을 수 있습니다. 따라서 창의 최대 크기는 다음과 같이 계산할 수 있습니다.

창 크기 = AXI BAR 크기 / 8 = 64K / 8 = 8K = (8*1024) -1 = 8191 = 13'b1_1111_1111_1111 = [12:0] 비트

이 예에서는 8K의 BAR 크기가 필요합니다. 따라서 8K의 창 크기에 대해 8K/4K = 0x2 0x2430비트[25:0]로 프로그래밍됩니다.

8K의 바 크기 = (8*1024)-1 = 8191 = 13'b1_1111_1111_1111 = [12:0] 비트

[15:13] 비트에 대한 주소 변환은 0x2420 및 0x2424에 프로그래밍됩니다. 이 예에서 비트 [15:13]에 대한 주소 변환은 다음으로 설정됩니다. 110. 비트 [15:13]이 110으로 설정되고 나머지 LSB가 0(영)으로 설정되면 16'b1100_0000_0000_0000이 됩니다. 0x0000_C000.

7.PNG

이 예에서 AXI 주소 0x0000_0000_76AA_0011은 주소가 0x0000_0000_76AA_로 변환됩니다.C011.

8.PNG

예 3: 32GB의 BAR 크기와 다양한 크기의 창 4개

창 0: BAR 크기는 비트[4:0]에 대해 34xAAAAA의 주소 변환과 함께 12KB입니다.

창 1: BAR 크기는 창에서 주소 변환 없이 4GB입니다.

창 2: BAR 크기는 64KB이며 비트[0:34]에 대한 주소 변환은 16xBBBB입니다.

창 3: BAR 크기는 비트[1:11111]에 대해 34의 주소 변환으로 30GB입니다.

AXI 바 크기 : 32GB = (32*1024*1024*1024) – 1 = 34359738367 = 0x7_FFFF_FFFF = 35’b111_1111_1111_1111_1111_1111_1111_1111_1111 = [34:0] bits

32GB의 AXI BAR 크기를 지정하려면 AXI 주소 버스에 [34:0] 비트가 필요합니다. [63:35] 비트에 대한 주소 변환은 GUI에서 설정됩니다. 이 예에서 [63:35] = 0xAED입니다.

기본 주소 : 0x0000_AED0_0000_0000

상위 주소 : 0x0000_AED{AXI 바 크기} = 0x0000_AED7_FFFF_FFFF

9.png

최대 8개의 Windows가 있을 수 있습니다. 창의 최대 크기는 다음과 같이 계산할 수 있습니다.

창 크기 = AXI BAR 크기 / 8 = 32GB / 8 = 4GB = (4*1024*1024*1024) -1 = 4294967295 = 13'b1111_1111비트_1111_1111_1111_1111_1111_1111 =

이 예에서는 4개의 Windows를 사용합니다. 각 창에는 다른 BDF 테이블 항목 시작 주소가 있어야 하며 다음과 같이 계산됩니다.

BDF 테이블 엔트리 시작 주소 = 0x2420 + (0x20 * i), 여기서 i = 테이블 항목 번호

창 0의 경우:

AXI 주소 버스 폭 = 64비트

10.PNG

Window-0의 경우 4K의 BAR 크기가 필요합니다. 따라서 4K의 창 크기에 대해 4K/4K = 0 X 1 0x2430비트[25:0]로 프로그래밍됩니다.

4K의 바 크기 = (4*1024)-1 = 4095 = 12'b1111_1111_1111 = [11:0] 비트

[34:12] 비트에 대한 주소 변환은 0x2420 및 0x2424에 프로그래밍됩니다. 비트 [31:12]에 대한 주소 변환은 다음으로 설정됩니다. 0xAAAA_A 비트 [34:32]는 'b111.

11.PNG

12.PNG

AXI의 주소가 0x0000_AED0_0000_0F11이면 Window 0의 주소 범위와 4KB 주소 범위에 속합니다. 따라서 0x0000_AED로 번역됩니다.7_AAAA_AF11.

창 1의 경우:

AXI 주소 버스 폭 = 64비트

13.PNG

Window 1의 경우 4GB의 BAR 크기가 필요합니다. 따라서 창 크기가 4GB인 경우 (4*1024*1024)K/4K = 0x10_0000 0x2450비트[25:0]로 프로그래밍됩니다. Window 1의 BDF 테이블 엔트리 시작 주소 = 0x2420 + (0x20 * 1) = 0x2440.

4GB의 BAR 크기 = (4*1024*1024*1024)-1 = 4294967295 = 32'hFFFF_FFFF = [31:0] 비트

[34:32] 비트에 대한 주소 변환은 0x2440 및 0x2444에 프로그래밍됩니다. 0GB의 BAR 크기가 Window 2440의 모든 범위를 포함하기 때문에 4x1에서의 주소 변환은 필요하지 않습니다. 비트 [34:32]에 대한 주소 변환은 다음으로 설정됩니다. 0 X 5 0x2444에서.

14.PNG

15.PNG

AXI의 슬레이브 주소가 0x0000_AED1_00EA_0F11이면 창 1의 주소 범위에 속합니다. 창 1의 BAR 크기는 4GB이므로 창 1의 전체 범위를 포함합니다. 따라서 AXI 주소는 0x0000_AED로 변환됩니다.5_00EA_0F11.

창 2의 경우:

AXI 주소 버스 폭 = 64비트

16.PNG

Window 2의 경우 64KB의 BAR 크기가 필요합니다. 따라서 창 크기가 64KB인 경우 64K/4K = 0 X 10 0x2470비트[25:0]로 프로그래밍됩니다.

Window 2의 BDF 테이블 엔트리 시작 주소 = 0x2420 + (0x20 * 2) = 0x2460.

64KB의 막대 크기  = (64*1024)-1 = 65535= 16'hFFFF = [15:0] 비트

[34:16] 비트에 대한 주소 변환은 0x2460 및 0x2464에 프로그래밍됩니다. 비트 [31:16]에 대한 주소 변환은 다음으로 설정됩니다. 0xBBBB 비트 [34:32]는 다음으로 설정됩니다. 'b111.

17.PNG

18.PNG

AXI의 주소가 0x0000_AED2_0000_051A이면 Window 2의 주소 범위와 Window 64의 2KB BAR 크기에 속합니다. 따라서 AXI 주소는 0x0000_AED로 변환됩니다.7_BBBB_051A.

창 3의 경우:

AXI 주소 버스 폭 = 64비트

19.PNG

Window 3의 경우 1GB의 BAR 크기가 필요합니다.

따라서 창 크기가 1GB인 경우 (1*1024*1024)K/4K = 0x4_0000 0x2490비트[25:0]로 프로그래밍됩니다.

Window 3의 BDF 테이블 엔트리 시작 주소 = 0x2420 + (0x20 * 3) = 0x2480.

1GB의 BAR 크기  = (1*1024*1024*1024)-1 = 1073741823= 30'h3FFF_FFFF = [29:0] 비트

비트 [31:30]에 대한 주소 변환은 0x2480에 ​​프로그래밍되고 비트 [34:32]에 대한 주소 변환은 0x2484에 프로그래밍됩니다. 비트 [31:30]에 대한 주소 변환이 'b로 설정됨11 비트 [34:32]에 대한 주소 변환은 'b111 즉, 0xC000_0000은 0x2480에 ​​프로그래밍되고 0x0000_0007은 0x2480에 ​​프로그래밍됩니다.

20.PNG

21.PNG

AXI의 슬레이브 주소가 0x0000_AED3_3F2C_0DAC이면 Window 3의 주소 범위와 Window 1의 경우 3GB BAR 크기에 속합니다. 따라서 슬레이브 주소는 다음과 같이 변환됩니다.

 AED3_3F2C_0DAC = AED3_<'b0011>_F2C_0DAC

여기에서 녹색의 '3'은 다음이 프로그래밍되어 있기 때문에 '7'로 변환된 주소입니다.

22.PNG

빨간색으로 표시된 '4'의 3개의 이진 비트 중 11개의 LSB(즉, 여기에서 00)는 대상 주소의 일부이므로 주소 변환되지 않아야 합니다. 두 개의 MSB(즉, 여기에서는 XNUMX)만 다음 프로그래밍된 값에 따라 주소 변환됩니다.

23.PNG

이것은 최종 주소 번역 주소로 다음을 제공합니다.

AED7_<'b1111>_F2C_0DAC = AED7_FF2C_0DAC

PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.
액세스하려면 여기를 클릭하십시오.

출처: https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/Demystifying-BDF-Table-programming-for-Slave-Bridge-Address/ba-p/1260264

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?