PCI Express dalam Intel V-Series FPGAs: Dasar-Dasar Antarmuka dan Fitur Inti Perangkat Keras

pengantar


Antarmuka PCI Express atau PCIe, yang akrab bagi banyak orang, sudah tersedia untuk pengembang sistem FPGA ketika baru mulai menyebar dalam teknologi digital. Pada saat ini, ada solusi di mana inti perangkat lunak terhubung ke sirkuit mikro tingkat fisik eksternal [ 5 ]. Ini memungkinkan untuk membuat jalur PCIe jalur tunggal dengan kecepatan 2,5 gigatransaksi per detik. Lebih lanjut, berkat pengembangan teknologi, lapisan fisik antarmuka bermigrasi ke blok perangkat keras PCIe di dalam FPGA sendiri; jumlah saluran yang mungkin meningkat menjadi 8, dan di sejumlah sirkuit mikro baru - menjadi 16; Mengikuti standar modern, kemungkinan laju transfer data telah tumbuh.

Pada saat yang sama, masih sulit untuk menemukan bahan tambahan untuk bekerja dengan inti perangkat keras FPGA modern dalam sumber berbahasa Rusia, tidak banyak informasi tersedia pada antarmuka PCIe itu sendiri. Panduan untuk perangkat keras PCI Express core menyiratkan bahwa pengembang telah menjadi terbiasa dengan standar dan memahami dasar-dasar transfer data antara perangkat dan komputer pribadi (PC). Namun, banyaknya informasi dalam standar PCIe itu sendiri tidak segera memahami langkah apa yang harus diambil untuk berhasil mentransfer data dari perangkat ke memori PC atau sebaliknya. Untuk mendapatkan gambaran yang lebih lengkap, sebagian besar informasi harus dikumpulkan sedikit demi sedikit dari berbagai sumber. Untuk pengembang sistem Intel FPGA, kesulitannya jugayang sebagian besar bahan dan artikel yang tersedia menjelaskan bekerja dengan inti perangkat keras Xilinx FPGA.

Pada artikel ini, penulis akan mencoba berbicara tentang apa yang perlu diketahui oleh perancang sistem FPGA agar dapat bekerja dengan antarmuka PCI Express; akan mempertimbangkan fitur-fitur bekerja dengan inti perangkat keras PCI Express FPGA dari V-series dari Intel dalam versi Avalon-ST.

Level dan Jenis Paket PCIe


Terlepas dari kenyataan bahwa PCI Express sering disebut bus, pada kenyataannya, antarmuka ini adalah jaringan perangkat yang dihubungkan oleh kelompok saluran dupleks serial. Jaringan PCI Express itu sendiri terdiri dari beberapa node utama: root (Root), endpoint (Endpoint) dan router (Switch) (Gambar 1). Untuk mentransfer data hanya antara dua perangkat, cukup memiliki root dan titik akhir. Dalam kasus PC modern, root jaringan terletak pada satu substrat bersama dengan inti prosesor pusat. Terlepas dari di mana akar PCIe berada, itu terkait dengan memori sistem.


Gambar 1 - Jaringan PCIe

Protokol transfer data PCIe dibagi menjadi tiga lapisan: Lapisan Transaksi, Lapisan Tautan Data, dan Lapisan Fisik. Data antarmuka ditransmisikan dalam bentuk paket. Tampilan umum paket ditunjukkan pada Gambar 2.


Gambar 2 - Tampilan umum paket PCIe

Pada tingkat transaksi, paket apa pun (TLP) terdiri dari setidaknya header. Tergantung pada jenis paket, header dapat diikuti oleh data - konten yang berguna dari paket. Checksum tambahan juga dapat ditambahkan di akhir paket. Ada jenis utama paket tingkat transaksi (tabel 1) ada:

Tabel 1 - Jenis paket tingkat transaksi
Tidak. P.Tampilan paketNama tipe paket sesuai dengan spesifikasi
1Permintaan membaca memoriPermintaan membaca memori
2Permintaan Menulis MemoriPermintaan penulisan memori
3Permintaan baca ruang I / OI / O Baca Permintaan
4Permintaan penulisan ruang I / OPermintaan Tulis I / O
5Baca permintaan konfigurasiKonfigurasi membaca permintaan
6Tulis permintaan konfigurasiPermintaan Tulis Konfigurasi
7Respon membacaPenyelesaian
8PesanPesan

Pada lapisan tautan, nomor urutan paket dan checksum tautan ditambahkan ke setiap paket tingkat transaksi. Lapisan tautan data juga membentuk jenis paketnya sendiri (DLLP), yang meliputi (tabel 2):

Tabel 2 - Jenis paket tautan data
Tidak. P.Tampilan paketNama tipe paket sesuai dengan spesifikasi
1Konfirmasi Paket Tingkat TransaksiTLP Ack
2Penolakan Paket Tingkat TransaksiTLP Nack
3Manajemen dayaManajemen daya
4Kontrol aliran dataAlur kontrol

Akhirnya, lapisan fisik melengkapi paket dengan simbol awal dan akhir paket, yang dipinjam dari standar IEEE 802.3. Untuk paket tingkat transaksi, simbol K27.7 dan K29.7 digunakan masing-masing; untuk paket data link, simbol K28.2 dan K29.7.
Ketika bekerja dengan inti perangkat keras FPGA, pengembang hanya perlu membentuk paket tingkat transaksi; paket saluran dan lapisan fisik dibentuk oleh blok kernel.

Routing Paket Level-Transaksi


Secara total, berbagai jenis paket dapat tiba dari pengirim ke penerima dalam tiga cara:

  • perutean ke alamat;
  • Perutean ID
  • perutean tidak langsung.

Hubungan antara metode routing dan jenis paket tingkat transaksi disajikan pada Tabel 3.

Tabel 3 - Korespondensi metode routing dan tipe paket
โ„–p
1.
I/O I/O
2.
ID.

3ID

.


Setiap titik akhir memiliki Ruang Konfigurasi sendiri, di mana berbagai instruksi dan register status berada. Diantaranya adalah Base Address Register atau BAR. Saat menginisialisasi titik akhir, BIOS atau sistem operasi memindai BAR titik akhir untuk menentukan berapa banyak memori dan ruang yang dibutuhkan untuk setiap titik akhir. Kemudian, di setiap BAR aktif, alamat awal dari bagian yang dialokasikan dari memori sistem ditulis. Akibatnya, titik akhir memperoleh alamat tempat permintaan yang sesuai dapat dikirim. Biasanya, pada titik akhir, peta register terbentuk, yang terkait dengan area memori yang dialokasikan.

Juga, setiap titik akhir, atau lebih tepatnya, perangkat logis di dalam, mendapat pengenal uniknya, yang terdiri dari tiga bagian: nomor bus, nomor perangkat, nomor perangkat logis (fungsi).

Dengan cara ini, sistem memiliki informasi yang cukup untuk berkomunikasi dengan titik akhir. Namun, mentransmisikan data menggunakan kueri di BAR memiliki kinerja yang buruk. Pertama, untuk BAR 32-bit lebar, panjang permintaan yang dapat digunakan terbatas pada satu kata ganda (DWORD); untuk BAR 64-bit, dua kata ganda. Kedua, setiap permintaan terjadi dengan partisipasi prosesor pusat. Untuk mengurangi beban pada prosesor pusat, serta meningkatkan ukuran setiap paket, perlu titik akhir memindahkan data secara independen ke atau dari memori sistem. Untuk melakukan ini, titik akhir harus tahu di mana memori sistem alamat itu dapat menulis atau membaca data.

Mengingat hal di atas, skema transfer data umum antara titik akhir dan memori sistem dapat direpresentasikan sebagai berikut:

  1. driver titik akhir mengalokasikan buffer dalam memori sistem untuk menulis data;
  2. bentuk driver dalam memori sistem satu set alamat dan ukuran buffer - deskriptor buffer untuk menulis data;
  3. driver titik akhir menulis alamat dari set deskriptor ke register perangkat yang terkait dengan area BAR;
  4. register driver kontrol program endpoint yang terkait dengan area BAR;
  5. titik akhir mengirimkan permintaan untuk membaca memori sistem untuk mendapatkan sekumpulan deskriptor untuk menulis ke memori sistem;
  6. titik akhir mengirimkan permintaan tulis ke memori sistem dan mengisi buffer penyimpanan;
  7. / , , , ;
  8. PCIe.


Pada tahap ketika driver mengkonfigurasi register titik akhir, tergantung pada jenis ruang alamat yang terkait dengan BAR, titik akhir akan menerima permintaan tulis ke memori (Gambar 3) atau permintaan tulis ke ruang I / O. Jika pengemudi membaca register selama konfigurasi register, titik akhir juga menerima permintaan baca yang sesuai (Gambar 4).

gambar
Gambar 3 - Contoh permintaan untuk menulis ke memori 1 DW panjang


Gambar 4 - Contoh permintaan untuk membaca dari memori 1 DW panjang

Tidak seperti permintaan tulis atau baca, permintaan I / O memiliki sejumlah keterbatasan. Pertama, permintaan tulis dan baca memerlukan respons dari penerima. Ini mengarah pada fakta bahwa kecepatan transfer data menggunakan permintaan ke ruang I / O menjadi jauh lebih rendah daripada bandwidth PCIe teoretis. Kedua, alamat permintaan ruang I / O terbatas hingga 32 bit, yang tidak memungkinkan akses ke fragmen memori sistem melebihi 4 GB. Ketiga, permintaan ruang I / O tidak dapat melebihi satu kata ganda dan tidak dapat menggunakan beberapa saluran virtual untuk transportasi. Untuk alasan ini, permintaan untuk menulis dan membaca ke ruang I / O tidak akan dipertimbangkan lebih lanjut. Namun,isi header untuk menulis / membaca memori dan ruang I / O hanya berbeda dalam sejumlah bidang, oleh karena itu, struktur paket yang ditunjukkan pada Gambar 3, 4 juga berlaku untuk permintaan di ruang I / O.

Ketika endpoint atau PCIe root menerima permintaan untuk membaca memori atau ruang I / O, perangkat harus mengirim respons. Jika pengirim permintaan tidak menerima respons dalam waktu tertentu, ini akan menyebabkan kesalahan dalam menunggu tanggapan. Jika karena alasan tertentu perangkat tidak dapat mengirim data yang diminta, itu harus menghasilkan respons kesalahan. Kemungkinan alasannya adalah: penerima tidak mendukung permintaan ini (Permintaan Tidak Didukung); penerima tidak siap untuk menerima permintaan konfigurasi dan permintaan untuk mengulanginya nanti (Status Permintaan Percobaan Permintaan), telah terjadi kesalahan internal, yang menyebabkan penerima tidak dapat menanggapi dan menolak permintaan (Kompleter Abort).

Format untuk respons yang berhasil terhadap permintaan baca dan respons kesalahan untuk permintaan yang tidak didukung ditunjukkan pada Gambar 5, 6.


Gambar 5 - Contoh respons yang berhasil dibaca


Gambar 6โ€” Contoh jawaban tentang permintaan yang tidak didukung

Saat titik akhir mengakses area memori dalam 4 GB, format header paket tidak berbeda dari header yang ditunjukkan pada Gambar 3, 4. Untuk permintaan penulisan atau membaca memori melebihi 4 GB, kata ganda tambahan dengan bit urutan tinggi dari alamat tujuan digunakan di header (Gambar 7).


Gambar 7 - Contoh header permintaan penulisan 128 byte.

Penjelasan nama-nama yang disingkat dari bidang header paket disajikan pada Tabel 4.

Tabel 4 - Daftar singkatan untuk bidang header
Tidak. P.Penunjukan bidangNama bidangJanji
1TCKategori Lalu Lintas - Kelas Lalu LintasMenentukan keanggotaan saluran virtual
2AtrAtribut: , , ID, ID.
3THโ€’ TLP Processing Hint, [1..0] .
4TDโ€’ TLP Digest, .
5EP, .
6ATโ€’ Address Translation, : , ,
7BEโ€’ Byte Enable
8PHPaket Petunjuk Pemrosesan - Petunjuk PemrosesanKiat penerima paket bagaimana paket harus digunakan, serta struktur data
9BCMAdanya perubahan dalam jumlah byteMenunjukkan apakah jumlah byte dalam paket telah berubah. Hanya pengirim di muka perangkat PCI-X yang dapat menetapkan bendera

Jika titik akhir menggunakan interupsi untuk melaporkan suatu peristiwa, itu juga harus membentuk paket yang sesuai. Secara total, PCIe dapat menggunakan tiga jenis interupsi:

  • interupsi legacy (Legacy Interrupts atau INT);
  • interupsi dalam bentuk pesan (Message Signaled Interrupts atau MSI);
  • extended message interrupts (Pesan Signalled Interrupts Extended atau MSI-X).

Interupsi INT yang diturunkan digunakan untuk kompatibilitas dengan sistem yang tidak mendukung interupsi pesan. Bahkan, jenis interupsi ini adalah pesan (paket tipe Pesan) yang mensimulasikan operasi garis interupsi fisik. Setelah peristiwa tertentu, titik akhir mengirim pesan ke akar PCIe bahwa interupsi INT telah diaktifkan, dan kemudian menunggu tindakan dari penangan interrupt. Sampai pengendali interupsi melakukan tindakan yang ditentukan, interupsi INT dalam keadaan diaktifkan. Interupsi yang diwariskan tidak memungkinkan Anda untuk menentukan sumber acara, yang memaksa penangan interupsi untuk secara berurutan memindai semua titik akhir dalam pohon PCIe untuk memperbaiki interupsi ini. Ketika interupsi dilayani, titik akhir mengirim pesan yang menyatakan itubahwa interupsi INT lebih tidak aktif. Inti perangkat keras FPGA, berdasarkan sinyal dari logika pengguna, secara independen menghasilkan pesan yang diperlukan untuk interupsi INT, sehingga struktur paket tidak akan dipertimbangkan.

Pesan terputus bersama dengan versi mereka yang diperluas adalah jenis utama dan wajib dari gangguan dalam PCIe. Kedua jenis interupsi, pada kenyataannya, adalah permintaan untuk menulis ke memori sistem dengan panjang satu kata ganda. Perbedaan dari permintaan reguler adalah bahwa alamat rekaman dan isi paket dialokasikan untuk setiap perangkat pada tahap konfigurasi sistem. Dalam hal ini, Pengendali Interupsi Programmable Lanjutan (LAPIC) di dalam prosesor pusat menjadi tujuan. Saat menggunakan jenis interupsi ini, tidak perlu melakukan polling secara berurutan pada semua perangkat di pohon PCIe. Selain itu, jika sistem memungkinkan perangkat untuk menggunakan beberapa vektor interupsi, masing-masing vektor dapat dikaitkan dengan kejadiannya sendiri.Bersama-sama, ini mengurangi waktu prosesor untuk memproses interupsi dan meningkatkan kinerja sistem secara keseluruhan.

Interupsi MSI memungkinkan pembentukan hingga 32 vektor terpisah. Angka pastinya tergantung pada kemampuan titik akhir. Dalam hal ini, sistem hanya memungkinkan penggunaan sebagian vektor. Pada tahap konfigurasi, sistem menulis alamat interupsi dan data awal untuk ditulis ke register khusus ruang konfigurasi titik akhir. Semua interupsi aktif menggunakan alamat yang sama. Tetapi untuk setiap vektor, titik akhir mengubah bit data awal. Misalnya, biarkan titik akhir mendukung maksimum 4 vektor interupsi, semua 4 vektor diizinkan dalam sistem, dan data awal untuk penulisan adalah 0x4970. Kemudian, untuk membentuk vektor pertama, titik akhir melewati data awal tidak berubah. Untuk vektor kedua, perangkat mengubah bit pertama dan mentransmisikan angka 0x4971.Untuk vektor ketiga dan keempat, perangkat akan mentransmisikan angka masing-masing 0x4972 dan 0x4973.

Inti perangkat keras FPGA secara mandiri membentuk sebuah paket dengan MSI yang terganggu oleh sinyal dari logika pengguna. Namun, sebelum memerintahkan kernel untuk mengirim interupsi, logika pengguna juga harus menyediakan konten paket untuk vektor yang diperlukan ke antarmuka kernel khusus.

Interupsi MSI-X memungkinkan pembentukan hingga 2048 vektor individu. Dalam register yang sesuai dari ruang Konfigurasi, titik akhir menunjukkan yang mana dari ruang alamat BAR dan dengan apa offset dari alamat dasar tabel interrupt (Gambar 8) dan tabel flag interrupt tertunda (Pending Bit Array - PBA, Gambar 9) berada, serta ukuran keduanya meja. Sistem menulis alamat dan data terpisah untuk menulis ke setiap baris tabel interupsi, dan juga memungkinkan atau melarang penggunaan vektor tertentu melalui bit pertama bidang Kontrol Vektor. Untuk acara tertentu, titik akhir menetapkan bendera di tabel bendera interupsi tertunda. Jika tidak ada mask yang ditetapkan untuk interupsi ini di bidang Kontrol Vektor, titik akhir mengirimkan interupsi ke alamat dari tabel interupsi dengan konten paket yang ditentukan.


Gambar 8 - Tabel vektor interupsi MSI-X


Gambar 9 - Tabel bendera untuk interupsi tertunda

Inti perangkat keras FPGA tidak memiliki antarmuka khusus untuk interupsi MSI-X. Pengembang sendiri harus membuat tabel interupsi dalam logika pengguna dan tabel bendera interupsi tertunda. Paket interupsi juga sepenuhnya dibuat oleh pengguna dan ditransmisikan melalui antarmuka kernel bersama dengan jenis paket lainnya. Format paket dalam kasus ini, sebagaimana telah disebutkan di atas, sesuai dengan permintaan untuk menulis ke memori sistem dengan panjang satu kata ganda.

Fitur inti perangkat keras PCI Express FPGA V-series dari Intel dalam versi Avalon-ST


Terlepas dari kenyataan bahwa inti perangkat keras dari PCI Express FPGA dari berbagai produsen menerapkan fungsi yang serupa, masing-masing antarmuka inti atau urutan operasi mereka mungkin berbeda.
Inti perangkat keras Intel V-Series PCI Express FPGA tersedia dalam dua versi: dengan Avalon-MM dan Avalon-ST. Yang terakhir, meskipun membutuhkan lebih banyak upaya dari pengembang, memungkinkan Anda untuk mendapatkan bandwidth terbanyak. Karena alasan ini, kernel dengan antarmuka Avalon-MM tidak akan dipertimbangkan.

Dokumentasi inti PCI Express dengan antarmuka Avalon-ST menjelaskan secara terperinci parameter kernel, sinyal input dan output. Namun, kernel memiliki sejumlah fitur yang harus diperhatikan pengembang.

Kelompok fitur pertama berkaitan dengan metode yang memungkinkan Anda mengkonfigurasi FPGA dalam 100 ms sesuai dengan persyaratan PCIe. Selain pemuatan paralel jenis FPP, pengembang juga ditawari metode seperti Konfigurasi melalui Protokol (CvP) dan mode otonom dari kernel (mode otonom). Pengembang harus memastikan bahwa konfigurasi melalui protokol atau mode kernel mandiri didukung untuk kecepatan PCIe yang dipilih (parameter "Lane Rate"). Untuk konfigurasi melalui protokol, informasi yang relevan dapat ditemukan di dokumentasi kernel. Dalam hal mode offline, tidak ada informasi seperti itu, jadi Anda perlu mengkompilasi proyek. Jika mode kernel mandiri tidak didukung untuk kecepatan kernel saat ini, Quartus akan menghasilkan kesalahan yang sesuai (Gambar 10).


Gambar 10 - Kesalahan saat mengkompilasi kernel PCIe untuk mode offline

Jika pengembang berencana untuk menggunakan konfigurasi melalui protokol, ia juga harus memperhatikan inti FPGA mana konektor PCIe terhubung. Ini terutama benar jika pengembang tidak menggunakan papan yang sudah jadi, tetapi perangkatnya sendiri. Dalam FPGA dengan beberapa inti perangkat keras PCIe, hanya satu inti yang memungkinkan CvP diaktifkan. Lokasi inti dengan dukungan CvP ditunjukkan dalam dokumentasi FPGA.
Kelompok kedua fitur terkait dengan antarmuka transfer data Avalon-ST itu sendiri. Antarmuka inilah yang digunakan untuk mentransfer paket tingkat transaksi antara logika pengguna dan kernel.

Di sisi penerima, kernel memiliki dua sinyal yang memungkinkan pengguna untuk menghentikan sementara penerimaan paket yang diterima: sinyal rx_st_mask dan sinyal rx_st_ready.
Menggunakan sinyal rx_st_ready, pengembang dapat menjeda output dari semua jenis paket. Namun, jika Anda mengaktifkan sinyal ini, kernel akan menghentikan output paket setelah hanya dua siklus clock dari frekuensi operasi. Karena itu, selama aktivasi sinyal, logika pengguna harus siap menerima sejumlah data tambahan. Jika, misalnya, pengembang menggunakan buffer dalam bentuk FIFO, ia harus menghindari buffer overflows. Kalau tidak, sebagian isi paket akan hilang.

Menggunakan sinyal "rx_st_mask", pengembang menangguhkan penerbitan permintaan yang jawabannya harus dikirim. Sinyal ini juga tidak segera menghentikan keluaran paket. Menurut dokumentasi, setelah mengaktifkan sinyal, kernel dapat mengeluarkan hingga 10 permintaan. Jika logika pengguna mengaktifkan "rx_st_mask", dan tidak ada cukup ruang di buffer untuk memproses paket yang diterima, ini juga dapat mengaktifkan sinyal "rx_st_ready". Dalam situasi ini, logika pengguna berhenti membaca paket apa pun dari buffer kernel perangkat keras internal. Ini tidak hanya menimpa buffer kernel perangkat keras, tetapi juga melanggar persyaratan urutan paket. Perangkat harus melewati permintaan sebelumnya yang tidak memerlukan respons, dan membaca respons. Jika tidak, saluran data akan diblokir dengan ketat.Untuk alasan ini, pengembang harus menggunakan buffer tambahan untuk memproses permintaan dengan jawaban dan tidak membiarkan logika memblokir paket prioritas yang lebih tinggi.

Di sisi transmisi, sinyal tx_st_valid dan tx_st_ready dapat menyebabkan masalah. Jika sinyal tx_st_ready aktif, maka dilarang untuk logika pengguna untuk mengatur ulang tx_st_valid di tengah paket keluar. Ini berarti bahwa selama transfer, pengembang harus menyediakan seluruh konten paket. Jika sumber data lebih lambat dari antarmuka kernel, logika pengguna harus mengakumulasi jumlah data yang diperlukan sebelum dimulainya paket.
Baik di sisi penerima dan di sisi transmisi, pengembang harus memperhatikan urutan byte di header dan isi paket, serta penyelarasan data.

Dalam paket Avalon-ST dari inti perangkat keras, di dalam setiap kata ganda di dalam header paket PCIe, byte mengikuti dari rendah ke tinggi; di dalam isi paket - dari yang tertua hingga yang termuda. Pengembang harus menggunakan urutan serupa dalam paket keluar untuk berhasil mentransfer data dari titik akhir ke root.

Antarmuka Avalon-ST dari inti perangkat keras meluruskan data dalam kelipatan 64 bit. Bergantung pada lebar antarmuka Avalon-ST, panjang header paket tingkat transaksi dan alamat paket, kernel dapat menambahkan kata ganda kosong antara header paket dan isinya. Pada gilirannya, saat mengirimkan data, logika pengguna harus menambahkan kata ganda kosong terlebih dahulu, dengan analogi dengan kernel. Kata ganda kosong ini tidak diperhitungkan dalam panjang paket dan hanya diperlukan untuk pengoperasian kernel perangkat keras yang benar.

Fitur selanjutnya terkait dengan respons baca yang masuk. Deskripsi kernel mengatakan bahwa itu tidak ketinggalan tanggapan masuk yang pengenalnya tidak cocok dengan permintaan keluar. Pada saat yang sama, logika pengguna harus mengikuti waktu tunggu untuk tanggapan. Jika waktu tunggu terlampaui, logika pengguna harus menaikkan bendera โ€œcpl_err [0]โ€ atau โ€œcpl_err [1]โ€. Tidak jelas dari dokumentasi bagaimana penyaringan akan berfungsi ketika titik akhir mengirim beberapa permintaan baca. Logika pengguna hanya memberi tahu kernel bahwa batas waktu telah kedaluwarsa untuk salah satu permintaan, tetapi tidak dapat meneruskan pengidentifikasi permintaan ini ke kernel. Ada kemungkinan bahwa kernel dapat mentransmisikan ke respons sisi pengguna untuk permintaan dengan batas waktu berakhir. Oleh karena itu, pengembang harus membuat filter sendiri untuk tanggapan yang masuk.

Akhirnya, pengembang sangat dianjurkan untuk menggunakan informasi pinjaman yang tersedia untuk paket keluar. Dokumentasi inti mengatakan bahwa ini tidak perlu, karena kernel memeriksa pinjaman dan memblokir paket ketika tidak ada pinjaman yang cukup. Namun, semua jenis paket tiba di kernel melalui satu antarmuka. Jika buffer paket kernel meluap, kernel menurunkan sinyal tx_st_ready ke nol. Sampai sinyal tx_st_ready diatur ke satu, logika pengguna, pada prinsipnya, tidak dapat mengirim paket apa pun. Jumlah pinjaman yang tersedia diperbarui melalui paket dari perangkat mitra. Jika logika pengguna tidak hanya sering menulis, tetapi juga membaca, maka kecepatan pembaruan kernel menurun. Pada akhirnya, kinerja sistem secara keseluruhan menderita.

Kesimpulan


Artikel tersebut menjelaskan prinsip umum transfer data melalui PCI Express, format paket data utama. Namun demikian, penulis menghilangkan komponen antarmuka seperti saluran virtual, kontrol volume respons masuk untuk membaca, dan urutan paket tidak ketat. Topik-topik ini dibahas secara rinci dalam sejumlah sumber asing [ 4 , 6 ].
Artikel ini juga mencakup fitur-fitur inti perangkat keras Intel Express V-series FPGA FPGA yang penulis temui saat mengerjakan pengontrol antarmuka. Pengalaman ini mungkin bermanfaat bagi pengembang lain.

Daftar sumber yang digunakan


  1. Arsitektur PCIe DMA untuk Transmisi Data Multi-Gigabyte Per Detik / L. Rota, M. Caselle, et. Al. // TRANSAKSI IEEE PADA ILMU NUKLIR, VOL. 62, TIDAK. 3, JUNI 2015.
  2. An Efficient and Flexible Host-FPGA PCIe Communication Library / Jian Gong, Tao Wang, Jiahua Chen et. al. // 2014 24th International Conference on Field Programmable Logic and Applications.
  3. Design and Implementation of a High-Speed Data Acquisition Card Based on PCIe Bus / Li Mu-guo, Huang Ying, Liu Yu-zhi // ใ€Šๆต‹ๆŽงๆŠ€ๆœฏใ€‹2013ๅนด็ฌฌ32ๅท็ฌฌ7ๆœŸใ€‚
  4. Down to the TLP: How PCI express devices talk (Part I) / Eli Billauer
  5. Low-Cost FPGA Solution for PCI Express Implementation / Intel Corporation.
  6. Managing Receive-Buffer Space for Inbound Completions / Xilinx // Virtex-7 FPGA Gen3 Integrated Block for PCI Express v4.3, Appendix B
  7. PCIe Completion Timeout / Altera Forum
  8. PCIe packet in cyclone VI GX / Altera Forum
  9. PCIe simple transaction / Altera Forum
  10. PCIe w/ Avalon ST: Equivalent of ko_cpl_spc_vc0? / Altera Forum
  11. Point me in the right Direction โ€“ PCIe / Altera Forum
  12. Minta batas waktu habis di PCIE / Forum Altera
  13. Desain Antarmuka Berkecepatan Tinggi Berdasarkan PCIe dari Platform Verifikasi Penerima Non-kooperatif / Li Xiao-ning, Yao Yuan-cheng dan Qin Ming-wei // Konferensi Internasional 2016 tentang Mekanik, Kontrol, Listrik, Mekatronik, Informasi dan Komputer
  14. Spesifikasi PCI Express Base Revision 3.0 / PCI-SIG
  15. Antarmuka Stratix V Avalon-ST untuk Solusi PCIe / Intel Corporation
  16. Interface Cyclone V Avalon-ST untuk Solusi PCIe / Intel Corporation

All Articles