【正文】
139。 elsif (clk39。039。end process。 end case。) then case PidStateOut is when x80 =pidcai=CONV_INTEGER(caiaddata)。event and clk=39。) then pidcai=0。process(clk,reset_n,PidStateOut) begin if(reset_n=39。 end if。 when others =null。139。 elsif (clk39。039。end process。 end case。 when others = ram_datardclk=39。 else q2=x1000。039。139。 。 when x54 = ram_datardclk=39。 when x53 = ram_datardclk=39。039。139。PidStateOut(6 downto 3)。 設(shè)定值 end if。 when x4f = if(powerup=x55AA) then q1=ram_datain。 when x4e = ram_datardclk=39。 when x4d = ram_datardclk=39。039。139。 。 when x4a = ram_datardclk=39。 when x49 = ram_datardclk=39。 when x48 = ram_datainadr=0000amp。 else q0=x0400。039。139。 。 when x44 = ram_datardclk=39。 when x43 = ram_datardclk=39。039。139。PidStateOut(6 downto 3)。 采樣周期 end if。 when x3f = if(powerup=x55aa) then caitime=CONV_STD_LOGIC_VECTOR(ram_datain,16)。 when x3e = ram_datardclk=39。 when x3d = ram_datardclk=39。039。139。 。 when x3a = ram_datardclk=39。 when x39 = ram_datardclk=39。 when x38 = ram_datainadr=0000amp。 else caisetdata=x1000。039。139。 。 when x34 = ram_datardclk=39。 when x33 = ram_datardclk=39。039。139。PidStateOut(6 downto 3)。 end if。 when x2f = if(powerup=x55aa) then caidatazero=ram_datain。 when x2e = ram_datardclk=39。 when x2d = ram_datardclk=39。039。139。 。 when x2a = ram_datardclk=39。 when x29 = ram_datardclk=39。 when x28 = ram_datainadr=0000amp。 else caidatamin=x8000。039。139。 。 when x24 = ram_datardclk=39。 when x23 = ram_datardclk=39。039。139。PidStateOut(6 downto 3)。 end if。 when x1f = if(powerup=x55aa) then caidatamax=ram_datain。 when x1e = ram_datardclk=39。 when x1d = ram_datardclk=39。039。139。 。 when x1a = ram_datardclk=39。 when x19 = ram_datardclk=39。 when x18 = ram_datainadr=0000amp。039。139。 。 when x14 = ram_datardclk=39。 when x13 = ram_datardclk=39。039。139。PidStateOut(6 downto 3)。139。 采樣周期 elsif (clk39。 PID運(yùn)算參數(shù) q2=x1000。 設(shè)定值 q0=x0400。 caidatazero=x000a。 caidatamax=x7fff。039。039。xxxcaiaddata=caiaddata。 end if。 caiaddata=conv_signed(dddsum,16)。 end loop。 dddsum:=0。 if(caiadcount=00010000) then caiadcount:=00000000。 ddd(caiadcountx):=addatax。) then addatax:=CONV_INTEGER(addata)。event and caitimemsctrly=39。 caiadcount:=00000000。) then for i in 0 to 15 loop ddd(i):=0。 begin if(reset_n=39。variable addatax:integer range 134217727 to 134217727。variable caiadcount:std_logic_vector(7 downto 0)。 PidStateOut=PidStateNext。 end if。 when others = PidStateNext=PidStateNext+1。 when xf6= PidStateNext=x00。 when xf4= PidStateNext=x00。 when xf2= PidStateNext=x00。 when xf0= PidStateNext=x00。139。 PidStateNext=x00。) then case PidStatePresent is when x00= PidStateCtrl=39。event and clk=39。039。) then PidStateNext=x00。process(clk,reset_n,PidStatePresent) begin if(reset_n=39。 end if。 end if。139。 process(PidStateNext,caitimectrlx) begin if(PidStateNext=x00) then if(caitimectrlx39。 caitimectrly=caitimectrlx。 end if。039。139。139。 process(caicounty,clk) begin if (clk39。 caicounty=caicount。 caicount:=caicount+1。) then if(caicount=caitimey) then caicount:=x0000。event and caitimemsctrl=39。) then caicount:=x0000。 begin if(reset_n=39。 end process。 else caitimey=caitime。039。caitimemsctrly=caitimemsctrl。 end if。 end if。039。139。039。) then if(caicountms=x09c4) then caicountms:=x0000。event and clk=39。 caicountms:=x0000。) then caitimemsctrl=39。 begin if(reset_n=39。 上電參數(shù)signal powerup:std_logic_vector(15 downto 0)。 signal DaStateNext,DaStatePresent:std_logic_vector(2 downto 0)。signal pidu2:integer range 134217727 to 134217727。signal pidq00,pidq11,pidq22:integer range 134217727 to 134217727。signal pidset,pidcai,pidzero,pidcaizero:integer range 134217727 to 134217727。采樣值,采樣周期signal caitime:std_logic_vector(15 downto 0)。設(shè)定值signal caisetdata:signed(15 downto 0)。 TYPE ad_average IS ARRAY (0 TO 15) OF integer range 134217727 to 134217727。 signal caicounty:std_logic_vector(15 downto 0)。 signal caitimectrlx:std_logic。 signal PidStateOut:std_logic_vector(7 downto 0)。 signal caitimectrly:std_logic。end entity pid。 ram_datawr:out std_logic。 ram_dataout:out std_logic_vector(15 downto 0)。 ram_datainadr:out std_logic_vector(7 downto 0)。 addata:in signed(15 downto 0)。 reset_n,clk:in std_logic。 xxxcaitimemsctrly:out std_logic。use 。use 。 FIR 軟核 PID控制模塊主要完成對(duì)系統(tǒng)參數(shù)的計(jì)算并對(duì)輸出進(jìn)行控制,自適應(yīng)PID完成的是實(shí)現(xiàn)參數(shù)的自動(dòng)調(diào)節(jié)和運(yùn)算。BEGIN fir_st_inst : fir_st PORT MAP ( clk = clk, rst = rst, data_in = data_in, fir_result = fir_result, done = done, rdy_to_ld = rdy_to_ld )。 rdy_to_ld : OUT STD_LOGIC )。 fir_result : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)。 rst : IN STD_LOGIC。attribute altera_attribute of SYN: ARCHITECTURE is suppress_da_rule_internal=z100。END fir。 done : OUT STD_LOGIC。 data_in : IN STD_LOGIC_VECTOR (11 DOWNT