Isi kandungan:

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

Video: Sintesis Blok IP Video Vivado HLS: 12 Langkah

Video: Sintesis Blok IP Video Vivado HLS: 12 Langkah
Video: FPGA Twitch 04 - Vivado HLS - С-тестбенчи и Назначение интерфейсов (часть 1 из 2) 2024, November
Anonim
Sintesis Blok IP Video Vivado HLS
Sintesis Blok IP Video Vivado HLS

Adakah anda pernah mahu memproses masa nyata pada video tanpa menambahkan banyak latensi atau dalam sistem terbenam? FPGAs (Array Gerbang Programmable Field) kadang-kadang digunakan untuk melakukan ini; namun, menulis algoritma pemprosesan video dalam bahasa spesifikasi perkakasan seperti VHDL atau Verilog sangat mengecewakan. Masukkan Vivado HLS, alat Xilinx yang membolehkan anda memprogram dalam persekitaran C ++ dan menghasilkan kod bahasa spesifikasi perkakasan daripadanya.

Perisian yang diperlukan:

  • Vivado HLS
  • Vivado
  • (Sekiranya anda menggunakan register AXI) Vivado SDK

(Pilihan) Muat turun contoh Xilinx yang dibuat di sini:

Contoh video Xilinx HLS

Langkah 1: Apa itu Vivado HLS?

Vivado HLS adalah alat yang digunakan untuk mengubah kod seperti c ++ menjadi struktur perkakasan yang dapat dilaksanakan pada FPGA. Ia termasuk IDE untuk melakukan pengembangan ini. Sebaik sahaja anda menyelesaikan pengembangan kod untuk HLS, anda boleh mengeksport IP yang dihasilkan dalam format untuk digunakan dengan Vivado.

Muat turun fail yang dilampirkan dan letakkan di dekat tempat anda akan membuat projek anda. (ganti nama mereka kembali ke "top.cpp" dan "top.h" jika mereka mempunyai nama rawak)

Langkah 2: Perpustakaan Video HLS

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

Perpustakaan Video HLS mempunyai dokumentasi dengan reka bentuk rujukan dalam makalah ini: XAPP1167Sumber lain yang baik adalah halaman Xilinx Wiki mengenainya.

Mulakan Vivado HLS.

Buat projek baru.

Ambil fail yang anda muat turun pada langkah sebelumnya dan tambahkan sebagai fail sumber. (Catatan: fail tidak disalin ke dalam proyek, tetapi tetap di tempatnya)

Kemudian gunakan butang Browse untuk memilih fungsi teratas.

Pada halaman seterusnya, pilih bahagian Xilinx yang anda gunakan.

Langkah 3: Mensintesis

Mensintesis
Mensintesis

Penyelesaian => Jalankan C Sintesis => Penyelesaian Aktif

Selepas ~ 227.218 saat, ia harus dilakukan. (Catatan: masa sintesis sebenar anda akan berbeza berdasarkan banyak faktor)

Langkah 4: Versi dan Maklumat Lain untuk Eksport

Versi dan Maklumat Lain untuk Eksport
Versi dan Maklumat Lain untuk Eksport

Nombor versi berinteraksi dengan Vivado menyebabkan anda dapat mengemas kini IP dalam reka bentuk. Sekiranya ia adalah perubahan versi kecil, ia dapat dilakukan sementara perubahan versi utama mengharuskan anda menambahkan blok baru secara manual dan mengeluarkan yang lama. Sekiranya antara muka anda tidak berubah dan kemas kini versi kecil, kemas kini boleh dilakukan dilakukan sepenuhnya secara automatik dengan menekan butang IP kemas kini. Anda boleh menjalankan "report_ip_status" di konsol Vivado tcl untuk melihat status IP anda.

Tetapkan nombor versi dan maklumat lain dalam Penyelesaian => Tetapan Penyelesaian…

Sebagai alternatif, tetapan ini boleh ditetapkan semasa eksport.

Langkah 5: Mengeksport ke Perpustakaan IP Vivado

Mengeksport ke Perpustakaan IP Vivado
Mengeksport ke Perpustakaan IP Vivado
Mengeksport ke Perpustakaan IP Vivado
Mengeksport ke Perpustakaan IP Vivado

Penyelesaian => Eksport RTL

Sekiranya anda tidak menetapkan butiran perpustakaan IP pada langkah sebelumnya, anda boleh melakukannya sekarang.

Langkah 6: Analisis Sintesis dan Eksport

Analisis Sintesis dan Eksport
Analisis Sintesis dan Eksport
Analisis Sintesis dan Eksport
Analisis Sintesis dan Eksport
Analisis Sintesis dan Eksport
Analisis Sintesis dan Eksport

Pada skrin ini kita dapat melihat statistik mengenai modul yang dieksport kami, menunjukkan bahawa ia memenuhi jangka masa 10ns (100MHz) dan berapa banyak sumber yang digunakannya.

Dengan gabungan ini, Laporan Sintesis, dan analisis Alur Data kami, kami dapat melihat bahawa memerlukan 317338 kitaran jam * tempoh jam 10ns * 14 peringkat saluran paip = 0,04442732 saat. Bermaksud bahawa jumlah latensi yang ditambahkan oleh pemprosesan gambar kami kurang dari satu puluh dua saat (apabila dicatat pada 100MHz yang disasarkan).

Langkah 7: Menambah Perpustakaan IP di Vivado

Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado
Menambah Perpustakaan IP di Vivado

Untuk menggunakan blok IP yang disintesis, anda perlu menambahkannya ke Vivado.

Di Vivado tambahkan repositori IP ke projek anda dengan pergi ke katalog IP dan klik kanan memilih "Tambah Repositori …"

Navigasi ke direktori projek Vivado HLS anda dan pilih direktori penyelesaian anda.

Ia harus melaporkan IP yang dijumpainya.

Langkah 8: Melakukan Peningkatan

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

Kadang kala anda perlu membuat perubahan pada blok HLS anda setelah memasukkannya ke dalam reka bentuk Vivado.

Untuk melakukan ini, anda boleh membuat perubahan dan menyintesis semula dan mengeksport IP dengan nombor versi yang lebih tinggi (lihat perincian pada langkah sebelumnya mengenai perubahan nombor versi utama / kecil).

Setelah menukar mengeksport versi baru, muat semula repositori IP anda di Vivado. Ini boleh dilakukan apabila Vivado melihat IP telah berubah di repositori, atau diaktifkan secara manual. (Perhatikan, jika anda menyegarkan repositori IP anda setelah memulakan, tetapi sebelum eksport selesai di HLS, IP tidak akan berada di sana buat sementara waktu, tunggu sehingga selesai dan muat semula.)

Pada ketika ini tetingkap akan muncul dengan maklumat bahawa IP telah diubah pada disk dan memberi anda pilihan untuk memperbaruinya dengan butang "Upgrade Selected". Sekiranya perubahan itu adalah perubahan versi kecil dan tidak ada antara muka yang berubah, kemudian menekan butang itu secara automatik akan menggantikan IP lama dengan yang baru, jika tidak, lebih banyak kerja mungkin diperlukan.

Langkah 9: Maklumat dan Maklumat Tambahan

Langkah-langkah berikut memberikan lebih banyak maklumat mengenai bagaimana sintesis HLS berfungsi dan apa yang boleh anda lakukan dengannya.

Untuk contoh projek yang menggunakan blok IP disintesis HLS, lihat arahan ini.

Langkah 10: Output dan Input

Keluaran dan Input
Keluaran dan Input
Keluaran dan Input
Keluaran dan Input

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

Sama seperti dalam VHDL atau verilog, HLS membolehkan anda menentukan perincian mengenai hubungan antara IP. Garis-garis ini adalah contohnya:

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

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

Anda dapat melihat bagaimana port yang dipamerkan di blok IP dipengaruhi oleh arahan ini.

Langkah 11: Antaramuka Daftar AXI

Antaramuka Daftar AXI
Antaramuka Daftar AXI

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

Anda boleh menentukannya dalam kod HLS anda, termasuk ofset yang akan digunakan untuk mengakses nilai kemudian seperti ini:

batal 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 aliran data

x = 42;

y = 0xDEADBEEF; }

Setelah tersambung dengan betul di Vivado, anda boleh mengakses nilai menggunakan kod ini di Vivado SDK:

#sertakan "parameter.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 menjadikan anda berakhir dengan 42 in x dan 0xdeadbeef in 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 kod tersebut dilaksanakan berubah dari C ++ biasa. Kod ini disalurkan sehingga semua arahan berjalan sepanjang masa di bahagian data yang berlainan (Anggap saja seperti garis pemasangan di kilang, setiap stesen berfungsi terus melakukan satu fungsi dan meneruskannya ke stesen seterusnya)

dari gambar anda dapat melihat bahawa setiap arahan

Walaupun tampak seperti pemboleh ubah normal, objek img sebenarnya dilaksanakan sebagai penyangga kecil antara perintah. Menggunakan gambar sebagai input untuk fungsi "memakannya" dan menjadikannya tidak dapat digunakan lagi. (Oleh itu perlunya perintah pendua)

Disyorkan: