我是靠谱客的博主 唠叨狗,最近开发中收集的这篇文章主要介绍简单时序逻辑电路的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,其他完全相同)

 

锁存器

 

寄存器

最后

以上就是唠叨狗为你收集整理的简单时序逻辑电路的verilog实现,包括D触发器、JK触发器、锁存器、寄存器、的全部内容,希望文章能够帮你解决简单时序逻辑电路的verilog实现,包括D触发器、JK触发器、锁存器、寄存器、所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部