Một số ví dụ về T FLIP FLOP dùng verilog

Lu ROm

Administrator
Staff member
25 Tháng bảy 2014
481
119
43
32
One piece
vimach.net
- Khi nối chung 2 ngõ vào JK như hình dưới thì sẽ được FF T : chỉ có một ngõ vào T, ngõ ra sẽ bị lật lại trạng thái ban đầu khi ngõ T tác động và mỗi khi có cạnh sườn lên hay xuống của xung ck.
- Kí hiệu khối và bảng trạng thái của FF T như sau :
upload_2016-6-2_16-19-37.png

h31FFTsong0.gif

- FF T được sử dụng chính để tạo mạch đếm chia 2. Khi T nối lên mức 1 (Vcc) hay để trống, xung kích lần lượt đưa vào ngõ Ck. Nhận thấy ngõ ra Q sẽ lật trạng thái mỗi lần ck xuống hay lên. Tần số xung ngõ ra Q chỉ còn bằng một nửa tần số ngõ vào ck nếu đưa Q này tới các tầng FF sau nữa thì lần lượt tần số f sẽ lại được chia đôi. Đây là nguyên lí chính của mạch đếm sẽ được xét đến ở phần sau.
upload_2016-6-2_16-20-26.png

- Một số ví dụ về T FLIP FLOP dung verilog.
++ Ví dụ code Verilog cho T FLIP FLOP tích cực ở sườn dương,có reset.

Mã:
module TFF (
  data  , // Data Input
   clk   , // Clock Input
  reset , // Reset input
  q       // Q output
);
//-----------Input Ports---------------
input data, clk, reset ;
  //-----------Output Ports---------------
output q;
//------------Internal Variables--------
  reg q;
//-------------Code Starts Here---------
always @ ( posedge clk or posedge reset)
if (reset) begin
   q <= 1'b0;
end else if (data) begin
   q <=  ! q;
  end

endmodule //End Of Module tff_async_reset
++ Ví dụ code Verilog cho T FLIP FLOP tích cực ở sườn dương.
Mã:
module TFF (
  data  , // Data Input
   clk   , // Clock Input
  q       // Q output
);
//-----------Input Ports---------------
input data, clk ;
  //-----------Output Ports---------------
output q;
//------------Internal Variables--------
  reg q;
//-------------Code Starts Here---------
initial q = 0;
always @ (posedge clk)
  begin
  if (data)
   q <=  ! q;
  end

endmodule //End Of Module tff_async

++ Ví dụ code Verilog cho T FLIP FLOP tích cực ở sườn âm có reset.

Mã:
module TFF(
  data  , // Data Input
   clk   , // Clock Input
  reset , // Reset input
  q       // Q output
);
//-----------Input Ports---------------
input data, clk, reset ;
  //-----------Output Ports---------------
output q;
//------------Internal Variables--------
  reg q;
//-------------Code Starts Here---------
always @ ( negedge clk or posedge reset)
if (reset) begin
   q <= 1'b0;
end else if (data) begin
   q <=  ! q;
  end

endmodule //End Of Module tff_async_reset
 
  • Like
Reactions: nguyenhonghai1997bg
  • Like
Reactions: nguyenhonghai1997bg
test cho T ff tích cực ở sườn dương,có reset
Mã:
`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:   18:20:38 06/03/2016
// Design Name:   TFF
// Module Name:   C:/Users/kimlu/Downloads/New folder/TFF/TFF_tb.v
// Project Name:  TFF
// Target Device: 
// Tool versions: 
// Description:
//
// Verilog Test Fixture created by ISE for module: TFF
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////

module TFF_tb;

    // Inputs
    reg data;
    reg clk;
    reg reset;

    // Outputs
    wire q;

    // Instantiate the Unit Under Test (UUT)
    TFF uut (
        .data(data),
        .clk(clk),
        .reset(reset),
        .q(q)
    );

    initial begin
        // Initialize Inputs
         reset = 1'b0;
        clk =1'b0;
        data =1'b0;
        end
        // Wait 100 ns for global reset to finish
    always #5 clk=~clk;

//Stimulus
initial
begin
    #5        reset = 1'b1;
    #20 data = 1'b1;
    #50        reset = 1'b0;
            #20 data = 1'b1;
#60 data = 1'b0;
#50 data = 1'b1;
#20 data = 1'b0;
    end     
        // Add stimulus here

     
endmodule
 
T-FF T FLIP FLOP tích cực ở sườn dương.
Mã:
`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:   18:20:38 06/03/2016
// Design Name:   TFF
// Module Name:   C:/Users/kimlu/Downloads/New folder/TFF/TFF_tb.v
// Project Name:  TFF
// Target Device: 
// Tool versions: 
// Description:
//
// Verilog Test Fixture created by ISE for module: TFF
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////

module TFF_tb;

    // Inputs
    reg data;
    reg clk;

    // Outputs
    wire q;

    // Instantiate the Unit Under Test (UUT)
    TFF uut (
        .data(data),
        .clk(clk),
        .reset(reset),
        .q(q)
    );

    initial begin
        // Initialize Inputs
        clk =1'b0;
        data =1'b0;
        end
        // Wait 100 ns for global reset to finish
    always #5 clk=~clk;

//Stimulus
initial
begin    
    #20 data = 1'b1;
            #20 data = 1'b1;
#60 data = 1'b0;
#50 data = 1'b1;
#20 data = 1'b0;
    end     
        // Add stimulus here

     
endmodule
 
  • Like
Reactions: nguyenhonghai1997bg
Test T FLIP FLOP tích cực ở sườn âm có reset.
Mã:
`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:   18:20:38 06/03/2016
// Design Name:   TFF
// Module Name:   C:/Users/kimlu/Downloads/New folder/TFF/TFF_tb.v
// Project Name:  TFF
// Target Device: 
// Tool versions: 
// Description:
//
// Verilog Test Fixture created by ISE for module: TFF
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////

module TFF_tb;

    // Inputs
    reg data;
    reg clk;
    reg reset;

    // Outputs
    wire q;

    // Instantiate the Unit Under Test (UUT)
    TFF uut (
        .data(data),
        .clk(clk),
        .reset(reset),
        .q(q)
    );

    initial begin
        // Initialize Inputs
         reset = 1'b0;
        clk =1'b1;
        data =1'b0;
        end
        // Wait 100 ns for global reset to finish
    always #5 clk=~clk;

//Stimulus
initial
begin
    #5        reset = 1'b1;
    #20 data = 1'b1;
    #50        reset = 1'b0;
            #20 data = 1'b1;
#60 data = 1'b0;
#50 data = 1'b1;
#20 data = 1'b0;
    end     
        // Add stimulus here

     
endmodule
 
  • Like
Reactions: nguyenhonghai1997bg