tri_gen

[复制链接]
 楼主| 34af9uc 发表于 2025-6-17 23:54 | 显示全部楼层 |阅读模式
  1. /************最简单状态机, 三角波发生器**************/
  2. /**************************************************/
  3. /**************************************************/
  4. /******************20250614************************/
  5. `timescale 1ns/10ps
  6. module tri_gen
  7.                                 (
  8.                                 clk,
  9.                                 res,
  10.                                 d_out
  11.                                 );

  12. input                        clk;
  13. input                        res;
  14. output[8:0]                d_out;
  15.                

  16. reg[2:0]                state;                //主状态机寄存器;
  17. reg[8:0]                d_out;
  18. reg[7:0]                con;                //计数器, 记录平顶时间
  19. always@(posedge clk or negedge res)
  20. if(~res)
  21.         begin
  22.         state                <=0;
  23.         d_out                <=0;
  24.         con                        <=0;
  25.         end

  26. else
  27.         begin
  28.                 case(state)
  29. /**************************************************/
  30. 0:                //上升
  31. begin
  32. d_out                <=d_out +1;
  33. if(d_out ==299)
  34.         begin
  35.         state                <=1;
  36.         end
  37. end
  38. /**************************************************/
  39. 1:                //平顶
  40. begin
  41. if(con ==200)
  42.         begin
  43.         state                <=2;
  44.         con                        <=0;
  45.         end
  46. else
  47.         begin
  48.         con                        <=con +1;
  49.         end
  50. end
  51. /**************************************************/
  52. 2:                //下降
  53. begin
  54. d_out                <=d_out -1;
  55. if(d_out ==1)
  56.         begin
  57.         state                <=3;
  58.         end
  59. end
  60. /**************************************************/
  61. 3:                //平底
  62. begin
  63. if(con ==200)
  64.         begin
  65.         state                <=0;
  66.         con                        <=0;
  67.         end
  68. else
  69.         begin
  70.         con                        <=con +1;
  71.         end
  72. end
  73. /**************************************************/
  74.                 endcase
  75.         end
  76. endmodule
  77. /****************testbench oftri_gen***************/
  78. module tri_gen_tb;
  79. reg                                clk, res;
  80. wire[8:0]                d_out;
  81. tri_gen tri_gen
  82.                                 (
  83.                                 .clk(clk),
  84.                                 .res(res),
  85.                                 .d_out(d_out)
  86.                                 );
  87. initial
  88. begin
  89.                                 clk                <=0;
  90.                                 res                <=0;
  91.                 #17                res                <=1;
  92.                 #20000        $stop;


  93. end
  94. always #5                clk                <= ~clk;

  95. endmodule
  96. /**************************************************/
  97. /**************************************************/
  98. /**************************************************/


 楼主| 34af9uc 发表于 2025-6-17 23:54 | 显示全部楼层
tri_gen
屏幕截图 2025-06-17 234146.png

tri_gen1.zip

751 Bytes, 下载次数: 0

319

主题

487

帖子

63

粉丝
快速回复 在线客服 返回列表 返回顶部