Как я могу написать свою программу на C в двух функциях?

Мне было интересно, как я могу написать свой код C (всего один единственный .c с парой разных функций) всего в две функции с входами и выходами. Я ищу их, потому что я собираюсь поместить часть моего кода в процессор, а другую оставить в FPGA, они могут общаться друг с другом через интерфейс на плате семейства Zynq (например, ZC706).

В связи с этим, через Vivado HLS у меня должна быть только одна функция, которую можно перевести, например. VHDL через Vivado HLS, а другие функции могут оставаться в ЦП.

Заранее спасибо и при необходимости могу поделиться своим кодом.


person Mah    schedule 04.05.2018    source источник
comment
Да, это необходимо, поделитесь своим кодом в виде минимально воспроизводимого примера. FPGA не требует помещать все в одну функцию. Начните с преобразования вашего кода в две отдельные части, которые взаимодействуют только через интерфейс, который можно сопоставить с описанным каналом.   -  person Yunnosch    schedule 04.05.2018
comment
А на FPGA вы не пишете функции в смысле C, а описываете железо, которое нужно синтезировать.   -  person Eugene Sh.    schedule 04.05.2018


Ответы (1)


Нисколько!

В FPGA нет pthreads или функций. Вы должны думать, что FPGA больше похожа на схему. Существуют физические соединения, такие как провода. Внутри, особенно в семействе Zynq, вы можете общаться через RAM, контроллеры DMA или через регистры. Есть документация от Xilinx, вам нужен AXI/AXI Stream.

Но то, что вы хотите сделать, это написать любой код C и запустить его в области FPGA, как в процессоре. И этот подход не перспективен.

В Vivado HLS вы можете писать «функции» на C/C++/OpenCL/SystemC, но это всего лишь блок с входами и выходами, переведенный на язык описания оборудования (VHDL/Verilog). Вы должны экспортировать его и добавить в свой проект Vivado, чтобы использовать его. На этом этапе, возможно, ваш IP-адрес, созданный в HLS, будет делать то, что вы ожидаете, но предстоит еще много работы, чтобы правильно подключить порты.

Мой совет: ознакомьтесь с семейством Zynq и особенно с протоколом AXI. Если вы знакомы с DMA/AXI4/AXI4S и с тем, как получить к ним доступ из ARM и Logic, начните использовать HLS. В противном случае у вас не будет ощущения, как писать код, понятный HLS.

person akira hinoshiro    schedule 07.05.2018