【正文】
D開發(fā)軟件,支持原理圖,各種硬件描述語言以及多種設(shè)計輸入形式,自身帶有綜合器和仿真器,可以完成從硬件設(shè)計,軟件設(shè)計,仿真到硬件配置的完整設(shè)計流程。一般如果對系統(tǒng)了解很深,并且系統(tǒng)速率的要求較高,或這系統(tǒng)中如果時間特性要求較高,就可以采用這種方法。但語言輸入必須依賴綜合器,只有好的綜合器才能把語言綜合成優(yōu)化的電路。這樣就可以提高設(shè)計的速度和整個FPGA模塊的準(zhǔn)確度。(頻率為5khz)。 address_signal:out std_logic_vector(1 downto 0))。event and clk=39。 end if。 A/D轉(zhuǎn)換控制模塊ADC0809采樣原理比較簡單:首先我們給START一個有效的上升沿使0809復(fù)位,接著給它一個下降沿,隨后狀態(tài)信號EOC隨即變成低電平。下圖是ADC0809的采樣狀態(tài)圖。START=39。OE=39。139。139。 WHEN st2=ALE=39。LOCK=39。 IF (EOC=39。 END IF。039。139。START=39。OE=39。 END CASE。139。LATCH1: PROCESS(LOCK) BEGIN IF LOCK=39。 END IF。此種通信方式比較簡單,并且 FPGA的IO口也支持此種通信協(xié)議。實(shí)現(xiàn)RS232電平和TTL/CMOS電平轉(zhuǎn)換可以用接口芯片來實(shí)現(xiàn),實(shí)現(xiàn)數(shù)據(jù)的串行到并行轉(zhuǎn)換用的是UART,它們是實(shí)現(xiàn)串行通信必不可少的兩個部分。因此,異步通訊簡單、靈活,對同步時鐘要求可低些。根據(jù)串行通信的協(xié)議,發(fā)送串行數(shù)據(jù)一般是:1個起始位,1個數(shù)據(jù)位,1個或多個停止位,這樣,發(fā)送起始位以后表明傳輸開始。 狀態(tài)機(jī)signal state : state_type:=xidle。139。039。 控制發(fā)送位數(shù) begin if rising_edge(bclk) then if reset=39。139。 跳轉(zhuǎn)到發(fā)送初始位狀態(tài) else state=xidle。 else t16:=t16+1。039。 else state=xshift。 state=xwait。 輸出數(shù)據(jù)位的序號自動加1 state=xwait。 end if。前面所介紹的通道選擇控制、A/D轉(zhuǎn)換控制、串口通信模塊所需的時鐘都需要將系統(tǒng)時鐘50Mhz進(jìn)行分頻,分別是10000分頻、100分頻、1250分頻。beginif(clk_in39。elsecount:=count+1。elseclk_out=39。end process。在FPGA的仿真中進(jìn)行功能仿真有兩種激勵的輸入方式,一種是傳統(tǒng)的波形輸入,另一種則是使用Testbench。 通道選擇控制模塊仿真及調(diào)試 II軟件進(jìn)行編譯,順利通過編譯后生成模塊圖。 A/D轉(zhuǎn)換控制模塊仿真及調(diào)試 II軟件進(jìn)行編譯,順利通過編譯后生成模塊圖。綜上所述,A/D轉(zhuǎn)換控制模塊設(shè)計成功。由于漏磁檢測系統(tǒng)一般數(shù)據(jù)量大,所以上位機(jī)設(shè)置的波特率為56000bps,故fpga串口發(fā)送的頻率為56000。從中我們可以看出,系統(tǒng)占用的IO口不多,而底層的邏輯門電路占用的也不大,這表明我們的設(shè)計還較合理。前面說道過,這個實(shí)驗(yàn)如果能在一根有缺陷的管道中進(jìn)行,那么就能看到某個位置的曲線與周圍曲線有明顯不同,技術(shù)人員就能分析出管道的缺陷在哪。參考文獻(xiàn)[1].蔣奇,[J].機(jī)電設(shè)備,2002(2):1620.[2].[D].沈陽:沈陽工業(yè)大學(xué),2005.[3].[M]。如果沒有他們的幫助,我不可能完成的這么快,也不可能考慮的如現(xiàn)在全面。他們之中有的比我有經(jīng)驗(yàn),懂得比我多,當(dāng)碰到難題我們就一起討論,有不懂的地方他們也是不遺余力地教我。use 。 reset:in std_logic。architecture behavior of transfer is type state_type is (xidle,xstart,xwait,xshift)。 輸出數(shù)據(jù) begin tx_reg=39。 39。 計數(shù)器,用來發(fā)送 variable bitt: integer range 0 to 9 :=0。 異步初始化,狀態(tài)機(jī)設(shè)置為空閑狀態(tài) txds=39。 then 開始發(fā)送信號觸發(fā) state=xstart。 t16:=0。 txds=39。 t16:=0。 else t16:=t16+1。 數(shù)據(jù)位輸出,只有這個狀態(tài)決定輸出,然后跳轉(zhuǎn)狀態(tài)保持?jǐn)?shù)據(jù)位 bitt:=bitt+1。 end if。 end behavior。 clk_out:out std_logic )。beginif(clk_in39。elsecount:=count+1。elseclk_out=39。end process。entity fenpin100 isport( clk_in:in std_logic。beginprocess(clk_in)variable count:integer range 0 to 99。)thenif(count=99)then count:=0。039。end if。use 。architecture one of fenpin is after fen pin ,the period is (5khz) constant m:integer:=5000。139。if(countm)thenclk_out=39。end if。library ieee。 address_signal:out std_logic_vector(1 downto 0))。event and clk=39。 end if。end one 。ENTITY AD_CTRL ISPORT( CLK,EOC:IN STD_LOGIC。 END AD_CTRL。 SIGNAL REG_0:STD_LOGIC_VECTOR(7 DOWNTO 0)。START=39。OE=39。139。139。 WHEN st2=ALE=39。LOCK=39。 IF (EOC=39。 END IF。039。139。START=39。OE=39。 END CASE。139。LATCH1: PROCESS(LOCK) BEGIN IF LOCK=39。 END