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

时间:2024-03-09 18:43:24

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

 

锁存器

 

寄存器