zoukankan      html  css  js  c++  java
  • 简单时序逻辑电路的verilog实现,包括D触发器、JK触发器、锁存器、寄存器、

    2013-06-14 16:49:12

    简单时序逻辑电路的verilog实现,包括D触发器、JK触发器、锁存器、寄存器、

    简单时序逻辑电路的实现

    D触发器(带有同步复位、置位或者异步复位、置位)

    RTL描述:

     1 module dff(
     2                 clk,
     3                 rst_n,
     4                 set_n,
     5                 din,
     6                 q,
     7                 q_n
     8                      );
     9 input clk;
    10 input rst_n;
    11 input set_n;
    12 input din;
    13 
    14 output q;
    15 output q_n;
    16 
    17 reg q;
    18 reg q_n;
    19 /*
    20 always@(posedge clk)
    21     if(!rst_n)            //同步清零
    22         begin
    23             q <= 1'b0;
    24             q_n <= 1'b1;
    25         end
    26     else if(!set_n)    //同步置位
    27         begin
    28             q <= 1'b1;
    29             q_n <= 1'b0;
    30         end
    31     else
    32         begin
    33             q <= din;
    34             q_n <= ~din;
    35         end
    36         */
    37 
    38 always@(posedge clk or negedge rst_n or negedge set_n)
    39     if(!rst_n)            //异步清零
    40         begin
    41             q <= 1'b0;
    42             q_n <= 1'b1;
    43         end
    44     else if(!set_n)    //异步置位
    45         begin
    46             q <= 1'b1;
    47             q_n <= 1'b0;
    48         end
    49     else
    50         begin
    51             q <= din;
    52             q_n <= ~din;
    53         end
    54         
    55 endmodule

    同步复位、置位RTL图;

    (可以看到器件本身的D触发器带有复位、置位端,但是高电平有效的,代码中是低电平有效,因此要经过一个非门;另外,期间本身的D触发器输出只有Q,没有~Q,因此需要两个D触发器实现所需功能

    若用异步复位与置位,综合结果:

    可以看到,所用到的D触发器是不同的,此处为fdcp,而同步时为fdrs,是不同的

    JK触发器(带有同步复位、置位或者异步复位、置位)

    RTL描述:

     1 module jk_ff(clk,
     2                 rst_n,
     3                 set_n,
     4                 j,
     5                 k,
     6                 q
     7                      );
     8 input clk;
     9 input rst_n;
    10 input set_n;
    11 input j;
    12 input k;
    13 
    14 output q;
    15 
    16 reg q;
    17 
    18 always@(posedge clk)
    19     if(!rst_n)            //同步清零
    20         begin
    21             q <= 1'b0;
    22         end
    23     else if(!set_n)    //同步置位
    24         begin
    25             q <= 1'b1;
    26         end
    27     else
    28         begin
    29             case({j,k})
    30                 2'b00 : q <= q;
    31                 2'b01 : q <= 0;
    32                 2'b10 : q <= 1;
    33                 default : q <= ~q;
    34             endcase
    35         end
    36 /*
    37 always@(posedge clk or negedge rst_n or negedge set_n)
    38     if(!rst_n)            //异步清零
    39         begin
    40             q <= 1'b0;
    41         end
    42     else if(!set_n)    //异步置位
    43         begin
    44             q <= 1'b1;
    45         end
    46     else
    47         begin
    48             case({j,k})
    49                 2'b00 : q <= q;
    50                 2'b01 : q <= 0;
    51                 2'b10 : q <= 1;
    52                 default : q <= ~q;
    53             endcase
    54         end
    55 */        
    56 endmodule

    同步复位、置位RTL图:

    (异步复位、置位RTL图除了将fdrs改为fdcp,其他完全相同)

    锁存器

    寄存器

  • 相关阅读:
    HTTP Basic 验证客户端 C#实现笔记
    泗洪高薪行业
    C#中Math的使用总结
    Android音频底层调试-基于tinyalsa
    我看项目管理第一回:认识利益相关方,提高思想意识
    【剑指Offer学习】【面试题19 :二叉树的镜像】
    算法
    zTree实现地市县三级级联DAO接口实现
    Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
    正尝试在 OS 载入程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起。
  • 原文地址:https://www.cnblogs.com/youngforever/p/3135892.html
Copyright © 2011-2022 走看看