分频器里面可以进行加操作吗?比如一个1:5000分频器,我用单片机发个数据让它加进去,编程总是无法实现
程序如下:
module pwm1(dat,clkin,en,pwm1,pwm2,pwm3,clk,out);
input clk,clkin,en;
input dat;
output pwm1,pwm2,pwm3;
output[5:0] out;
reg[5:0] bliang;
reg[6:0] zkb;
reg[6:0] zkb1;
reg[6:0] zkb2;
reg[31:0] fpb;
reg[31:0] fpb1;
reg[31:0] fpb2;
reg[7:0] xwei;
reg[7:0] xwei1;
reg[7:0] xwei2;
reg[35:0] shuju;
reg[3:0] adder;
reg[31:0] gdp;
reg[31:0] js;
reg[31:0] gdp1;
reg[31:0] js1;
reg[31:0] gdp2;
reg[31:0] js2;
reg pwm_flag;
reg pwm_flag1;
reg pwm_flag2;
assign pwm1=pwm_flag;
assign pwm2=pwm_flag1;
assign pwm3=pwm_flag2;
assign out=bliang;
always @(posedge clkin)
begin
if(en==0)
begin
shuju= shuju>>1;
shuju[35] = dat;
bliang[5:0]=shuju[35:30];
end
else begin fpb=fpb;end
end
always @(posedge en)
begin
case(shuju[35:32])
0:begin fpb=shuju[31:0]; end
1:begin fpb1=shuju[31:0]; end
2:begin fpb2=shuju[31:0];end
3:begin zkb[6:0]=shuju[31:25];gdp<=fpb*zkb/100;end
4:begin zkb1[6:0]=shuju[31:25];gdp1<=fpb1*zkb1/100;end
5:begin zkb2[6:0]=shuju[31:25];gdp2<=fpb2*zkb2/100;end
6:begin xwei[7:0]<=shuju[31:24]; js<=js+fpb*xwei/360;end
default shuju<=shuju;
endcase
end
always@(posedge clk )
begin
if(js>=fpb)
begin js<=0; end
else
begin js<=js+1; end
if(js<gdp)
begin pwm_flag=1; end
else begin pwm_flag=0; end
end
always@(posedge clk)
begin
if(js1>=fpb1)
begin js1<=0;end
else
begin js1<=js1+1; end
if(js1<gdp1)
begin pwm_flag1=1; end
else begin pwm_flag1=0; end
end
always@(posedge clk)
begin
if(js2>=fpb2)
begin js2<=0;end
else
begin js2<=js2+1; end
if(js2<gdp2)
begin pwm_flag2=1; end
else begin pwm_flag2=0; end
end
endmodule
结果总是出错:不能解决多重驱动 !请问有没有什么好的解决办法啊! |