Daftar Isi:

Sintesis Blok IP Video HLS Vivado: 12 Langkah
Sintesis Blok IP Video HLS Vivado: 12 Langkah

Video: Sintesis Blok IP Video HLS Vivado: 12 Langkah

Video: Sintesis Blok IP Video HLS Vivado: 12 Langkah
Video: Lec80 - Demo: Vivado HLS FFT IP Export 2024, Juli
Anonim
Sintesis Blok IP Video HLS Vivado
Sintesis Blok IP Video HLS Vivado

Pernahkah Anda ingin memproses video secara real-time tanpa menambahkan banyak latensi atau dalam sistem tertanam? FPGA (Field Programmable Gate Arrays) terkadang digunakan untuk melakukan ini; namun, menulis algoritme pemrosesan video dalam bahasa spesifikasi perangkat keras seperti VHDL atau Verilog paling membuat frustrasi. Masukkan Vivado HLS, alat Xilinx yang memungkinkan Anda memprogram dalam lingkungan C++ dan menghasilkan kode bahasa spesifikasi perangkat keras darinya.

Software yang dibutuhkan:

  • Vivado HLS
  • hidup
  • (Jika Anda menggunakan register AXI) Vivado SDK

(Opsional) Unduh contoh buatan Xilinx di sini:

Contoh video Xilinx HLS

Langkah 1: Apa itu Vivado HLS?

Vivado HLS adalah alat yang digunakan untuk mengubah c++ seperti kode menjadi struktur perangkat keras yang dapat diimplementasikan pada FPGA. Ini termasuk IDE untuk melakukan pengembangan ini. Setelah Anda menyelesaikan pengembangan kode untuk HLS, Anda dapat mengekspor IP yang dihasilkan dalam format untuk digunakan dengan Vivado.

Unduh file terlampir dan letakkan di dekat tempat Anda akan membuat proyek. (ganti nama mereka kembali ke "top.cpp" dan "top.h" jika mereka memiliki nama acak)

Langkah 2: Perpustakaan Video HLS

Perpustakaan Video HLS
Perpustakaan Video HLS
Perpustakaan Video HLS
Perpustakaan Video HLS

Perpustakaan Video HLS memiliki dokumentasi dengan desain referensi dalam makalah ini:XAPP1167Sumber daya bagus lainnya adalah halaman Wiki Xilinx tentangnya.

Mulai Vivado HLS.

Buat proyek baru.

Ambil file yang Anda unduh pada langkah sebelumnya dan tambahkan sebagai file sumber. (Catatan: file tidak disalin ke dalam proyek, tetapi tetap di tempatnya)

Kemudian gunakan tombol Browse untuk memilih fungsi teratas.

Pada halaman berikutnya, pilih bagian Xilinx yang Anda gunakan.

Langkah 3: Sintesis

Sintesis
Sintesis

Solusi => Jalankan Sintesis C => Solusi Aktif

Setelah ~227.218 detik, itu harus dilakukan. (Catatan: waktu sintesis Anda yang sebenarnya akan bervariasi berdasarkan banyak faktor)

Langkah 4: Pembuatan Versi dan Info Lainnya untuk Ekspor

Versi dan Info Lainnya untuk Ekspor
Versi dan Info Lainnya untuk Ekspor

Nomor versi berinteraksi dengan Vivado sehingga Anda dapat memperbarui IP dalam sebuah desain. Jika itu adalah perubahan versi kecil, itu dapat dilakukan di tempat sementara perubahan versi utama mengharuskan Anda untuk secara manual menambahkan blok baru dan menghapus yang lama. Jika antarmuka Anda tidak berubah dan pembaruan versi kecil, pembaruan dapat dilakukan dilakukan sepenuhnya secara otomatis dengan menekan tombol update IP. Anda dapat menjalankan "report_ip_status" di konsol tcl Vivado untuk melihat status IP Anda.

Setel nomor versi dan info lainnya di Solusi => Pengaturan Solusi…

Atau, pengaturan ini dapat diatur selama ekspor.

Langkah 5: Mengekspor ke Vivado IP Library

Mengekspor ke Perpustakaan IP Vivado
Mengekspor ke Perpustakaan IP Vivado
Mengekspor ke Perpustakaan IP Vivado
Mengekspor ke Perpustakaan IP Vivado

Solusi => Ekspor RTL

Jika Anda tidak menyetel detail pustaka IP pada langkah sebelumnya, Anda dapat melakukannya sekarang.

Langkah 6: Sintesis dan Analisis Ekspor

Analisis Sintesis dan Ekspor
Analisis Sintesis dan Ekspor
Analisis Sintesis dan Ekspor
Analisis Sintesis dan Ekspor
Analisis Sintesis dan Ekspor
Analisis Sintesis dan Ekspor

Pada layar ini kita dapat melihat statistik tentang modul yang diekspor, menunjukkan bahwa modul tersebut memenuhi periode clock 10ns (100MHz) dan berapa banyak dari setiap sumber daya yang digunakannya.

Dengan kombinasi ini, Laporan Sintesis kami, dan analisis Dataflow kami, kami dapat melihat bahwa dibutuhkan 317338 siklus jam * 10ns periode jam * 14 tahap pipa = 0,04442732 detik. Artinya, total latensi yang ditambahkan oleh pemrosesan gambar kami kurang dari seperduapuluh detik (bila di-clock pada 100MHz yang ditargetkan).

Langkah 7: Menambahkan Perpustakaan IP di Vivado

Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado
Menambahkan Perpustakaan IP di Vivado

Untuk menggunakan blok IP yang disintesis, Anda harus menambahkannya ke Vivado.

Di Vivado, tambahkan repositori IP ke proyek Anda dengan membuka katalog IP dan klik kanan memilih "Tambah Repositori…"

Arahkan ke direktori proyek Vivado HLS Anda dan pilih direktori solusi Anda.

Itu harus melaporkan IP yang ditemukannya.

Langkah 8: Melakukan Peningkatan

Melakukan Peningkatan
Melakukan Peningkatan
Melakukan Peningkatan
Melakukan Peningkatan
Melakukan Peningkatan
Melakukan Peningkatan

Terkadang Anda perlu membuat perubahan pada blok HLS Anda setelah memasukkannya ke dalam desain Vivado.

Untuk melakukan ini, Anda dapat membuat perubahan dan mensintesis ulang dan mengekspor IP dengan nomor versi yang lebih tinggi (lihat detail di langkah sebelumnya tentang perubahan nomor versi mayor/minor).

Setelah mengubah mengekspor versi baru, segarkan repositori IP Anda di Vivado. Ini dapat dilakukan ketika Vivado mengetahui bahwa IP telah berubah di repositori, atau diaktifkan secara manual. (Catatan, jika Anda me-refresh repositori IP Anda setelah memulai, tetapi sebelum ekspor selesai di HLS, IP untuk sementara tidak akan ada, tunggu sampai selesai dan segarkan kembali.)

Pada titik ini sebuah jendela akan muncul dengan informasi bahwa IP telah diubah pada disk dan memberi Anda opsi untuk memperbaruinya dengan tombol "Tingkatkan Dipilih". Jika perubahan itu adalah perubahan versi kecil dan tidak ada antarmuka yang berubah, kemudian menekan tombol itu akan secara otomatis mengganti IP lama dengan yang baru, jika tidak, mungkin diperlukan lebih banyak pekerjaan.

Langkah 9: Detail dan Info Tambahan

Langkah-langkah berikut memberikan informasi lebih lanjut tentang cara kerja sintesis HLS dan apa yang dapat Anda lakukan dengannya.

Untuk contoh proyek yang menggunakan blok IP sintesis HLS, lihat instruksi ini.

Langkah 10: Keluaran dan Masukan

Keluaran dan Masukan
Keluaran dan Masukan
Keluaran dan Masukan
Keluaran dan Masukan

Output dan Input ke blok IP akhir ditentukan dari analisis yang dilakukan synthesizer terhadap aliran data masuk dan keluar dari fungsi teratas.

Mirip dengan di VHDL atau Verilog, HLS memungkinkan Anda untuk menentukan detail tentang koneksi antara IP. Garis-garis ini adalah contohnya:

void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {

#pragma HLS INTERFACE axis port=video_in bundle=INPUT_STREAM #pragma HLS INTERFACE axis port=video_out bundle=OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port=x bundle=CONTROL_BUS offset=0x14#pragma HLS INTERFACE s_axilite bundle=0CONTROL_BUS port=y offset CONTROL_BUS

Anda dapat melihat bagaimana port yang ditampilkan pada blok IP dipengaruhi oleh arahan ini.

Langkah 11: Antarmuka Daftar AXI

Antarmuka Daftar AXI
Antarmuka Daftar AXI

Untuk mendapatkan input/output ke/dari blok IP Anda ke PS, cara yang baik untuk melakukannya adalah melalui antarmuka AXI.

Anda dapat menentukan ini dalam kode HLS Anda, termasuk offset yang akan digunakan untuk mengakses nilai nanti seperti ini:

void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {

#pragma HLS INTERFACE s_axilite port=x bundle=CONTROL_BUS offset=0x14

#pragma HLS INTERFACE s_axilite port=y bundle=CONTROL_BUS offset=0x1C #pragma HLS dataflow

x = 42;

y = 0xDEADBEEF; }

Setelah terhubung dengan benar di Vivado, Anda dapat mengakses nilai menggunakan kode ini di Vivado SDK:

#sertakan "parameters.h"

#define xregoff 0x14 #define yregoff 0x1c x = Xil_In32(XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+xregoff); y = Xil_In32(XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+yregoff);

Ini akan membuat Anda mendapatkan 42 di x dan 0xdeadbeef di y

Langkah 12: Pragma Aliran Data

Pragma Aliran Data
Pragma Aliran Data
Pragma Aliran Data
Pragma Aliran Data
Pragma Aliran Data
Pragma Aliran Data

Di dalam #pragma DATAFLOW cara kode diimplementasikan berubah dari C++ normal. Kode disalurkan sehingga semua instruksi berjalan setiap saat di berbagai bagian data (Anggap saja seperti jalur perakitan di pabrik, setiap stasiun bekerja terus menerus melakukan satu fungsi dan meneruskannya ke stasiun berikutnya)

dari gambar Anda dapat melihat bahwa masing-masing arahan

Meskipun tampak sebagai variabel normal, objek img sebenarnya diimplementasikan sebagai buffer kecil di antara perintah. Menggunakan gambar sebagai input ke suatu fungsi "mengkonsumsinya" dan membuatnya tidak dapat digunakan lagi. (Oleh karena itu kebutuhan akan perintah duplikat)

Direkomendasikan: