📄 pidtunebak3.v
字号:
module PIDTune(
EN,
CLK,
FeedForwardEN,
FeedForwardData,
Ki,
Kp,
NextPoint,
Target,
PIDResult
);
input EN;
input CLK;
input FeedForwardEN;
input [31:0] FeedForwardData;
input [31:0] Ki;
input [31:0] Kp;
input [31:0] NextPoint;
input [31:0] Target;
output [11:0] PIDResult;
reg [11:0] PIDResult;
reg [31:0] SumError;
reg [31:0] Ki0,Kp0,Target0;
reg [31:0] KiSet,KpSet,TargetSet;
wire [48:0] Err_P;
wire [48:0] Err_I;
wire [31:0] Error,Error_Single;
wire [31:0] Result,Result0,Result1;
lpm_sub0 b2v_inst(.dataa(TargetSet),
.datab(NextPoint),
.result(Error));
lpm_add0 b2v_inst6(.dataa(SumError),
.datab(Error),
.result(Error_Single));
lpm_mult1 b2v_inst2(.dataa(Error_Single),
.datab(KiSet),
.result(Err_I));
lpm_mult1 b2v_inst5(.dataa(Error),
.datab(KpSet),
.result(Err_P));
lpm_add0 b2v_inst1(.dataa(Err_I[31:0]),
.datab(Err_P[31:0]),
.result(Result0));
lpm_add0 b2v_add3(.dataa(Result0),
.datab(FeedForwardData),
.result(Result1));
always @(posedge CLK)
begin
Ki0 <= Ki;
Kp0 <= Kp;
Target0 <= Target;
end
always @(posedge CLK)
begin
KiSet <= Ki0;
KpSet <= Kp0;
TargetSet <= Target0;
end
always @(posedge CLK)
begin
if (EN)
SumError <= Error_Single;
else
SumError <= 0;
end
assign Result = FeedForwardEN?Result1:Result0;
always @(posedge CLK)
begin
if (EN)
begin
if (Result[31]==1)
PIDResult <= 12'h000;
else if (Result[30:27]!=4'b0000)
PIDResult <= 12'hFFF;
else
PIDResult <= Result[26:15];
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -