跳转到主要内容

几种触发器的Verliog语言描述

demi 提交于

<font color="#9a9a9a">来源:CSDN</font>
<font color="#9a9a9a">作者:fzhykx</font>

<font color="red">1. D触发器:</font>

<pre>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&lt;= d ;
                    qb&lt;= ~d ;
             end
endmodule</pre>

<font color="red">2. RS触发器:</font>

<pre>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 &lt;= 1;          //当R,S的组合为01,则令Q=1。
    2:Q &lt;= 0;          //当R,S的组合为01,则令Q=1。
    3:Q &lt;= 1'bx;         //当R,S的组合为11,则令Q为1bit的数,数值为不定(x)。
  endcase             //case语句结束

endmodule              //模块结束</pre>

<font color="red">3. JK触发器:</font>

<pre>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&lt;=0; 
end 
if(r==0 && s==1) 
begin 
q&lt;=1; 
end 
if(r==0 && s==0) 
begin 
if(j==1 && k==1) 
begin
 q&lt;=~q; 
end 
if(j==1 && k==0)
 begin q&lt;=1; 
end 
if(j==0 && k==0) 
begin 
q&lt;=q;
end 
if(j==0 && k==1) 
begin q&lt;=0; 
end
 end
 end
endmoudle</pre>

<font color="red">4. T 触发器:</font>

<pre>input T,
input clk,
output Q,
output  QB,
always@(posedge clk)
begin
        if(~reset)
        begin
        Q&lt;=1'b0;
        end
       else
        begin
                if(T)
                Q&lt;=~Q;
                QB&lt;=~Q;
                else
                begin
                  Q&lt;=Q;
                  QB&lt;=~Q;
                end
        end
end</pre>

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