几种触发器的Verliog语言描述

1.D触发器

module D_flip_flop(

    input [1:0] d,

    input clk,

    output reg[1:0] q,

    output reg[1:0] qb

    );

      always @(posedge clk)            //时钟上升沿触发D触发器

             begin

                    q<= d ;

                    qb<= ~d ;

             end

endmodule

2.RS触发器

module SY_RS_FF ( R, S, CLK, Q, QB ); //模块名及参数定义,范围至endmodule。
  input R, S, CLK;         //输入端口定义
  output Q, QB;          //输出端口定义
  reg Q;              //寄存器定义 
  assign QB = ~Q;         //assign语句,QB=/Q。
  always @( posedge CLK )     //在CLK的上跳沿,执行以下语句。
  case ({ R ,S })         //case语句,至于endcase为止。
    1:Q <= 1;          //当R,S的组合为01,则令Q=1。
    2:Q <= 0;          //当R,S的组合为01,则令Q=1。
    3:Q <= 1'bx;         //当R,S的组合为11,则令Q为1bit的数,数值为不定(x)。
  endcase             //case语句结束

endmodule              //模块结束


3.JK触发器

module JK(clk,j,k,q,r,s,seg); input clk,j,k,r,s; output q; 

output [7:0]seg; reg q=0; reg [7:0]seg; 

always @(posedge clk) 

begin 

if(r==1 && s==0) 

begin 

q<=0; 

end 

if(r==0 && s==1) 

begin 

q<=1; 

end 

if(r==0 && s==0) 

begin 

if(j==1 && k==1) 

begin

 q<=~q; 

end 

if(j==1 && k==0)

 begin q<=1; 

end 

if(j==0 && k==0) 

begin 

q<=q;

end 

if(j==0 && k==1) 

begin q<=0; 

end

 end

 end

endmoudle


4.T 触发器

input T,

input clk,

output Q,

output  QB,


always@(posedge clk)

begin

        if(~reset)

        begin

        Q<=1'b0;

        end

       else

        begin

                if(T)

                Q<=~Q;

                QB<=~Q;

                else

                begin

                  Q<=Q;

                  QB<=~Q;

                end

        end

end

猜你喜欢

转载自blog.csdn.net/fzhykx/article/details/80169078