數(shù)字電壓表實驗報告_第1頁
數(shù)字電壓表實驗報告_第2頁
數(shù)字電壓表實驗報告_第3頁
數(shù)字電壓表實驗報告_第4頁
數(shù)字電壓表實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)字電壓表的綜合設(shè)計一、設(shè)計題目:基于FPGA的數(shù)字電壓表設(shè)計二、設(shè)計任務(wù):1、具有0—2.5v的電壓量程;2、通過LED燈顯示2進制數(shù)字量;3、用FPGA設(shè)計制作成數(shù)字電壓表的專用集成芯片,結(jié)合LED數(shù)碼管構(gòu)成一個能夠?qū)崟r顯示的電壓表。三、總體設(shè)計框圖:1、總體框圖22、分模塊設(shè)計框圖:LED數(shù)碼管顯示模塊TL549A3、程序代碼:查找表程序代碼LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;entitychazhaobiaois port(V:instd_logic_vector(7downto0); q:outstd_logic_vector(11downto0) );endentitychazhaobiao;architecturebehavofchazhaobiaoissignalc30,c74,c117,d0,d1:std_logic;signalHB,LB:std_logic_vector(11downto0);begin --A/D值的高4位轉(zhuǎn)換成3位BCD碼HB<="001001000000"WHENV(7DOWNTO4)="1111"ELSE--2.40 "001000100100"WHENV(7DOWNTO4)="1110"ELSE --2.24 "001000001000"WHENV(7DOWNTO4)="1101"ELSE --2.08 "000110010010"WHENV(7DOWNTO4)="1100"ELSE --1.92 "000101110110"WHENV(7DOWNTO4)="1011"ELSE --1.76 "000101100000"WHENV(7DOWNTO4)="1010"ELSE --1.60 "000101000100"WHENV(7DOWNTO4)="1001"ELSE --1.44 "000100101000"WHENV(7DOWNTO4)="1000"ELSE --1.28 "000100010010"WHENV(7DOWNTO4)="0111"ELSE --1.12 "000010010110"WHENV(7DOWNTO4)="0110"ELSE--0.96 "000010000000"WHENV(7DOWNTO4)="0101"ELSE--0.80 "000001100100"WHENV(7DOWNTO4)="0100"ELSE --0.64 "000001001000"WHENV(7DOWNTO4)="0011"ELSE --0.48 "000000110010"WHENV(7DOWNTO4)="0010"ELSE --0.32 "000000010110"WHENV(7DOWNTO4)="0001"ELSE --0.16 "000000000000";--0.00 --A/D值低4位變?yōu)?位BCD碼LB<="000000010101"WHENV(3DOWNTO0)="1111"ELSE--0.15"000000010100"WHENV(3DOWNTO0)="1110"ELSE --0.14 "000000010011"WHENV(3DOWNTO0)="1101"ELSE --0.13 "000000010010"WHENV(3DOWNTO0)="1100"ELSE --0.12 "000000010001"WHENV(3DOWNTO0)="1011"ELSE --0.11 "000000010000"WHENV(3DOWNTO0)="1010"ELSE --0.10 "000000001001"WHENV(3DOWNTO0)="1001"ELSE --0.09 "000000001000"WHENV(3DOWNTO0)="1000"ELSE --0.08 "000000000111"WHENV(3DOWNTO0)="0111"ELSE --0.07 "000000000110"WHENV(3DOWNTO0)="0110"ELSE --0.06 "000000000101"WHENV(3DOWNTO0)="0101"ELSE --0.05 "000000000100"WHENV(3DOWNTO0)="0100"ELSE --0.04 "000000000011"WHENV(3DOWNTO0)="0011"ELSE --0.03 "000000000010"WHENV(3DOWNTO0)="0010"ELSE --0.02 "000000000001"WHENV(3DOWNTO0)="0001"ELSE --0.01 "000000000000";--0.00 c30<='1'whenHB(3downto0)+LB(3downto0)>"01001"else '0'; d1<='1'whenHB(3downto0)>="1000"andLB(3downto0)>="1000"else '0'; c74<='1'whenHB(7downto4)+LB(7downto4)>"01001"else '0'; d0<='1'whenHB(7downto4)+LB(7downto4)="01001"else '0'; c117<='1'whenHB(11downto8)+LB(11downto8)>"01001"else '0'; q(3downto0)<= HB(3downto0)+LB(3downto0)+"0110"when c30='1'else HB(3downto0)+LB(3downto0)+"0110"when d1='1'else HB(3downto0)+LB(3downto0); q(7downto4)<= HB(7downto4)+LB(7downto4)+"0111"when c74='1'andc30='1'else HB(7downto4)+LB(7downto4)+"0110"when c74='1'andc30='0'else HB(7downto4)+LB(7downto4)+"0110"when c74='0'andc30='1'andd0='1'else HB(7downto4)+LB(7downto4)+"0001"when c74='0'and(c30='1'ord1='1')andd0='0'else HB(7downto4)+LB(7downto4); q(11downto8)<= HB(11downto8)+LB(11downto8)+"0111"when c117='1'andc74='1'else HB(11downto8)+LB(11downto8)+"0110"when c117='1'andc74='0'else HB(11downto8)+LB(11downto8)+"0001"when c117='0'andc74='1'else HB(11downto8)+LB(11downto8)+"0001"when c117='0'andc74='0'and(c30='1'ord1='1')andd0='1'else HB(11downto8)+LB(11downto8); end; 譯碼器程序代碼LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;entityyimaisport(clk:instd_logic;d:instd_logic_vector(11downto0);seg:outstd_logic_vector(7downto0);sel:outstd_logic_vector(2downto0));endentityyima;architecturebehavofyimaissignalwei:std_logic_vector(2downto0);signalnum:std_logic_vector(3downto0);signala:std_logic_vector(2downto0);beginnum<=d(3downto0)whena="000"elsed(7downto4)whena="001"elsed(11downto8);seg(7)<='0'whenwei="011"else'1';wei<="110"whena="000"else"101"whena="001"else"011";sel<=wei;COM1:process(clk)beginifclk'eventandclk='1'thena<=a+1;ifa="010"thena<="000";endif;endif;endprocessCOM1;COM2:process(num)begincasenumiswhen"0000"=>seg(6downto0)<="1000000";--0when"0001"=>seg(6downto0)<="1111001";--1when"0010"=>seg(6downto0)<="0100100";--2when"0011"=>seg(6downto0)<="0110000";--3when"0100"=>seg(6downto0)<="0011001";--4when"0101"=>seg(6downto0)<="0010010";--5when"0110"=>seg(6downto0)<="0000010";--6when"0111"=>seg(6downto0)<="1111000";--7when"1000"=>seg(6downto0)<="0000000";--8when"1001"=>seg(6downto0)<="0010000";--9--when"1010"=>seg(6downto0)<="1110111";--when"1011"=>seg(6downto0)<="1111100";--when"1100"=>seg(6downto0)<="0111001";--when"1101"=>seg(6downto0)<="1011110";--when"1110"=>seg(6downto0)<="1111001";--when"1111"=>seg(6downto0)<="1110001";--whenothers=>seg(6downto0)<="0111111";whenothers=>seg(6downto0)<="1000000";endcase;endprocessCOM2;end;電壓表頂層程序代碼:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitydianyabiaoisPort(clk:instd_logic; --50m系統(tǒng)時鐘 din:instd_logic; --(tlc549)串行數(shù)據(jù)輸出端 clk_tlc549:outstd_logic;cs_tlc549:outstd_logic; --tlc549的片選信號輸入端 shift:outstd_logic_vector(3downto0);--動態(tài)掃描時的位選信號 cs_led:outstd_logic_vector(1downto0);--發(fā)光二極管及數(shù)碼管的片選信號輸入端 dout_led:outstd_logic_vector(7downto0));--懼的發(fā)光器件的信號輸出端enddianyabiao;architectureBehavioralofdianyabiaoistypestateis(st1,st2);signalcurrent_state:state;typestate1is(st0,st1,st2);signalcurrent_state1:state1;typestate2is(st0,st1,st2,st3,st4);signalcurrent_state2:state2;signalreg_datain:std_logic_vector(7downto0);signalreg_dout:std_logic_vector(15downto0);signaldout:std_logic_vector(4downto0);signalreg_din:integerrange0to80000;signalclk1m,clk1k,clk100:std_logic;begin--分頻部分process(clk) --產(chǎn)生1MHz的頻率variablecnt:integerrange0to50;beginifclk'eventandclk='1'thencnt:=cnt+1;ifcnt<50then ifcnt<25thenclk1m<='0'; elseclk1m<='1'; endif; elsecnt:=0; endif;endif;endprocess;process(clk1m) --產(chǎn)生1KHz的頻率variablecnt:integerrange0to1000;beginifclk1m'eventandclk1m='1'thencnt:=cnt+1;ifcnt<1000then ifcnt<500thenclk1k<='0'; elseclk1k<='1'; endif; elsecnt:=0;endif;endif;endprocess;process(clk1k) --產(chǎn)生100Hz的頻率variablecnt:integerrange0to10;beginifclk1k'eventandclk1k='1'thencnt:=cnt+1;ifcnt<10then ifcnt<5thenclk100<='0'; elseclk100<='1'; endif;elsecnt:=0; endif;endif;endprocess;--tlc549的控制部分process(clk1k)variablecnt:integerrange0to7;variabledatain:std_logic_vector(7downto0);beginifclk1k'eventandclk1k='1'thencasecurrent_stateiswhenst1=> --將數(shù)據(jù)進行串并轉(zhuǎn)換 cs_tlc549<='0'; datain:=datain(6downto0)&din; --將讀取的數(shù)據(jù)向高位移位 clk_tlc549<='1'; current_state<=st2;whenst2=> cs_tlc549<='0'; clk_tlc549<='0'; current_state<=st1; ifcnt<7thencnt:=cnt+1; --讀取8位數(shù)據(jù) elsecnt:=0; reg_din<=conv_integer(datain)*195;--每單位數(shù)字量乘以系數(shù)=當前電壓值; reg_datain<=not(datain); endif;whenothers=> current_state<=st1;endcase;endif;endprocess;--十進制-BCD碼轉(zhuǎn)換;process(clk100) variablereg:integerrange0to80000;variabled1,d2,d3,d4:std_logic_vector(3downto0);beginifclk100'eventandclk100='1'thencasecurrent_state1is whenst0=> reg:=reg_din; d1:="0000";d2:="0000";d3:="0000";d4:="0000"; current_state1<=st1;whenst1=> ifreg>9999thenreg:=reg-10000;d1:=d1+1; elsifreg>999thenreg:=reg-1000;d2:=d2+1; elsifreg>99thenreg:=reg-100;d3:=d3+1; elsifreg>9thenreg:=reg-10;d4:=d4+1; elsecurrent_state1<=st2; endif;whenst2=> reg_dout<=d1&d2&d3&d4; current_state1<=st0;whenothers=> current_state1<=st0;endcase;endif;endprocess;--動態(tài)掃描控制;process(clk1k)beginifclk1k'eventandclk1k='1'thencasecurrent_state2iswhenst0=> --在發(fā)光二極管上顯示模數(shù)轉(zhuǎn)換后的數(shù)字量cs_led<="01";--熄滅數(shù)碼管 shift<="1111"; dout<="11111";current_state2<=st1;whenst1=> --在數(shù)碼管的最高位顯示數(shù)據(jù) cs_led<="10"; --熄滅發(fā)光二極管 shift<="0111"; --最高位數(shù)碼管顯示 dout<='0'®_dout(15downto12); --小數(shù)點顯示,并且將最高位的數(shù)據(jù)送給譯碼器 current_state2<=st2;whenst2=> --在數(shù)碼管的次高位顯示數(shù)據(jù) cs_led<="10"; --熄滅發(fā)光二極管 shift<="1011"; --次高位數(shù)碼管顯示 dout<='1'®_dout(11downto8); --小數(shù)點不顯示,將次高位的數(shù)據(jù)送給譯碼器 current_state2<=st3; whenst3=> --在數(shù)碼管的次低位顯示數(shù)據(jù) cs_led<="10"; --熄滅發(fā)光二極管 shift<="1101"; --次低位數(shù)碼管顯示 dout<='1'®_dout(7downto4); --小數(shù)點不顯示,將次低位的數(shù)據(jù)送給譯碼器 current_state2<=st4;whenst4=> --在數(shù)碼管的最低位顯示數(shù)據(jù) cs_led<="10"; --熄滅發(fā)光二極管 shift<="1110"; --最低位數(shù)碼管顯示 dout<='1'®_dout(3downto0); --小數(shù)點不顯示,將最低位的數(shù)據(jù)送給譯碼器 current_state2<=st0;

溫馨提示

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

評論

0/150

提交評論