标题:
pfm双通道驱动 verilog源码
[打印本页]
作者:
yang420621
时间:
2021-2-17 14:36
标题:
pfm双通道驱动 verilog源码
pfm双通道驱动源码,驱动双通道igbt,4路pwm相差90度
module PFMc ( sclk, f_en1,f_en2,Tf_i,Ts_i,Fout1, Fout2 ,Fout3, Fout4
// ,test1
//,t1,test2
);
input sclk ; //晶振50M 20ns
input f_en1; //波形输出封锁信号 0封锁输出
input f_en2; //波形输出封锁信号 0封锁输出
input [18:1] Tf_i; //1000000/f us 最大1000000,最小25
//PWM频率对应周期 f最小1HZ,最大40K
input [6:1]Ts_i; //PWM周期 us 最大31
output reg Fout1 ; //通道1PWM输出
output reg Fout2 ;
output reg Fout3 ; //通道2PWM输出
output reg Fout4 ;
// output wire [28:1] test1;
// output wire [28:1] test2;
// output wire [12:1] t1;
//
// assign test1 = f_cnt;
// assign test2 = f_cnt3;
// assign t1 = f1;
reg f_cs1 = 1'd0; //通道1波形使能
reg f_cs2 = 1'd0; //通道2波形使能
reg f_en1_buffer = 1'd0; //通道1波形使能缓存
reg f_en2_buffer = 1'd0; //通道2波形使能缓存
reg rest_n=1'b0; //两个通道同时关闭时,计数复位,高复位
reg [27:1] f_cnt; //计数值
reg [11:1] f_cnt1 = 11'd0 ; //Ts高电平计数个数
reg [25:1] f_cnt2 = 25'd250 ; //Ts 低电平计数个数
reg [27:1] f_cnt3 ; //总计数值
reg f0 = 1'd0;
reg [11:1] f1=11'd0;
reg [26:1] f2=26'd0,f3=26'd0;
reg [25:1] f4=25'd0,f5=25'd0;
reg [27:1] f6=27'd0,f7=27'd0;
reg [11:1] f8=11'd0;
reg [18:1] Tf_buffer=18'd0;
reg [6:1]Ts_buffer=6'd0;
reg [18:1] Tf=18'd10000;
reg [6:1]Ts=6'd0;
always @( Ts or Tf ) begin //参数设置改变后,对参数初始化
f_cnt1 = Ts*50 ; //(Ts*1000)/20; //Ts高电平计数个数
f_cnt2 = Tf*25; //对应1/2 f个周期计数个数
f_cnt3 = Tf*25<<2 ; //4个驱动方波输出周期
f0 = 1'd0; //4个电平翻转状态 PFM1上升沿
f1 = Ts*50; //PFM1 下降沿
f2 = Tf*25<<1 ; //PFM2上升沿
f3= (Tf*25<<1)+Ts*50; //PFM2 下降沿
f4 =Tf*25; //PFM3上升沿
f5 =Tf*25+Ts*50; //PFM3 下降沿
f6 = (Tf*25<<1)+Tf*25; //PFM4上升沿
f7 = (Tf*25<<1)+Tf*25+Ts*50; //PFM4 下降沿
f8 = Ts*50-Tf*25;
end
always @( f_cs1 or f_cs2 ) begin //两个通道都关闭时,计数复位
rest_n = !(f_cs1 || f_cs2);
end
//pwm 低电平状态下 使能信号生效
always@( posedge sclk or negedge Fout1 or negedge Fout2 or negedge Fout3 or negedge Fout4 ) begin
if( Fout1==1'b0 || Fout2==1'b0 )
f_cs1 <= f_en1_buffer ;
else f_cs1 <= 1'b1;
if( Fout3==1'b0 || Fout4==1'b0 )
f_cs2 <= f_en2_buffer ;
else f_cs2 <= 1'b1;
end
always@( posedge sclk or posedge rest_n ) begin //通道1 2循环
f_en1_buffer <= f_en1;
f_en2_buffer <= f_en2;
if( rest_n==1'b1 ) begin //封闭后计数复位
f_cnt <= 27'd0;
Tf_buffer <= Tf_i; //f,Ts数据缓存2个时钟周期
Ts_buffer <= Ts_i;
end
else begin
if( f_cnt>=(f_cnt3+1'b1) ) begin //循环计数复位
f_cnt <= 27'd0;
Tf_buffer <= Tf_i;
Ts_buffer <= Ts_i;
end
else begin
f_cnt <= f_cnt+1'b1;
if( f_cnt==27'd10) begin
Tf<=Tf_buffer;
Ts<=Ts_buffer;
end
end
end
end
always@( posedge sclk ) begin //PWM输出控制
if(f_cs1==1'b0) begin //通道1,
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
else begin
if( f_cs1 ) begin
case ( f_cnt )
f0: Fout1 <= 1'b1;
f1: Fout2 <= 1'b1;
f2: Fout1 <= 1'b0;
f3: Fout2 <= 1'b0;
endcase
end
else begin
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
end
if ( f_cs2 ==1'b0) begin //通道2
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
else begin
if( f_cs2 ) begin
case(f_cnt)
f4: Fout3 <= 1'b1;
f5: Fout4 <= 1'b1;
f6: Fout3 <= 1'b0;
f7: Fout4 <= 1'b0;
endcase
if(f_cnt1>=f_cnt2) begin
if(f_cnt==f8)begin
Fout4 <= 1'b0;
end
end
end
else begin
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
end
end
endmodule
/*
module PFMc ( sclk, f_en1,f_en2,f_i,Ts_i,Fout1, Fout2 ,Fout3, Fout4
// ,test1,t1,test2
);
input sclk ; //晶振50M 20ns
input f_en1; //波形输出封锁信号 0封锁输出
input f_en2; //波形输出封锁信号 0封锁输出
input [16:1] f_i; //PWM频率 Hz 最小1HZ,最大40K
input [6:1]Ts_i; //PWM周期 us 最大31
output reg Fout1 ; //通道1PWM输出
output reg Fout2 ;
output reg Fout3 ; //通道2PWM输出
output reg Fout4 ;
// output wire [28:1] test1;
// output wire [28:1] test2;
// output wire [12:1] t1;
//
// assign test1 = f_cnt;
// assign test2 = f_cnt3;
// assign t1 = f1;
reg f_cs1 = 1'd0; //通道1波形使能
reg f_cs2 = 1'd0; //通道2波形使能
reg f_en1_buffer = 1'd0; //通道1波形使能缓存
reg f_en2_buffer = 1'd0; //通道2波形使能缓存
reg rest_n=1'b0; //两个通道同时关闭时,计数复位,高复位
reg [27:1] f_cnt; //计数值
reg [11:1] f_cnt1 = 11'd0 ; //Ts高电平计数个数
reg [25:1] f_cnt2 = 25'd250 ; //Ts 低电平计数个数
reg [27:1] f_cnt3 ; //总计数值
reg f0 = 1'd0;
reg [11:1] f1=11'd0;
reg [26:1] f2=26'd0,f3=26'd0;
reg [25:1] f4=25'd0,f5=25'd0;
reg [27:1] f6=27'd0,f7=27'd0;
reg [11:1] f8=11'd0;
reg [17:1] f_buffer=17'd0;
reg [6:1]Ts_buffer=6'd0;
reg [17:1] f=17'd40000;
reg [6:1]Ts=6'd0;
always @( Ts or f ) begin //参数设置改变后,对参数初始化
f_cnt1 = Ts*50 ; //(Ts*1000)/20; //Ts高电平计数个数
f_cnt2 = (1000000/f)*25; //对应1/2 f个周期计数个数
f_cnt3 = (1000000/f)*25<<2 ; //4个驱动方波输出周期
f0 = 1'd0; //4个电平翻转状态 PFM1上升沿
f1 = Ts*50; //PFM1 下降沿
f2 = (1000000/f)*25<<1 ; //PFM2上升沿
f3= {(1000000/f)*25<<1}+Ts*50; //PFM2 下降沿
f4 =(1000000/f)*25; //PFM3上升沿
f5 =(1000000/f)*25+Ts*50; //PFM3 下降沿
f6 = {(1000000/f)*25<<1}+(1000000/f)*25; //PFM4上升沿
f7 = {(1000000/f)*25<<1}+{(1000000/f)*25}+Ts*50; //PFM4 下降沿
f8 = Ts*50-(1000000/f)*25;
end
always @( f_cs1 or f_cs2 ) begin //两个通道都关闭时,计数复位
rest_n = !(f_cs1 || f_cs2);
end
always@( posedge sclk or negedge Fout1 or negedge Fout2 or negedge Fout3 or negedge Fout4 ) begin
if( Fout1==1'b0 || Fout2==1'b0 )
f_cs1 <= f_en1_buffer ;
else f_cs1 <= 1'b1;
if( Fout3==1'b0 || Fout4==1'b0 )
f_cs2 <= f_en2_buffer ;
else f_cs2 <= 1'b1;
end
always@( posedge sclk or posedge rest_n ) begin //通道1 2循环
f_en1_buffer <= f_en1;
f_en2_buffer <= f_en2;
if( rest_n==1'b1 ) begin //封闭后计数复位
f_cnt <= 27'd0;
f_buffer <= f_i; //f,Ts数据缓存2个时钟周期
Ts_buffer <= Ts_i;
end
else begin
if( f_cnt>=(f_cnt3+1'b1) ) begin //循环计数复位
f_cnt <= 27'd0;
f_buffer <= f_i;
Ts_buffer <= Ts_i;
end
else begin
f_cnt <= f_cnt+1'b1;
if( f_cnt==27'd10) begin
f<=f_buffer;
Ts<=Ts_buffer;
end
end
end
end
always@( posedge sclk ) begin //PWM输出控制
if(f_cs1==1'b0) begin //通道1,
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
else begin
if( f_cs1 ) begin
case ( f_cnt )
f0: Fout1 <= 1'b1;
f1: Fout2 <= 1'b1;
f2: Fout1 <= 1'b0;
f3: Fout2 <= 1'b0;
endcase
end
else begin
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
end
if ( f_cs2 ==1'b0) begin //通道2
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
else begin
if( f_cs2 ) begin
case(f_cnt)
f4: Fout3 <= 1'b1;
f5: Fout4 <= 1'b1;
f6: Fout3 <= 1'b0;
f7: Fout4 <= 1'b0;
endcase
if(f_cnt1>=f_cnt2) begin
if(f_cnt==f8)begin
Fout4 <= 1'b0;
end
end
end
else begin
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
end
end
endmodule
*/
/*
//IGBT 波形发生 2个通道
module PFMc ( sclk, f_en1,f_en2,f_i,Ts_i,Fout1, Fout2 ,Fout3, Fout4,test);
input sclk ; //晶振50M 20ns
input f_en1; //波形输出封锁信号 0封锁输出
input f_en2; //波形输出封锁信号 0封锁输出
input [17:1] f_i; //PWM频率 Hz 最小1HZ,最大40K
input [6:1]Ts_i; //PWM周期 us 最大25
output reg Fout1 ; //通道1PWM输出
output reg Fout2 ;
output reg Fout3 ; //通道2PWM输出
output reg Fout4 ;
output reg test ;
reg f_cs1 = 1'd0; //通道1波形使能
reg f_cs2 = 1'd0; //通道2波形使能
reg [28:1] f_cnt = 28'd0 ;
reg [12:1] f_cnt1 = 12'd0 ; //Ts高电平计数个数
reg [26:1] f_cnt2 = 26'd250 ; //Ts 低电平计数个数
reg [28:1] f_cnt3 ;
reg f0 = 1'd0;
reg [12:1] f1=12'd0;
reg [27:1] f2=27'd0,f3=27'd0;
reg [28:1] f4=28'd0,f5=28'd0;
reg [28:1] f6=28'd0,f7=28'd0;
reg [12:1] f8=12'd0;
reg [17:1] f_buffer=17'd0;
reg [6:1]Ts_buffer=6'd0;
reg [17:1] f=17'd40000;
reg [6:1]Ts=6'd0;
always@(posedge sclk or negedge f_en1) begin //测试
if(!f_en1) begin
test <= 1'b1;
end
else if(f_cnt == 28'd1)
test <= ~test;
end
always @( posedge sclk ) begin //TS f参数缓存1个周期,在1个周期完后生效
if( f_cnt == 28'd0 ) begin
f_buffer <= f_i;
Ts_buffer <= Ts_i;
end
if( f_cnt1 < f_cnt2 ) begin
if(f_cnt == f_cnt3) begin
f<=f_buffer;
Ts<=Ts_buffer;
end
end
if( f_cnt1 >= f_cnt2 ) begin
if(f_cnt == f8) begin
f<=f_buffer;
Ts<=Ts_buffer;
end
end
end
always @( Ts or f ) begin //参数设置改变后,对参数初始化
f_cnt1 = Ts*50 ; //(Ts*1000)/20; //Ts高电平计数个数
f_cnt2 = (1000000/f)*25; //对应1/2 f个周期计数个数
f_cnt3 = (1000000/f)*25<<2 ; //4个驱动方波输出周期
f0 = 1 'd0; //4个电平翻转状态 PFM1上升沿
f1 = Ts*50; //PFM1 下降沿
f2 = (1000000/f)*25<<1 ; //PFM2上升沿
f3= {(1000000/f)*25<<1}+Ts*50; //PFM2 下降沿
f4 =(1000000/f)*25; //PFM3上升沿
f5 =(1000000/f)*25+Ts*50; //PFM3 下降沿
f6 = {(1000000/f)*25<<1}+(1000000/f)*25; //PFM4上升沿
f7 = {(1000000/f)*25<<1}+{(1000000/f)*25}+Ts*50; //PFM4 下降沿
f8 = Ts*50-(1000000/f)*25;
end
always@( posedge sclk or posedge f_en1 or posedge f_en2) begin //波形输出期间,禁止关断
if(f_en1)
if( Fout1 || Fout2 )
f_cs1 <= 1'd1 ;
else f_cs1 <=f_en1 ;
else f_cs1 <= 1'b0;
if(f_en2)
if( Fout3 || Fout4 )
f_cs2 <= 1'd1 ;
else f_cs2 <=f_en2 ;
else f_cs2 <= 1'b0;
end
always@( posedge sclk or posedge f_cs1 or posedge f_cs2 ) begin //通道1 2循环
if( f_cs1 || f_cs2 ) begin //使能
f_cnt <= f_cnt+1'b1;
if( f_cnt>=f_cnt3 ) //循环复位
f_cnt <= 28'd0;
end
else f_cnt <= 28'd0;
end
always@( posedge sclk or posedge f_cs1 or posedge f_cs2 ) begin
if ( f_cs1 ) begin
case ( f_cnt )
f0: Fout1 <= 1'b1;
f1: Fout2 <= 1'b1;
f2: Fout1 <= 1'b0;
f3: Fout2 <= 1'b0;
endcase
end
else begin
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
if ( f_cs2 ) begin
case(f_cnt)
f4: Fout3 <= 1'b1;
f5: Fout4 <= 1'b1;
f6: Fout3 <= 1'b0;
f7: Fout4 <= 1'b0;
endcase
if(f_cnt1>=f_cnt2) begin
if(f_cnt==f8)begin
Fout4 <= 1'b0;
end
end
end
else begin
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
end
endmodule
*/
/*
//IGBT 波形发生 2个通道
module PFMc ( sclk, f_en1,f_en2,f_i,Ts_i,Fout1, Fout2 ,Fout3, Fout4);
input sclk ; //晶振50M 20ns
input f_en1; //波形输出封锁信号 0封锁输出
input f_en2; //波形输出封锁信号 0封锁输出
input [17:1] f_i; //PWM频率 Hz 最小1HZ,最大40K
input [6:1]Ts_i; //PWM周期 us 最大25
output reg Fout1 ; //通道1PWM输出
output reg Fout2 ;
output reg Fout3 ; //通道2PWM输出
output reg Fout4 ;
reg f_cs1 = 1'd0; //通道1波形使能
reg f_cs2 = 1'd0; //通道2波形使能
reg [28:1] f_cnt = 0 ;
reg [12:1] f_cnt1 = 0 ; //Ts高电平计数个数
reg [26:1] f_cnt2 = 250 ; //Ts 低电平计数个数
reg [28:1] f_cnt3 ;
reg f0 = 1'd0;
reg [12:1] f1=0;
reg [27:1] f2=0,f3=0;
reg [28:1] f4=0,f5=0;
reg [28:1] f6=0,f7=0;
reg [12:1] f8=0;
reg [17:1] f_buffer=0;
reg [6:1]Ts_buffer=0;
reg [17:1] f=40000;
reg [6:1]Ts=0;
always @( posedge sclk ) begin //TS f参数缓存1个周期,在1个周期完后生效
if( f_cnt == 0 ) begin
f_buffer <= f_i;
Ts_buffer <= Ts_i;
end
if( f_cnt1 < f_cnt2 ) begin
if(f_cnt == f_cnt3) begin
f<=f_buffer;
Ts<=Ts_buffer;
end
end
if( f_cnt1 >= f_cnt2 ) begin
if(f_cnt == f8) begin
f<=f_buffer;
Ts<=Ts_buffer;
end
end
end
always @( Ts or f ) begin //参数设置改变后,对参数初始化
f_cnt1 = Ts*50 ; //(Ts*1000)/20; //Ts高电平计数个数
f_cnt2 = (1000000/f)*25; //对应1/2 f个周期计数个数
f_cnt3 = (1000000/f)*25<<2 ; //4个驱动方波输出周期
f0 = 1 'd0; //4个电平翻转状态 PFM1上升沿
f1 = Ts*50; //PFM1 下降沿
f2 = (1000000/f)*25<<1 ; //PFM2上升沿
f3= {(1000000/f)*25<<1}+Ts*50; //PFM2 下降沿
f4 =(1000000/f)*25; //PFM3上升沿
f5 =(1000000/f)*25+Ts*50; //PFM3 下降沿
f6 = {(1000000/f)*25<<1}+(1000000/f)*25; //PFM4上升沿
f7 = {(1000000/f)*25<<1}+{(1000000/f)*25}+Ts*50; //PFM4 下降沿
f8 = Ts*50-(1000000/f)*25;
end
always@( posedge sclk ) begin //波形输出期间,禁止关断
if( Fout1 || Fout2 )
f_cs1 <= 1'd1 ;
else f_cs1 <=f_en1 ;
if( Fout3 || Fout4 )
f_cs2 <= 1'd1 ;
else f_cs2 <=f_en2 ;
end
always@( posedge sclk or posedge f_cs1 or posedge f_cs2 ) begin //通道1 2循环
if( f_cs1 || f_cs2 ) begin //使能
f_cnt <= f_cnt+1;
if( f_cnt>=f_cnt3 ) //循环复位
f_cnt <= 0;
end
else f_cnt <= 0;
end
always@( posedge sclk or posedge f_cs1 or posedge f_cs2) begin
if ( f_cs1 ) begin
if(f_cnt==f0)begin
Fout1 <= 1'b1;
// Fout2 <= 1'b0;
end
if(f_cnt==f1)begin
Fout1 <= 1'b0;
// Fout2 <= 1'b0;
end
if(f_cnt==f2)begin
// Fout1 <= 1'b0;
Fout2 <= 1'b1;
end
if(f_cnt==f3)begin
// Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
end
else begin
Fout1 <= 1'b0;
Fout2 <= 1'b0;
end
if ( f_cs2 ) begin
if(f_cnt==f4)begin
Fout3 <= 1'b1;
end
if(f_cnt==f5)begin
Fout3 <= 1'b0;
end
if(f_cnt==f6)begin
Fout4 <= 1'b1;
end
if(f_cnt==f7)begin
Fout4 <= 1'b0;
end
if(f_cnt1>=f_cnt2) begin
if(f_cnt==f8)begin
Fout4 <= 1'b0;
end
end
end
else begin
Fout3 <= 1'b0;
Fout4 <= 1'b0;
end
end
endmodule、
*/
/*
module PFMc ( sclk, f_en1,f_en2,f_i,Ts_i,Fout1, Fout2 ,Fout3, Fout4);
input sclk ; //晶振50M 20ns
input f_en1; //波形输出封锁信号 0封锁输出
input f_en2; //波形输出封锁信号 0封锁输出
input [18:1] f_i; //PWM频率 Hz 最小1HZ,最大40K
input [6:1]Ts_i; //PWM周期 us 最大25
output reg Fout1 = 1'b0 ; //通道1PWM输出
output reg Fout2 = 1'b0 ;
output reg Fout3 = 1'b0 ; //通道2PWM输出
output reg Fout4 = 1'b0 ;
reg f_cs1 = 1'd0; //通道1波形使能
reg f_cs2 = 1'd0; //通道2波形使能
reg [28:1] f_cnt = 0 ;
reg [12:1] f_cnt1 = 0 ; //Ts高电平计数个数
reg [26:1] f_cnt2 = 250 ; //Ts 低电平计数个数
reg [26:1] f_cnt3 ;
reg f0 = 1'd0;
reg [12:1] f1=0;
reg [27:1] f2=0,f3=0;
reg [28:1] f4=0,f5=0;
reg [28:1] f6=0,f7=0;
reg [12:1] f8=0;
reg [4:1] state; //状态指示
reg spr=1'b0; //参数计算完成指示
reg [18:1] f_ib; //PWM频率 Hz 最小1HZ,最大40K 缓存
reg [6:1]Ts_ib; //PWM周期 us 最大25 缓存
reg [18:1] f=40000; //PWM频率 Hz 最小1HZ,最大40K 缓存
reg [6:1]Ts=0; //PWM周期 us 最大25 缓存
parameter
Fout1_start = 4'd0,
Fout2_start = 4'd1,
Fout1_end = 4'd2,
Fout2_end = 4'd3,
Fout3_start = 4'd4,
Fout4_start = 4'd5,
Fout3_end = 4'd6,
Fout4_end = 4'd7,
Fout_clear = 4'd8;
always @( Ts or f ) begin //参数设置改变后,对参数初始化
f_cnt1 = Ts*50 ; //(Ts*1000)/20; //Ts高电平计数个数
f_cnt2 = (1000000/f)*25; //对应1/2 f个周期计数个数
f_cnt3 = (1000000/f)*25<<2 ; //4个驱动方波输出周期
f0 = 1 'd0; //4个电平翻转状态 PFM1上升沿
f1 = Ts*50; //PFM1 下降沿
f2 = (1000000/f)*25<<1 ; //PFM2上升沿
f3= {(1000000/f)*25<<1}+Ts*50; //PFM2 下降沿
f4 =(1000000/f)*25; //PFM3上升沿
f5 =(1000000/f)*25+Ts*50; //PFM3 下降沿
f6 = {(1000000/f)*25<<1}+(1000000/f)*25; //PFM4上升沿
f7 = {(1000000/f)*25<<1}+{(1000000/f)*25}+Ts*50; //PFM4 下降沿
f8 = Ts*50-(1000000/f)*25;
end
always@( f_en1 or f_en2) begin //波形输出期间,禁止关断
if( Fout1 || Fout2 )
f_cs1 <= 1'd1 ;
else f_cs1 <=f_en1 ;
if( Fout3 || Fout4 )
f_cs2 <= 1'd1 ;
else f_cs2 <=f_en2 ;
end
always@( f_cnt ) begin
if( f_cnt ) begin
f_ib = f_i;
Ts_ib = Ts_i;
end
if( (f_cnt+1)== f_cnt3) begin
f = f_ib;
Ts = Ts_ib;
end
end
always@( posedge sclk ) begin //通道1 2循环
if( f_cs1 || f_cs2 ) begin //使能
f_cnt <= f_cnt+1;
spr <= ~spr;
if( f_cnt>=f_cnt3 ) //循环复位
f_cnt <= 0;
end
else f_cnt <= 0;
end
always@( posedge sclk ) begin
if ( f_cs1 ) begin
if(f_cnt==f0)begin
state <= Fout1_start;
end
if(f_cnt==f1)begin
state <= Fout2_start;
// Fout2 <= 1'b0;
end
if(f_cnt==f2)begin
// Fout1 <= 1'b0;
state <= Fout1_end;
end
if(f_cnt==f3)begin
// Fout1 <= 1'b0;
state <= Fout2_end;
end
end
else state <= Fout_clear;
if ( f_cs2 ) begin
if(f_cnt==f4)begin
state <= Fout3_start;;
end
if(f_cnt==f5)begin
state <= Fout4_start;;
end
if(f_cnt==f6)begin
state <= Fout3_end;
end
if(f_cnt==f7)begin
state <= Fout4_end;
end
if(f_cnt1>=f_cnt2) begin
if(f_cnt==f8)begin
state <= Fout4_end;
end
end
end
else state <= Fout_clear;
end
always@( state ) begin
case (state)
Fout1_start: begin
Fout1 = 1'b1;
Fout2 = 1'b0;
end
Fout2_start: begin
Fout2 = 1'b1;
Fout1 = 1'b1;
end
Fout3_start: begin
Fout3 = 1'b1;
Fout4 = 1'b0;
end
Fout4_start: begin
Fout4 = 1'b1;
Fout3 = 1'b0;
end
Fout1_end : begin
Fout1 = 1'b0;
Fout2 = 1'b1;
end
Fout2_end : begin
Fout2 = 1'b0;
Fout1 = 1'b0;
end
Fout3_end : begin
Fout3 = 1'b0;
Fout4 = 1'b1;
end
Fout4_end : begin
Fout3 = 1'b0;
Fout4 = 1'b0;
end
Fout_clear : begin
Fout1 = 1'b0;
Fout2 = 1'b0;
Fout1 = 1'b0;
Fout1 = 1'b0;
end
default begin
Fout1 = 1'b0;
Fout2 = 1'b0;
Fout1 = 1'b0;
Fout1 = 1'b0;
end
endcase
end
endmodule
*/
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1