几种触发器的Verliog语言描述

来源:CSDN
作者:fzhykx

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

版权声明:本文为CSDN博主「fzhykx」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fzhykx/article/details/80169078