当前位置:   article > 正文

根据状态转移图实现时序电路

根据状态转移图实现时序电路

描述

某同步时序电路的状态转换图如下,→上表示“C/Y”,圆圈内为现态,→指向次态。

请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。

如图所示:

电路的接口如下图所示,C是单bit数据输入端。 

如图所示:

输入描述

  1.    input                C   ,
  2.    input                clk ,
  3.    input                rst_n

输出描述

output   wire        Y 

解题分析

        本题提供的是状态转换图,可采用状态机实现,也可采用列激励方程、输出方程,进而用D触发器和组合逻辑电路实现。本题解采用第二种方案实现。

        由状态转换图可得出,电路共4个状态,所以使用2个寄存器来实现状态的寄存。两个寄存器的输出为Q1和Q0,两个寄存器的输入为D1和D0。可列出状态转换表如下:

由状态转换表可列出激励方程如下:

 输出方程如下:

根据激励方程和输出方程以及思路整理,关键电路如下:

将电路转换成Verilog代码描述如下: 

  1. reg Q1 ;
  2. reg Q0 ;
  3. always @(posedge clk or negedge rst_n)begin
  4. if(!rst_n)
  5. Q1 <= 1'b0;
  6. else
  7. Q1 <= (Q1 & (Q0 | C)) | (~Q1 & Q0 & ~C);
  8. end
  9. always @(posedge clk or negedge rst_n)begin
  10. if(!rst_n)
  11. Q0 <= 1'b0;
  12. else
  13. Q0 <= (~Q1 & (Q0 | C)) | (Q1 & Q0 & ~C);
  14. end
  15. assign Y = (C & Q1) | (Q1 & Q0);

参考代码

  1. `timescale 1ns/1ns
  2. module seq_circuit(
  3. input C ,
  4. input clk ,
  5. input rst_n,
  6. output wire Y
  7. );
  8. reg Q1 ;
  9. reg Q0 ;
  10. always @(posedge clk or negedge rst_n)begin
  11. if(!rst_n)
  12. Q1 <= 1'b0;
  13. else
  14. Q1 <= (Q1 & (Q0 | C)) | (~Q1 & Q0 & ~C);
  15. end
  16. always @(posedge clk or negedge rst_n)begin
  17. if(!rst_n)
  18. Q0 <= 1'b0;
  19. else
  20. Q0 <= (~Q1 & (Q0 | C)) | (Q1 & Q0 & ~C);
  21. end
  22. assign Y = (C & Q1) | (Q1 & Q0);
  23. endmodule

方法二

  1. `timescale 1ns/1ns
  2. module seq_circuit(
  3. input C ,
  4. input clk ,
  5. input rst_n,
  6. output wire Y
  7. );
  8. reg [1:0] state;
  9. always @(posedge clk or negedge rst_n)
  10. begin
  11. if(~rst_n)
  12. begin
  13. state <= 2'b00;
  14. end
  15. else
  16. begin
  17. case(state)
  18. 2'b00:
  19. begin
  20. if(C)
  21. state <= 2'b01;
  22. else
  23. state <= 2'b00;
  24. end
  25. 2'b01:
  26. begin
  27. if(C)
  28. state <= 2'b01;
  29. else
  30. state <= 2'b11;
  31. end
  32. 2'b10:
  33. begin
  34. if(C)
  35. state <= 2'b10;
  36. else
  37. state <= 2'b00;
  38. end
  39. 2'b11:
  40. begin
  41. if(C)
  42. state <= 2'b10;
  43. else
  44. state <= 2'b11;
  45. end
  46. endcase
  47. end
  48. end
  49. assign Y = (state == 2'b11)?1'b1:(state == 2'b10)?C:1'b0 ;
  50. endmodule

注:解题分析来源于网友,如有侵权,请告删之。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/420709
推荐阅读
相关标签
  

闽ICP备14008679号