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;
    [email protected](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;
    [email protected](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;     endendmodule

  

 

原文地址:https://www.cnblogs.com/cswbr/p/12607363.html

时间: 2024-11-05 23:23:57

Verilog中的三种简单触发器的相关文章

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发中三种简单的动画设置

iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动

面试中常常问的三种简单排序方法

/** * 三种简单的排序 * 本类中全部举例都是依照从小到大进行排序 * @author caohaicheng * @time 2014-07-24 */ public class SortDemo { //int[] score={7,10,35,21,78,2,1,9}; public static void main(String[] args) { SortDemo sd=new SortDemo(); System.out.println("********************

JavaScript中的三种弹出对话框

JavaScript中的三种弹出对话框 *****本文来自互联网****** 学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom

.NET中的三种接口实现方式

摘自:http://www.cnblogs.com/zhangronghua/archive/2009/11/25/1610713.html 一般来说.NET提供了三种不同的接口实现方式,分别为隐式接口实现.显式接口实现.混合式接口实现.这三种方式各有各的特点. 首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式.下面让我们来看一个隐式接口实现的例子: using System; internal class MyClass { public

.NET中的三种Timer的区别和用法(转)

最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是:  //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用.  System.Windows.Forms.Timer  // 2.提供以指定的时间间隔执行方法的机制.无法继承此类.  System.Threading.Timer  //3.在应用程序中生成定期事件.  System.Timers.Timer  这三个定时器位

算法:三种简单排序算法

排序算法比较常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和快速排序算法等.今天先学习一下前面三种比较简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等,排序过后仍然是原来的顺序则为稳定排序. ②内部排序:排序过程都在内存中进行:外部排序:需要对外存进行访问的排序过程. ③内排序算法性能因素:1.时间性能,比较与移动:2.辅助空间:3.算法复杂性 实例:冒泡排序.简单选择排序与直接插入排序 #include "stdio.h" #define

c#语言中的三种循环

什么是编程 编程就是使用一种程序设计语言编写程序代码,让计算机解决某个问题的过程.根据这个定义来看,根据使用的程序设计语言不同,编写的程序就不同. 关于c#语言: C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域. 正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选--无论是高级的商业对象还是系统级的应用程序.使用简单的C#语言结构