EDA課程設(shè)計(jì)-數(shù)字電壓表-代碼及-報(bào)告_第1頁
EDA課程設(shè)計(jì)-數(shù)字電壓表-代碼及-報(bào)告_第2頁
EDA課程設(shè)計(jì)-數(shù)字電壓表-代碼及-報(bào)告_第3頁
EDA課程設(shè)計(jì)-數(shù)字電壓表-代碼及-報(bào)告_第4頁
EDA課程設(shè)計(jì)-數(shù)字電壓表-代碼及-報(bào)告_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一部分項(xiàng)目名稱、內(nèi)容與要求項(xiàng)目名稱:數(shù)字電壓表設(shè)計(jì)1.1設(shè)計(jì)內(nèi)容利用FPGA與模數(shù)轉(zhuǎn)換器ADC0809設(shè)計(jì)一個(gè)數(shù)字電壓表,能夠測量0~5V之間的直流電壓,用四個(gè)數(shù)碼管顯示被測電壓,要求精確到小數(shù)點(diǎn)后三位數(shù)字。了解數(shù)字電壓表的工作原理,掌握可編程邏輯器件與模數(shù)轉(zhuǎn)換器之間的接口電路設(shè)計(jì)及調(diào)試方法。下載并測試電路功能,分析芯片資源的占用情況。1.2具體要求1)、能正確測量0-5∨模擬電壓,誤差<1%,數(shù)字電壓值分別由四個(gè)數(shù)碼管顯示。(2)、FPGA芯片產(chǎn)生ADC0809控制信號和七段顯示器斷碼和位碼等。(3)、ADC0809芯片實(shí)現(xiàn)8位模數(shù)轉(zhuǎn)換,輸入0-5∨,輸出00H-FFH。(4)、ADC0809輸出00H-FFH送FPGA芯片處理為十進(jìn)制數(shù)百十個(gè)等位,并產(chǎn)生動(dòng)態(tài)顯示位碼和斷碼。(5)、FPGA芯片產(chǎn)生ADC0809芯片需要寫、讀和片選信號等,注意時(shí)序。(6)、了解掌握A/D(模數(shù))轉(zhuǎn)換器芯片ADC0809的轉(zhuǎn)換原理、管腳定義以及實(shí)際用法。第二部分:系統(tǒng)整體架構(gòu)(ArchitectureDescription)2.1設(shè)計(jì)思路數(shù)字電壓表(DigitalVoltmeter)簡稱DVM,是一種用數(shù)字顯示的電壓測量儀表。由于數(shù)字電壓表具有讀數(shù)準(zhǔn)確方便、精度高、誤差小、靈明度高和分辨率高、測量速度快等特點(diǎn)而備受青睞。其基本理是采用數(shù)字化測量技術(shù),對直流電壓進(jìn)行模數(shù)轉(zhuǎn)換,轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示。由此可知數(shù)字電壓表的設(shè)計(jì)應(yīng)包括三個(gè)主要部分:作為電壓采樣端口的模數(shù)轉(zhuǎn)換單元、數(shù)據(jù)處理單元及電壓值顯示單元。設(shè)計(jì)要求利用ADC0809模數(shù)轉(zhuǎn)換器,F(xiàn)PGA作為數(shù)據(jù)處理的核心器件,用LED和數(shù)碼管進(jìn)行電壓值的顯示。系統(tǒng)結(jié)構(gòu)框圖如下圖所示。2.2系統(tǒng)原理(包含:框圖等闡述)與設(shè)計(jì)說明等內(nèi)容1、模數(shù)轉(zhuǎn)換器工作原理A/D轉(zhuǎn)換器芯片ADC0809簡介8路模擬信號的分時(shí)采集,片內(nèi)有8路模擬選通開關(guān),以及相應(yīng)的通道抵制鎖存用譯碼電路,其轉(zhuǎn)換時(shí)間為100μs左右。輸入電壓范圍0~5V,該芯片內(nèi)部有輸出數(shù)據(jù)鎖存器。ADC0809芯片外引腳如下所示。其中VIN(+)、VIN(-)為ADC0809的模擬信號輸入端,用以接受單極性、雙極性或差模輸入信號;D0~D7為A/D轉(zhuǎn)換器數(shù)字信號輸出端,CLKIN為外電路提供的時(shí)鐘脈沖輸入端,頻率限制在100KHz~1460KHz;CLKR為內(nèi)部時(shí)鐘發(fā)生器外接電阻端,與CLKIN端配合可有芯片自身產(chǎn)生時(shí)鐘脈沖,頻率為1/1.1RC。ADC0809的工作時(shí)序,當(dāng)片選信號CS與寫輸入信號WR同時(shí)為低電平時(shí),A/D轉(zhuǎn)換器啟動(dòng),在WR上升沿后100us完成模數(shù)轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入芯片內(nèi)部的輸出數(shù)據(jù)鎖存器,如圖7-3(a)所示。轉(zhuǎn)換結(jié)束輸出信號INTR自動(dòng)變?yōu)榈碗娖?,表示本次轉(zhuǎn)換已結(jié)束。如CS、讀輸入信號RD同時(shí)為低電平,則數(shù)據(jù)鎖存器三態(tài)門打開,數(shù)字信號送出至輸出端D0~D7,RD高電平到來后數(shù)據(jù)鎖存器三態(tài)門回到高阻狀態(tài)。2.數(shù)據(jù)處理及顯示單元FPGA芯片負(fù)責(zé)ADC0809A/D轉(zhuǎn)換過程的啟動(dòng)以及轉(zhuǎn)換數(shù)據(jù)的讀取。同時(shí),把讀取的8位二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成便于輸出的3位LED段碼送給LED數(shù)碼管顯示。因此FPGA部分的程序設(shè)計(jì)應(yīng)包括ADC0809轉(zhuǎn)換接口控制模塊、數(shù)據(jù)轉(zhuǎn)換模塊、譯碼模塊,F(xiàn)PGA電路設(shè)計(jì)原理。本設(shè)計(jì)采用5V,由于模數(shù)轉(zhuǎn)換器件ADC0809的數(shù)字輸出為8位,則電壓的最小分辨率為0.02V,也就是說若轉(zhuǎn)換后的數(shù)據(jù)為00H,則對應(yīng)的電壓值為0V,轉(zhuǎn)換后的數(shù)據(jù)為01H,則對應(yīng)電壓值為0.02V,以此類推,若將轉(zhuǎn)換數(shù)據(jù)以一定的規(guī)則從小到大存放,則可得到轉(zhuǎn)換數(shù)據(jù)與實(shí)際電壓值,以及數(shù)據(jù)存放地址間的對應(yīng)關(guān)系見表7-1.若將電壓數(shù)值的每一位用4位BCD碼表示(不包括小數(shù)點(diǎn)),則可得如表7-1所示的高四位BCD碼和低四位BCD碼。ADC0809轉(zhuǎn)換數(shù)據(jù)與實(shí)際電壓值對應(yīng)關(guān)系表7-1地址高四位字節(jié)高四位電壓值高四位BCD碼地址高四位字節(jié)高四位電壓值高四位BCD碼00H00000.000000H20H00000.000000H02H00010.320032H22H00010.020002H04H00100.640064H24H00100.040004H06H00110.960096H26H00110.060006H08H01001.280128H28H01000.080008H0AH01011.600160H2AH01010.100010H0CH01101.920192H2CH01100.120012H0EH01112.240224H2EH01110.140014H10H10002.560256H30H10000.160016H12H10012.880288H32H10010.180018H14H10103.200320H34H10100.200020H16H10113.520352H36H10110.220022H18H11003.840384H38H11000.240024H1AH11014.160416H3AH11010.260026H1CH11104.480448H3CH11100.280028H1EH11114.800480H3EH11110.300030H分析表7-1的數(shù)據(jù),可知數(shù)據(jù)轉(zhuǎn)換模塊的設(shè)計(jì)可以有兩種方法:查表法和計(jì)算法,下面對計(jì)算法進(jìn)行介紹。計(jì)算法的設(shè)計(jì)思路如下:由表7-1可知,如果將轉(zhuǎn)換后的高、低四位字節(jié)數(shù)據(jù)看做是一個(gè)8位二進(jìn)制數(shù)的話,電壓值與轉(zhuǎn)換后的數(shù)據(jù)之間有一個(gè)2倍的關(guān)系(不考慮小數(shù)點(diǎn)),假設(shè)轉(zhuǎn)換后的數(shù)據(jù)為“11011110”,“11011110”對應(yīng)的十進(jìn)制數(shù)為222,222*2=444,與“11011110”對應(yīng)的4.44V電壓值相等,而十進(jìn)制數(shù)的顯示可以通過對10取模和取余的方法依次獲得個(gè)位、十位、百位,分別顯示即可,顯示時(shí)需要在最高位后加一個(gè)小數(shù)點(diǎn)顯示。如果采用計(jì)算法實(shí)現(xiàn)數(shù)據(jù)處理,F(xiàn)PGA設(shè)計(jì)中需要采用乘法、除法電路才能實(shí)現(xiàn)數(shù)據(jù)處理。數(shù)據(jù)處理電路流程圖如圖3.4所示。開始開始啟動(dòng)ADC0804等待ADC0804結(jié)束信號END?Y啟動(dòng)數(shù)據(jù)處理電路N掃描顯示結(jié)束2.3創(chuàng)新點(diǎn)與原創(chuàng)性內(nèi)容總體來說本次實(shí)訓(xùn)的代碼還是從圖書館和網(wǎng)上查找的,可并沒那么順利的將實(shí)訓(xùn)做得達(dá)到要求,本次實(shí)訓(xùn)本組在查閱的資料里大膽組合創(chuàng)新(采用AD控制元件,BCD8位轉(zhuǎn)12位,三選一數(shù)據(jù)選擇器,位選信號產(chǎn)生器,三進(jìn)制計(jì)數(shù)器,七段譯碼器,小數(shù)點(diǎn)產(chǎn)生器)模塊,除了AD控制元件模塊外后面的模塊本組就利用了一個(gè)代碼將其終合,這樣減少了連線,更為簡潔。最后在實(shí)踐的面前結(jié)果就在面前。第三部分系統(tǒng)設(shè)計(jì)(含HDL或原理圖輸入設(shè)計(jì))3.1HDL代碼BCD8位轉(zhuǎn)12位,三選一數(shù)據(jù)選擇器,位選信號產(chǎn)生器,三進(jìn)制計(jì)數(shù)器,七段譯碼器,小數(shù)點(diǎn)產(chǎn)生器)終合模塊代碼libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;ll;entityADCCLisport(clk:instd_logic;a:instd_logic_vector(7downto0);rd,wr,cs:outstd_logic;da:outstd_logic_vector(7downto0);w:outstd_logic_vector(2downto0));endADCCL;architecturebehaveofADCCLissignaldaa:std_logic_vector(7downto0);signalp:std_logic;signalwei:std_logic_vector(2downto0);signalq:integerrange0to9;signalwqian:integerrange0to5;signalwbai:integerrange0to9;signalwshi:integerrange0to9;signalwge:integerrange0to9;beginprocess(clk,a)variableqq:integerrange0to6000000;variableqian:integerrange0to5;variablebai:integerrange0to9;variableshi:integerrange0to9;variablege:integerrange0to9;variablebaii:integerrange0to1000000;variableshll:integerrange0to100000;variablegee:integerrange0to10000;beginqq:=conv_integer(a)*19610;ifqq>=0andqq<=999999thenqian:=0;elsifqq>=1000000andqq<=1999999thenqian:=1;elsifqq>=2000000andqq<=2999999thenqian:=2;elsifqq>=3000000andqq<=3999999thenqian:=3;elsifqq>=4000000andqq<=4999999thenqian:=4;elsifqq>=5000000andqq<=5999999thenqian:=5;elseqian:=0;endif;baii:=(qq-qian*1000000);ifbaii>=0andbaii<=99999thenbai:=0;elsifbaii>=100000andbaii<=199999thenbai:=1;elsifbaii>=200000andbaii<=299999thenbai:=2;elsifbaii>=300000andbaii<=399999thenbai:=3;elsifbaii>=400000andbaii<=499999thenbai:=4;elsifbaii>=500000andbaii<=599999thenbai:=5;elsifbaii>=600000andbaii<=699999thenbai:=6;elsifbaii>=700000andbaii<=799999thenbai:=7;elsifbaii>=800000andbaii<=899999thenbai:=8;elsifbaii>=900000andbaii<=999999thenbai:=9;elsebai:=0;endif;shll:=((qq-qian*1000000)-bai*100000);ifshll>=0andshll<=9999thenshi:=0;elsifshll>=10000andshll<=19999thenshi:=1;elsifshll>=20000andshll<=29999thenshi:=2;elsifshll>=30000andshll<=39999thenshi:=3;elsifshll>=40000andshll<=49999thenshi:=4;elsifshll>=50000andshll<=59999thenshi:=5;elsifshll>=60000andshll<=69999thenshi:=6;elsifshll>=70000andshll<=79999thenshi:=7;elsifshll>=80000andshll<=89999thenshi:=8;elsifshll>=90000andshll<=99999thenshi:=9;elseshi:=0;endif;gee:=(((qq-qian*1000000)-bai*100000)-(shi*10000));ifgee>=0andgee<=999thenge:=0;elsifgee>=1000andgee<=1999thenge:=1;elsifgee>=2000andgee<=2999thenge:=2;elsifgee>=3000andgee<=3999thenge:=3;elsifgee>=4000andgee<=4999thenge:=4;elsifgee>=5000andgee<=5999thenge:=5;elsifgee>=6000andgee<=6999thenge:=6;elsifgee>=7000andgee<=7999thenge:=7;elsifgee>=8000andgee<=8999thenge:=8;elsifgee>=9000andgee<=9999thenge:=9;elsege:=0;endif;wqian<=qian;wbai<=bai;wshi<=shi;wge<=ge;endprocess;process(clk)variablecnt:std_logic_vector(2downto0);beginifclk'eventandclk='1'thenifcnt<3thencnt:=cnt+1;elsecnt:="000";p<=notp;endif;wei<=cnt;casecntiswhen"000"=>q<=wqian;when"001"=>q<=wbai;when"010"=>q<=wshi;when"011"=>q<=wge;whenothers=>null;endcase;endif;wr<=p;rd<='1';cs<='0';endprocess;process(q)begincaseqiswhen0=>daa<="11111100";when1=>daa<="01100000";when2=>daa<="11011010";when3=>daa<="11110010";when4=>daa<="01100110";when5=>daa<="10110110";when6=>daa<="10111110";when7=>daa<="11100000";when8=>daa<="11111110";when9=>daa<="11110110";whenothers=>null;endcase;endprocess;process(wei,daa)beginifwei="000"thenw<=wei;da<=daaor"00000001";elsew<=wei;da<=daa;endif;endprocess;endbehave;AD控制元件代碼IBRARYieee;--A/D0809

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;entityadis

port(ST,eoc:instd_logic;--控制端口

d:instd_logic_vector(7downto0);

oe,sta,ale,adda:outstd_logic;

q:outstd_logic_vector(7downto0));

endad;architectureaofadis

typestatesis(st0,st1,st2,st3,st4,st5,st6);--7個(gè)狀態(tài)

signalc_state,n_state:states:=st0;

signalregl:std_logic_vector(7downto0);

signallock:std_logic;

begin

adda<='1';

com:process(c_state,eoc)

begin

casec_stateis

whenst0=>ale<='0';sta<='0';oe<='0';lock<='0';

n_state<=st1;

whenst1=>ale<='1';sta<='0';oe<='0';lock<='0';

n_state<=st2;

whenst2=>ale<='0';sta<='1';oe<='0';lock<='0';

n_state<=st3;

whenst3=>ale<='0';sta<='0';oe<='0';lock<='0';

if(eoc='1')thenn_state<=st4;

elsen_state<=st3;――eoc為‘1’轉(zhuǎn)換結(jié)束進(jìn)入下一狀態(tài)

endif;――否則繼續(xù)轉(zhuǎn)換

whenst4=>ale<='0';sta<='0';oe<='1';lock<='0';

n_state<=st5;

whenst5=>ale<='0';sta<='0';oe<='0';lock<='1';

n_state<=st6;

whenst6=>ale<='0';sta<='0';oe<='0';lock<='1';

n_state<=st0;

whenothers=>n_state<=st0;

endcase;

endprocesscom;

reg:process(st)

begin

if(st'eventandst='1')then

c_state<=n_state;

endif;

endprocessreg;

lo:process(lock)--鎖存

begin

if(lock'eventandlock='1')then

regl<=d;

endif;

endprocesslo;

q<=regl;

enda;3.2系統(tǒng)整體電路圖(或RTL級電路圖)第四部分:系統(tǒng)仿真(SimulationWaveform)系統(tǒng)仿真圖如圖:仿真前輸入設(shè)置圖:功能仿真圖:時(shí)序仿真圖:第五部分:FPGA實(shí)現(xiàn)(FPGAImplementation)1、硬件驗(yàn)證在前兩次代碼無誤但下載到芯片硬件驗(yàn)證,始終不能滿足要求時(shí),經(jīng)過查閱資料和老師指導(dǎo)。和本組成員的不放棄的努力下。改正過RTL原理圖后,懷著試一試的態(tài)度和必勝的心態(tài)又一次下載到硬件驗(yàn)證。2、操作過程下載成功后,我們可以通過AD裝換芯片ADC0809(詳見附錄)的功能,通過:A/B/C三段的不同84321BCD碼狀態(tài)來得到此芯片八個(gè)頻道具體是哪一頻道。(注:000選CH0;001選CH1…)然后將相應(yīng)的頻道接到直流電壓(0——5V)。當(dāng)然輸出顯示為數(shù)碼管顯示和3個(gè)LED燈(3個(gè)LED燈主要是顯示的是CS,RD,WD)。3、結(jié)果等說明在實(shí)驗(yàn)箱上的左上角的直流電壓旋鈕旋到最小處時(shí)數(shù)碼管顯示為:0:.000,當(dāng)旋到最大處時(shí)數(shù)碼管顯示為:5:.000,中間的值位0V——5V之間。第六部分:總結(jié)(Closing)這次數(shù)字電壓表系統(tǒng)的設(shè)計(jì)達(dá)到了預(yù)期的效果,這次設(shè)計(jì)的內(nèi)容主要體現(xiàn)在程序算法上。電壓值。此程序下載后占用芯片內(nèi)存小易實(shí)現(xiàn)。,DVM的高速發(fā)展,使它已成為實(shí)現(xiàn)量的采集資料的過程。在這個(gè)過程里我們走過需對彎路和冤枉路。這些都是我們寶貴的字系統(tǒng)設(shè)參考書目(Reference):EDA技術(shù)與實(shí)驗(yàn)———陳立萬陳強(qiáng)趙威威李洪兵姜玉泉電子設(shè)計(jì)自動(dòng)化(EDA)課程設(shè)計(jì)與項(xiàng)目實(shí)例——李莉路而紅附錄(Appendix):A/D轉(zhuǎn)換器芯片ADC0809簡介8路模擬信號的分時(shí)采集,片內(nèi)有8路模擬選通開關(guān),以及相應(yīng)的通道抵制鎖存用譯碼電路,其轉(zhuǎn)換時(shí)間為100μs左右。1.ADC0809的內(nèi)部結(jié)構(gòu)ADC0809的內(nèi)部邏輯結(jié)構(gòu)圖如圖9-7所示。圖9.7《ADC0809內(nèi)部邏輯結(jié)構(gòu)》圖中多路開關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用一個(gè)A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換,這是一種經(jīng)濟(jì)的多路數(shù)據(jù)采集方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論