2012年10月11日 星期四

Verilog > 順序回路

源自
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

沒有留言:

張貼留言

WOKWI DHT22 & LED , Node-Red + SQLite database

 WOKWI DHT22 & LED , Node-Red + SQLite database Node-Red程式 [{"id":"6f0240353e534bbd","type":"comment&...