플립플롭의 verilog HDL설계

2010, Nov 10    

다음에 주어진 대로 VHDL로 설계하시오
1. JK플립플롭을 설계하고, 입출력파형이 정상임을 확인한다.
2. JK플립플롭을 부품으로하여 D플립플롭을 설계하고, 입출력파형이 정상임을 확인한다.
3. JK플립플롭을 부품으로하여 T플립플롭을 설계하고, 입출력파형이 정상임을 확인한다.


// Functional description of JK flip-flop
module JK_FF (J,K,CLK,Qjk,Qjknot);
   output Qjk,Qjknot;
   input  J,K,CLK;
   reg  Qjk;
   assign Qjknot = ~ Qjk ;
   always @ (posedge CLK) 
           case ({J,K})
             2'b00: Qjk = Qjk;
             2'b01: Qjk = 1'b0;
             2'b10: Qjk = 1'b1;
             2'b11: Qjk = ~ Qjk;
           endcase
endmodule

// Functional description of D flip-flop
module D_FF (D,CLK,Qd,Qdnot);
   output Qd,Qdnot;
   input  D,CLK;
   wire Dnot;
   assign Dnot = ~ D ;
   JK_FF D1 (D,Dnot,CLK,Qd,Qdnot);
endmodule
// Functional description of T flip-flop
module T_FF (T,CLK,Qt,Qtnot);
   output Qt,Qtnot;
   input  T,CLK;
   wire Tw;
   assign Tw = T ;
   JK_FF T1 (T,Tw,CLK,Qt,Qtnot);
endmodule
//*******************************************
//test 모듈
//*******************************************
`timescale 1ps / 1ps

module test;
  wire Qjk,Qjknot,Qt,Qtnot,Qd,Qdnot;  
  reg CLK;  
  reg J; 
  reg K;
  reg T;
  reg D;
  

 JK_FF jkff(J,K,CLK,Qjk,Qjknot);
 T_FF tff(T,CLK,Qt,Qtnot);
 D_FF dff(D,CLK,Qd,Qdnot);



initial
 begin
    J= 1'b0; K=1'b0; D=1'b0; T=1'b0;
    #100
    J= 1'b0; K=1'b0; D=1'b0; T=1'b1;
    #100
    J= 1'b0; K=1'b0; D=1'b1; T=1'b0;
    #100
    J= 1'b0; K=1'b0; D=1'b1; T=1'b1;
    #100

    J= 1'b0; K=1'b1; D=1'b0; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b0; K=1'b1; D=1'b0; T=1'b1;
    #100
    CLK= 1'b0; J= 1'b0; K=1'b1; D=1'b1; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b0; K=1'b1; D=1'b1; T=1'b1;
    #100

    CLK= 1'b0; J= 1'b1; K=1'b0; D=1'b0; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b1; K=1'b0; D=1'b0; T=1'b1;
    #100
    CLK= 1'b0; J= 1'b1; K=1'b0; D=1'b1; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b1; K=1'b0; D=1'b1; T=1'b1;
    #100

    CLK= 1'b0; J= 1'b1; K=1'b1; D=1'b0; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b1; K=1'b1; D=1'b0; T=1'b1;
    #100
    CLK= 1'b0; J= 1'b1; K=1'b1; D=1'b1; T=1'b0;
    #100
    CLK= 1'b1; J= 1'b1; K=1'b1; D=1'b1; T=1'b1;
    #100

    $finish;
    end
endmodule