Zephyrnet Logosu

AXI adresi için Slave Bridge Adres Çevirileri için BDF Tablo programlamasının gizemini giderici

Tarih:

QDMA v4.0'dan başlayarak, bir AXI adresi için adres çevirileri BDF tablo programlamasına dayalı olarak yapılır.

Bu BDF tablo girişleri, AXI4-Lite Slave CSR arabirimi, s_axil_csr_* aracılığıyla programlanabilir. Bir PCIe veri yolundaki 8 BAR'a benzer şekilde sağlanan 8 pencere vardır. BDF tablo programlamasındaki her giriş bir pencereyi temsil eder.

Bu blog, aşağıdaki bölümlerde sağlanan BDF tablo programlama örneklerini ayrıntılı olarak açıklamaktadır. (PG302) (V4.0). 

Örnek 1: 64 KB BAR Boyutu, 1 Pencereli

pencere 0: BAR boyutu 4 KB'dir ve bitler için 0xF adres çevirisi [15:12]. AXI adres veriyolu genişliği = 64 bit.

1.PNG

EKSEN BAR Boyutu : 64K = (64*1024) – 1 = 65535 = 0xFFFF = 16'b1111_1111_1111_1111 = [15:0] bit
64K AXI BAR boyutunu adreslemek için, AXI adres yolunda [15:0] bit gereklidir. [63:16] bitleri için adres çevirisi GUI'de ayarlanır. Bu örnekte, [63:16] = 0x76AA.
Temel Adres : 0x0000_0000_76AA_0000
Yüksek Adres : 0x0000_0000_76AA_{EKSEN BAR boyutu} = 0x0000_0000_76AA_FFFF

2.png

En fazla 8 Windows olabilir. Böylece, bir pencerenin maksimum boyutu aşağıdaki gibi hesaplanabilir:

pencere Boyutu = AXI BAR boyutu / 8 = 64K / 8 = 8K = (8*1024) -1 = 8191 = 13'b1_1111_1111_1111 = [12:0] bit

Ancak bu örnek için yalnızca 4K'lık bir BAR boyutu gereklidir. Bu nedenle, 4K pencere boyutu için 4K/4K = 0x1 0x2430 bit [25:0] olarak programlanır.

4K BAR boyutu = (4*1024)-1 = 4095 = 12'b1111_1111_1111 = [11:0] bit

[15:12] bit için adres çevirisi 0x2420 ve 0x2424'te programlanmıştır. Bu örnekte, [15:12] bitleri için adres çevirisi şu şekilde ayarlanmıştır: 0xF. [15:12] bitleri 0xF'ye ayarlanırsa ve LSB'lerin geri kalanı 0'a (sıfır) ayarlanırsa, bu onaltılık olarak 16'b1111_0000_0000_0000 ile sonuçlanır. 0x0000_F000.

3.PNG

Bu örnek için, 0x0000_0000_76AA_0101 olan bir AXI adresi, 0x0000_0000_76AA_ olarak çevrilmiş adres olacaktır.F101

4.PNG

Örnek 2: 64 KB BAR Boyutu, 1 Pencereli

pencere 0: BAR boyutu 8 KB'dir ve adres çeviri değeri bitler için 'b110'dur [15:13]. AXI adres veri yolu genişliği = 64 bit

5.PNG

EKSEN BAR Boyutu : 64K = (64*1024) – 1 = 65535 = 0xFFFF = 16'b1111_1111_1111_1111 = [15:0] bit

64K AXI BAR Boyutunu adreslemek için, AXI adres yolunda [15:0] bit gereklidir. [63:16] bitleri için adres çevirisi GUI'de ayarlanır. Bu örnekte, [63:16] = 0x76AA.

Temel Adres : 0x0000_0000_76AA_0000

Yüksek Adres : 0x0000_0000_76AA_{EKSEN BAR boyutu} = 0x0000_0000_76AA_FFFF

6.png

En fazla 8 Windows olabilir. Böylece, bir pencerenin maksimum boyutu aşağıdaki gibi hesaplanabilir:

pencere Boyutu = AXI BAR Boyutu / 8 = 64K / 8 = 8K = (8*1024) -1 = 8191 = 13'b1_1111_1111_1111 = [12:0] bit

Bu örnek için, 8K'lık bir BAR boyutu gereklidir. Bu nedenle, 8K pencere boyutu için 8K/4K = 0x2 0x2430 bit [25:0] olarak programlanır.

8K BAR Boyutu = (8*1024)-1 = 8191 = 13'b1_1111_1111_1111 = [12:0] bit

[15:13] bit için adres çevirisi 0x2420 ve 0x2424'te programlanmıştır. Bu örnekte, [15:13] bitleri için adres çevirisi şu şekilde ayarlanmıştır: 110. [15:13] bitleri 110'a ve geri kalan LSB'ler 0'a (sıfır) ayarlanırsa, bu onaltılık olarak 16'b1100_0000_0000_0000 ile sonuçlanır. 0x0000_C000.

7.PNG

Bu örnek için, AXI adresi 0x0000_0000_76AA_0011, 0x0000_0000_76AA_ olarak çevrilmiş adres olacaktır.C011

8.PNG

Örnek 3: 32 GB BAR Boyutu ve Çeşitli Boyutlarda 4 Windows

pencere 0: BAR boyutu 4 KB'dir ve bitler için 0xAAAAA adres çevirisi [34:12].

pencere 1: BAR boyutu 4 GB'dir ve pencerede adres çevirisi yoktur.

pencere 2: BAR boyutu 64 KB'dir ve bitler için 0xBBBB adres çevirisi [34:16].

pencere 3: BAR boyutu 1 GB'dir ve bitler için 11111 adres çevirisi [34:30].

EKSEN BAR boyutu : 32 GB = (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 Size adreslemek için, AXI adres yolunda [34:0] bit gereklidir. [63:35] bit için adres çevirisi GUI'de ayarlanır. Bu örnekte, [63:35] = 0xAED.

Temel Adres : 0x0000_AED0_0000_0000

Yüksek Adres : 0x0000_AED{EKSEN BAR boyutu} = 0x0000_TL7_FFFF_FFFF

9.png

En fazla 8 Windows olabilir. Bir pencerenin maksimum boyutu şu şekilde hesaplanabilir:

pencere Boyutu = AXI BAR boyutu / 8 = 32GB / 8 = 4GB = (4*1024*1024*1024) -1 = 4294967295 = 13'b1111_1111_1111_1111_1111_1111_1111_1111 = [31:0] bit

Bu örnekte 4 Windows kullanılmaktadır. Her Pencerenin farklı bir BDF tablosu başlangıç ​​adresi olmalıdır ve şu şekilde hesaplanır:

BDF tablo antre başlangıç ​​adresi = 0x2420 + (0x20 * i), burada i = tablo giriş numarası

Pencere 0 için:

AXI adres veri yolu genişliği = 64 bit

10.PNG

Window-0 için, 4K'lık bir BAR boyutu gereklidir. Bu nedenle, 4K pencere boyutu için 4K/4K = 0x1 0x2430 bit [25:0] olarak programlanır.

4K BAR Boyutu = (4*1024)-1 = 4095 = 12'b1111_1111_1111 = [11:0] bit

[34:12] bitleri için adres çevirisi 0x2420 ve 0x2424'te programlanmıştır. [31:12] bitleri için adres çevirisi 0xAAAA_A ve bitler [34:32] ' olarak ayarlanmıştırb111.

11.PNG

12.PNG

AXI'den gelen adres 0x0000_AED0_0000_0F11 ise, Pencere 0 adres aralığına ve ayrıca 4KB adres aralığına girer. Bu nedenle, 0x0000_AED'ye çevrilecek7_AAAA_AF11.

Pencere 1 için:

AXI adres veri yolu genişliği = 64 bit

13.PNG

Pencere 1 için, 4 GB'lık bir BAR boyutu gereklidir. Bu nedenle, 4GB pencere boyutu için (4*1024*1024)K/4K = 0x10_0000 0x2450 bit [25:0] olarak programlanmıştır. Pencere 1= 0x2420 + (0x20 * 1) = 0x2440 için BDF tablosu giriş başlangıç ​​adresi.

4GB BAR Boyutu = (4*1024*1024*1024)-1 = 4294967295 = 32'hFFFF_FFFF = [31:0] bit

[34:32] bit için adres çevirisi 0x2440 ve 0x2444'te programlanmıştır. 0 GB'lik bir BAR boyutu tüm Pencere 2440 aralıklarını kapsadığından 4x1'ta adres çevirisi gerekli değildir. Bitler için adres çevirisi [34:32] olarak ayarlanmıştır. 0x5 0x2444.

14.PNG

15.PNG

AXI'den gelen bağımlı adres 0x0000_AED1_00EA_0F11 ise, Pencere 1'in adres aralığına girer. Pencere 1'in BAR boyutu 4 GB'dir ve bu nedenle Pencere 1'in tüm aralığını kapsar. Dolayısıyla AXI adresi 0x0000_AED'ye çevrilecektir.5_00EA_0F11.

Pencere 2 için:

AXI adres veri yolu genişliği = 64 bit

16.PNG

Pencere 2 için, 64 KB'lık bir BAR boyutu gereklidir. Bu nedenle 64KB pencere boyutu için 64K/4K = 0x10 0x2470 bit [25:0] olarak programlanır.

Pencere 2 = 0x2420 + (0x20 * 2) = 0x2460 için BDF tablosu giriş başlangıç ​​adresi.

64KB BAR Boyutu  = (64*1024)-1 = 65535= 16'hFFFF = [15:0] bit

[34:16] bitleri için adres çevirisi 0x2460 ve 0x2464'te programlanmıştır. [31:16] bitleri için adres çevirisi 0xBBBB ve bitler [34:32] olarak ayarlanır 'b111.

17.PNG

18.PNG

AXI'den gelen adres 0x0000_AED2_0000_051A ise, Pencere 2'nin adres aralığına ve ayrıca Pencere 64 için 2KB BAR boyutuna girer. Bu nedenle, AXI adresi 0x0000_AED'ye çevrilecektir.7_BBBB_051A.

Pencere 3 için:

AXI adres veri yolu genişliği = 64 bit

19.PNG

Pencere 3 için, 1 GB'lık bir BAR boyutu gereklidir.

Bu nedenle, 1GB pencere boyutu için (1*1024*1024)K/4K = 0x4_0000 0x2490 bit [25:0] olarak programlanır.

Pencere 3 = 0x2420 + (0x20 * 3) = 0x2480 için BDF tablosu giriş başlangıç ​​adresi.

1GB BAR Boyutu  = (1*1024*1024*1024)-1 = 1073741823= 30'h3FFF_FFFF = [29:0] bit

Bit [31:30] için adres çevirisi 0x2480'de programlanır ve bit [34:32] için adres çevirisi 0x2484'te programlanır. Bit [31:30] için adres çevirisi 'b' olarak ayarlandı11 ve [34:32] bitleri için adres çevirisi 'b' olarak ayarlanmıştır111 bu, 0xC000_0000'in 0x2480'de ve 0x0000_0007'nin 0x2480'de programlandığı anlamına gelir.

20.PNG

21.PNG

AXI'den gelen bağımlı adres 0x0000_AED3_3F2C_0DAC ise, Pencere 3'ün adres aralığına ve ayrıca Pencere 1 için 3 GB BAR boyutuna girer. Bu nedenle, bağımlı adres aşağıdaki gibi çevrilecektir:

 AED3_3F2C_0DAC = AED3_<'b0011>_F2C_0DAC

Burada yeşil renkli '3' adres '7' olarak çevrilmiştir, çünkü aşağıdaki programlanmıştır:

22.PNG

Kırmızı '4' içindeki 3 ikili bitten iki LSB (yani burada 11) hedef adresin parçasıdır ve bu nedenle adres çevrilmemelidir. Yalnızca iki MSB (burada 00), aşağıdaki programlanmış değere göre adres çevrilir:

23.PNG

Bu, son adres çevrilmiş adres olarak aşağıdakileri verir.

7 AED_<'b1111>_F2C_0DAC = AED7_FF2C_0DAC

Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.

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

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?