• 【FPGA】Verilog:实现 RS 触发器 | Flip-Flop | 使用 NOR 的 RS 触发器 | 使用 NAND 的 RS 触发器


    目录

    0x00 RS 触发器(RS Flip-Flop)

    0x01 实现 RS 触发器

    0x02 使用 NOR 的 RS 触发器

    0x03 使用 NAND 的 RS 触发器


    0x00 RS 触发器(RS Flip-Flop)

    触发器(Flip-Flop)是一种带有时钟的二进制存储设备,用于存储 0 和 1 的值。只有在时钟信号的边沿转换时,存储的 0 或 1 的值才会改变。

    从 1 到 0 的转换称为下降沿触发,而从 0 到 1 的转换称为上升沿触发。触发器中存储的值在触发器的输入数据和先前存储的数据值的影响下完成这些转换。

    S(设置)输入会导致触发器在下一个有效时钟沿存储一个 1,而 R(复位)输入会导致触发器存储一个 0。如果 S 和 R 的值同时为 0,则触发器保持当前状态;如果两者同时为 1,则被视为非法输入。

    行为表

    状态图

    Timing Diagram

    Circuit

    0x01 实现 RS 触发器

    真值表:

    Input

    Output

    입력 순서

    R

    S

    Q

    ~Q

    1

    0

    1

    1

    0

    2

    0

    0

    1

    0

    3

    1

    0

    0

    1

    4

    0

    0

    0

    1

    5

    1

    0

    0

    1

    6

    1

    1

    X

    X

    0x02 使用 NOR 的 RS 触发器

    💬 Design source:

    1. `timescale 1ns / 1ps
    2. module RSFF (
    3. input clk,
    4. input S,
    5. input R,
    6. input CLR,
    7. output Q,
    8. output Qp
    9. );
    10. reg Q;
    11. // falling edge triggered
    12. always @(posedge !clk) begin
    13. if(CLR) Q<=1'b0;
    14. else begin
    15. if ( (S == 1'b0) && (R == 1'b0) ) Q <= Q;
    16. else if ( (S == 1'b0) && (R == 1'b1)) Q <= 1'b0;
    17. else if ( (S == 1'b1) && (R == 1'b0)) Q <= 1'b1;
    18. else if ( (S == 1'b1) && (R == 1'b1)) Q <= 1'bx;
    19. end
    20. end
    21. assign Qp = ~Q;
    22. endmodule

    💬 Testbench:

    1. `timescale 1ns / 1ps
    2. module RSFF_tb;
    3. reg clk, S, R, CLR;
    4. wire Q, Qp;
    5. RSFF u_RSFF(
    6. .clk(clk ),
    7. .S(S ),
    8. .R(R ),
    9. .CLR(CLR ),
    10. .Q(Q ),
    11. .Qp(Qp )
    12. );
    13. initial clk = 1'b0;
    14. initial CLR = 1'b1;
    15. initial S = 1'b0;
    16. initial R = 1'b0;
    17. always clk = #50 ~clk;
    18. always@(CLR) begin
    19. CLR = #125 ~CLR;
    20. end
    21. always@(S) begin
    22. S = #175 ~S;
    23. S = #50 ~S;
    24. end
    25. always@(R) begin
    26. R = #375 ~R;
    27. R = #50 ~R;
    28. end
    29. always@(R) begin
    30. R = #575 ~R;
    31. R = #50 ~R;
    32. end
    33. always@(S) begin
    34. S = #675 ~S;
    35. S = #50 ~S;
    36. end
    37. always@(R) begin
    38. R = #675 ~R;
    39. R = #50 ~R;
    40. end
    41. initial begin
    42. #800
    43. $finish;
    44. end
    45. endmodule

    Schematic:

    🚩 运行结果如下:

    0x03 使用 NAND 的 RS 触发器

    💬 Design source:

    1. `timescale 1ns / 1ps
    2. module RSFF (
    3. input clk,
    4. input S,
    5. input R,
    6. input CLR,
    7. output Q,
    8. output Qp
    9. );
    10. reg Q;
    11. // falling edge triggered
    12. always @(posedge !clk) begin
    13. if (CLR) Q << 1`b0;
    14. else begin
    15. Q <= ~(~(S & (~clk)) & Qp);
    16. Qp <= ~(~(R & (~cls)) & Q);
    17. end
    18. end
    19. assign Qp = ~Q;
    20. endmodule

    Schematic:

    🚩 运行结果如下:

    1. 📌 [ 笔者 ]   王亦优
    2. 📃 [ 更新 ]   2022.11.19
    3. ❌ [ 勘误 ]   /* 暂无 */
    4. 📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
    5. 本人也很想知道这些错误,恳望读者批评指正!

    📜 参考资料 

    Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

    Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

    百度百科[EB/OL]. []. https://baike.baidu.com/.

  • 相关阅读:
    【故障公告】龙卷风继续袭击,服务器们顽强抵抗
    【计算机网络笔记】什么是网络协议?
    计算机网络-第6章 应用层(2)
    linux的常用命令
    idea集成swagger创建接口文档
    芯无界,才未来 “科创中国”第二届汽车芯片百人论坛在嘉定成功举办
    2022/11/28-29总结
    【docker】docker的基础命令
    postgresql -数据库事务与并发控制
    软考 ----- UML设计与分析(上)
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/134493144