2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于Verilog HDL數(shù)字頻率計設(shè)計與實現(xiàn) </p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  學(xué)院:計算機與通信工程學(xué)院 專業(yè):網(wǎng)絡(luò)工程專業(yè) </p><p>  指導(dǎo)教師對學(xué)生在課程設(shè)計中的評價</p><p>  指導(dǎo)教師對課程設(shè)計的評定意見&

2、lt;/p><p>  基于Verilog HDL數(shù)字頻率計設(shè)計與實現(xiàn)</p><p>  摘 要: 在電子技術(shù)中,頻率是最基本的參數(shù)之一,并且與許多電參量的測量方案、測量結(jié)果都有十分密切的關(guān)系,因此頻率的測量就顯得更為重要。測量頻率的方法有多種,其中電子計數(shù)器測量頻率具有精度高、使用方便、測量迅速,以及便于實現(xiàn)測量過程自動化等優(yōu)點,是頻率測量的重要手段之一。電子計數(shù)器測頻有兩種方式:一是直接

3、測頻法,即在一定閘門時間內(nèi)測量被測信號的脈沖個數(shù);二是間接測頻法,如周期測頻法。直接測頻法適用于高頻信號的頻率測量,間接測頻法適用于低頻信號的頻率測量。本文闡述了用Verilog HDL語言設(shè)計了一個簡單的數(shù)字頻率計的過程</p><p>  關(guān)鍵詞:周期;EDA;Verilog HDL;數(shù)字頻率計;波形仿真</p><p><b>  目錄</b></p>

4、;<p><b>  1 引 言6</b></p><p>  1.1 數(shù)字頻率計概述7</p><p>  1.2 頻率測量的思想和方法7</p><p>  2 Verilog HDL簡介10</p><p>  2.1 Verilog HDL的簡介10</p><p&g

5、t;  3 數(shù)字頻率計系統(tǒng)框圖11</p><p>  3.1數(shù)字頻率計系統(tǒng)框圖11</p><p>  3.2數(shù)字頻率計系統(tǒng)部件簡介11</p><p>  4 基于Verilog HDL數(shù)字頻率計程序設(shè)計12</p><p>  4.1數(shù)字頻率計系統(tǒng)模塊劃分結(jié)構(gòu)12</p><p>  4.2計數(shù)模塊

6、counter13</p><p>  4.3門控模塊gate_control16</p><p>  4.4分頻模塊fdiv19</p><p>  4.5 寄存器模塊flip_latch21</p><p>  4.6 多路選擇模塊data_mux23</p><p>  4.7 動態(tài)位選模塊dispse

7、lect24</p><p>  4.8 BCD譯碼模塊dispdecoder26</p><p>  4.9 頂層電路top29</p><p><b>  5 總結(jié)32</b></p><p><b>  參考文獻33</b></p><p><b>

8、;  1 引 言</b></p><p>  在電子測量領(lǐng)域中,頻率測量的精確度是最高的,可達10—10E-13數(shù)量級。因此,在生產(chǎn)過程中許多物理量,例如溫度、壓力、流量、液位、PH值、振動、位移、速度、加速度,乃至各種氣體的百分比成分等均用傳感器轉(zhuǎn)換成信號頻率,然后用數(shù)字頻率計來測量,以提高精確度。 </p><p>  國際上數(shù)字頻率計的分類很多。按功能分類,測量某種單一功

9、能的計數(shù)器。如頻率計數(shù)器,只能專門用來測量高頻和微波頻率;時間計數(shù)器,是以測量時間為基礎(chǔ)的計數(shù)器,其測時分辨力和準(zhǔn)確度很高,可達ns數(shù)量級;特種計數(shù)器,它具有特種功能,如可逆計數(shù)器、予置計數(shù)器、差值計數(shù)器、倒數(shù)計數(shù)器等,用于工業(yè)和白控技術(shù)等方面。數(shù)字頻率計按頻段分類 (1)低速計數(shù)器:最高計數(shù)頻率<10MHz; (2)中速計數(shù)器:最高計數(shù)頻率10—100MHz; (3)高速計數(shù)器:最高計數(shù)頻率>100MHz; (4)微波頻率計數(shù)器:測頻

10、范圍1—80GHz或更高。</p><p>  單片機自問世以來,性能不斷提高和完善,其資源又能滿足很多應(yīng)用場合的需要,加之單片機具有集成度高、功能強、速度快、體積小、功耗低、使用方便、價格低廉等特點,因此,在工業(yè)控制、智能儀器儀表、數(shù)據(jù)采集和處理、通信系統(tǒng)、高級計算器、家用電器等領(lǐng)域的應(yīng)用日益廣泛,并且正在逐步取代現(xiàn)有的多片微機應(yīng)用系統(tǒng)。單片機的潛力越來越被人們所重視。特別是當(dāng)前用CMOS工藝制成的各種單片機,

11、由于功耗低,使用的溫度范圍大,抗干擾能力強、能滿足一些特殊要求的應(yīng)用場合,更加擴大了單片機的應(yīng)用范圍,也進一步促使單片機性能的發(fā)展。</p><p>  1.1 數(shù)字頻率計概述 </p><p>  頻率計的基本原理是用一個頻率穩(wěn)定度高的頻率源作為基準(zhǔn)時鐘,對比測量其他信號的頻率。通常情況下計算每秒內(nèi)待測信號的脈沖個數(shù),此時我們稱閘門時間為1秒。閘門時間也可以大于或小于一秒。閘門時間越長

12、,得到的頻率值就越準(zhǔn)確,但閘門時間越長則每測一次頻率的間隔就越長。閘門時間越短,測的頻率值刷新就越快,但測得的頻率精度就受影響。本文數(shù)字頻率計是用數(shù)字顯示被測信號頻率的儀器,被測信號可以是正弦波,方波或其它周期性變化的信號。如配以適當(dāng)?shù)膫鞲衅?,可以對多種物理量進行測試,比如機械振動的頻率,轉(zhuǎn)速,聲音的頻率以及產(chǎn)品的計件等等。因此,數(shù)字頻率計是一種應(yīng)用很廣泛的儀器電子系統(tǒng)非常廣泛的應(yīng)用領(lǐng)域內(nèi),到處可見到處理離散信息的數(shù)字電路。</

13、p><p>  數(shù)字電路制造工業(yè)的進步,使得系統(tǒng)設(shè)計人員能在更小的空間內(nèi)實現(xiàn)更多的功能,從而提高系統(tǒng)可靠性和速度。集成電路的類型很多,從大的方面可以分為模擬電路和數(shù)字集成電路2大類。數(shù)字集成電路廣泛用于計算機、控制與測量系統(tǒng),以及其它電子設(shè)備中。一般說來,數(shù)字系統(tǒng)中運行的電信號,其大小往往并不改變,但在實踐分布上卻有著嚴格的要求,這是數(shù)字電路的一個特點。數(shù)字集成電路作為電子技術(shù)最重要的基礎(chǔ)產(chǎn)品之一,已廣泛地深入到各

14、個應(yīng)用領(lǐng)域</p><p>  1.2 頻率測量的思想和方法</p><p>  1.頻率測量的基本思想</p><p>  測量被測信號在單位時間內(nèi)的脈沖個數(shù),其數(shù)字表達式</p><p><b>  f = N / t</b></p><p><b>  其中:</b>

15、</p><p><b>  f為被測信號的頻率</b></p><p><b>  N為脈沖的個數(shù)</b></p><p>  t為被測信號產(chǎn)生N個脈沖所需的時間</p><p><b>  頻率測量方法</b></p><p>  直接測量法:直接測

16、量被測信號的頻率,通過計數(shù)法來對被測信號在一定時間內(nèi)的脈沖個數(shù)進行計數(shù)。直接測量法的結(jié)構(gòu)框圖如圖1.2.1所示。</p><p>  圖1.2.1 直接測量法的結(jié)構(gòu)框圖</p><p><b>  誤差來源</b></p><p> ?、?技術(shù)過程中最大存在著±1個字的量化誤差</p><p> ?、?對時間t

17、的準(zhǔn)確把握,主要包括準(zhǔn)時鐘的時間準(zhǔn)確性、整形電路、分頻電路以及技術(shù)時間控制閘門的開關(guān)速度等因素。</p><p>  直接法測量的最大相對誤差可以表達為</p><p> ?。?df/f )max=±( |1/N| + |G| )=±( |1/ft| + |G| )</p><p><b>  其中:</b></p&g

18、t;<p>  N為脈沖的個數(shù),G為標(biāo)準(zhǔn)時鐘的頻率穩(wěn)定性,f為被測信號頻率,t為被測信號產(chǎn)生N個脈沖所需的時間。</p><p><b>  功能及技術(shù)指標(biāo)</b></p><p>  ● 頻率測量范圍: 10Hz ~ 100MHz</p><p>  ● 測量分辨率: 1Hz </p><p>  ● 測

19、量通道靈敏度: 50mVpp</p><p>  ● 通道輸入阻抗:不小于100k?</p><p><b>  ● 測量誤差:±1</b></p><p>  ● 測量結(jié)果顯示:6位數(shù)碼管顯示</p><p>  該數(shù)字頻率計的操作面板如圖1.2.4所示</p><p>  圖1.2.

20、4 簡易數(shù)字頻率計的操作面板</p><p>  其中,被測信號可以有三種,分別是方波、三角波和正弦波;測量結(jié)果顯示采用六個數(shù)碼管來顯示;量程分為三個,分別為:0~999999Hz、0~9999.99kHz、0~99.9999MHz</p><p>  2 Verilog HDL簡介</p><p>  2.1 Verilog HDL的簡介</p>

21、<p>  Verilog HDL是一種硬件描述語言(hardware description language),為了制作數(shù)位電路(數(shù)字電路)而用來描述ASICs和FPGAs的設(shè)計之用。Verilog 的設(shè)計者想要以 C 程序語言(en:C programming language)為基礎(chǔ)設(shè)計一種語言,可以使工程師比較熟悉跟容易接受。事實上,它產(chǎn)生與 C 程序語言類似的不嚴謹性質(zhì),并且大概與Pascal很相像。 </p

22、><p>  這種語言跟傳統(tǒng)的程序設(shè)計語言不同,在于它的程序敘述并非嚴格地線性(循序)執(zhí)行。Verilog 模式包含不同模組(modules)的階層關(guān)系。模組(modules)是輸出(inputs)和輸入(outputs)所定義出來的一個集合。在每個模組中,有一串的電線(wires)、暫存器(registers)和子模組(submodules)的定義。并且在每個模組里面,語言敘述大部分都被群組成為各種的執(zhí)行區(qū)塊(bl

23、ocks),用來定義該模組所產(chǎn)生的行為描述。在每個區(qū)塊(blocks)內(nèi),使用 begin 和 end 的關(guān)鍵字來區(qū)隔開來,其中的敘述是循序被執(zhí)行。但是同一個設(shè)計,不同的區(qū)塊間的執(zhí)行是平行的。 </p><p>  這個語言的敘述之子集合是可合成(synthesizable)。如果在一個電路設(shè)計的模組中僅包含可合成的敘述,那麼這個電路設(shè)計就可以被適當(dāng)?shù)能浖?轉(zhuǎn)換合成為電腦芯片的電路layout。</p>

24、;<p>  3 數(shù)字頻率計系統(tǒng)框圖</p><p>  3.1數(shù)字頻率計系統(tǒng)框圖</p><p>  設(shè)計如圖3.1.1所示的數(shù)字頻率計系統(tǒng)電路框圖</p><p>  圖3.1.1 所示的數(shù)字頻率計系統(tǒng)電路框圖</p><p>  3.2數(shù)字頻率計系統(tǒng)部件簡介</p><p><b>  

25、1. 放大整形</b></p><p>  數(shù)字頻率計允許測量信號的類型有三種:方波、三角波和正弦波,并且信號的測量通道靈敏度為 50mVpp,為此,需要將被測信號放大整形成標(biāo)準(zhǔn)的TTL電平的方波型號,便于CPLD/FPGA對信號脈沖的計數(shù)。</p><p>  2. SW1、SW2、SW3按鍵</p><p>  SW1、SW2、SW3這三個按鍵用來在

26、測量的時候,用戶根據(jù)被測信號的大致頻率范圍選擇不同的適合被測信號的量程。在按鍵的設(shè)計中,需要考慮實際按鍵的消抖問題</p><p><b>  3. 標(biāo)準(zhǔn)時鐘</b></p><p>  標(biāo)準(zhǔn)時鐘為頻率計測量提供精度相對比較高的時基信號,其時間的穩(wěn)定性與精度將會直接影響到頻率計測量的準(zhǔn)確性。</p><p>  4. LED顯示模塊</p

27、><p>  頻率計將測量的結(jié)果通過6位數(shù)碼管(LED)來顯示。</p><p>  4 基于Verilog HDL數(shù)字頻率計程序設(shè)計</p><p>  4.1數(shù)字頻率計系統(tǒng)模塊劃分結(jié)構(gòu)</p><p>  數(shù)字頻率計中的CPLD/FPGA是頻率計的核心,主要實現(xiàn)在一定時間內(nèi),對被測信號的脈沖個數(shù)進行計算,并且轉(zhuǎn)化為相應(yīng)的頻率值顯示在六個數(shù)碼

28、管上。首先將系統(tǒng)分成七個模塊來分別設(shè)計仿真。分別有以下七個模塊:</p><p>  經(jīng)過上述模塊化劃分后的結(jié)構(gòu)框如圖4.1所示</p><p>  圖4.1 模塊化劃分后的結(jié)構(gòu)</p><p>  ● 計數(shù)模塊counter:對包含被測信號頻率信息的脈沖進行計數(shù)</p><p>  ● 門控模塊gate_control:根據(jù)量程,控制技術(shù)模

29、塊計數(shù)。</p><p>  ● 分頻模塊fdiv:將標(biāo)準(zhǔn)時鐘分頻,得到計數(shù)以及動態(tài)顯示所需的時鐘。</p><p>  ● 寄存器模塊flip_latch:對計數(shù)模塊的計數(shù)值進行寄存。</p><p>  ● 多路選擇模塊data_mux:根據(jù)動態(tài)選擇信號,選擇相應(yīng)的需要顯示的計數(shù)值</p><p>  ● 動態(tài)為選擇模塊dispselev

30、t:輸出動態(tài)顯示中的位選信號</p><p>  ● BCD譯碼模塊dispdenoder:將BCD碼譯成數(shù)碼管的顯示數(shù)據(jù)</p><p>  4.2計數(shù)模塊counter</p><p>  該模塊主要完成對被測信號經(jīng)過放大整形后輸入到可編程邏輯器件的F_IN信號是現(xiàn)在一定的時間下的計數(shù),采用六個異步BCD碼十進制計數(shù)器來實現(xiàn) 0~999999范圍的計數(shù)。<

31、;/p><p>  計數(shù)模塊的結(jié)構(gòu)框圖如圖4.2.1所示。</p><p>  圖4.2.1 計數(shù)模塊的結(jié)構(gòu)框圖</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:</p><p>  module counter(EN,CLR,F_IN,F_OUT,Q0,Q1,Q2,Q3,Q4,Q5);</p><

32、p>  output [3:0] Q5,Q4,Q3,Q2,Q1,Q0;</p><p>  output F_OUT;</p><p>  input EN;</p><p>  input CLR;</p><p>  input F_IN;</p><p>  reg [3:0] Q5,Q4,Q3,Q2

33、,Q1,Q0;</p><p>  reg F_OUT;</p><p>  reg F_out0,F_out1,F_out2,F_out3,F_out4;</p><p>  always @(posedge F_IN)</p><p><b>  begin</b></p><p>  if(

34、(EN == 1'b1)&&(CLR == 1'b0)&&(Q0 != 4'b1001))</p><p><b>  begin</b></p><p>  Q0 <= Q0 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p&

35、gt;<p><b>  end</b></p><p><b>  else</b></p><p><b>  begin</b></p><p>  Q0 <= 4'b0000;</p><p>  if((EN == 1'b1)&am

36、p;&(CLR == 1'b0)&&(Q1 != 4'b1001))</p><p><b>  begin</b></p><p>  Q1 <= Q1 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p><p><b

37、>  end</b></p><p><b>  else</b></p><p><b>  begin</b></p><p>  Q1 <= 4'b0000;</p><p>  if((EN == 1'b1)&&(CLR == 1

38、9;b0)&&(Q2 != 4'b1001))</p><p><b>  begin </b></p><p>  Q2 <= Q2 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p><p><b>  end</b&g

39、t;</p><p><b>  else</b></p><p><b>  begin</b></p><p>  Q2 <= 4'b0000;</p><p>  if((EN == 1'b1)&&(CLR == 1'b0)&&(Q

40、3 != 4'b1001))</p><p><b>  begin </b></p><p>  Q3 <= Q3 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p><p><b>  end</b></p><

41、;p><b>  else</b></p><p><b>  begin</b></p><p>  Q3 <= 4'b0000;</p><p>  if((EN == 1'b1)&&(CLR == 1'b0)&&(Q4 != 4'b1001)

42、)</p><p><b>  begin </b></p><p>  Q4 <= Q4 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p><p><b>  end</b></p><p><b>  

43、else</b></p><p><b>  begin</b></p><p>  Q4 <= 4'b0000;</p><p>  if((EN == 1'b1)&&(CLR == 1'b0)&&(Q5 != 4'b1001))</p><

44、p><b>  begin </b></p><p>  Q5 <= Q5 + 4'b0001;</p><p>  F_OUT <= 1'b0;</p><p><b>  end</b></p><p><b>  else</b><

45、;/p><p><b>  begin</b></p><p>  Q5 <= 4'b0000;</p><p>  F_OUT <= 1'b1;</p><p><b>  end</b></p><p><b>  end</b&g

46、t;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end<

47、;/b></p><p><b>  Endmodule</b></p><p>  該模塊定義輸入端口如下:</p><p>  ● EN:異步BCD碼十進制計數(shù)器的全局使能信號</p><p>  ● CLR:異步BCD碼十進制計數(shù)器復(fù)位信號</p><p>  ● F_IN:被測信號經(jīng)

48、過放大與整形處理后的信號</p><p>  該模塊定義輸出端口如下:</p><p>  ● F_OUT:超出技術(shù)范圍0~999999的輸出信號,用來指示提醒用戶選擇更大的量程。</p><p>  ● Q0:計數(shù)器的最低位輸出</p><p>  ● Q1:計數(shù)器的第5位輸出</p><p>  ● Q2:計數(shù)器的

49、第4位輸出</p><p>  ● Q3:計數(shù)器的第3位輸出</p><p>  ● Q4:計數(shù)器的第2位輸出</p><p>  ● Q5:計數(shù)器的第1位輸出</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.2.2所示。</p><p>  圖4.2.2 計數(shù)模塊co

50、unter的仿真波形</p><p>  4.3門控模塊gate_control</p><p>  門控模塊實現(xiàn)檢測外界量程的選擇,并且根據(jù)量程輸出控制6位BCD碼十進制計算器的計數(shù)時鐘,以及在測量完一次信號頻率后,計數(shù)器計數(shù)值清零。計數(shù)器的清零要與后級寄存器的鎖存時刻做很好的時序配合。應(yīng)該實在計數(shù)器測量完一次信號頻率后,首先將數(shù)據(jù)鎖存到寄存器,然后再將計數(shù)器值清零,這樣可以驚醒下一次測

51、量。</p><p>  門控模塊的結(jié)構(gòu)框圖如圖4.3.1所示</p><p>  圖4.3.1 門控模塊結(jié)構(gòu)框圖 </p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:</p><p>  module gate_control(</p><p>  SW0,SW1,SW2,</p>

52、;<p>  f1hz,f10hz,f100hz,</p><p><b>  Latch_EN,</b></p><p>  Counter_Clr,</p><p>  Counter_EN,</p><p>  dp_s1hz,dp_s10hz,dp_s100hz</p><p&g

53、t;<b>  ); </b></p><p>  output Latch_EN;</p><p>  output Counter_Clr;</p><p>  output Counter_EN;</p><p>  output dp_s1hz,dp_s10hz,dp_s100hz;</p><

54、;p>  input SW0,SW1,SW2;</p><p>  input f1hz,f10hz,f100hz;</p><p>  reg dp_s1hz,dp_s10hz,dp_s100hz;</p><p><b>  reg fref;</b></p><p>  reg wire_1;</p

55、><p>  reg wire_2;</p><p>  //初始化輸入以及中間量</p><p><b>  initial</b></p><p><b>  begin</b></p><p>  fref <= 1'b0;</p><p&

56、gt;  wire_1 <= 1'b0;</p><p>  wire_2 <= 1'b0;</p><p><b>  end</b></p><p>  //根據(jù)不同的外界量程選擇,選擇相應(yīng)的計數(shù)基時鐘</p><p>  always @(SW0 or SW1 or SW2 or f

57、1hz or f10hz or f100hz)</p><p><b>  begin</b></p><p>  if(SW2 == 1'b1)</p><p><b>  begin</b></p><p>  fref <= f100hz;</p><p>

58、;  {dp_s1hz,dp_s10hz,dp_s100hz} <= 3'b001;</p><p><b>  end</b></p><p>  else if(SW1 == 1'b1)</p><p><b>  begin</b></p><p>  fref <

59、= f10hz;</p><p>  {dp_s1hz,dp_s10hz,dp_s100hz} <= 3'b010;</p><p><b>  end</b></p><p>  else if(SW0 == 1'b1)</p><p><b>  begin</b><

60、/p><p>  fref <= f1hz;</p><p>  {dp_s1hz,dp_s10hz,dp_s100hz} <= 3'b100;</p><p><b>  end</b></p><p><b>  end</b></p><p>  //根

61、據(jù)不同的計數(shù)基時鐘,提供輸出相應(yīng)的計數(shù)器計數(shù)值的清除脈沖與鎖存器鎖存脈沖</p><p>  always @(posedge fref)</p><p><b>  begin</b></p><p>  wire_1 <= ! wire_1;</p><p><b>  end</b>&l

62、t;/p><p>  always @(negedge fref)</p><p><b>  begin</b></p><p>  wire_2 <= wire_1;</p><p><b>  end</b></p><p>  assign Counter_EN

63、= wire_1;</p><p>  assign Latch_EN = (! Counter_EN) & wire_2;</p><p>  assign Counter_Clr = (! Counter_EN) & (! Latch_EN) | (! wire_2);</p><p>  endmodule </p><

64、;p>  該模塊定義輸入端如下:</p><p>  ● SW0、SW1、SW2:量程選擇開關(guān)</p><p>  ● flhz:1Hz的標(biāo)準(zhǔn)時鐘輸入</p><p>  ● fl0hz:10Hz的標(biāo)準(zhǔn)時鐘輸入</p><p>  ● fl00hz:100Hz的標(biāo)準(zhǔn)時鐘輸入</p><p>  該模塊定義輸入端口

65、如下:</p><p>  ● Latch_EN:用來是能寄存器所存數(shù)據(jù)</p><p>  ● Counter_Clr:用于計數(shù)器的清零</p><p>  ● Counter_EN:用于使能計數(shù)器開始計數(shù)</p><p>  ● dp_s1hz:選擇999999Hz量程時,用于控制顯示中的小數(shù)點位置</p><p>

66、;  ● dp_s10hz:選擇9999.99Hz量程時,用于控制顯示中的小數(shù)點位置</p><p>  ● dp_s100hz:選擇99.9999Hz量程時,用于控制顯示中的小數(shù)點位置</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.3.2所示。</p><p>  圖4.3.2 門控模塊的仿真波形</p&g

67、t;<p>  4.4分頻模塊fdiv</p><p>  分頻模塊在系統(tǒng)全局時鐘的驅(qū)動下,經(jīng)過分頻得到系統(tǒng)中所需要的多種頻率成分的時鐘信號。</p><p>  分頻模塊的結(jié)構(gòu)框圖如圖4.4.1所示。</p><p>  圖4.4.1 分頻模塊結(jié)構(gòu)框圖</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下

68、:</p><p>  module fdiv(clk,f1hz,f10hz,f100hz,f1khz);</p><p>  output f1hz,f10hz,f100hz,f1khz;</p><p>  input clk;</p><p>  reg f1hz,f10hz,f100hz,f1khz;</p><

69、p>  integer cnt1=0,cnt2=0,cnt3=0,cnt4=0;</p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p>  //if(cnt1<9999) //實際系統(tǒng)分頻值</p><p>  if(cnt1 <

70、; 2) //仿真時的分頻值</p><p><b>  begin</b></p><p>  f1khz <= 1'b0;</p><p>  cnt1 = cnt1 + 1;</p><p><b>  end</b></p><p><b>

71、  else</b></p><p><b>  begin</b></p><p>  f1khz <= 1'b1;</p><p><b>  cnt1 = 0;</b></p><p><b>  end</b></p><p

72、><b>  end</b></p><p>  always @(posedge f1khz)</p><p><b>  begin</b></p><p>  //if(cnt2<9) //實際系統(tǒng)分頻值</p><p>  if(cnt2 < 2) //仿真時的分頻

73、值</p><p><b>  begin</b></p><p>  f100hz <= 1'b0;</p><p>  cnt2 = cnt2 + 1;</p><p><b>  end</b></p><p><b>  else</b&

74、gt;</p><p><b>  begin</b></p><p>  f100hz <= 1'b1;</p><p><b>  cnt2 = 0;</b></p><p><b>  end</b></p><p><b>

75、;  end</b></p><p>  always @(posedge f100hz)</p><p><b>  begin</b></p><p>  //if(cnt3<9) //實際系統(tǒng)分頻值</p><p>  if(cnt3 < 2) //仿真時的分頻值</p>

76、;<p><b>  begin</b></p><p>  f10hz <= 1'b0;</p><p>  cnt3 = cnt3 + 1;</p><p><b>  end</b></p><p><b>  else</b></p&g

77、t;<p><b>  begin</b></p><p>  f10hz <= 1'b1;</p><p><b>  cnt3 = 0;</b></p><p><b>  end</b></p><p><b>  end</b

78、></p><p>  always @(posedge f10hz)</p><p><b>  begin</b></p><p>  //if(cnt4<9) //實際系統(tǒng)分頻值</p><p>  if(cnt4 < 2) //仿真時的分頻值</p><p>&

79、lt;b>  begin</b></p><p>  f1hz <= 1'b0;</p><p>  cnt4 = cnt4 + 1;</p><p><b>  end</b></p><p><b>  else</b></p><p>&

80、lt;b>  begin</b></p><p>  f1hz <= 1'b1;</p><p><b>  cnt4 = 0;</b></p><p><b>  end</b></p><p><b>  end</b></p>

81、<p><b>  endmodule</b></p><p>  該模塊定義輸入端口如下:</p><p>  ● Clk:全局系統(tǒng)時鐘信號</p><p>  該模塊定義輸出端口如下:</p><p>  ● F1hz:輸出1Hz的時鐘信號</p><p>  ● F10hz:輸出

82、1Hz的時鐘信號</p><p>  ● F1khz:輸出1Hz的時鐘信號</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.4.2所示。</p><p>  圖4.4.2 分頻模塊的仿真波形</p><p>  4.5 寄存器模塊flip_latch</p><p> 

83、 寄存器模塊實現(xiàn)每一個測量頻率時,計數(shù)器計算值的暫時存儲。</p><p>  寄存器模塊的結(jié)構(gòu)框圖如圖4.5.1所示。</p><p>  圖4.5.1 寄存器模塊</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:</p><p>  module flip_latch(clk,A0,A1,A2,A3,A4,A5

84、,Q0,Q1,Q2,Q3,Q4,Q5);</p><p>  output [3:0] Q0,Q1,Q2,Q3,Q4,Q5;</p><p>  input clk;</p><p>  input [3:0] A0,A1,A2,A3,A4,A5;</p><p>  reg [3:0] Q0,Q1,Q2,Q3,Q4,Q5;</p&

85、gt;<p>  always @(posedge clk)</p><p><b>  begin</b></p><p><b>  Q0 <= A0;</b></p><p><b>  Q1 <= A1;</b></p><p><b&g

86、t;  Q2 <= A2;</b></p><p><b>  Q3 <= A3;</b></p><p><b>  Q4 <= A4;</b></p><p><b>  Q5 <= A5;</b></p><p><b>  

87、end</b></p><p><b>  Endmodule</b></p><p>  該模塊定義輸入端口如下:</p><p>  ● clk:所存數(shù)據(jù)信號輸入,當(dāng)clk的上升沿到來時,寄存器將輸入端信號鎖存進寄存器,并且改變輸出。</p><p>  ● A0,A1,A2,A3,A4,A5:寄存器的數(shù)

88、據(jù)輸入端</p><p>  該模塊定義輸出端口如下:</p><p>  ● Q0,Q1,Q2,Q3,Q4,Q5:寄存器的數(shù)據(jù)輸出端。</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.5.2所示。</p><p>  圖4.5.2 寄存器模塊的仿真波形</p><p>

89、;  4.6 多路選擇模塊data_mux</p><p>  多路選擇模塊實現(xiàn)測量頻率值的分時顯示,即動態(tài)顯示。經(jīng)過多路選擇器模塊來分時地傳輸數(shù)據(jù)。</p><p>  多路選擇模塊的結(jié)構(gòu)如圖4.6.1所示。</p><p>  圖4.6.1 多路選擇模塊結(jié)構(gòu)框圖</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:

90、</p><p>  module data_mux(disp_select,A0,A1,A2,A3,A4,A5,Q);</p><p>  output [3:0] Q;</p><p>  input [2:0]disp_select;</p><p>  input [3:0] A0,A1,A2,A3,A4,A5;</p>

91、;<p>  reg [3:0] Q;</p><p>  always @(disp_select,A5,A4,A3,A2,A1,A0,Q)</p><p><b>  begin</b></p><p>  case(disp_select)</p><p>  3'b000: Q <=

92、A5;</p><p>  3'b001: Q <= A4;</p><p>  3'b010: Q <= A3;</p><p>  3'b011: Q <= A2;</p><p>  3'b100: Q <= A1;</p><p>  3'b101

93、: Q <= A0;</p><p>  default: Q <= 4'b0;</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  Endmodule</b></p>&

94、lt;p>  該模塊定義輸入端口如下:</p><p>  ● disp_select:選擇信號輸入</p><p>  ● A0,A1,A2,A3,A4,A5:多路選擇模塊的數(shù)據(jù)輸入端口</p><p>  該模塊定義輸出端口如下:</p><p>  ● 多路選擇模塊的數(shù)據(jù)輸出端口。</p><p>  在A

95、ltera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.6.2所示。</p><p>  圖4.6.2 多路選擇模塊的仿真波形</p><p>  4.7 動態(tài)位選模塊dispselect</p><p>  動態(tài)位選模塊用來驅(qū)動數(shù)碼動態(tài)地顯示頻率測量數(shù)據(jù),分時地選擇各個數(shù)碼管進行顯示 </p><p>  動態(tài)位選的結(jié)構(gòu)框

96、圖4.7.1所示。</p><p>  圖4.7.1 動態(tài)位選模塊的結(jié)構(gòu)框圖</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:</p><p>  module dispselect(clk,disp_select,Q);</p><p>  output [5:0] Q;</p><p>

97、  output [2:0] disp_select;</p><p>  input clk;</p><p>  reg [5:0] Q;</p><p>  reg [2:0] disp_select;</p><p>  always @(posedge clk)</p><p><b>  beg

98、in</b></p><p>  if(disp_select < 3'b101)</p><p>  disp_select <= disp_select + 3'b1;</p><p><b>  else</b></p><p>  disp_select <= 3&#

99、39;b0;</p><p>  case(disp_select)</p><p>  3'b000: Q <= 6'b100000;</p><p>  3'b001: Q <= 6'b010000;</p><p>  3'b010: Q <= 6'b001000;<

100、;/p><p>  3'b011: Q <= 6'b000100;</p><p>  3'b100: Q <= 6'b000010;</p><p>  3'b101: Q <= 6'b000001;</p><p>  default: Q <= 6'b00000

101、0; </p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  endmodule</b></p><p>  該模塊定義輸入端口如下:</p><p>  ● clk:動態(tài)位選的時鐘

102、信號輸入,一般取1KHz左右的標(biāo)準(zhǔn)時鐘。</p><p>  該模塊定義輸出端口如下:</p><p>  ● disp_select:動態(tài)位選中間量輸出,用于與系統(tǒng)中其他模塊之間的同步。</p><p>  ● Q:動態(tài)位選信號輸出,可以直接接到數(shù)碼管的公共端。</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形

103、仿真得到波形如圖4.7.2所示。</p><p>  圖4.7.2 動態(tài)位選模塊的仿真波形</p><p>  4.8 BCD譯碼模塊dispdecoder</p><p>  BCD譯碼模塊主要實現(xiàn)BCD碼到7段數(shù)碼管顯示碼字段的轉(zhuǎn)換,同時,考慮到頻率測量中的一些“零”的處理,比如選擇量程1~999999Hz,但被測信號頻率為100Hz,這樣在顯示的時候就需要將6

104、為數(shù)碼管的前三位屏蔽。</p><p>  BCD譯碼模塊的結(jié)構(gòu)框圖如圖4.7.1所示。</p><p>  圖4.8.1 BCD譯碼模塊的結(jié)構(gòu)框圖</p><p>  根據(jù)模塊實現(xiàn)的功能設(shè)計Verilog HDL源代碼如下:</p><p>  module dispdecoder(</p><p><b>

105、;  data_in,</b></p><p>  disp_select,</p><p>  dp_s1hz,dp_s10hz,dp_s100hz,</p><p>  Q5,Q4,Q3,Q2,Q1,Q0,counter_out,</p><p><b>  data_out,</b></p>

106、<p><b>  dp);</b></p><p>  output [6:0] data_out;</p><p>  output dp;</p><p>  input [3:0] data_in;</p><p>  input [2:0] disp_select;</p>&l

107、t;p>  input dp_s1hz,dp_s10hz,dp_s100hz;</p><p>  input [3:0] Q5,Q4,Q3,Q2,Q1,Q0;</p><p>  input counter_out;</p><p><b>  reg dp;</b></p><p>  reg [6:0]

108、 data_out;</p><p><b>  reg hide;</b></p><p><b>  initial </b></p><p><b>  begin</b></p><p>  dp <= 1'b0;</p><p>

109、  hide <= 1'b0;</p><p><b>  end</b></p><p><b>  //譯碼顯示數(shù)據(jù)</b></p><p>  always @(data_in,hide,data_out)</p><p><b>  begin</b>&l

110、t;/p><p>  if(hide == 1'b0)</p><p><b>  begin</b></p><p>  case(data_in)</p><p>  4'b0000 : data_out <= 7'b1111110; //0</p><p>  4

111、'b0001 : data_out <= 7'b0110000; //1</p><p>  4'b0010 : data_out <= 7'b1101101; //2</p><p>  4'b0011 : data_out <= 7'b1111001; //3</p><p>  4'

112、;b0100 : data_out <= 7'b0110011; //4</p><p>  4'b0101 : data_out <= 7'b1011011; //5</p><p>  4'b0110 : data_out <= 7'b1011111; //6</p><p>  4'b01

113、11 : data_out <= 7'b1110000; //7</p><p>  4'b1000 : data_out <= 7'b1111111; //8</p><p>  4'b1001 : data_out <= 7'b1110011; //9</p><p>  default : dat

114、a_out <= 7'b0000000;</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  //小數(shù)點位置與零數(shù)字的處理</p><p

115、>  always @(disp_select,dp_s1hz,dp_s10hz,dp_s100hz, Q5,Q4,Q3,Q2,Q1,counter_out,dp,hide)</p><p><b>  begin</b></p><p>  if (((disp_select == 3'b001) && (dp_s100

116、hz == 1'b1))||</p><p>  ((disp_select == 3'b011) && (dp_s10hz == 1'b1))||</p><p>  ((disp_select == 3'b101) && (dp_s1hz == 1'b1)))</p><p>  dp &l

117、t;= 1'b1;</p><p><b>  else</b></p><p>  dp <= 1'b0;</p><p>  case(disp_select)</p><p>  3'b000: begin</p><p>  if((counter_out

118、== 1'b0) && (Q5 == 4'b0))</p><p>  hide <= 1'b1;</p><p><b>  else</b></p><p>  hide <= 1'b0;</p><p><b>  end</b>&l

119、t;/p><p>  3'b001: begin</p><p>  if((counter_out == 1'b0) && (Q5 == 4'b0) && (Q4 == 4'b0) &&(dp_s100hz != 1'b1))</p><p>  hide

120、<= 1'b1;</p><p><b>  else</b></p><p>  hide <= 1'b0;</p><p><b>  end</b></p><p>  3'b010: begin</p><p>  if((cou

121、nter_out == 1'b0) && (Q5 == 4'b0) && (Q4 == 4'b0) && (Q3 == 4'b0) &&

122、 (dp_s100hz != 1'b1))</p><p>  hide <= 1'b1;</p><p><b>  else</b></p><p>  hide <= 1'b0;</p><p><b>  end</b></p><

123、;p>  3'b011: begin</p><p>  if((counter_out == 1'b0) && (Q5 == 4'b0) && (Q4 == 4'b0) &&

124、 (Q3 == 4'b0) && (Q2 == 4'b0) && (dp_s100hz != 1'b1)&& (dp_s10hz != 1

125、'b1))</p><p>  hide <= 1'b1;</p><p><b>  else</b></p><p>  hide <= 1'b0;</p><p><b>  end</b></p><p>  3'b100:

126、 begin</p><p>  if((counter_out == 1'b0) && (Q5 == 4'b0) && (Q4 == 4'b0) && (Q3 == 4

127、9;b0) && (Q2 == 4'b0) && (Q1 == 4'b0) && (dp_s100hz != 1'b1)&

128、& (dp_s10hz != 1'b1))</p><p>  hide <= 1'b1;</p><p><b>  else</b></p><p>  hide <= 1'b0;</p><p&

129、gt;<b>  end</b></p><p>  default: hide <= 1'b0;</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  endmodule&l

130、t;/b></p><p>  該模塊定義輸入端口如下:</p><p>  ● data_in:BCD碼字輸入信號</p><p>  ● disp_select:來自動態(tài)顯示位模塊,實現(xiàn)兩者之間的同步</p><p>  ● dp_s1hz,dp_s10hz,dp_s100hz:輸入小數(shù)點位置控制信號來自門控模塊</p>

131、<p>  ● Q5,Q4,Q3,Q2,Q1,Q0:計數(shù)器的計數(shù)值輸入,用來控制“零”顯示控制</p><p>  ● counter_out:計數(shù)器計數(shù)溢出信號,用來提示用戶更換更大量程</p><p>  該模塊定義輸出端口如下:</p><p>  ● data_out:經(jīng)過譯碼后的7段數(shù)碼管顯示數(shù)據(jù)輸出,可以直接連接到數(shù)碼管的數(shù)據(jù)端口</

132、p><p>  ● dp:小數(shù)點控制信號</p><p>  在Altera公司的軟件工具QuartusII中編譯和波形仿真得到波形如圖4.8.2所示。</p><p>  圖4.8.2 BCD譯碼模塊的仿真波形</p><p>  4.9 頂層電路top</p><p>  在設(shè)計完各個模塊后,需要將各個模塊有機地組合成

133、一個整體,最后來實現(xiàn)系統(tǒng)的功能。在數(shù)字頻率計中,同時采用了電路原理圖示的設(shè)計以及Verilog HDL語言來編寫的頂層電路,其中頂層如圖4.9.1所示。</p><p>  圖4.9.1 頂層電路top</p><p>  用Verilog HDL語言描述如下:</p><p>  module main(</p><p><b>

134、  Clock,</b></p><p><b>  SW2,</b></p><p><b>  SW1,</b></p><p><b>  SW0,</b></p><p><b>  F_in,</b></p><p

135、>  over_alarm,</p><p><b>  dp,</b></p><p>  disp_data,</p><p>  disp_select</p><p><b>  );</b></p><p>  inputClock;</p>

136、<p>  inputSW2;</p><p>  inputSW1;</p><p>  inputSW0;</p><p>  inputF_in;</p><p>  outputover_alarm;</p><p>  outputdp;</p><p>  ou

137、tput[6:0] disp_data;</p><p>  output[5:0] disp_select;</p><p>  wireSYNTHESIZED_WIRE_0;</p><p>  wireSYNTHESIZED_WIRE_1;</p><p>  wireSYNTHESIZED_WIRE_2;</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論