Спасибо за ответ.
Полезно поговорить даже с самим собой, а тем более с умным человеком.
Решение нашлось.
Пришлось производить чтение и запись во внешний блок памяти только в одной функции, используя промежуточную глобальную переменную для передачи данных на запись из другой функции.
Начинаю потихоньку понимать требуемый стиль программирования.
Директиву DATAFLOW в главной программе оставил и vivado перестал выдавать предупреждения, т.к. видел, что запись и чтение в блок памяти происходят при выполнении разных условий.
Исходники не привожу, потому, как описал я проблему в очень упрощенном виде, функций там не 2, а 4 , связаны через память они крест-на крест, блоков памяти не 2 или 4, а штук 50.
Такой исходник разобрать сложно.
Спасибо.
Цитата(RobFPGA @ Mar 2 2018, 10:29)
Зачем Вам ОДНОВРЕМЕННЫЙ доступ двух функций к одной памяти? Как Вы конролируете доступ между ними?
Одна функция обрабатывает данные и передает их другой в качестве входных данных для последующей обработки.
Все функции имеют по 2 блока памяти, с одним работают сами, а в другую в это время пишет сосед, потом они переключаются. Для переключения используется глобальная переменная, общая для всех.
На самом деле будет массив из 100 функций (10*10), работающих параллельно. Такой требуется алгоритм обработки.
Цитата
Можно ли сделать алгоритм с раздельной памятью и обработкой конвейером?
Ведь в отличии от sw в hw реально возможен одновременный доступ и при наличии зависимостей по переменной между двумя функциями синтезатор не знает как разруливать такое.
Поэтому я и говорил что будет ломать устоявшиеся привычки программирования.
Я пришел не из программистов, а из железячников, и писал на VHDL, и привычки, конечно приходится менять.