📄 protect.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 + -