A /Avec des ET, OU, NON
module OUX2_1(e1, e2, S);
input e1, e2 ;
output S ;
assign S = (e1 & !e2) | (!e1 &
e2) ;
endmodule
B / OU Exclusif à 8 bits
On ne va pas se baser sur les
équations à 8 entrées (trop long). Par-contre en
instanciant le module précédent, la fonction OU Exclusif
étant associative, on peut réaliser la programmation
suivante :
module OUX8_1(e1, e2, e3, e4, e5, e6, e7,
e8, S) ;
input e1, e2, e2, e3, e4, e5, e6, e7,
e8 ;
output S ;
wire n1, n2, n3, n4, n5, n6 ;
OUX2_1 premierOUX (e1, e2, n1)
;
OUX2_1 deuxiemeOUX (e3, e4, n2)
;
OUX2_1 troisiemeOUX (e5, e6, n3)
;
OUX2_1 quatriemeOUX (e7, e8, n4)
;
OUX2_1 cinquiemeOUX (n1 , n2, n5)
;
OUX2_1 sixiemeOUX (n3 , n4, n6)
;
OUX2_1 septiemeOUX (n5 , n6, S)
;
endmodule
C / Avec l'opérateur OU Exclusif
module OUX2_1(e1, e2, S) ;
input e1, e2 ;
output S ;
assign S = e1 ^ e2 ;
endmodule
D / OU Exclusif à 8 bits
module OUX8_1(e1, e2, e3, e4, e5, e6, e7,
e8, S) ;
input e1, e2, e2, e3, e4, e5, e6, e7,
e8 ;
output S ;
assign S = e1 ^ e2 ^ e3 ^ e4 ^ e5 ^ e6
^e7 ^ e8 ;
endmodule
Ou encore (en réfléchissant
quelque peu) :
module OUX8_1(e1, e2, e3, e4, e5, e6, e7,
e8, S) ;
input e1, e2, e2, e3, e4, e5, e6, e7,
e8 ;
output S ;
// assign S = (e1 + e2 + e3 + e4 + e5 + e6
+e7 + e8 + 0) % 2 ; Pour comprendre
assign S =
e1 + e2 + e3 + e4 + e5 + e6 + e7 + e8 ;
// La solution : additions sur 1 bit à cause de S
endmodule
En utilisant l'opérateur de réduction
module OUX8_1(e, S) ;
input [8 : 1 ] e ;
output S ;
assign S = ^e ;
endmodule
E / Description comportementale
module OUX2_1(e1, e2, S) ;
input e1, e2 ;
output S ;
reg S ;
always
if ((e1 && !e2) || (e2 &&
!e1))
S = 1 ;
else
S = 0 ;
endmodule
F / Par table de vérité
module OUX2_1(e1, e2, S) ;
input e1, e2 ;
output S ;
reg S ;
always
case ({e1, e2})
'b00 : S = 1 ;
'b11 : S = 1 ;
'b01 : S = 0 ;
'b10 : S = 0 ;
endcase
endmodule