Une façon qui obtient tout fait en parallèle:
Vous devez construire un arbre de comparateurs et multiplexeurs:
- Commencez avec un bloc qui prend deux valeurs et deux indices et sort l'indice et la valeur de la plus grande. Un comparateur, 2 muxes par bloc.
- Au premier niveau de votre arbre, vous avez 4 de ces blocs d'alimentation en
- un second niveau de 2 de ces blocs, dont les résultats alimentent
- un bloc final qui produit vos réponses
Cela peut être pour que vous puissiez pipeliné verser des données à travers aussi vite que vous le souhaitez. Mais ça va utiliser une bonne quantité de ressources. Quelle est la largeur de vos signaux? Chaque comparateur est de 1 LUT4 par bit et un mux de 2: 1 est de 1 LUT4 par bit.
Vous pouvez également utiliser un compteur pour sélectionner successivement chacune de vos valeurs. Si elle est plus grande que la plus grande, placez la valeur dans votre "plus grand" registre et verrouillez le compteur dans un registre "plus grand index". Réinitialiser le "plus grand" registre à la plus petite valeur chaque fois que votre compteur réinitialise.
Cela prendra autant de cycles d'horloge que vous avez le signal (8 dans votre cas)
Si vous avez la boîte à outils Signal Processing Blockset installé, il y a minimum/blocs maximum dans la bibliothèque statistique qui génère l'index de la signaler avec la valeur min/max. – Praetorian
Salut, je ne peux pas utiliser les blocs Simulink comme les blocs Maximum/Minimum puisque j'utilise uniquement la bibliothèque Xilinx. Le modèle sera finalement mis en USRP2 donc je ne peux pas utiliser de blocs Simulink pour mon modèle. – Kiran