http://www.booran.com/menu/verilog/ff.html
TOP > Verilog > 順序回路 |
非同期SRフリップフロップ
ASICでは、ゲート回路のループ構造が禁止されているので、使用する事はまずない。
非同期SRフリップフロップの例
module SRFF(SB, RB, Q, QB); input SB, RB; output Q, QB; assign Q = ~(SB & QB); assign QB = ~(RB & Q); endmodule
Dラッチ
ゲート入力Gが1の時は、入力Dから出力Qへデータの筒抜け。0の時は、入力Gが0になる直前の値を保持しQに出力。
Dラッチの例
module DLATCH(G, D, Q); input G, D; output Q; reg Q; always@(G or D) if (G) Q <= D; endmodule
Dフリップフロップ
クロックの立ち上がりで入力Dの値を取り込み、出力Qが変化する。出力Qが変化するのは、クロックの立ち上がり時のみ。
Dフリップフロップの例
module DFF (CK, D, Q); input CK, D; output Q; reg Q; always@(posedge CK) Q <= D;
非同期セット/リセット付Dフリップフロップ
クロックとは同期していないセット入力SBとリセット入力RBがあり、リセット動作を行う。
非同期セット/リセット付Dフリップフロップの例
module DFF_SR(CK, D, Q, QB, RB, SB); input CK, D, Q, QB, RB, SB; output Q, QB; reg Q; always@(posedge CK or negedge RB or negedge SB) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; else Q <= D; end assign QB = ~Q; endmodule
非同期セット/リセット付JKフリップフロップ
クロックCKの立ち上がりで変化する出力Qは、JとKの入力により4通りの異なる結果となる。
非同期セット/リセット付JKフリップフロップの例
module JKFF_SR(CK, J, K, Q, RB, SB); input CK, J, K, RB, SB; output Q; reg Q; always@(posedge CK or negedge RB or negedge SB) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; else case ({J, K}) 2'b00 : Q <= Q; 2'b01 : Q <= 0; 2'b10 : Q <= 1; 2'b11 : Q <= ~Q; endcase end endmodule
非同期セット/リセット付Tフリップフロップ
クロックの立ち上がりの度に出力が反転するFF。(トリガFFとも呼ばれる)
非同期セット/リセット付JKフリップフロップの例
module JKFF_SR(CK, J, K, Q, RB, SB); input CK, J, K, RB, SB; output Q; reg Q; always@(posedge CK or negedge RB or negedge SB) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; else case ({J, K}) 2'b00 : Q <= Q; 2'b01 : Q <= 0; 2'b10 : Q <= 1; 2'b11 : Q <= ~Q; endcase end endmodule
非同期セット/リセット付Tフリップフロップ
クロックの立ち上がりの度に出力が反転するFF。(トリガFFとも呼ばれる)
非同期セット/リセット付Tフリップフロップの例
module TFF(CK, Q, RB); input CK, RB; output Q; reg Q; always @(posedge CK or negedge RB) begin if (RB == 0) Q <= 0; else Q <= ~Q; end endmodule
同期型SRフリップフロップ
セット・リセット動作もクロックに同期しているFF。
同期型SRフリップフロップの例
module SRFF_sync(CK, SB, RB, Q, QB); input CK, SB, RB; output Q, QB; reg Q; always@(posedge CK) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; end assign QB = ~Q; endmodule
同期セット/リセット付Dフリップフロップ
セット・リセット動作もクロックに同期しているDFF。ロード(LD)入力が1のときに入力Dの内容が取り込まれる。
同期セット/リセット付Dフリップフロップの例
module DFF_sync (CK, D, LD, Q, QB, RB, SB); input CK, D, LD, RB, SB; output Q, QB; reg Q; always@(posedge CK) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; else if (LD) Q <= D; end assign QB = ~Q; endomodule
同期セット/リセット付JKフリップフロップ
セット・リセット動作もクロックに同期しているJKFF
同期セット/リセット付JKフリップフロップの例
module JKFF_sync(CK, J, K, Q, RB, SB); input CK, J, K, RB, SB; output Q; reg Q; always@(posedge CK) begin if (RB == 0) Q <= 0; else if (SB == 0) Q <= 1; else case ({J, K}) 2'b00 : Q <= Q; 2'b01 : Q <= 0; 2'b10 : Q <= 1; 2'b11 : Q <= ~Q; endcase end endmodule
同期セット/リセット付Tフリップフロップ
セット・リセット動作もクロックに同期しているTFF
同期セット/リセット付Tフリップフロップの例
module TFF_sync(CK, EN, Q, RB); input CK, EN, RB; output Q; reg Q; always @(posedge CK) begin if (RB == 0) Q <= 0; else if (EN) Q <= ~Q; end endmodule |
沒有留言:
張貼留言