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

鎖存器
寄存器
