【文章內(nèi)容簡介】
139。oe=1表示從AD0809中讀取出值狀態(tài)4:ale=39。039。start=39。039。lock=39。139。oe=39。139。lock=1表示鎖存從AD0809中讀出的值其程序為:beginlock_t=lock。狀態(tài)轉(zhuǎn)換進程COM1:process(cs,eoc)begin case cs is when s0=next_state=s1。 when s1=next_state=s2。 when s2= if (eoc=39。139。) theneoc=1表明轉(zhuǎn)換結(jié)束 next_state=s3。 else next_state=s2。轉(zhuǎn)換未結(jié)束,繼續(xù)等待 end if。 when s3=next_state=s4。 when s4=next_state=s0。 when others=next_state=s0。 end case。end process COM1。狀態(tài)轉(zhuǎn)換進程COM2:process(cs)begin case cs is when s0=ale=39。039。start=39。039。lock=39。039。oe=39。039。 when s1=ale=39。139。start=39。139。lock=39。039。oe=39。039。start=1,ale=1表示開始轉(zhuǎn)換 when s2=ale=39。039。start=39。039。lock=39。039。oe=39。039。 when s3=ale=39。039。start=39。039。lock=39。039。oe=39。139。oe=1表示從AD0809中讀取出值 when s4=ale=39。039。start=39。039。lock=39。139。oe=39。139。lock=1表示鎖存從AD0809中讀出的值 when others=ale=39。039。start=39。039。lock=39。039。oe=39。039。 end case。end process COM2。 時序進程REG:process(clk,rst)begin if rst=39。039。 then cs=s0。 elsif clk39。event and clk=39。139。 then cs=next_state。 end if。end process REG。鎖存器進程LATCH:process(lock)begin if lock=39。139。 and lock39。event then regl=d。 end if。end process LATCH。ADC0809是8位模數(shù)轉(zhuǎn)換器,它的輸出狀態(tài)共有256種,如果輸入信號Ui為0~5V電壓范圍,則每兩個狀態(tài)值為5/(2561)。常用測量方法是:當(dāng)讀取到DB7~DB0轉(zhuǎn)換值是XXH時,電壓測量值為U≈XXH;考慮到直接使用乘法計算對應(yīng)的電壓值將耗用大量的FPGA內(nèi)部組件,本設(shè)計用查表命令來得到正確的電壓值。在讀取到ADC0809的轉(zhuǎn)換數(shù)據(jù)后,先用查表指令算出高、低4位的兩個電壓值,并分別用16位BCD碼表示;接著設(shè)計16位的BCD碼加法,如果每4位相加結(jié)果超過9需進行減10進1。這樣得到模擬電壓的BCD碼。其程序為:data1=0000000000000000 when datain(7 downto 4)=0000 else 0000001100010011 when datain(7 downto 4)=0001 else 0000011000100101 when datain(7 downto 4)=0010 else 0000100100111000 when datain(7 downto 4)=0011 else 0001001001010000 when datain(7 downto 4)=0100 else 0001010101100011 when datain(7 downto 4)=0101 else 0001100001110101 when datain(7 downto 4)=0110 else 0010000110001000 when datain(7 downto 4)=0111 else 0010010100000000 when datain(7 downto 4)=1000 else 0010100000010011 when datain(7 downto 4)=1001 else 0011000100100101 when datain(7 downto 4)=1010 else 0011010000111000 when datain(7 downto 4)=1011 else 0011011101010000 when datain(7 downto 4)=1100 else 0100000001100011 when datain(7 downto 4)=1101 else 0100001101110101 when datain(7 downto 4)=1110 else 0100011010001000 when datain(7 downto 4)=1111 else 0000000000000000。data2=0000000000000000 when datain(3 downto 0)=0000 else 0000000000100000 when datain(3 downto 0)=0001 else 0000000000111001 when datain(3 downto 0)=0010 else 0000000001011001 when datain(3 downto 0)=0011 else 0000000001111000 when datain(3 downto 0)=0100 else 0000000010011000 when datain(3 downto 0)=0101 else 0000000100010111 when datain(3 downto 0)=0110 else 0000000100110111 when datain(3 downto 0)=0111 else 0000000101010110 when datain(3 downto 0)=1000 else 0000000101110110 when datain(3 downto