zoukankan      html  css  js  c++  java
  • [转]产生任意Duty的PWM波形验证

    用MedicalRadiate 3M主板上的FPGA产生500Hz可调PWM;3M板FPGA_CLK由STM32提供的72MHz frequence.

    2.pwm.v

    复制代码
     1 `timescale 1ns / 1ps
     2 module pwm(
     3 input clk_72m,
     4 input rst_n,
     5 output reg clk_50k,        
     6 output reg pwm_wave        //generator 500Hz pwm
     7     );
     8 reg rst_n1,rst_n2;
     9 
    10 
    11 parameter       PERIOD = 1440,
    12                     PULSEWIDTH = 720,
    13                     SIZE =11;    //1440=10110100000,共11位
    14 reg[SIZE-1:0] counter_div; 
    15 
    16 
    17 parameter        DUTY = 40;    //40%
    18 
    19 reg [6:0] pwm_counter;
    20 
    21 //reg X;
    22 //reg duty;
    23 //////////////////////////////////////////////////////////////////////////////////    
    24 //异步复位,同步释放
    25 always@(posedge clk_72m or negedge rst_n)
    26     if(!rst_n)
    27         rst_n1<=1'b0;
    28     else
    29         rst_n1<=1'b1;
    30         
    31 always@(posedge clk_72m or negedge rst_n)
    32     if(!rst_n)
    33         rst_n2<=1'b0;
    34     else
    35         rst_n2<=rst_n1;
    36 //////////////////////////////////////////////////////////////////////////////////
    37 //generator 50KHz clock;
    38 always@(posedge clk_72m or negedge rst_n2)
    39     if(!rst_n2)
    40         counter_div<=0;    
    41     else if(counter_div<PERIOD-1)
    42       counter_div<=counter_div+1'b1;
    43     else
    44       counter_div<=1'b0;
    45        
    46 always@(posedge clk_72m or negedge rst_n2)
    47     if(!rst_n2)     
    48         clk_50k<=1'b0;
    49     else if(counter_div<PULSEWIDTH)
    50         clk_50k<=1'b1;
    51     else
    52         clk_50k<=1'b0;
    53 //Modelsim verify ok!
    54 //////////////////////////////////////////////////////////////////////////////////
    55 
    56 always@(posedge clk_50k or negedge rst_n2)
    57     begin
    58         if(!rst_n2)
    59             pwm_counter<=1'b0;
    60         else if(pwm_counter==99)
    61             pwm_counter<=1'b0;
    62         else
    63             pwm_counter<=pwm_counter+1'b1;
    64     end
    65     
    66 always@(posedge clk_50k or negedge rst_n2)
    67     begin
    68         if(!rst_n2)
    69             pwm_wave <= 1'b0;
    70         else if(pwm_counter==0)
    71             pwm_wave <= 1'b1;
    72         else if(pwm_counter<DUTY)
    73             pwm_wave <= 1'b1;
    74         else 
    75             pwm_wave <= 1'b0;
    76     end
    77 //Modelsim verify ok!    
    78 endmodule
    复制代码

    2.pwm_tb.v

    复制代码
     1 `timescale 1ns / 1ps
     2 
     3 module pwm_tb;
     4 
     5     // Inputs
     6     reg clk_72m;
     7     reg rst_n;
     8 
     9     // Outputs
    10     wire pwm_wave;
    11 
    12     // Instantiate the Unit Under Test (UUT)
    13     pwm pwm_tb (
    14         .clk_72m(clk_72m), 
    15         .rst_n(rst_n), 
    16         .clk_50k(clk_50k),
    17         .pwm_wave(pwm_wave)
    18     );
    19 
    20     parameter PERIOD = 14;
    21     initial begin
    22         // Initialize Inputs
    23         clk_72m = 0;
    24         forever 
    25             #(PERIOD/2)    clk_72m=~clk_72m;
    26     end
    27 
    28     initial begin
    29         rst_n = 0;
    30             #100 rst_n=1;
    31       end
    32 
    33         
    34 endmodule
    复制代码

    4.pwm_ucf.ucf

    复制代码
     1 NET "clk_72m"                LOC = "L22";    
     2 NET "rst_n"                    LOC = "G21";    
     3 NET "clk_50k"                LOC = "C22";        
     4 NET "pwm_wave"         LOC = "C21";
     5 #Created by Constraints Editor (xc3s400-fg456-4) - 2013/05/16
     6 NET "clk_72m" TNM_NET = clk_72m;
     7 TIMESPEC TS_clk_72m = PERIOD "clk_72m" 14 ns HIGH 50%;
     8 
     9 
    10  NET "clk_72m" CLOCK_DEDICATED_ROUTE = FALSE; 
    11 
    12 //由于FPGA_CLK没有接专用GCLK上面所以加上述说明语句
  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/djerly/p/3365905.html
Copyright © 2011-2022 走看看