

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 1 引言1</b></p><p> 1.1 EDA介紹1</p><p> 1.2 任務(wù)說明1</p><p><b> 2 系統(tǒng)設(shè)計(jì)2</b></p><p>
2、;<b> 2.1系統(tǒng)概述2</b></p><p> 2.2 系統(tǒng)原理2</p><p> 2.3 系統(tǒng)封裝圖3</p><p><b> 3 程序設(shè)計(jì)4</b></p><p> 3.1系統(tǒng)結(jié)構(gòu)示意圖4</p><p> 3.2 分頻程序4<
3、/p><p> 3.2.1 分頻程序原理4</p><p> 3.2.2 分頻程序仿真5</p><p> 3.3 位選程序6</p><p> 3.3.1 位選程序原理6</p><p> 3.3.2 位選程序仿真7</p><p> 3.4 時(shí)鐘程序8</p>
4、<p> 3.4.1 時(shí)鐘程序原理8</p><p> 3.4.2 時(shí)鐘程序仿真9</p><p> 3.5 計(jì)數(shù)程序9</p><p> 3.5.1 計(jì)數(shù)程序原理9</p><p> 3.5.2 計(jì)數(shù)程序仿真11</p><p> 3.6 BCD碼轉(zhuǎn)換11</p>
5、<p> 3.6.1 BCD碼轉(zhuǎn)換原理11</p><p> 3.6.2 BCD碼程序仿真13</p><p> 3.7頂層文件14</p><p> 3.7.1 頂層文件介紹及仿真14</p><p> 3.7.2硬件調(diào)試15</p><p><b> 4 總結(jié)17<
6、/b></p><p><b> 參考文獻(xiàn)18</b></p><p><b> 附錄19</b></p><p><b> 1 引言</b></p><p><b> 1.1 EDA介紹</b></p><p>
7、 EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)的縮寫,在20世紀(jì)60年代中期從計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、計(jì)算機(jī)輔助制造(CAM)、計(jì)算機(jī)輔助測試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來的。EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言HDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映
8、射和編程下載等工作。</p><p><b> 1.2 任務(wù)說明</b></p><p> 簡易數(shù)字頻率計(jì)是用數(shù)字顯示被測信號頻率的儀器,被測信號可以是正弦波,方波或其它周期性變化的信號。如配以適當(dāng)?shù)膫鞲衅?,可以對多種物理量進(jìn)行測試,比如機(jī)械振動的頻率,轉(zhuǎn)速,聲音的頻率等。其具有高速、精確、可靠、抗干擾性強(qiáng)和現(xiàn)場可編程等優(yōu)點(diǎn)。因此,數(shù)字頻率計(jì)是一種應(yīng)用很廣泛的儀器
9、 。</p><p> 本次EDA課程設(shè)計(jì)題目為簡易數(shù)字頻率計(jì)設(shè)計(jì),實(shí)現(xiàn)對于1HZ-10MHZ的方波信號進(jìn)行測量。該頻率計(jì)包括4個(gè)不同的檔位,具有記憶功能和總體的復(fù)位功能。需要利用VHDL(硬件描述語言)通過Quartus II編程軟件進(jìn)行程序的編寫和調(diào)試、仿真。并將程序下載到硬件上進(jìn)行實(shí)際觀測。</p><p><b> 2 系統(tǒng)設(shè)計(jì)</b></p>
10、<p><b> 2.1系統(tǒng)概述</b></p><p> 本設(shè)計(jì)基于可編程邏輯器件FPGA,使用VHDL進(jìn)行設(shè)計(jì)、綜合、仿真以及實(shí)現(xiàn)。通過編程,根據(jù)選擇的檔位對輸入的方波信號進(jìn)行頻率的測量,并且顯示在四位七段數(shù)碼管上,當(dāng)數(shù)值溢出時(shí)進(jìn)行報(bào)警指示。</p><p><b> 2.2 系統(tǒng)原理</b></p><
11、;p> 本設(shè)計(jì)共分成五個(gè)子模塊程序:分頻(fpq)程序、位選(wxq)程序、時(shí)鐘(szq)程序、計(jì)數(shù)(jsq)程序、BCD轉(zhuǎn)換(bcd)程序。通過五個(gè)模塊相互配合實(shí)現(xiàn)簡易數(shù)字頻率計(jì)的功能。</p><p> 各模塊間的連接關(guān)系如下所示:</p><p> 系統(tǒng)原理為:待測的方波信號首先通過分頻模塊,進(jìn)行10/100/1000分頻,產(chǎn)生10倍/100倍/1000倍及原待測信號共四
12、路方波信號。然后將四路信號送入位選功能模塊,通過四個(gè)輸入開關(guān)對該四路方波的選擇。位選模塊所選擇的方波信號送入計(jì)數(shù)模塊后,與輸入的系統(tǒng)基準(zhǔn)時(shí)鐘clk配合,計(jì)數(shù)得到輸入方波的信號頻率,最后送入bcd轉(zhuǎn)換模塊,將四位十進(jìn)制數(shù)據(jù)轉(zhuǎn)化成四組4位BCD碼。本設(shè)計(jì)具有記憶功能,在測量過程中不刷新數(shù)據(jù),等數(shù)據(jù)測量過程結(jié)束后才顯示測量的頻率值,并保存到下一次測量結(jié)束,此頻率計(jì)有整體異步復(fù)位功能。</p><p><b>
13、 2.3 系統(tǒng)封裝圖</b></p><p> 系統(tǒng)封裝圖如圖2所示,其中shuru為待測試的方波輸入端,clk為系統(tǒng)時(shí)鐘頻率輸入端,rst為復(fù)位端,ginp為頻率計(jì)乘1檔端,sinp為頻率計(jì)乘10檔,sinp為頻率計(jì)乘100檔,binp為頻率計(jì)乘1000檔。gout,sout,bout,qout分別為四路檔位對應(yīng)的標(biāo)志位,通過四個(gè)LED燈點(diǎn)亮實(shí)現(xiàn),cc為超量程警告位,通過一個(gè)LED燈閃爍實(shí)現(xiàn)。g
14、w,sw,bw,qw分別輸出四位BCD碼,并通過數(shù)碼管顯示,分別表示千位,百位,十位,個(gè)位。當(dāng)系統(tǒng)工作時(shí),四個(gè)數(shù)碼管所顯示數(shù)據(jù)乘以檔位即使所測量的方波的頻率。</p><p><b> 3 程序設(shè)計(jì)</b></p><p> 3.1系統(tǒng)結(jié)構(gòu)示意圖</p><p><b> 3.2 分頻程序</b></p>
15、<p> 3.2.1 分頻程序原理</p><p> 該部分程序中使用process,其中敏感信號列表中為shuru,即待測方波信號。系統(tǒng)備有×1檔,×10檔,×100檔,×1000檔,即需對待測方波進(jìn)行10倍,100倍,1000倍的分頻,通過定義三個(gè)變量,以待測方波為時(shí)鐘進(jìn)行計(jì)數(shù),則需要程序中計(jì)數(shù)器計(jì)分別計(jì)數(shù)到5,50,500時(shí)對四路輸出信號進(jìn)行邏輯非運(yùn)
16、算。</p><p><b> 分頻程序代碼:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fpq is</p><p> port(shuru:in std_logic
17、;</p><p> ao,bo,co,do:buffer std_logic);</p><p><b> end fpq;</b></p><p> architecture bhv of fpq is</p><p><b> begin</b></p><p>
18、; ao<=shuru;</p><p> process(shuru)</p><p> variable nu,nu1,nu2:integer range 0 to 1000:=0;</p><p><b> begin</b></p><p> if(shuru 'event and shu
19、ru ='1')then</p><p> nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;</p><p> if(nu=5)then</p><p> bo<=not bo;</p><p><b> nu:=0;</b></p><p><b
20、> end if;</b></p><p> if(nu1=50)then</p><p> co<=not co;</p><p><b> nu1:=0;</b></p><p><b> end if;</b></p><p> if
21、(nu2=500)then</p><p> do<=not do;</p><p><b> nu2:=0;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p>
22、end process;</p><p><b> end bhv;</b></p><p> 該程序封裝圖如下圖所示:</p><p> 3.2.2 分頻程序仿真</p><p> 該部分程序仿真波形如下圖5所示:</p><p> 分頻程序仿真參數(shù)設(shè)定shuru1為輸入的預(yù)測方波信號
23、,ao,bo,co,do為四個(gè)輸出信號,分別為對輸入shuru1進(jìn)行分頻后以及本來方波信號,由圖中可以看出ao頻率與fb1頻率相同,bo頻率為fb1頻率的1/10,co頻率為fb1頻率的1/100,do頻率為fb1頻率的1/1000。</p><p><b> 3.3 位選程序</b></p><p> 3.3.1 位選程序原理</p><p&
24、gt; 該部分程序包含復(fù)位端rst,四個(gè)輸入信號ai,bi,ci,di分別接分頻程序的四路分頻后的方波信號,通過四個(gè)開關(guān)控制端k1,k2,k3,k4分別選擇輸出信號的選擇,例如若k1為高電平,則fb0等于ai的輸入信號。位選程序與分頻程序公共構(gòu)成頻率計(jì)四個(gè)檔位測量功能。</p><p><b> 位選程序代碼:</b></p><p> library ieee
25、;</p><p> use ieee.std_logic_1164.all;</p><p> entity wxq is</p><p> port(ai,bi,ci,di,rst:in std_logic;</p><p> ginp,sinp,binp,qinp:in std_logic;</p><p&g
26、t; gout,sout,bout,qout:out std_logic;</p><p> shuru0:out std_logic);</p><p><b> end wxq;</b></p><p> architecture bhv of wxq is</p><p><b> begin
27、</b></p><p> process(rst, ginp,sinp,binp,qinp, gout,sout,bout,qout)</p><p><b> begin</b></p><p> if(rst='1')then</p><p> gout<='0
28、39;;sout<='0';bout<='0';qout<='0';</p><p> shuru0<='0';</p><p> elsif(ginp='1')then</p><p> gout<='1';sout<='
29、;0';bout<='0';qout<='0';</p><p> shuru0<=ai;</p><p> elsif(sinp='1')then</p><p> gout<='0';sout<='1';bout<='0
30、9;;qout<='0'; </p><p> shuru0<=bi;</p><p> elsif(binp='1')then</p><p> gout<='0';sout<='0';bout<='1';qout<='0
31、39;;</p><p> shuru0<=ci;</p><p> elsif(qinp='1')then</p><p> gout<='0';sout<='0';bout<='0';qout<='1';</p><p>
32、 shuru0<=di;</p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 位選程序封裝圖如下圖所示:</p><p> 封裝圖中輸入信號ai,b
33、i,ci,di為四路分頻后的方波信號,ginp、binp、binp、qinp這四檔開關(guān)選擇輸入信號,該程序中復(fù)位端rst為高電平時(shí),將ginp、binp、binp、qinp四個(gè)開關(guān)控制端對應(yīng)的輸出信號gout、sout、bout、qout分別置零,在硬件電路中用四個(gè)LED燈的亮滅表示,測量時(shí)必須有且僅有一個(gè)燈點(diǎn)亮,否則為違規(guī)操作,測量數(shù)據(jù)錯(cuò)誤。</p><p> 3.3.2 位選程序仿真</p>
34、<p> 該部分程序仿真波形如下圖7所示:</p><p> 由仿真圖中可以看出,輸入信號其中qinp為高電平,ginp、binp、binp皆為低電平,則相對應(yīng)的輸出信號qout為高電平,shuru0波形與第4路輸入信號di相同。復(fù)位信號在前端有一正脈沖,即當(dāng)為高電平時(shí),所有的輸出信號皆為低電平。此后,sinp為高電平而其它3檔為低電平時(shí),輸出信號sout為高電平,shuru0波形與第2路輸入信號b
35、i相同。</p><p><b> 3.4 時(shí)鐘程序</b></p><p> 3.4.1 時(shí)鐘程序原理</p><p> 該部分程序是為實(shí)現(xiàn)得到0.5Hz的系統(tǒng)基準(zhǔn)時(shí)鐘(高低電平各為1秒),用以對待測方波頻率的計(jì)數(shù)測量。由于硬件中系統(tǒng)時(shí)鐘頻率并不能鎖定0.5Hz,則需要對輸入的時(shí)鐘頻率進(jìn)行分頻,本系統(tǒng)中選擇硬件中時(shí)鐘clk2引腳的8Hz
36、時(shí)鐘,則需要對其進(jìn)行16倍的分頻。</p><p><b> 時(shí)鐘程序代碼:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity szq is</p><p> generic
37、(v:integer:=8);</p><p> port(clki:in std_logic;</p><p> clko:buffer std_logic);</p><p><b> end szq;</b></p><p> architecture bhv of szq is</p>&l
38、t;p><b> begin </b></p><p> process(clki)</p><p> variable count:integer range 0 to v;</p><p><b> begin</b></p><p> if(clki'event and
39、 clki='1')then</p><p> count:=count+1;</p><p> if(count=v)then</p><p> clko<=not clko;</p><p><b> count:=0;</b></p><p><b>
40、 end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 時(shí)鐘程序封裝如圖8所示:</p><p> 圖中輸入信號clk
41、i為系統(tǒng)時(shí)鐘頻率,clko為輸出信號,作為計(jì)數(shù)程序的基準(zhǔn)時(shí)鐘。該時(shí)鐘程序仍為一個(gè)分頻程序,系統(tǒng)時(shí)鐘頻率作為進(jìn)程中敏感信號列表的值,當(dāng)定義的計(jì)數(shù)變量計(jì)數(shù)到8時(shí)對輸出clko進(jìn)行邏輯非運(yùn)算,并將變量置零,從而得到0.5Hz的時(shí)鐘信號。此部分為計(jì)數(shù)部分輸入時(shí)鐘信號,作為頻率測量的基準(zhǔn)信號。</p><p> 3.4.2 時(shí)鐘程序仿真</p><p> 程序仿真波形如下圖9所示:</p&
42、gt;<p> 其中輸入信號clki為系統(tǒng)的時(shí)鐘信號,輸出信號clko為分頻后得到的時(shí)鐘信號,由上圖中可以看出,clko的頻率為clki的1/16。因?yàn)橄到y(tǒng)輸入時(shí)鐘頻率選為8Hz,則clko時(shí)鐘頻率則為0.5Hz。</p><p><b> 3.5 計(jì)數(shù)程序</b></p><p> 3.5.1 計(jì)數(shù)程序原理</p><p>
43、; 該部分為本次課程簡易頻率計(jì)系統(tǒng)設(shè)計(jì)的核心部分,此處程序?qū)崿F(xiàn)對于方波頻率的測量。需要說明的是,此處所得到的測量結(jié)果為頻率計(jì)選擇檔位后的值,即輸出的頻率需要乘以檔位,最終所得到數(shù)據(jù)才為所測量方波的頻率值。</p><p> 程序中以0.5Hz頻率的時(shí)鐘信號為基準(zhǔn)脈沖,設(shè)置在一變量n,當(dāng)時(shí)鐘脈沖為高電平時(shí)對輸入的方波上升沿進(jìn)行計(jì)數(shù),當(dāng)時(shí)鐘脈沖為地電平時(shí),計(jì)數(shù)結(jié)束,并輸出。由于要求不能數(shù)碼顯示不能有變化的過程。&
44、lt;/p><p> 這里定義一個(gè)變量m,當(dāng)時(shí)鐘脈沖為高電平時(shí)將計(jì)數(shù)值即n的值賦給m,當(dāng)時(shí)鐘脈沖為低電平時(shí),將m值送入輸出信號q,由于下一個(gè)m送入時(shí)需要時(shí)鐘脈沖進(jìn)入下一個(gè)地電平,借此達(dá)到輸出q值一直不變的要求.</p><p><b> 計(jì)數(shù)程序代碼:</b></p><p> library ieee;</p><p&g
45、t; use ieee.std_logic_1164.all;</p><p> entity jsq is</p><p> port(shuru,clk:in std_logic;</p><p> cc:out std_logic;</p><p> q:out integer range 0 to 10000);</p
46、><p><b> end jsq;</b></p><p> architecture bhv of jsq is</p><p><b> begin</b></p><p> process(shuru,clk)</p><p> variable n:integ
47、er range 0 to 10000;</p><p> variable m:integer range 0 to 10000;</p><p><b> begin</b></p><p> if(clk'stable)then</p><p> if(shuru 'event and sh
48、uru ='1')then</p><p><b> n:=n+1;</b></p><p><b> m:=n;</b></p><p> if(n>9999 or n=0)then</p><p><b> cc<='1';</
49、b></p><p><b> q<=0;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p&
50、gt; if(clk='0')then</p><p><b> q<=m;</b></p><p><b> n:=0;</b></p><p><b> cc<='0';</b></p><p><b> en
51、d if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 程序封裝如下圖3-7所示:</p><p> 封裝圖中shuru為經(jīng)過選檔后的方波信號,clk為0.5Hz的計(jì)數(shù)基準(zhǔn)時(shí)鐘信號。輸出信號cc為超量程警告,q為計(jì)數(shù)得到頻率
52、數(shù)值。計(jì)數(shù)程序中包含了系統(tǒng)對于測量數(shù)據(jù)超量程的處理,當(dāng)計(jì)數(shù)值超過9999時(shí),cc就會出現(xiàn)高低電平脈沖的持續(xù)變換,硬件中鎖一LED燈,將顯示不斷閃爍。此時(shí)為超量程,數(shù)碼管顯示值為錯(cuò)誤量。</p><p> 3.5.2 計(jì)數(shù)程序仿真</p><p> 計(jì)數(shù)程序仿真波形如下圖11所示:</p><p> 由于仿真所限,此處并未使用0.5Hz時(shí)鐘信號作為輸入時(shí)鐘信號。
53、圖中clk時(shí)鐘頻率為0.2MHz,shuru為頻率為100MHz,可以看出,shuru為clk頻率的500倍,由于只有當(dāng)clk為高電平時(shí)計(jì)數(shù),所以得到計(jì)數(shù)結(jié)果q值為250。同理,若clk頻率為0.5Hz,則其高電平持續(xù)時(shí)間即為1s,所得到的計(jì)數(shù)結(jié)果250極為shuru信號相應(yīng)頻率值,即此時(shí)輸入方波頻率為250Hz。</p><p> 此仿真圖中并未顯示超過量程現(xiàn)象,此功能將在頂層文件中說明。</p>
54、<p> 3.6 BCD碼轉(zhuǎn)換</p><p> 3.6.1 BCD碼轉(zhuǎn)換原理</p><p> 由于計(jì)數(shù)程序輸出結(jié)果為0到10000范圍內(nèi)的整型數(shù)據(jù),若想通過模式5鎖定引腳,并在四個(gè)數(shù)碼管上顯示,則需要首先對其進(jìn)行BCD碼的轉(zhuǎn)換。該部分程序中也包括系統(tǒng)復(fù)位功能的實(shí)現(xiàn)。程序中分別設(shè)置三個(gè)常量a,b,c其值分別為1000,100,10。首先將輸入整形數(shù)據(jù)qi除以a,即10
55、00,得到所得數(shù)據(jù)即為千位數(shù)值x1,令qi減去x1乘以1000,極為qi中除去千位后剩余的三位數(shù)值,同理繼續(xù)進(jìn)行算法,則能得到百位,十位,個(gè)位的數(shù)值,即將輸入的整型數(shù)據(jù)qi轉(zhuǎn)換成BCD碼完成。因?yàn)槭褂媚J?,硬件中自帶譯碼功能,直接可用于數(shù)碼顯示。用四個(gè)數(shù)碼管分別表示千位,百位,十位,個(gè)位,再乘以相應(yīng)檔位,即可得到頻率計(jì)的測量數(shù)值。</p><p><b> BCD轉(zhuǎn)換代碼:</b><
56、;/p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_signed.all;</p><p> use ieee.std_logic_arith.all;</p><p> entity b
57、cd is</p><p> port(qi:in integer range 0 to 10000;</p><p> rst:in std_logic;</p><p> gw,sw,bw,qw:buffer std_logic_vector(3 downto 0));</p><p><b> end bcd;<
58、/b></p><p> architecture bhv of bcd is</p><p><b> begin</b></p><p> process(qi)</p><p> constant a:integer:=1000;</p><p> constant b:in
59、teger:=100;</p><p> constant c:integer:=10;</p><p> variable x1,x2,x3,x4,y,z:integer range 0 to 1000;</p><p><b> begin</b></p><p> if(rst='1')th
60、en</p><p> x1:=0;x2:=0;x3:=0;x4:=0;</p><p><b> else </b></p><p><b> x1:=qi/a;</b></p><p> y:=qi-x1*1000;</p><p><b> x2:=
61、y/b;</b></p><p> z:=y-x2*100;</p><p><b> x3:=z/c;</b></p><p> x4:=z-x3*10;</p><p><b> end if;</b></p><p> qw<=conv_st
62、d_logic_vector(x1,4);</p><p> bw<=conv_std_logic_vector(x2,4);</p><p> sw<=conv_std_logic_vector(x3,4);</p><p> gw<=conv_std_logic_vector(x4,4);</p><p> en
63、d process;</p><p><b> end bhv;</b></p><p> 頻率計(jì)程序封裝圖如圖12所示:</p><p> 封裝圖中qi為經(jīng)過分頻后的方波計(jì)數(shù)得到的數(shù)據(jù),為0~9999范圍內(nèi)的整型數(shù)據(jù),qw、bw、sw、gw為四位BCD碼,分別表示十進(jìn)制數(shù)的千位、百位、十位、個(gè)位的數(shù)值。程序中復(fù)位信號rst為高電平時(shí),控
64、制四個(gè)輸出信號都為0,即四個(gè)數(shù)碼管都顯示0,達(dá)到復(fù)位功能。</p><p> 3.6.2 BCD碼程序仿真</p><p> 程序仿真圖如下圖13所示:</p><p> 程序仿真前輸入信號qi值分別設(shè)置了9999,8649,1234三個(gè)值,并設(shè)置1個(gè)rst的正脈沖。由上圖中可以看到,其中當(dāng)qi為9999時(shí),各位輸出值組合為9999;當(dāng)復(fù)位信號rst為高電平時(shí)
65、,四個(gè)輸出信號值皆為0;當(dāng)qi值為8649時(shí),四位輸出為8,6,4,9四個(gè)值。同樣,當(dāng)qi值為1234時(shí),四位BCD,碼顯示1,2,3,4。 </p><p><b> 3.7頂層文件</b></p><p> 3.7.1 頂層文件介紹及仿真</p><p> 該程序分為五個(gè)部分,分別實(shí)現(xiàn)預(yù)定的功能,然后通過元件例化的方式,組合在一起,編
66、寫頂層文件,組合在一起,形成整個(gè)系統(tǒng),各功能相互配合以實(shí)現(xiàn)簡易頻率計(jì)的設(shè)計(jì),封裝圖如圖14所示:</p><p> 頂層文件程序中設(shè)置一系列的信號,將五個(gè)部分的程序輸入輸出信號相對應(yīng)的連接起來,并與整個(gè)系統(tǒng)的封裝引腳相對應(yīng)。同時(shí)將五個(gè)程序分別編譯后生成的.vhd文件加載進(jìn)來,然后進(jìn)行編譯,仿真。</p><p> 圖15為頂層文件仿真圖:</p><p> 由
67、于仿真所限,此處并未按實(shí)際需要進(jìn)行參數(shù)設(shè)定。其中,系統(tǒng)時(shí)鐘頻率clk設(shè)定為0.5MHz,預(yù)測試方波頻率值設(shè)定為100MHz,由圖中可以看出,此時(shí)頻率計(jì)使用binp檔進(jìn)行測試,所得到的數(shù)據(jù)為16,該數(shù)據(jù)再乘以100得到的最后值1600才為仿真欲要得到的數(shù)據(jù)(注:由于輸入的系統(tǒng)時(shí)鐘頻率為0.5MHz ,而實(shí)際應(yīng)用的為8Hz,則系統(tǒng)時(shí)鐘和預(yù)測試方波頻率都縮小0.5M÷8=62500倍)。</p><p>
68、仿真時(shí)設(shè)定了復(fù)位參數(shù),由圖中可看出當(dāng)復(fù)位信號rst為高電平時(shí),所有的輸出都會置零或變?yōu)榈碗娖剑蓪?shí)現(xiàn)總體復(fù)位功能。</p><p> 該系統(tǒng)含有對于預(yù)測試頻率超量程的標(biāo)志,如下圖16所示:</p><p> 由于頻率計(jì)設(shè)計(jì)包括了四個(gè)檔位,其中乘1檔測試頻率范圍為1Hz~9999Hz,乘10檔測試頻率范圍為10Hz~99990Hz,乘100檔測試頻率范圍為100Hz~999900Hz,乘
69、1000檔測試頻率范圍為1000Hz~9999000Hz,所以相對應(yīng)的檔位,預(yù)測試的頻率一旦超過量程就會出現(xiàn)錯(cuò)誤顯示。這里以乘1檔為例,仿真參數(shù)中g(shù)inp為高電平,系統(tǒng)時(shí)鐘信號clk頻率設(shè)定為0.05MHz,預(yù)測方波頻率設(shè)定為100MHz,則需程序中計(jì)數(shù)器計(jì)到16000,產(chǎn)生溢出,所示輸出信號cc會出現(xiàn)正脈沖信號,若硬件鎖定在一個(gè)LED燈引腳,則會不斷亮滅閃爍,以表示超量程,此時(shí)數(shù)碼管數(shù)據(jù)錯(cuò)誤。</p><p>
70、<b> 3.7.2硬件調(diào)試</b></p><p> 頂層文件編譯仿真完成后對頂層文件程序中各個(gè)輸入輸出信號進(jìn)行引腳鎖定,硬件試驗(yàn)箱選用模式5,其中數(shù)碼管自帶譯碼功能。其中重要的一點(diǎn)是系統(tǒng)基準(zhǔn)時(shí)鐘引腳應(yīng)鎖定為clk2引腳,待測方波shuru鎖定右側(cè)clk0引腳。</p><p> 具體引腳鎖定如下圖17中所示:</p><p> 鎖定
71、引腳完成后,對程序再次進(jìn)行編譯,然后下載到目標(biāo)芯片中,通過硬件測試,檢查頻率計(jì)的各項(xiàng)功能,包括1Hz~10MHz頻率測試,數(shù)據(jù)在四個(gè)數(shù)碼管上的顯示,頻率計(jì)檔位切換,系統(tǒng)復(fù)位功能,超量程報(bào)警等。</p><p><b> 4 總結(jié)</b></p><p> 此次EDA課程設(shè)計(jì)歷時(shí)兩周時(shí)間,我和伙伴兩人一組合作進(jìn)行簡易數(shù)字頻率計(jì)系統(tǒng)的設(shè)計(jì)。程序的編寫我們采用元件例化的
72、形式,經(jīng)過思考和相互間的分析討論,將整個(gè)系統(tǒng)劃分五個(gè)功能模塊,彼此配合進(jìn)行五個(gè)功能模塊設(shè)計(jì)和程序的編寫。其間,我們亦遇到許多問題,諸如整個(gè)系統(tǒng)核心模塊計(jì)數(shù)過程的實(shí)現(xiàn),時(shí)鐘頻率的設(shè)定,將整形數(shù)據(jù)轉(zhuǎn)換成BCD碼顯示的算法等等。另外,我們還對頻率計(jì)的自動換擋功能進(jìn)行了探索,編制出了相應(yīng)的程序,然而我們又從實(shí)際的角度出發(fā),最終認(rèn)為手動換擋更符合人在實(shí)際使用時(shí)的習(xí)慣。</p><p> 經(jīng)過兩周時(shí)間的不懈努力和伙伴間契的
73、配合,我們終于完成預(yù)定的目的,完成整個(gè)簡易數(shù)字頻率計(jì)的設(shè)計(jì)。雖然其中遇到很多困難,很多問題,但在我們兩人相互支持和鼓勵(lì)下,都能夠得以順利的找到解決辦法或者改進(jìn)的方法,并在合作中相互提高,彼此進(jìn)步,在困難在中體會到合作的樂趣。</p><p> EDA技術(shù)極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動強(qiáng)度,是一門實(shí)際應(yīng)用很廣泛的技術(shù)?,F(xiàn)在對EDA的概念或范疇用得很寬。包括在機(jī)械、電子、通信、航空航天、化
74、工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個(gè)領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機(jī)制造過程中,從設(shè)計(jì)、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。</p><p> 總而言之,這次EDA課程設(shè)計(jì)對我們理論學(xué)習(xí)和實(shí)踐能力的提高有十分重要的意義,幫助我鞏固了VHDL程序設(shè)計(jì)和數(shù)字電子技術(shù)知識,提高了我的自學(xué)能力與合作精神,這對我以后的學(xué)習(xí)與工作會很有很大的幫
75、助。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]Voknei A.Pedroni.《VHDL數(shù)字電路設(shè)計(jì)教程》.電子工業(yè)出版社,2008.5</p><p> [2]潘松,黃繼業(yè).《EDA技術(shù)實(shí)用教程》(第二版).科學(xué)出版社,2005.2</p><p> [3]焦素敏.《EDA應(yīng)用技術(shù)
76、》.清華大學(xué)出版社,2002.4</p><p> [4]劉延飛等.基于Altera FPGA/CPLD的電子系統(tǒng)設(shè)計(jì)及工程實(shí)踐.北京:人民郵電出版社,2009</p><p> [5]王新.EDA技術(shù)與虛擬實(shí)驗(yàn).徐州:中國礦業(yè)大學(xué)出版社,2007</p><p><b> 附錄</b></p><p><b
77、> 頂層文件程序</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity plj is</p><p>
78、; port(fb,clk,rst:in std_logic;</p><p> k1,k2,k3,k4:in std_logic;</p><p> g1,g2,g3,g4,g5:out std_logic;</p><p> d1,d2,d3,d4:out std_logic_vector(3 downto 0));</p><p&g
79、t;<b> end plj;</b></p><p> architecture bhv of plj is</p><p> signal h0,h1,h2,h3:std_logic;</p><p> signal s0,s1,s2:std_logic;</p><p> signal p0:intege
80、r range 0 to 10000;</p><p> component fp is</p><p> port(fb1:in std_logic;</p><p> ao,bo,co,do:buffer std_logic);</p><p> end component;</p><p> compo
81、nent wx is</p><p> port(ai,bi,ci,di,rst:in std_logic;</p><p> k1,k2,k3,k4:in std_logic;</p><p> g1,g2,g3,g4:out std_logic;</p><p> fb0:out std_logic);</p>&l
82、t;p> end component;</p><p> component sz is</p><p> port(clki:in std_logic;</p><p> clko:buffer std_logic);</p><p> end component;</p><p> compone
83、nt js is</p><p> port(fb,clk:in std_logic;</p><p> g5:out std_logic;</p><p> q:out integer range 0 to 10000);</p><p> end component;</p><p> component
84、 bcd is</p><p> port(qi:in integer range 0 to 10000;</p><p> rst:in std_logic;</p><p> d1,d2,d3,d4:buffer std_logic_vector(3 downto 0));</p><p> end component;</
85、p><p><b> begin</b></p><p> u1:fp port map(fb1=>fb,ao=>h0,bo=>h1,co=>h2,do=>h3);</p><p> u2:wx port map(k1=>k1,k2=>k2,k3=>k3,k4=>k4,ai=>h0,
86、bi=>h1,ci=>h2,di=>h3,</p><p> rst=>rst,fb0=>s0,g1=>g1,g2=>g2,g3=>g3,g4=>g4);</p><p> u3:sz port map(clki=>clk,clko=>s1);</p><p> u4:js port map(f
87、b=>s0,clk=>s1,g5=>g5,q=>p0);</p><p> u5:bcd port map(qi=>p0,rst=>rst,d1=>d1,d2=>d2,d3=>d3,d4=>d4);</p><p><b> end bhv;</b></p><p><b&g
88、t; 分頻程序u1:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fp is</p><p> port(fb1:in std_logic;</p><p> ao,bo,co,
89、do:buffer std_logic);</p><p><b> end fp;</b></p><p> architecture bhv of fp is</p><p><b> begin</b></p><p><b> ao<=fb1;</b>&l
90、t;/p><p> process(fb1)</p><p> variable nu,nu1,nu2:integer range 0 to 1000:=0;</p><p><b> begin</b></p><p> if(fb1'event and fb1='1')then</p
91、><p> nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;</p><p> if(nu=5)then</p><p> bo<=not bo;</p><p><b> nu:=0;</b></p><p><b> end if;</b><
92、;/p><p> if(nu1=50)then</p><p> co<=not co;</p><p><b> nu1:=0;</b></p><p><b> end if;</b></p><p> if(nu2=500)then</p>&
93、lt;p> do<=not do;</p><p><b> nu2:=0;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p>&l
94、t;p><b> end bhv;</b></p><p><b> 位選程序u2:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity wx is</p>&
95、lt;p> port(ai,bi,ci,di,rst:in std_logic;</p><p> k1,k2,k3,k4:in std_logic;</p><p> g1,g2,g3,g4:out std_logic;</p><p> fb0:out std_logic);</p><p><b> end w
96、x;</b></p><p> architecture bhv of wx is</p><p><b> begin </b></p><p> process(rst,k1,k2,k3,k4,ai,bi,ci,di)</p><p><b> begin</b></p
97、><p> if(rst='1')then</p><p> g1<='0';g2<='0';g3<='0';g4<='0';</p><p><b> fb0<='0';</b></p><p&g
98、t; elsif(k1='1')then</p><p> g1<='1';g2<='0';g3<='0';g4<='0';</p><p><b> fb0<=ai;</b></p><p> elsif(k2='1&
99、#39;)then</p><p> g1<='0';g2<='1';g3<='0';g4<='0'; </p><p><b> fb0<=bi;</b></p><p> elsif(k3='1')then</
100、p><p> g1<='0';g2<='0';g3<='1';g4<='0';</p><p><b> fb0<=ci;</b></p><p> elsif(k4='1')then</p><p> g1
101、<='0';g2<='0';g3<='0';g4<='1';</p><p><b> fb0<=di;</b></p><p><b> end if;</b></p><p> end process;</p>
102、;<p><b> end bhv;</b></p><p><b> 時(shí)鐘程序u3:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity sz is</p&g
103、t;<p> generic (v:integer:=8);</p><p> port(clki:in std_logic;</p><p> clko:buffer std_logic);</p><p><b> end sz;</b></p><p> architecture bhv o
104、f sz is</p><p><b> begin </b></p><p> process(clki)</p><p> variable count:integer range 0 to v;</p><p><b> begin</b></p><p>
105、if(clki'event and clki='1')then</p><p> count:=count+1;</p><p> if(count=v)then</p><p> clko<=not clko;</p><p><b> count:=0;</b></p>
106、;<p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p><b> 計(jì)數(shù)程序u4:</b&
107、gt;</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity js is</p><p> port(fb,clk:in std_logic;</p><p> g5:out std_logic;</p&
108、gt;<p> q:out integer range 0 to 10000);</p><p><b> end js;</b></p><p> architecture bhv of js is</p><p><b> begin</b></p><p> proce
109、ss(fb,clk)</p><p> variable n:integer range 0 to 10000;</p><p> variable m:integer range 0 to 10000;</p><p><b> begin</b></p><p> if(clk'stable)then
110、</p><p> if(fb'event and fb='1')then</p><p><b> n:=n+1;</b></p><p><b> m:=n;</b></p><p> if(n>9999 or n=0)then</p><
111、;p><b> g5<='1';</b></p><p><b> q<=0;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b
112、> end if;</b></p><p> if(clk='0')then</p><p><b> q<=m;</b></p><p><b> n:=0;</b></p><p><b> g5<='0';<
113、;/b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p><b> BCD轉(zhuǎn)換u5:</b></p><p> librar
114、y ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_signed.all;</p><p> use ieee.std_logic_arith.all;</p><p> entity bcd is</p><p>
115、 port(qi:in integer range 0 to 10000;</p><p> rst:in std_logic;</p><p> d1,d2,d3,d4:buffer std_logic_vector(3 downto 0));</p><p><b> end bcd;</b></p><p>
116、; architecture bhv of bcd is</p><p><b> begin</b></p><p> process(qi)</p><p> constant a:integer:=1000;</p><p> constant b:integer:=100;</p><
117、;p> constant c:integer:=10;</p><p> variable x1,x2,x3,x4,y,z:integer range 0 to 1000;</p><p><b> begin</b></p><p> if(rst='1')then</p><p> x
118、1:=0;x2:=0;x3:=0;x4:=0;</p><p><b> else </b></p><p><b> x1:=qi/a;</b></p><p> y:=qi-x1*1000;</p><p><b> x2:=y/b;</b></p>
119、<p> z:=y-x2*100;</p><p><b> x3:=z/c;</b></p><p> x4:=z-x3*10;</p><p><b> end if;</b></p><p> d1<=conv_std_logic_vector(x1,4);</
120、p><p> d2<=conv_std_logic_vector(x2,4);</p><p> d3<=conv_std_logic_vector(x3,4);</p><p> d4<=conv_std_logic_vector(x4,4);</p><p> end process;</p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡易數(shù)字頻率計(jì)設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)--簡易數(shù)字頻率計(jì)設(shè)計(jì)
- 簡易數(shù)字頻率計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--簡易數(shù)字頻率計(jì)
- 簡易數(shù)字頻率計(jì)課程設(shè)計(jì)報(bào)告
- 簡易數(shù)字頻率計(jì)的課程設(shè)計(jì)
- 簡易數(shù)字頻率計(jì)課程設(shè)計(jì)報(bào)告
- 簡易數(shù)字頻率計(jì)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告-簡易數(shù)字頻率計(jì)
- 綜合課程設(shè)計(jì)報(bào)告——簡易數(shù)字頻率計(jì)
- 數(shù)字頻率計(jì)課程設(shè)計(jì)
- 數(shù)字頻率計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)--數(shù)字頻率計(jì)
- 課程設(shè)計(jì)——數(shù)字頻率計(jì)
- 數(shù)字頻率計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)-數(shù)字頻率計(jì)
- 課程設(shè)計(jì)--數(shù)字頻率計(jì)
- 課程設(shè)計(jì)--數(shù)字頻率計(jì)
- 數(shù)字頻率計(jì)課程設(shè)計(jì)
- 數(shù)字頻率計(jì)課程設(shè)計(jì)
評論
0/150
提交評論