Verilog: XOR tous les signaux du vecteur ensemble

13

Disons qu'on me donne un vecteur wire large_bus[63:0]de largeur 64. Comment puis-je XOR les signaux individuels ensemble sans les écrire tous:

assign XOR_value = large_bus[0] ^ large_bus[1] ^ ... ^ large_bus[63] ?

Je suis particulièrement intéressé à le faire pour les vecteurs où la largeur est spécifiée par a localparam.

Randomblue
la source

Réponses:

14

Les opérateurs binaires comme &, |, ^ et quelques autres peuvent également être unaires dans verilog, ce qui est assez pratique. Ils effectuent des opérations au niveau du bit sur l'opérande et renvoient une valeur de bit unique. Voir par exemple les opérateurs de réduction sur asic-world.com.

reg [63:0] large_bus;

wire xor_value;
assign xor_value = ^large_bus;
Épine
la source