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비트.
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
최대 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.
이 예에서 AXI 주소 0x0000_0000_76AA_0101은 0x0000_0000_76AA_로 변환된 주소가 됩니다.F101.
예 2: 64KB의 BAR 크기(창 1개 포함)
창 0: BAR 크기는 8KB이고 비트[110:15]에 대한 주소 변환 값은 'b13'입니다. AXI 주소 버스 폭 = 64비트
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
최대 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.
이 예에서 AXI 주소 0x0000_0000_76AA_0011은 주소가 0x0000_0000_76AA_로 변환됩니다.C011.
예 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
최대 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비트
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.
AXI의 주소가 0x0000_AED0_0000_0F11이면 Window 0의 주소 범위와 4KB 주소 범위에 속합니다. 따라서 0x0000_AED로 번역됩니다.7_AAAA_AF11.
창 1의 경우:
AXI 주소 버스 폭 = 64비트
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에서.
AXI의 슬레이브 주소가 0x0000_AED1_00EA_0F11이면 창 1의 주소 범위에 속합니다. 창 1의 BAR 크기는 4GB이므로 창 1의 전체 범위를 포함합니다. 따라서 AXI 주소는 0x0000_AED로 변환됩니다.5_00EA_0F11.
창 2의 경우:
AXI 주소 버스 폭 = 64비트
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.
AXI의 주소가 0x0000_AED2_0000_051A이면 Window 2의 주소 범위와 Window 64의 2KB BAR 크기에 속합니다. 따라서 AXI 주소는 0x0000_AED로 변환됩니다.7_BBBB_051A.
창 3의 경우:
AXI 주소 버스 폭 = 64비트
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에 프로그래밍됩니다.
AXI의 슬레이브 주소가 0x0000_AED3_3F2C_0DAC이면 Window 3의 주소 범위와 Window 1의 경우 3GB BAR 크기에 속합니다. 따라서 슬레이브 주소는 다음과 같이 변환됩니다.
AED3_3F2C_0DAC = AED3_<'b0011>_F2C_0DAC
여기에서 녹색의 '3'은 다음이 프로그래밍되어 있기 때문에 '7'로 변환된 주소입니다.
빨간색으로 표시된 '4'의 3개의 이진 비트 중 11개의 LSB(즉, 여기에서 00)는 대상 주소의 일부이므로 주소 변환되지 않아야 합니다. 두 개의 MSB(즉, 여기에서는 XNUMX)만 다음 프로그래밍된 값에 따라 주소 변환됩니다.
이것은 최종 주소 번역 주소로 다음을 제공합니다.
AED7_<'b1111>_F2C_0DAC = AED7_FF2C_0DAC
PlatoAi. Web3 재창조. 데이터 인텔리전스 증폭.
액세스하려면 여기를 클릭하십시오.