image.png

    1. `timescale 1ns/1ns
    2. module Tff_2(
    3. input wire data, clk, rst,
    4. output reg q
    5. );
    6. //------------------code-------------------
    7. reg q1;
    8. always @(posedge clk or negedge rst) begin
    9. if(!rst) begin
    10. q1 <= 1'b0;
    11. q <= 1'b0;
    12. end
    13. else if(data) begin
    14. q1 <= !q1;
    15. if(q1) begin
    16. q <= !q;
    17. end
    18. else begin
    19. q <= q;
    20. end
    21. end
    22. else if(!data) begin
    23. q1 <= q1;
    24. if(q1) begin
    25. q <= !q;
    26. end
    27. else begin
    28. q <= q;
    29. end
    30. end
    31. end
    32. //------------------code-------------------
    33. endmodule
    34. `timescale 1ns/1ns
    35. module Tff_2(
    36. input wire data, clk, rst,
    37. output reg q
    38. );
    39. //------------------code-------------------
    40. reg q1;
    41. always @(posedge clk or negedge rst) begin
    42. if(!rst) begin
    43. q1 <= 1'b0;
    44. q <= 1'b0;
    45. end
    46. else if(data) begin
    47. q1 <= !q1;
    48. if(q1) begin
    49. q <= !q;
    50. end
    51. else begin
    52. q <= q;
    53. end
    54. end
    55. else if(!data) begin
    56. q1 <= q1;
    57. if(q1) begin
    58. q <= !q;
    59. end
    60. else begin
    61. q <= q;
    62. end
    63. end
    64. end
    65. //------------------code-------------------
    66. endmodule
    67. module Tff_2(
    68. input wire data, clk, rst,
    69. output reg q
    70. );
    71. //------------------code-------------------
    72. reg q1;
    73. always @(posedge clk or negedge rst) begin
    74. if(!rst) begin
    75. q1 <= 1'b0;
    76. end
    77. else begin
    78. if(data)
    79. q1 <= ~q1;
    80. else
    81. q1 <= q1;
    82. end
    83. end
    84. always @(posedge clk or negedge rst) begin
    85. if(!rst) begin
    86. q <= 1'b0;
    87. end
    88. else begin
    89. if(q1)
    90. q <= ~q;
    91. else
    92. q <= q;
    93. end
    94. end
    95. //------------------code-------------------
    96. endmodule

    更倾向于接法2,将两个触发器分开写复位和触发信号。

    image.png :::info

    1. 异步复位需要一个时钟和复位的边沿信号来触发;
      1. 复位信号是高电平或低电平有效?需要观察波形来决定;
      2. 如果要检测这个电平,就需要通过边沿进入电平触发来检测异步复位;
    2. T触发器和D触发器的基本理解;
    3. 异步复位是如何实现的:

    在always块的敏感事件列表中,如果去掉复位信号,那么检测到复位信号的时候就不再会进行触发,只有在if语句中检测到复位信号才会触发复位。

    1. 如果复位信号是低电平复位,那么应当在标准的复位信号应当是rst_n,n表示negedge。 ::: 如果要改成同步复位,那么去掉敏感时间列表中的复位信号即可。