⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 protect.v

📁 本软件在CPLD上实现数字PWM控制
💻 V
字号:
/**********************************************************************************
;** 函数名称: protect.v
;** 功能描述: 过压和过热信号出现时立即产生保护信号,过流信号超过3us或有连续两个2us
;**           的过流信号立即产生保护信号。
;** 输 入:   cp          :时钟信号
;**           curr_in     :过流信号
;**           heat_in     :过热信号
;**           vol_in      :过压信号
;** 输 出 :  guarder_out :PWM保护信号
;** 全局变量: guarder_out, divi_cp, clk, counter, i, sum, q 
;** 调用模块: 无
;** 
;** 作 者: 王金柱
;** 日 期: 2006年3月3日
;**--------------------------------------------------------------------------------
;** 修 改: 王金柱
;** 日 期: 2006年3月4日
;**-------------------------------------------------------------------------------*/

module protect ( cp, curr_in,heat_in,vol_in,guarder_out);
  // 端口声明
     input cp;                            // 定义时钟入口  12.6MHz 
     input curr_in;                       // 保护信号输入
     input heat_in;
     input vol_in;
     output guarder_out;                  // PWM保护信号 
     
  // 端口变量类型定义
     wire cp;                             // 被声明为input或inout型的变量只能被定义为线网型
     wire curr_in;                        // 线网型变量表明连接关系
     wire heat_in;
     wire vol_in;
     wire over;
     reg guarder_out;                     // 寄存器类型
       
  // 内部寄存器定义
     reg [1:0] q;                         // 定义一个1位、2个元素的数组寄存器
     reg [3:0] sum;                       // 定义求和寄存器
     reg [2:0] i;                         // 计数变量
     reg [3:0] counter;                   // 十进制计数器
     reg divi_cp;                         // 十分频时钟
     reg clk;

     assign over = heat_in|vol_in;        // 过压过热保护信号输出
  
     always @(posedge cp)                 // 7分频器 clk=12.6/10 MHz
     begin
           if(counter == 6)
           begin
                counter <= 0;
                divi_cp <= 1;
           end
           else if(counter < 6)
           begin
                counter <= counter + 1;
                divi_cp <= 0;
           end
           else
           begin
                counter <= 0;
                divi_cp <=0;
           end
           clk <= divi_cp;
     end
      
     always @(posedge clk)                // 数据缓冲寄存
     begin
    
 //          q[4] = q[3];
 //          q[3] = q[2];
//           q[2] = q[1];
           q[1] = q[0];
           q[0] = curr_in;
     end
     always @(posedge cp)                 // 消除竞争与冒险
     begin
           sum = 0;
           for(i=0;i<2;i=i+1)
           begin
                if (q[i] == 1)
                    sum = sum +1;         // 输入信号采用求和
                else
                    sum = sum;
           end
           if ((sum==2)||(over == 1))      // 确认为保护信号3us
           begin
                guarder_out <= 1;         // PWM保护信号输出              
           end
    end 

endmodule



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -