zoukankan      html  css  js  c++  java
  • Verilog中的三种简单触发器

    时序逻辑中的三种简单触发器,使用Verilog语言编写,用来熟悉语法最好不过了。

    D触发器

    module D_LOCK(D,CLK,Q,NQ);  //正边沿D触发
        output Q;
        output NQ;
        input D;
        input CLK;
        //时序赋值
        reg Q;
        assign NQ=~Q;
        
        //上升沿触发
        always @(posedge CLK)
            begin
                Q<=D;
            end
        
    endmodule
    
    //a simple testbench
    module d_lock_tb();
        reg d,clk;
        wire q,nq;
        
        D_LOCK tb(
               .D(d),
               .CLK(clk),
               .Q(q),
               .NQ(nq)
        );
        
        initial
            begin
                clk=0;
             end
         always #10 clk=~clk;   //内部时钟周期20ns
         
         initial
            begin
                #20 d=0;
                #20 d=1;
                #20 d=1'bx;
                #20 $finish;
             end
    endmodule
    

     RS触发器

    module RS_LOCK(R,S,CLK,Q,NQ);   //边沿触发的RS触发器
        output Q;
        output NQ;
        input CLK;
        input R;
        input S;
        reg Q;
        //上升沿触发
        assign NQ=~Q;
        always@(posedge CLK)
            case({R,S})
                2'b01: Q<=1;
                2'b10: Q<=0;
                2'b11: Q<=1'bx;
                default:
            endcase
    endmodule
    
    //testbench
    module rs_lock_tb();
        reg clk,r,s;
        wire q,nq;
        RS_LOCK uut(
                .R(r),
                .S(s),
                .CLK(clk),
                .Q(q),
                .NQ(nq)
                );
         initial
            begin 
                clk=0;
            end
            
        always #10 clk=~clk;    //内部时钟
        
        initial
            begin
                r=0;s=0;
                #10 r=0;s=1;
                #20 r=1;s=0;
                #20 r=1;s=1;
                #20 $finish;
             end
                
    endmodule
    

    JK触发器

    module JK_LOCK(J,K,CLK,Q,NQ);   //边沿触发的JK触发器
        output Q;
        output NQ;
        input CLK;
        input J;
        input K;
        reg Q;
        //上升沿触发
        assign NQ=~Q;
        always@(posedge CLK)
            case({J,K})
                2'b00: Q<=Q;
                2'b01: Q<=0;
                2'b10: Q<=1;
                2'b11: Q<=~Q;
                default:Q<=Q;
            endcase
    endmodule
    
    module jk_lock_tb();
        reg clk,j,k;
        wire q,nq;
        JK_LOCK uut(
                .J(j),
                .K(k),
                .CLK(clk),
                .Q(q),
                .NQ(nq)
                );
         initial
            begin 
                clk=0;
            end
            
        always #10 clk=~clk;    //内部时钟
        
        initial
            begin
                #20 j=0;k=0;
                #20 j=0;k=1;
                #20 j=1;k=0;
                #20 j=1;k=1;
                #20 $finish;
             end
                
    endmodule
    

    T触发器

    module T_LOCK(T,CLK,Q,NQ);  //正边沿T触发
        output Q;
        output NQ;
        input T;
        input CLK;
        //时序赋值
        reg Q;
        assign NQ=~Q;
        
        //上升沿触发
        always @(posedge CLK)
            begin
                Q<=~T;
            end
        
    endmodule
    
    module t_lock_tb();
        reg t,clk;
        wire q,nq;
        
        T_LOCK tb(
               .T(t),
               .CLK(clk),
               .Q(q),
               .NQ(nq)
        );
        
        initial
            begin
                clk=0;
             end
         always #10 clk=~clk;   //内部时钟周期20ns
         
         initial
            begin
                #20 t=0;
                #20 t=1;
                #20 t=1'bx;
                #20 $finish;
       end
    endmodule
    

      

     

  • 相关阅读:
    Properties类读取配置文件
    HashMap,Hashtable,TreeMap ,Map
    观察者模式(Observer和Observable实现)
    HashSet和TreeSet
    ArrayList,Vector,LinkedList
    定时调度(定时器)的使用
    序列化与反序列化
    对象比较器:Comparable和Comparator
    final finally finalize 区别
    (转载)oracle 在一个存储过程中调用另一个返回游标的存储过程
  • 原文地址:https://www.cnblogs.com/cswbr/p/12607363.html
Copyright © 2011-2022 走看看