2017-01-30 4 views
1

Je suis en train de mettre en oeuvre un registre à décalage à rétroaction linéaire avec une largeur et des coefficients paramétrés:Verilog: attribuer une somme pondérée de longueur paramétrée

// ... 
    parameter width = 16; 
    parameter [width-1:0] coeff = 16'b1110101100110110; 
// ... 

Est-il un moyen de affecter XOR à chaîne à l'entrée flipflop, à savoir ce qui est une façon raisonnable de mettre en œuvre quelque chose comme

assign input_wire = (coeff[0] & flops[0]) xor ... xor (coeff[width-1] & flops[width-1]); 

La manière évidente mais illégale serait d'utiliser une boucle for. Existe-t-il un moyen de le faire en dehors d'un bloc permanent?

Merci

+0

Vous pouvez jeter un oeil à cette question: http://stackoverflow.com/questions/17159397/verilog-adding-individual-bits-of-a-register-combinational-logic-register-wid qui offre une solution à ton problème. Une façon de le faire dans 'une ligne' serait de mettre en œuvre un module paramétré qui effectue les calculs – Krouitch

Répondre

0

Bitwise ET et XOR-opérateur unaire faire l'affaire:

assign input_wire = ^(coefficients[width-1:0] & flops[width-1:0]); 

Le niveau du bit ne la pondération des sorties de flip-flop.