当前位置:   article > 正文

顶层模块【FPGA】_fpga顶层模块

fpga顶层模块

1顶层模块:

                不能像C语言的h文件那样,把io的定义放在其他文件。

  1. 在Verilog中,顶层模块是整个设计的最高层次,它包含了所有其他模块和子模块。
  2. 顶层模块定义了整个设计的输入和输出端口,以及各个子模块之间的连接方式。
  3. IO的定义通常是放在顶层模块内部,用来定义整个设计的输入和输出端口。
  4. 在顶层模块中,我们可以使用 模块IO 来声明下方的空间来定义模块的功能,
  5. 通常使用RTL(Register Transfer Level)来实现,也可以编写结构代码或描述性原语。

2顶层模块模板:

  1. module top_PGL22G
  2. //顶层参数,在加载改模块时,先加载参数
  3. #(
  4. parameter CNT_1US_MAX = 6'd49 ,//因为主晶振50MHz【计数0~49】
  5. parameter CNT_1MS_MAX = 10'd999 ,// 1ms=1000us;
  6. parameter CNT_1S_MAX = 10'd999
  7. //最后一个参数不加【,】逗号
  8. )
  9. //模块的io,跟PLC的io一样,程序以集成块的方式展现
  10. (
  11. input FPGA_CLK_50M_b5,
  12. input reset_e8,
  13. input key1_k18,
  14. input key2_n17,
  15. input key3_n18,
  16. input key4_h17,
  17. //
  18. output led1_d15,
  19. output led2_c15,
  20. output led3_a12,
  21. output led4_b12,
  22. output beep_h13
  23. //【注】最后一个参数不加逗号
  24. );
  25. //===================================
  26. //===内部成员
  27. //===================================
  28. //===并联运行的程序
  29. //us
  30. always@(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】@敏感【触发条件:上升沿 clk】【运行副本】
  31. if(reset_e8==1'b0)begin //50Mhz晶振, 49_999_999 是 1秒1次
  32. cnt_1us <= 6'b0;
  33. // cnt_en <= 1'b0;
  34. end
  35. else if(cnt_1us == CNT_1US_MAX)// 0~49
  36. cnt_1us <= 6'b0;
  37. else
  38. cnt_1us <= cnt_1us + 6'b1 ;
  39. //ms
  40. always@(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】@敏感【触发条件:上升沿 clk】【运行副本】
  41. if(reset_e8==1'b0)begin //50Mhz晶振, 49_999_999 是 1秒1次
  42. cnt_1ms <= 10'd0;
  43. end
  44. else if((cnt_1ms == CNT_1MS_MAX ) && (cnt_1us == CNT_1US_MAX))// ms满,
  45. cnt_1ms <= 10'd0;
  46. else if(cnt_1us == CNT_1US_MAX)
  47. cnt_1ms <= cnt_1ms + 10'd1 ;// ms加1
  48. //s
  49. always@(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】@敏感【触发条件:上升沿 clk】【运行副本】
  50. if(reset_e8==1'b0)begin //50Mhz晶振, 49_999_999 是 1秒1次
  51. cnt_1s <= 10'd0;
  52. end
  53. else if((cnt_1s == CNT_1S_MAX ) && (cnt_1ms == CNT_1MS_MAX) &&(cnt_1us == CNT_1US_MAX))// s满,
  54. cnt_1s <= 10'd0;
  55. else if((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX))
  56. cnt_1s <= cnt_1s + 10'd1 ;// s加1
  57. endmodule

原来可以,写法上要稍微改下格式

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

闽ICP备14008679号