|
ここではalways文の例を紹介いたします。
D−F/F
module D_FF (CLK,DIN,DOUT);
input CLK,DIN;
output DOUT;
reg DOUT;
always@(posedge CLK)begin
DOUT <= DIN;
end
endmodule
[解説] CLKの立ち上がり毎にDOUTにDINを代入する。
また、立ち上がり変化がないときは値を保持する。
同期リセット付きD−F/F
module SYNC_FF
(CLK,RST,D,Q);
input CLK,RST,D;
output Q; reg Q;
always@(posedge CLK)begin
if(RST == 1)
Q <= 0;
else
Q <= D;
end
endmodule
[解説] CLKの立ち上がり毎にRST==1ならばQに0を代入する。
RST==1でないならQにDを代入する。
また、立ち上がり変化がないときは値を保持する。
非同期リセット付きD−F/F
module ASINC_FF (CLK,RST,D,Q);
input CLK,RST,D;
output Q; reg Q;
always@(posedge CLK or posedge RST) begin
if(RST == 1)
Q <= 0;
else
Q <= D;
end
endmodule
[解説] RST==1に変化したときQに0を代入する。
そうでないならCLKの立ち上がり毎にQにDを代入する。
また、立ち上がり変化がないときは値を保持する。
イネーブルD−F/F
module ENA_FF (CLK,CE,D,Q);
input CLK,CE,D;
output Q;
reg Q;
always@(posedge CLK)begin
if(CE == 1)
Q <= D;
end
endmodule
[解説] CLKの立ち上がり毎にCE==1が成立すればQにDを代入する。
それ以外は値を保持する。
ラッチの記述
module LATCH (EN,D,Q);
input EN,D;
output Q;
reg Q;
always@(EN or D)begin
if(EN == 1)
Q <= D;
end
endmodule
[解説] EN==1の間、QにDを代入する。
それ以外は値を保持する。
非同期リセット付き同期式カウンタ
module B_COUNTER4(CLK,RESET,QOUT);
input CLK,RESET;
output [3:0] QOUT;
reg [3:0] QOUT;
always@(posedge CLK or posedge RESET)begin
if(RESET == 1)
QOUT <= 0;
else
QOUT <= QOUT + 1;
end
endmodule
[解説] RST==1に変化したときQに0を代入する。
そうでないならCLKの立ち上がり毎にQOUT<=QOUT+1を行う。
また、立ち上がり変化がないときは値を保持する。 |
|
|