J'essaie de concevoir un système qui prend une entrée de données de 8 octets et une entrée valide de 8 bits chaque cycle d'horloge où chaque bit de l'entrée valide valide ou invalide un octet de données.Verilog: Alignement d'octets valides et invalides à partir d'une entrée dynamique
input wire [63:0] d_in;
input wire [7:0] v_in;
Le programme devrait traiter d_in en alignant tous les octets valides comme suit.
(où B est un octet valide et X est un octet non valide)
Instance 1:
d_in = B1 B2 X X B3 X B4 B5
d_out = B1 B2 B3 B4 B5 X X X
Instance 2:
d_in = X B1 B2 B3 X B4 B5 B6
d_out = B1 B2 B3 B4 B5 B6 X X
J'ai principalement travaillé avec des algorithmes avant où toute manipulation de bits était la même à chaque itération assign d_out [7:0] = d_in [15:8];
mais le fait que la quantité et l'ordre des octets valides puissent changer avec chaque entrée de données signifie que cette stratégie ne peut pas être utilisée.
Ma question:
Est-il possible de réaliser cette fonction en utilisant Verilog ou VHDL? Si oui, quelqu'un peut-il me diriger vers une solution de haut niveau ou une lecture pertinente afin que je puisse mieux comprendre ce concept. Je pense que si je comprenais à un niveau élevé, je serais capable de le coder mais actuellement je ne suis même pas sûr de ce que j'ai besoin de coder.
Merci Zach
Aïe! S'il n'y a vraiment pas de règle/motif défini et qu'il peut y avoir n'importe quel nombre d'octets à n'importe quelle position - alors vous finirez avec une logique assez profonde. Sachant cela, vous devriez utiliser la capacité de pipelining des FPGA pour pré-calculer certaines logiques imbriquées, en brisant la profondeur et en donnant un peu de temps pour les outils. Cela suppose que vous ne voulez pas mettre en tampon l'entrée et décaler les octets, mais ce ne serait pas non plus trivial. –
@fpga_magik Si cela ne vous dérange pas pouvez-vous développer ce que vous entendez par tampon le signal d'entrée et décaler les octets? Je suis intéressé par cette solution. Merci – Zach