URL
https://opencores.org/ocsvn/pid_controller/pid_controller/trunk
Subversion Repositories pid_controller
Compare Revisions
- This comparison shows the changes necessary to convert path
/pid_controller
- from Rev 3 to Rev 4
- ↔ Reverse comparison
Rev 3 → Rev 4
/trunk/RTL/PID.v
20,12 → 20,12
[31:0]un,sigma; read only through Wishbone interface, address: 0x20, 0x24 |
|
|
[4:0]of; overflow register, read only through Wishbone interface, address: 0x28 |
of[0]==1 : kpd overflow |
of[1]==1 : err[0] overflow |
of[2]==1 : err[1] overflow |
of[3]==1 : un overflow |
of[4]==1 : sigma overflow |
[4:0]OF; overflow register, read only through Wishbone interface, address: 0x28 |
OF[0]==1 : kpd overflow |
OF[1]==1 : err[0] overflow |
OF[2]==1 : err[1] overflow |
OF[3]==1 : un overflow |
OF[4]==1 : sigma overflow |
[0:15]rl; read lock, when asserted corelated reagister can not be read through Wishbone interface |
[0:7]wl; write lock, when asserted corelated reagister can not be written through Wishbone interface |
|
73,7 → 73,7
err_1_adr = 7, |
un_adr = 8, |
sigma_adr = 9, |
of_adr = 10; |
OF_adr = 10; |
|
wire rst; |
assign rst=~i_rst; |
204,9 → 204,9
reg rlerr_1; |
reg rla; |
reg rlsigma; |
reg rlof; |
reg rlOF; |
|
reg [4:0]of; |
reg [4:0]OF; |
reg [15:0]kpd; |
reg [15:0]err[0:1]; |
|
228,20 → 228,20
wire [31:0]sum; |
wire [31:0]product; |
|
wire of_addition[0:1]; |
assign of_addition[0]=(p[15]&&a[15]&&(!sum[15]))||((!p[15])&&(!a[15])&&sum[15]); |
assign of_addition[1]=(p[31]&&a[31]&&(!sum[31]))||((!p[31])&&(!a[31])&&sum[31]); |
wire OF_addition[0:1]; |
assign OF_addition[0]=(p[15]&&a[15]&&(!sum[15]))||((!p[15])&&(!a[15])&&sum[15]); |
assign OF_addition[1]=(p[31]&&a[31]&&(!sum[31]))||((!p[31])&&(!a[31])&&sum[31]); |
|
|
|
reg [31:0]reg_sum; |
reg [31:0]reg_product; |
reg reg_of_addition[0:1]; |
reg reg_OF_addition[0:1]; |
|
always@(posedge i_clk)begin |
reg_sum<=sum; |
reg_of_addition[0]<=of_addition[0]; |
reg_of_addition[1]<=of_addition[1]; |
reg_OF_addition[0]<=OF_addition[0]; |
reg_OF_addition[1]<=OF_addition[1]; |
reg_product<=product; |
end |
|
259,8 → 259,8
rlerr_1<=0; |
rla<=0; |
rlsigma<=0; |
rlof<=0; |
of<=0; |
rlOF<=0; |
OF<=0; |
kpd<=0; |
err[0]<=0; |
err[1]<=0; |
285,7 → 285,7
wlkd<=1; |
wlpv<=1; |
rlkpd<=1; |
rlof<=1; |
rlOF<=1; |
end |
else if(update_esu)begin |
state_2<=15'b00000000001000; |
299,7 → 299,7
rlerr_1<=1; |
rla<=1; |
rlsigma<=1; |
rlof<=1; |
rlOF<=1; |
end |
end |
15'b000000000000010: begin |
314,8 → 314,8
wlkd<=0; |
wlpv<=0; |
rlkpd<=0; |
rlof<=0; |
of[0]<=reg_of_addition[0]; |
rlOF<=0; |
OF[0]<=reg_OF_addition[0]; |
state_2<=15'b000000000000001; |
end |
15'b000000000001000: begin |
331,13 → 331,13
end |
15'b000000000100000: begin |
err[1]<=reg_sum[15:0]; |
of[2]<=of[1]; |
OF[2]<=OF[1]; |
|
state_2<=15'b000000001000000; |
end |
15'b000000001000000: begin |
err[0]<=reg_sum[15:0]; |
of[1]<=reg_of_addition[0]; |
OF[1]<=reg_OF_addition[0]; |
cout<=0; |
start<=1; |
state_2<=15'b000000010000000; |
374,8 → 374,8
|
a<=reg_product; |
sigma<=reg_sum; |
of[3]<=of[4]|reg_of_addition[1]; |
of[4]<=of[4]|reg_of_addition[1]; |
OF[3]<=OF[4]|reg_OF_addition[1]; |
OF[4]<=OF[4]|reg_OF_addition[1]; |
state_1<=1; |
|
state_2<=15'b010000000000000; |
384,13 → 384,13
15'b010000000000000: begin |
a<=reg_sum; //Kpd*err0-Kd*err1 |
p<=sigma; |
of[3]<=of[3]|reg_of_addition[1]; |
OF[3]<=OF[3]|reg_OF_addition[1]; |
state_1<=1; |
state_2<=15'b100000000000000; |
end |
15'b100000000000000: begin |
un<=reg_sum; |
of[3]<=of[3]|reg_of_addition[1]; |
OF[3]<=OF[3]|reg_OF_addition[1]; |
state_2<=15'b000000000000001; |
wlkp<=0; |
wlki<=0; |
402,7 → 402,7
rlerr_1<=0; |
rla<=0; |
rlsigma<=0; |
rlof<=0; |
rlOF<=0; |
end |
endcase |
end |
442,7 → 442,7
assign rdata[7]=err[1]; |
assign rdata[8]=un[15:0]; |
assign rdata[9]=sigma[15:0]; |
assign rdata[10]={11'b0,of}; |
assign rdata[10]={11'b0,OF}; |
`endif |
|
`ifdef wb_32bit |
456,7 → 456,7
assign rdata[7]={{16{err[1][15]}},err[1]}; |
assign rdata[8]=un; |
assign rdata[9]=sigma; |
assign rdata[10]={27'b0,of}; |
assign rdata[10]={27'b0,OF}; |
`endif |
|
`ifdef wb_64bit |
470,7 → 470,7
assign rdata[7]={{48{err[1][15]}},err[1]}; |
assign rdata[8]={{32{un[31]}},un}; |
assign rdata[9]={{32{sigma[31]}},sigma}; |
assign rdata[10]={59'b0,of}; |
assign rdata[10]={59'b0,OF}; |
`endif |
|
assign rdata[11]=0; |
481,7 → 481,7
|
|
wire [0:15]rl; |
assign rl={5'b0,rlkpd,rlerr_0,rlerr_1,rla,rlsigma,rlof,5'b0}; |
assign rl={5'b0,rlkpd,rlerr_0,rlerr_1,rla,rlsigma,rlOF,5'b0}; |
|
wire rack; // wishbone read acknowledged |
assign rack=(re&adr_check_1&(~rl[adr_1]))|(re&(~adr_check_1)); |
/trunk/doc/PID controller_UM.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream