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,其他完全相同)

    锁存器

    寄存器

  • 相关阅读:
    BOM弹窗 滚动条
    标签占位信息
    标签样式操作
    Keepalived入门学习
    史上最全Redis面试题(2020最新版)
    一文带你读懂zookeeper在大数据生态的应用
    详细解析虚拟化的起源和分类
    干货 | Nginx负载均衡原理及配置实例
    干货 | 一文彻底读懂nginx中的location指令
    史上最全Linux面试题(2020最新版)
  • 原文地址:https://www.cnblogs.com/youngforever/p/3135892.html
Copyright © 2011-2022 走看看