La conversion du code OpenCV au code FPGA est-elle plus facile que le code Matlab ou non?
je veux faire un projet sur le traitement d'image. je veux savoir si je veux mettre en œuvre ce projet sur FPGA, quel outil dois-je choisir à la 1ère étape Matlab ou Open CV? et est-il possible de convertir le code de CV ouvert en FPGA directement comme générateur de code peut être utilisé de Matlab à FPGA directement??
3 réponses
tout D'abord-pourquoi voulez-vous utiliser un FPGA? Sauf si vous avez de bonnes raisons, de les éviter!
de bonnes raisons peuvent être des choses comme:
- coût
- puissance
- taille
- matériel préexistant qui doit être réutilisé
- intérêt personnel
- c'est une mission où les Fpga sont mandatés
Les mauvaises raisons comprennent " traitement d'image... ça doit vouloir dire que j'ai besoin d'une FPGA!"
Think FPGA
si vous voulez mettre en œuvre sur FPGA vous devez penser" FPGA " dès le début. Ils ont des caractéristiques très particulières par rapport aux processeurs conventionnels, ce qui signifie que de nombreux algorithmes "conventionnels" sont très difficiles à mettre en œuvre efficacement sur FPGAs. Et d'autres algorithmes classiques de traitement la lutte avec peut en fait être fait tout simplement sur un FPGA.
un exemple classique (non-image) est le calcul CRC, qui est souvent mis en œuvre en utilisant des tables de recherche dans le logiciel, mais peut être un trivial shift-register et XOR gate dans FPGA.
concernant les générateurs de code....
il y avait autrefois un produit que Xilinx achetait (AccelDSP) qui pouvait prendre (très soigneusement conçu) du code Matlab et produire de la VHDL. Il n'a pas très bien il a été retiré.
Matlab ont HDL-codeur , qui prétend faire le même travail, en plus de faire des diagrammes de Simulink aussi. Je l'ai évalué il y a assez longtemps - Je ne sais pas à quel point il est bon maintenant (bien qu'il était oeil-eau-hors de prix!). En regardant la page Web ti semble encore seulement soutenir des fonctions Matlab (pas des objets définis par l'utilisateur) qui en fait un non-démarreur pour tout ce qui stocke l'état dans it (IMHO) que tout l'État doit être stocké en dehors de la fonction, ce qui signifie que vous devez avoir un "in" et un "out" struct
avec tous vos règlements en. Même problème Qu'AccelDSP.
Xilinx et le constructeur de système D'Altera utilisent Simulink comme front-end pour produire le code FPGA. Ils peuvent être tout à fait réussi, soyez conscient que vous ne pouvez pas simplement jeter des Simulink complexes arbitraires blocs vers le bas et l'espoir de produire une synthèse FPGA.
encore une fois, vous devez penser FPGA dès le début.
FPGA features
partout où un mot comparatif est utilisé, je compare à "desktop processeurs conventionnels "
- FPGA sont pauvres en mémoire, mais ils ont beaucoup de petits blocs, ce qui signifie que leur bande passante interne agrégée peut être énorme, si vous avez assez de petits travaux à faire. La mémoire est aussi très faible latence( cycle d'horloge simple), un peu comme un processeurs L1 cache
- sélections (
if..else
comme la fonctionnalité) peut être très coûteux en termes de zone FPGA - multiplications sont une ressource limitée, il peut parfois payer pour utiliser des algorithmes de le "vieux jours" lorsque les transformateurs n'ont pas de MUL instructions Les largeurs de bits
- peuvent être arbitraires - il n'est pas nécessaire d'utiliser des éléments 32 bits pour représenter le résultat 18 bits d'un calcul. La plupart du temps, les outils peuvent comprendre cela pour vous.
le cycle de développement est également différente.
- les Simulations sont relativement rapides à compiler et à exécuter. Assurez-vous que vous faites beaucoup de ce
- en fait synthétiser et lieu-et-route (les opérations qui vous mènent à un "bitstream" que vous pouvez programmer dans la puce FPGA elle-même) peut être très long-exécution. Ma compilation actuelle (qui est relativement petite) n'a pris que 30 minutes. Vous voulez éviter de faire autant que possible!
Xilinx a un outil appelé Vivado HLS .
il y a aussi une annexe ( XAPP1167 ) qui décrit le ciblage OpenCV sur la plate-forme Zynq à l'aide de l'outil.
Je n'en ai pas l'expérience mais je l'ai apprise lors d'une récente rencontre OpenCV. Voici l'ouverture de l'appnote -
cette note d'application décrit comment la bibliothèque OpenCV peut être utilisée pour développer ordinateur applications de vision sur les appareils Zynq. OpenCV peut être utilisé en de nombreux points de la processus de conception, du prototypage de l'algorithme à l'exécution dans le système. Le code OpenCV peut aussi migrer vers du code C++ synthétisable en utilisant des vidéothèques qui sont livrées avec Vivado HLS. Lorsqu'ils sont intégrés dans un design Zynq, les blocs synthétisés permettent une haute résolution et un cadre des algorithmes de vision par ordinateur doivent être mis en œuvre.
Altera supporte OpenCL qui est une spécification large pour paralléliser ANSI C. Il y a un module OpenCV disponible pour OpenCL. De plus je n'ai pas d'expérience avec ce (encore ;)).
ce lien permet de comprendre L'utilisation D'OpenCL dans le contexte de l'hôte et des accélérateurs matériels tels que les cartes de développement FPGA.
donc si vous voulez prendre la route de L'Altera, alors vous devez envelopper vos fonctions OpenCV dans OpenCL en utilisant le module OpenCV indiqué ci-dessus et ensuite utiliser le SDK D'Altera pour cibler la fpga. Le bon côté de cette route est que si vous constatez que les FPGAs ne sont pas si bons pour votre application, alors vous pouvez cibler L'OpenCL+OpenCV vers une autre plate-forme.
Matlab fournit un support à HDL. Il fournit des paquets où vous pouvez convertir directement un code matlab en code HDL. Vous pouvez également l'utiliser pour la programmation de FPGA.
d'un autre côté, il n'est pas aussi facile de convertir un Opencv en HDL à cause des bibliothèques. Vous pouvez facilement convertir un langage de programmation orienté Obect(Oops) tel que C++ en Verilog / VHDL, mais à cause des " bibliothèques OpenCV", Il va créer des problèmes.