C'est la mémoire
élémentaire. Son comportement consiste à
recopier l'état de l'entrée vers la sortie sur le signal
actif d’horloge (ici le front montant). Elle est
appelée « Latch » dans la littérature
anglosaxonne.
Ce comportement se traduit
en Verilog par :
module D1bit(d,
clk, Q) ;
input d, clk ;
output Q ;
reg Q ;
always @ (posedge clk)
Q = d ;
endmodule
La bascule s’étend
facilement à un nombre défini de bits :
module D8bit(d,
clk, Q) ;
input [7 :0] d ;
input clk ;
output [7 :0] Q ;
reg [7 : 0] Q ;
always @ (posedge clk)
Q = d ;
endmodule
Attention : la ligne «
input [7 :0] d, clk ; » déclarerait 2 bus 8
bits appelés d et clk.
Elle peut être paramétrable
grâce au mot clé « parameter ». Ceci
donne :
module Dnbit(d, clk, Q) ;
parameter n = 17;
input [n :0] d ;
input clk ;
output [n :0] Q ;
reg [n : 0] Q ;
always @ (posedge clk)
Q = d ;
endmodule
Il est facile de réaliser
une bascule fonctionnant sur un front descendant simplement
en remplaçant posedge par negedge.
Il est aussi facile de créer
une bascule active sur niveau.
Attention au piège !
En pensant niveau, on peut penser qu'un bloc avec « always@
(clk)... » est la solution. C'est une erreur, le traitement
n'est effectué que sur les changements d'état
de clk (passage de 1 à 0 et de 0 à 1) et non
tant que clk est égal à 1.
La solution consiste à
avoir un bloc toujours effectué et une action
conditionnelle à l'intérieur de ce bloc. Ceci
est illustré par le programme suivant qui permet
de faire un latch actif sur niveau 1 :
module D1bit(d, clk,
Q) ;
input d, clk ;
output Q ;
reg Q ;
always
if (clk)
Q = d ;
endmodule