Агуулгын хүснэгт:

Vivado HLS видео IP блокийн синтез: 12 алхам
Vivado HLS видео IP блокийн синтез: 12 алхам

Видео: Vivado HLS видео IP блокийн синтез: 12 алхам

Видео: Vivado HLS видео IP блокийн синтез: 12 алхам
Видео: FPGA Twitch 04 - Vivado HLS - С-тестбенчи и Назначение интерфейсов (часть 1 из 2) 2024, Арваннэгдүгээр
Anonim
Vivado HLS видео IP блокийн синтез
Vivado HLS видео IP блокийн синтез

Та удаан хугацааны саатал, суулгагдсан системгүйгээр видеог бодит цаг хугацаанд боловсруулахыг хүсч байсан уу? Үүнийг хийхийн тулд заримдаа FPGAs (Field Programmable Gate Arrays) ашигладаг; Гэсэн хэдий ч VHDL эсвэл Verilog гэх мэт тоног төхөөрөмжийн техникийн хэл дээр видео боловсруулах алгоритм бичих нь хамгийн сайн урам хугардаг. C ++ орчинд програмчлах боломжийг олгодог Xilinx хэрэгсэл болох Vivado HLS -ийг оруулна уу.

Шаардлагатай програм хангамж:

  • Vivado HLS
  • Вивадо
  • (Хэрэв та AXI бүртгэлийг ашигладаг бол) Vivado SDK

(Заавал биш) Xilinx -ийн хийсэн жишээг эндээс татаж авна уу.

Xilinx HLS видео жишээ

Алхам 1: Vivado HLS гэж юу вэ?

Vivado HLS нь c ++ шиг кодыг FPGA дээр хэрэгжүүлж болох тоног төхөөрөмжийн бүтцэд хувиргах хэрэгсэл бөгөөд үүнийг хөгжүүлэх IDE -ийг багтаасан болно. Та HLS -ийн кодыг боловсруулж дууссаны дараа үүсгэсэн IP -г форматаар экспортлох боломжтой. Vivado -тай хамт хэрэглэх.

Хавсаргасан файлуудаа татаж аваад, төслөө хийх гэж буй газрынхаа ойролцоо байрлуулна уу. (хэрэв санамсаргүй нэртэй бол тэдгээрийг "top.cpp", "top.h" гэж нэрлээрэй)

Алхам 2: HLS видео номын сан

HLS видео номын сан
HLS видео номын сан
HLS видео номын сан
HLS видео номын сан

HLS Видео номын сан нь энэхүү баримт бичгийн лавлагааны загвар бүхий баримт бичигтэй: XAPP1167 Өөр нэг сайн эх сурвалж бол Xilinx Wiki хуудас юм.

Vivado HLS -ийг эхлүүлэх.

Шинэ төсөл бий болгох.

Өмнөх алхам дээр татаж авсан файлуудаа аваад эх файл болгон нэмнэ үү. (Анхаарна уу: файлуудыг төсөлд хуулж бичдэггүй, харин оронд нь хэвээр нь үлдээдэг)

Дараа нь Browse товчийг ашиглан дээд функцийг сонгоно уу.

Дараагийн хуудсан дээр ашиглаж буй Xilinx хэсгийг сонгоно уу.

Алхам 3: Синтез хийх

Синтез хийж байна
Синтез хийж байна

Шийдэл => Run C Synthesis => Идэвхтэй шийдэл

~ 227.218 секундын дараа үүнийг хийх ёстой. (Анхаарна уу: таны бодит синтез хийх хугацаа олон хүчин зүйлээс хамаарч өөр өөр байх болно)

Алхам 4: Экспортлох хувилбар ба бусад мэдээлэл

Экспортлох хувилбар ба бусад мэдээлэл
Экспортлох хувилбар ба бусад мэдээлэл

Хувилбарын дугаарууд нь Vivado -той харилцан үйлчлэлцэж, дизайныг IP -ээ шинэчлэх боломжийг олгодог. Хэрэв энэ нь жижиг хувилбар юм бол үүнийг хийж болно, гэхдээ томоохон хувилбарын өөрчлөлтийг гараар шинэ блок дээр нэмж, хуучин блокыг устгах шаардлагатай болно. IP товчлуурыг дарж бүрэн автоматаар хийж болно. Vivado tcl консол дээр "report_ip_status" -ийг ажиллуулж IP -ийн статусыг харах боломжтой.

Шийдэл => Шийдлийн тохиргоо хэсэгт хувилбарын дугаар болон бусад мэдээллийг тохируулна уу.

Эсвэл экспорт хийх явцад эдгээр тохиргоог хийж болно.

Алхам 5: Vivado IP номын сан руу экспорт хийх

Vivado IP номын сан руу экспорт хийж байна
Vivado IP номын сан руу экспорт хийж байна
Vivado IP номын сан руу экспорт хийж байна
Vivado IP номын сан руу экспорт хийж байна

Шийдэл => RTL экспортлох

Хэрэв та өмнөх алхамд IP номын сангийн дэлгэрэнгүй мэдээллийг тохируулаагүй бол одоо үүнийг хийж болно.

Алхам 6: Синтез ба экспортын шинжилгээ

Синтез ба экспортын шинжилгээ
Синтез ба экспортын шинжилгээ
Синтез ба экспортын шинжилгээ
Синтез ба экспортын шинжилгээ
Синтез ба экспортын шинжилгээ
Синтез ба экспортын шинжилгээ

Энэ дэлгэц дээр бид экспортолж буй модулийнхаа статистикийг харах боломжтой бөгөөд энэ нь бидний 10нс (100МГц) цагтай нийцэж байгаа болон нөөц бүрээс хэр их хэмжээгээр ашиглаж байгааг харуулдаг.

Үүнийг нэгтгэх, бидний синтезийн тайлан, Dataflow -ийн дүн шинжилгээний тусламжтайгаар бид 317338 цагийн цикл * 10н цагийн цаг * 14 дамжуулах хоолойн үе шат = 0.04442732 секунд зарцуулдаг болохыг харж болно. Энэ нь бидний зургийн боловсруулалтын нийт хоцрогдол нь секундын хорьны нэгээс бага байдаг гэсэн үг юм (зорилтот 100 МГц давтамжтай байх үед).

Алхам 7: Vivado дахь IP номын санг нэмж оруулах

Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна
Vivado дахь IP номын санг нэмж байна

Синтезлэгдсэн IP блокоо ашиглахын тулд үүнийг Vivado -д нэмэх шаардлагатай болно.

Vivado-д IP каталог руу очиж IP репозитороо төсөл дээрээ нэмж оруулаад "Хадгалах сан нэмэх …" -ийг сонгоод хулганы баруун товчийг дарна уу.

Vivado HLS төслийн лавлах руу очиж өөрийн шийдлийн лавлахыг сонгоно уу.

Энэ нь олсон IP -ээ мэдээлэх ёстой.

Алхам 8: Шинэчлэлт хийж байна

Шинэчлэлт хийж байна
Шинэчлэлт хийж байна
Шинэчлэлт хийж байна
Шинэчлэлт хийж байна
Шинэчлэлт хийж байна
Шинэчлэлт хийж байна

Заримдаа та HLS блокоо Vivado загварт оруулсны дараа өөрчлөлт оруулах хэрэгтэй болдог.

Үүнийг хийхийн тулд та өөрчлөлт хийж, IP -г илүү өндөр хувилбарын дугаараар дахин синтезжүүлж экспортлох боломжтой (өмнөх/том хувилбарын дугаарын өөрчлөлтийн талаар дэлгэрэнгүй мэдээллийг үзнэ үү).

Шинэ хувилбарыг экспортлохыг өөрчилсний дараа Vivado дахь IP репозитороо сэргээнэ үү. Vivado нь репозитор дотор IP өөрчлөгдсөнийг анзаарсан эсвэл гараар идэвхжүүлсэн тохиолдолд үүнийг хийж болно. (Анхаарна уу, хэрэв та IP репозитороо эхлүүлсний дараа сэргээж байгаа боловч HLS -д экспорт хийж дуусахаас өмнө IP түр байхгүй байх болно. Үүнийг дуусгахыг хүлээгээд дахин сэргээнэ үү.)

Энэ үед диск дээр IP хаяг өөрчлөгдсөн гэсэн мэдээлэл бүхий цонх гарч ирэх бөгөөд үүнийг "Сонгосон хэсгийг шинэчлэх" товчлуураар шинэчлэх боломжийг танд олгоно. Дараа нь энэ товчлуурыг дарахад хуучин IP шинэ утсаар автоматаар солигдох болно, эс тэгвээс илүү их ажил шаардагдах болно.

Алхам 9: Нэмэлт мэдээлэл ба мэдээлэл

Дараахь алхамууд нь HLS синтез хэрхэн ажилладаг, үүн дээр юу хийж болох талаар илүү их мэдээлэл өгөх болно.

HLS синтезжүүлсэн IP блок ашигладаг төслийн жишээг эндээс үзнэ үү.

Алхам 10: Гаралт ба оролт

Гаралт ба оролт
Гаралт ба оролт
Гаралт ба оролт
Гаралт ба оролт

Эцсийн IP блокийн гаралт ба оролтыг синтезатор нь дээд функцэд орж ирж буй өгөгдлийн урсгалын дүн шинжилгээгээр тодорхойлдог.

VHDL эсвэл verilog -тэй адил HLS нь IP хоорондын холболтын талаархи дэлгэрэнгүй мэдээллийг өгөх боломжийг олгодог. Эдгээр мөрүүд нь үүний жишээ юм.

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

#pragma HLS INTERFACE тэнхлэгийн порт = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE тэнхлэгийн порт = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = Hx_setset = 0x14

Эдгээр зааврууд нь IP блок дээр үзүүлсэн портууд хэрхэн нөлөөлж байгааг харж болно.

Алхам 11: AXI бүртгүүлэх интерфейс

AXI бүртгүүлэх интерфейс
AXI бүртгүүлэх интерфейс

IP блокоос PS руу оролт/гаралт авахын тулд үүнийг AXI интерфэйсээр дамжуулан хийх нь хамгийн сайн арга юм.

Та үүнийг HLS код дээрээ зааж өгч болно, үүнд утгыг хожим нь дараах байдлаар хандах боломжтой болно.

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

#pragma HLS INTERFACE s_axilite порт = x багц = CONTROL_BUS офсет = 0x14

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

x = 42;

y = 0xDEADBEEF; }

Vivado -д зөв холбогдсоны дараа та Vivado SDK дээрх кодыг ашиглан утгуудад хандах боломжтой.

#"параметр.h" -ийг оруулна уу

#define xregoff 0x14 #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);

Ингэснээр та x in in 42, yx in 0xdeadbeef -ийг авах болно

Алхам 12: Dataflow Прагма

Dataflow Прагма
Dataflow Прагма
Dataflow Прагма
Dataflow Прагма
Dataflow Прагма
Dataflow Прагма

#Pragma DATAFLOW дотор кодыг хэрэгжүүлэх арга нь ердийн C ++ - ээс өөрчлөгддөг. Кодыг шугаман хэлбэрээр байрлуулсан бөгөөд ингэснээр бүх зааврууд өгөгдлийн өөр өөр хэсэгт үргэлж ажилладаг (Үүнийг үйлдвэрт угсрах шугам шиг төсөөлөөд үз дээ, станц бүр нэг функцийг тасралтгүй хийж, дараагийн станц руу дамжуулдаг).

дүрснээс та удирдамж бүрийг харж болно

Хэвийн хувьсагч мэт харагдаж байсан ч img объектуудыг командуудын хооронд жижиг буфер хэлбэрээр хэрэгжүүлдэг. Дүрсийг функцын оролт болгон ашиглах нь түүнийг "хэрэглэж", цаашид ашиглах боломжгүй болгодог. (Тиймээс давхардсан тушаалуудыг авах шаардлагатай болсон)

Зөвлөмж болгож буй: