博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PW试验-----verilog
阅读量:4317 次
发布时间:2019-06-06

本文共 4698 字,大约阅读时间需要 15 分钟。

    PWM,脉冲宽度调制。顾名思义,是通过调制脉冲的宽度,即占空比,来实现的。可是使占空比逐渐由最小增加到最大,也可以使占空比由最大减少到最小来实现不同的现象。若用LED灯来显示现象,则可以称作:LED呼吸灯;

简单的代码如下:

  

/********************************Copyright**************************************                               **----------------------------File information--------------------------    ** File name  :led_pwm.v      ** CreateDate :2015.03    ** Funtions   :pwm的试验,用led灯来显示pwm的效果    ** Operate on :M5C06N3L114C7    ** Copyright  :All rights reserved.     ** Version    :V1.0    **---------------------------Modify the file information----------------    ** Modified by   :    ** Modified data :            ** Modify Content:    *******************************************************************************/     001     module  led_pwm  (002                 clk,003                 rst_n,004                 005                             pwm_out006                 );007     input          clk;         /* 24Mhz */008     input          rst_n;009    // wire           rst_n;010     output         pwm_out;011     012    // assign  rst_n = 1;013     //-------------------------------------014     /* ius */015     localparam  t_1us = 5'd23;016    // localparam  t_1us = 5'd6;     /* 用于测试 */017     reg      [4:0]    cnt1;018     always @(posedge clk or negedge rst_n)019     begin020      if(!rst_n)021       begin022          cnt1 <= 0 ;023        end024      else 025        begin026           if(cnt1 == t_1us)027                    cnt1 <= 0;028                  else 029                        cnt1 <= cnt1 + 1;030        end031      end032     033     034     /* 1ms */035     localparam  t_1ms = 10'd999;036    // localparam  t_1ms = 10'd19;  /* 用于测试 */037     reg      [9:0]    cnt2;038     always @(posedge clk or negedge rst_n)039     begin040      if(!rst_n)041       begin042          cnt2 <= 0 ;043        end044      else 045        begin046           if(cnt1 == t_1us)047                   begin048                          if(cnt2 == t_1ms)049                                cnt2 <= 0;050                             else 051                                 cnt2 <= cnt2 + 1;052                        end053                  else 054                        cnt2 <= cnt2;055        end056      end057        058     /* 1s */ 059     localparam  t_1s = 10'd999;060    // localparam  t_1s = 10'd19;        /* 用于测试 */061     reg      [9:0]    cnt3;062     always @(posedge clk or negedge rst_n)063     begin064      if(!rst_n)065       begin066          cnt3 <= 0; 067        end068      else 069        begin070           if((cnt1 == t_1us)&&(cnt2 == t_1ms))071                   begin072                          if(cnt3 == t_1s)073                                 cnt3 <= 0;074                             else 075                                 cnt3 <= cnt3 + 1;076                        end077                  else 078                        cnt3 <= cnt3;079        end080      end081     082     reg           flag;083     always @(posedge clk or negedge rst_n)084     begin085      if(!rst_n)086       begin087          flag <= 0;088        end089      else if((cnt1 == t_1us)&&(cnt2 == t_1ms)&&(cnt3 == t_1s))090        begin091           flag <= ~flag;   092        end093        else 094            flag <= flag;095      end096        097     assign pwm_out = flag?((cnt2 < cnt3)?0:1):((cnt2 < cnt3)?1:0);098      099    endmodule100101
View Code

仿真验证代码:

 

/********************************Copyright**************************************                               **----------------------------File information--------------------------    ** File name  :led_pwm_tb.v      ** CreateDate :2015.03    ** Funtions   : led_pwm  的测试文件    ** Operate on :M5C06N3L114C7    ** Copyright  :All rights reserved.     ** Version    :V1.0    **---------------------------Modify the file information----------------    ** Modified by   :    ** Modified data :            ** Modify Content:    *******************************************************************************/     01     module led_pwm_tb;02     reg        clk;03     reg        rst_n;04     05     wire       pwm_out;06     07    led_pwm  led_pwm_1(08                 .clk,09                 .rst_n,10                 11                             .pwm_out12                 ); 13                             14        localparam  tck = 24;15        localparam  t = 1000/tck;16        always 17            #(t/2)   clk = ~clk;18            19        initial 20          begin21           clk = 0;22             rst_n = 0;23             24             #(50*t)  rst_n = 1;25          26          end27            28        endmodule29    30
View Code

 

仿真结果:

转载于:https://www.cnblogs.com/fhyfhy/p/4373706.html

你可能感兴趣的文章
Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子...
查看>>
Android笔记(四十) Android中的数据存储——SQLite(二) insert
查看>>
newcoder【NOIP2018普及组模拟赛第一次】C题
查看>>
关于PC端页面适应不了手机端的问题 解决方案
查看>>
多线程 基本概念
查看>>
电报压缩/解压缩系统
查看>>
[UE4]C++ getter and setter
查看>>
[UE4]机器人射击逻辑行为树
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>
Django学习笔记8
查看>>
cadence钻孔文件及光绘文件的生成
查看>>
css实现左右布局
查看>>
[Shader]一个shader效果啦(那个lost soul aside里面看到的)
查看>>
elasticsearch 中文API river
查看>>
Mac OS X 下搭建php开发环境
查看>>
Vue学习之vue中的计算属性和侦听器
查看>>
redis常见面试题
查看>>
C# - XML
查看>>
android权限大全
查看>>
BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
查看>>