EDA技術(shù)是以高級(jí)語(yǔ)言描述、系統(tǒng)級(jí)仿真和綜合技術(shù)為特征的第三代電路CAD技術(shù)。在我們研制的數(shù)據(jù)采集板上使用了該先進(jìn)技術(shù),采集板主要完成如下功能:A/D轉(zhuǎn)換、數(shù)據(jù)緩存、數(shù)據(jù)傳輸。該板使用一片ALTERA公司的FPGA(Field Programmable Gate Array)芯片F(xiàn)LEX10K,完成了對(duì)A/D轉(zhuǎn)換的控制,數(shù)據(jù)緩存,以及采集板與計(jì)算機(jī)的數(shù)據(jù)異步傳輸(UART)功能。如果用傳統(tǒng)的設(shè)計(jì)方法完成上述功能至少需要使用MCU(微控制單元)、RAM、RS232的接口芯片等多塊芯片。正是使用了先進(jìn)的EDA技術(shù)使系統(tǒng)更緊湊、更可靠。本文將簡(jiǎn)要介紹FPGA的結(jié)構(gòu),開(kāi)發(fā)方法,以及在我們的采集板中的應(yīng)用。
大部分的FPGA是采用基于SRAM的查找表邏輯形成結(jié)構(gòu)的,用SRAM來(lái)形成邏輯函數(shù)發(fā)生器,我們的數(shù)據(jù)采集板中的FLEX10K芯片主要由嵌入式陣列塊、邏輯陣列塊、快速通道和I/O單元四部分構(gòu)成。其中邏輯陣列塊由邏輯單元組成,邏輯單元又是由查找表與附加電路組成。邏輯陣列塊是形成邏輯功能的基礎(chǔ),多個(gè)邏輯陣列塊可以級(jí)聯(lián)構(gòu)成更大的單元??焖偻ǖ涝谶壿媶卧cI/O單元間起連接作用。嵌入式陣列塊是在輸入、輸出口帶有寄存器的RAM塊,可以提供存儲(chǔ)器的功能。
我們用的是ALTERA公司的器件,所以開(kāi)發(fā)軟件平臺(tái)使用MAXPLUSII,開(kāi)發(fā)硬件平臺(tái)使用GW48系統(tǒng),HDL語(yǔ)言我們選擇了Verilog,verilog語(yǔ)言一般用于硅片邏輯功能設(shè)計(jì)。
采集板數(shù)據(jù)采集模塊由A/D轉(zhuǎn)換芯片ADC0809來(lái)實(shí)現(xiàn)。我們利用FLEX10K芯片的內(nèi)部邏輯陣列塊實(shí)現(xiàn)數(shù)據(jù)采集控制器ADCINT;利用其內(nèi)部的嵌入式陣列塊形成一個(gè)先進(jìn)先出的存儲(chǔ)器FIFO;利用快速通道和I/O單元實(shí)現(xiàn)向主機(jī)傳送數(shù)據(jù)的通用異步收發(fā)器UART。其系統(tǒng)框圖如圖1:
圖1 采集板系統(tǒng)框圖
A/D轉(zhuǎn)換器件ADC0809為單極性輸入,8位轉(zhuǎn)換逐次逼近A/D轉(zhuǎn)換器,可對(duì)0~5V的INT0~I(xiàn)NT7的8路模擬電壓信號(hào)分時(shí)進(jìn)行轉(zhuǎn)換,當(dāng)時(shí)鐘頻率為500 KHz,A/D完成一次轉(zhuǎn)換的時(shí)間為130us。CBA作為8路通道選擇地址,ALE是地址鎖存允許信號(hào),EOC為狀態(tài)結(jié)束標(biāo)志,START為轉(zhuǎn)換啟動(dòng)信號(hào),上升沿有效;OE為數(shù)據(jù)輸出允許端,〔D0…D7〕為數(shù)據(jù)輸出端。
可用硬件描述語(yǔ)言按有限狀態(tài)機(jī)模式編寫(xiě)一個(gè)模塊實(shí)現(xiàn)控制器的定制。其中:ST0初始態(tài),ST1發(fā)送地址鎖存信號(hào)ALE,ST2發(fā)送啟動(dòng)轉(zhuǎn)換信號(hào)START,ST3檢測(cè)轉(zhuǎn)換結(jié)束信號(hào)EOC的下降沿,ST4檢測(cè)EOC的上升沿,ST5發(fā)送輸出使能信號(hào)OE,ST6發(fā)送輸出鎖存信號(hào)LOCK。
控制器的源程序如下:
利用FLEX10K內(nèi)部固有的存儲(chǔ)模塊,通過(guò)MAXPLUSII的兆功能塊定制一個(gè)帶20字節(jié)緩存的FIFO存儲(chǔ)器,因?yàn)橄热胂瘸龃鎯?chǔ)器不需要尋址,可以節(jié)省時(shí)鐘周期,適合動(dòng)態(tài)采集數(shù)據(jù).存儲(chǔ)器和控制器組成的控制存儲(chǔ)電路AD_FIFO如下圖2:
圖2 控制存儲(chǔ)電路AD_FIFO電路圖
圖中ADCINT就是采集控制模塊,F(xiàn)IFO2是先進(jìn)先出存儲(chǔ)模塊。AD_FIFO的工作分兩個(gè)階段,即采樣階段和數(shù)據(jù)讀取階段,在采樣階段WR_EN為高電平,CLK使能,ADCINT開(kāi)始工作,讀請(qǐng)求被禁止,當(dāng)某一采樣周期結(jié)束,ADCINT發(fā)LOCK信號(hào),把出現(xiàn)在D[7.0]的采樣數(shù)據(jù)存入FIFO2中。
在完成采樣后進(jìn)入讀取階段,在讀取階段,WR_EN為低電平,F(xiàn)IFO2的讀時(shí)鐘CLOCK由RD_EN控制,在每個(gè)上升沿,F(xiàn)IFO2的數(shù)據(jù)將逐一出現(xiàn)在端口Q[7.0]上。
應(yīng)當(dāng)注意的是,讀時(shí)鐘與采樣時(shí)鐘的區(qū)別:采樣時(shí)鐘是ADCINT的LOCK信號(hào)形成的,要與A/D轉(zhuǎn)換速度匹配;讀時(shí)鐘是由外部時(shí)鐘發(fā)生器的RD_EN形成的,同時(shí)讀時(shí)鐘應(yīng)該與后面的數(shù)據(jù)傳輸?shù)牟ㄌ芈势ヅ洹?/p>
UART是基于RS232協(xié)議的通用異步收發(fā)方式,有免費(fèi)的軟ip core經(jīng)過(guò)裁剪功能后,再經(jīng)過(guò)MAXPLUSII編譯和綜合到我們的FPGA中。在我們的采集板中的UART只集成了發(fā)送器的功能,確定發(fā)送方式為:波特率為9600bps;幀格式為,一個(gè)起始位、8個(gè)數(shù)據(jù)位、一個(gè)停止位。我們用16倍的發(fā)送速率做定時(shí)信號(hào),還需要做一個(gè)16倍波特率發(fā)生器。
FLEX10K芯片中功能模塊的連接情況如下圖3:
圖3 FLEX10K芯片內(nèi)功能模塊圖
圖中的CLK_PULSE單元用于為整個(gè)系統(tǒng)功能提供時(shí)鐘信號(hào),共需4種時(shí)鐘信號(hào):CLK_WRE采樣周期,CLK_RDE采樣數(shù)據(jù)的讀周期,CLK_WRN數(shù)據(jù)的傳輸周期,BCLK為16倍的波特率。
整個(gè)時(shí)序配合情況如下:CLK_WRE根據(jù)ADC0809的轉(zhuǎn)換速率130 US和設(shè)定的緩存區(qū)大小決定的采樣時(shí)間;CLK_RDE要根據(jù)緩存的數(shù)據(jù)以及UART的傳輸速率,決定的數(shù)據(jù)的讀時(shí)間;CLK_WRN要根據(jù)每幀的位數(shù)和發(fā)送波特率決定的傳輸時(shí)間;BCLK是波特率的16倍。在本系統(tǒng)中時(shí)序配合非常重要,它決定了數(shù)據(jù)傳輸是否能可靠實(shí)現(xiàn),因此我們除了要準(zhǔn)確計(jì)算各個(gè)時(shí)鐘周期外,還利用MAXPLUSII的時(shí)序仿真功能,分析整個(gè)系統(tǒng)功能是否正確。
在時(shí)序仿真正確的情況下,在我們的數(shù)據(jù)采集板上做了實(shí)際驗(yàn)證,實(shí)際驗(yàn)證中發(fā)現(xiàn)接受的數(shù)據(jù)有誤碼。經(jīng)分析后,發(fā)現(xiàn)是在傳輸中沒(méi)有考慮芯片延時(shí)造成的,經(jīng)過(guò)對(duì)時(shí)序的仔細(xì)調(diào)整后,最終解決了傳輸中的誤碼問(wèn)題。
[1] FLEX 10K Embedded Programmable Logic Device Family[EB/CD] .http://www.altera.com/literature/ds/archives/dsf10k.pdf.January 2003,Ver.4.2.
[2] Donald E.Thomas,Philip R.Moorby.The Verilog Hardware Description Language[M] .Fifth Edition.New York:Kluwer Academic Publishers,2002.