版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 1 引言</b></p><p> 簡易多功能信號發(fā)生器是信號發(fā)生器的一種,在生產(chǎn)實踐和科研領域中有著廣泛的應用。在研制、生產(chǎn)、測試和維修各種電子元件、部件以及整機設備時,都需要有信號源,由它產(chǎn)生不同頻率不同波形的電壓、電流信號并加到被測器件或設備上,用其他儀器觀察、測量被測儀器的輸出響應,以分析確定它們的性能參數(shù)。信號發(fā)生器是電子測量領域中最基本、應用最廣泛
2、的一類電子儀器。它可以產(chǎn)生多種波形信號,如正弦波,三角波,方波和鋸齒波等,因而廣泛用于通信、雷達、導航、宇航等領域。</p><p> 在本設計中它能夠產(chǎn)生多種波形,如正弦波,三角波,方波和鋸齒波等,并能實現(xiàn)對各種波頻率和幅度的改變。正因為其在生活中應用的重要性,人們它做了大量的研究,總結出了許多實現(xiàn)方式??梢曰贔PGA 、VHDL、單片機、DOS技能、數(shù)字電路等多種方法實現(xiàn)。</p><
3、p> 本設計是采用VHDL來實現(xiàn)的簡易多功能信號發(fā)生器。它能產(chǎn)生正弦波,三角波,方波和鋸齒波。且對各種波形的要求如下:</p><p> ?。?)根據(jù)按鍵選擇不同的波形(實現(xiàn)正弦波,三角波,方波和鋸齒波);</p><p> ?。?)各波形的頻率范圍為100Hz-20KHz;</p><p> ?。?)各波形頻率可調(通過按鍵控制頻率的變化,步進值為500H
4、z);</p><p> (4)用LED數(shù)碼管實時顯示輸出波形的頻率值;</p><p> (5)用按鍵控制實現(xiàn)輸出信號的幅度調節(jié)(幅度調節(jié)為2.5V和5V)。</p><p><b> 2 EDA技術介紹</b></p><p><b> 2.1 EDA介紹</b></p>
5、<p> EDA是電子設計自動化(Electronic Design Automation)縮寫。EDA技術是以計算機為工具,根據(jù)硬件描述語言HDL( Hardware Description language)完成的設計文件,自動地完成邏輯編譯、化簡、分割、綜合及優(yōu)化、布局布線、仿真以及對于特定目標芯片的適配編譯和編程下載等工作。 硬件描述語言HDL是相對于一般的計算機軟件語言,如:C、PASCAL而言的。HDL語言使用與
6、設計硬件電子系統(tǒng)的計算機語言,它能描述電子系統(tǒng)的邏輯功能、電路結構和連接方式。設計者可利用HDL程序來描述所希望的電路系統(tǒng),規(guī)定器件結構特征和電路的行為方式;然后利用綜合器和適配器將此程序編程能控制FPGA和CPLD內部結構,并實現(xiàn)相應邏輯功能的的門級或更底層的結構網(wǎng)表文件或下載文件。目前,就FPGA/CPLD開發(fā)來說,比較常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[1]。</p><p>
7、幾乎所有適于大學生做的數(shù)字邏輯電路實驗都可以在計算機上利用EDA (Electronic Design Automatic—電子設計自動化)軟件進行設計、仿真,只有極少量外部配件不能在計算機上進行仿真。因此,在實驗前期階段,即實驗預習階段的主要應用工具是EDA軟件,利用EDA軟件可以設計、仿真實驗課題,進行虛擬實驗。通過虛擬實驗使實驗者在進入真實實驗前就能對預做的實驗有相當?shù)牧私?,甚至可以預測到實驗的結果。這樣在實際做實驗時,可以把許多
8、設計型實驗的難度降低,同時能有更多的時間讓實驗者動手做實驗,研究問題,提高實驗效率。當前數(shù)字電路設計已由計算機輔助設計進入到以計算機為主的設計時代。</p><p> 2.2 VHDL基本介紹</p><p> VHDL是一種主要的硬件描述語言之一,硬件描述語言(HDL)是各種描述方法中最能體現(xiàn)EDA優(yōu)越性的描述方法。所謂硬件描述語言,實際上就是一種描述工具,其描述的對象就是待設計電路
9、系統(tǒng)的邏輯功能,實現(xiàn)該功能的算法,選用的電路結構以及其他各種約束條件等。通常要求HDL既能描述系統(tǒng)的行為,又能描述系統(tǒng)的結構。</p><p> VHDL語言是美國國防部與20世紀80年代后期,出于軍事工業(yè)需要開發(fā)的。1984年VHDL被IEEE確定為標準的硬件描述語言。1993年IEEE對VHDL進行了修正,增加了部分新的VHDL命令與屬性,增強了對系統(tǒng)的描述能力。</p><p>
10、 VHDL涵蓋面廣,抽象描述強,支持硬件的設計,驗證,綜合和測試。VHDL能在多級別上對同一邏輯功能進行描述。VHDL的基本結構包含一個實體和一個結構體,而完整的VHDL結構還包括配置,程序包與庫。各種硬件描述語言中,VHDL的描述能力最強,因此運用VHDL 進行復雜電路設計時,往往采用自頂向下結構化的設計方法。</p><p> 2.3 設計工具簡介</p><p> Quartus
11、 II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。</p><p> Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用
12、成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三放EDA工具。</p><p> 此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現(xiàn)各種DSP應用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設計、嵌入式軟件開發(fā)、可編程邏輯設計于一體,是一種綜合性的開發(fā)平臺
13、。</p><p> Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經(jīng)停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和H
14、ardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。</p><p> Altera Quartus II 作為一種可編程邏輯的設計環(huán)境, 由于其強大的設計能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設計者的歡迎。 </p><p> Altera的Quartus II可編程邏輯軟件屬于第四代PLD開發(fā)平臺。該平臺支持一個工作組環(huán)境下的設計要求,其中包括
15、支持基于Internet的協(xié)作設計。Quartus平臺與Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應商的開發(fā)工具相兼容。改進了軟件的LogicLock模塊設計功能,增添 了FastFit編譯選項,推進了網(wǎng)絡編輯性能,而且提升了調試能力。</p><p><b> 3 設計流程</b></p>&
16、lt;p> 3.1設計思想及原理圖</p><p> 基于VHDL語言設計一個簡易多功能信號發(fā)生器,通過選入輸入信號,可以輸出正弦波、三角波、方波和鋸齒波四種波形信號。信號發(fā)生器的控制模塊可以用數(shù)據(jù)選擇器實現(xiàn),四種信號的信號選擇可以用4選1數(shù)據(jù)選擇器實現(xiàn)。同時本設計使用原理圖的方法,對正弦波、三角波、方波和鋸齒波和4選1數(shù)據(jù)選擇器元件進行調用。</p><p> 簡易多功能信號
17、發(fā)生器的原理圖如下:</p><p> 本設計的主題思想是各個模塊分別產(chǎn)生相應的波形,再通過一個4選1數(shù)據(jù)選擇器輸出相應的波形。通過其他按鍵控制波形的頻率和幅度的變化。</p><p> 3.2 正弦波、三角波、方波和鋸齒波的實現(xiàn)</p><p> 3.2.1正弦波設計</p><p> 正弦波的產(chǎn)生思想是將對模擬波形采樣后的編碼存
18、入定義好的ROM中,再根據(jù)時鐘循環(huán)的將這些編碼順序輸出,在輸出端將經(jīng)過數(shù)模轉換器轉換后的模擬信號接入示波器即可顯示正弦波形。產(chǎn)生正弦波的VHDL代碼如下:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity sin2 is</p><p&g
19、t; port(clock,sel:in std_logic;</p><p> dout4:out integer range 0 to 255);</p><p><b> end sin2;</b></p><p> architecture bhv of sin2 is</p><p> type me
20、m_type is array(0 to 63) of integer range 0 to 255;</p><p> constant mem:mem_type:=(255,254,252,249,245,239,233,225,</p><p> 217,207,197,186,174,162,150,137,</p><p> 124,112,99,8
21、7,75,64,53,43,34,</p><p> 26,19,13,8,4,1,0,0,1,4,8,</p><p> 13,19,26,34,43,53,64,75,87,99,</p><p> 112,124,137,150,162,174,186,197,207,</p><p> 217,225,233,239,245,
22、249,252,254,255);</p><p> signal address:integer range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p>
23、<p> if clock'event and clock='1' then</p><p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1&
24、#39; then</p><p> address<=address+1;</p><p> dout4<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> do
25、ut4<=mem(address);</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p
26、><b> end bhv;</b></p><p> 3.2.2正弦波的仿真</p><p> 在Quartus II軟件輸入上述代碼,再通過編譯和時序仿真,可得到如下的仿真波形。</p><p> 上圖中的輸出制式模擬信號各采樣點的數(shù)字編碼,由于沒有經(jīng)過數(shù)模轉換,輸出結果就如圖中所示。當將程序下載到硬件后,在示波器上就可以顯示
27、正弦波形了。</p><p> 3.2.3三角波設計</p><p> 三角波的產(chǎn)生思想是將對模擬波形采樣后的編碼存入定義好的ROM中,再根據(jù)時鐘循環(huán)的將這些編碼順序輸出,在輸出端將經(jīng)過數(shù)模轉換器轉換后的模擬信號接入示波器即可顯示三角波形。產(chǎn)生三角波的VHDL代碼如下:</p><p> library ieee;</p><p>
28、use ieee.std_logic_1164.all;</p><p> entity sanjiao is</p><p> port(clock,sel:in std_logic;</p><p> dout3:out integer range 0 to 255);</p><p> end sanjiao;</p>
29、;<p> architecture bhv of sanjiao is</p><p> type mem_type is array(0 to 63) of integer range 0 to 255;</p><p> constant mem:mem_type:=(0,8,16,24,32,40,48,56,</p><p> 64,
30、72,80,88,96,104,112,120,</p><p> 128,136,144,152,160,168,176,184,</p><p> 192,200,208,216,224,232,240,248,</p><p> 255,248,240,232,224,216,208,200,</p><p> 192,184,
31、176,168,160,152,144,136,</p><p> 128,120,112,104,96,88,80,72,</p><p> 64,56,48,40,32,24,16,8);</p><p> signal address:integer range 0 to 63;</p><p><b> begin&
32、lt;/b></p><p> process(clock)</p><p><b> begin</b></p><p> if clock'event and clock='1' then</p><p> if address>63 then</p><
33、;p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p><p> address<=address+1;</p><p> dout3<=(mem(address))/2;</p>
34、<p><b> else</b></p><p> address<=address+1;</p><p> dout3<=mem(address);</p><p><b> end if;</b></p><p><b> end if;</b
35、></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 3.2.4三角波的仿真</p><p> 在Quartus II軟件輸入上述代碼,再通過編譯
36、和時序仿真,可得到如下的仿真波形。</p><p> 上圖中的輸出制式模擬信號各采樣點的數(shù)字編碼,由于沒有經(jīng)過數(shù)模轉換,輸出結果就如圖中所示。當將程序下載到硬件后,在示波器上就可以顯示三角波形了。</p><p><b> 3.2.5方波設計</b></p><p> 方波波的產(chǎn)生思想是將對模擬波形采樣后的編碼存入定義好的ROM中,再根據(jù)
37、時鐘循環(huán)的將這些編碼順序輸出,在輸出端將經(jīng)過數(shù)模轉換器轉換后的模擬信號接入示波器即可顯示方波波形。產(chǎn)生方波的VHDL代碼如下:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity fangbo is</p><p> port(clo
38、ck,sel:in std_logic;</p><p> dout1:out integer range 0 to 255);</p><p> end fangbo;</p><p> architecture bhv of fangbo is</p><p> type mem_type is array(0 to 63) of
39、 integer range 0 to 255;</p><p> constant mem:mem_type:=(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,</p><p> 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,25
40、5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,</p><p> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);</p><p> signal address:integer range 0 to 63;</p><p><b> begin</b></p><p>
41、process(clock)</p><p><b> begin</b></p><p> if clock'event and clock='1' then</p><p> if address>63 then</p><p> address<=0;</p>
42、<p><b> else</b></p><p> if sel='1' then</p><p> address<=address+1;</p><p> dout1<=(mem(address))/2;</p><p><b> else</b&
43、gt;</p><p> address<=address+1;</p><p> dout1<=mem(address);</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end i
44、f; </p><p> end process;</p><p><b> end bhv;</b></p><p> 3.2.6方波的仿真</p><p> 在Quartus II軟件輸入上述代碼,再通過編譯和時序仿真,可得到如下的仿真波形。</p><p> 上圖中的輸出制
45、式模擬信號各采樣點的數(shù)字編碼,由于沒有經(jīng)過數(shù)模轉換,輸出結果就如圖中所示。當將程序下載到硬件后,在示波器上就可以顯示三角波形了。</p><p> 3.2.7鋸齒波設計</p><p> 鋸齒波的產(chǎn)生思想是將對模擬波形采樣后的編碼存入定義好的ROM中,再根據(jù)時鐘循環(huán)的將這些編碼順序輸出,在輸出端將經(jīng)過數(shù)模轉換器轉換后的模擬信號接入示波器即可顯示鋸齒波形。產(chǎn)生鋸齒波的VHDL代碼如下:&
46、lt;/p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity juchi is</p><p> port(clock,sel:in std_logic;</p><p> dout2:out integer rang
47、e 0 to 255);</p><p> end juchi;</p><p> architecture bhv of juchi is</p><p> type mem_type is array(0 to 63) of integer range 0 to 255;</p><p> constant mem:mem_typ
48、e:=(0,4,8,12,16,20,24,28,</p><p> 32,36,40,44,48,52,56,60,</p><p> 64,68,72,76,80,84,88,92,</p><p> 96,100,104,108,112,116,120,124,</p><p> 128,132,136,140,144,148,
49、152,156,</p><p> 160,164,168,172,176,180,184,188,</p><p> 192,198,200,204,208,212,216,220,</p><p> 224,228,234,238,242,246,250,255);</p><p> signal address:integer
50、range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p><p> if clock'event and clock='1' then</p&
51、gt;<p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p><p> address<=address+1;</p>
52、;<p> dout2<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> dout2<=mem(address);</p><p><b> end if;<
53、;/b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 3.2.8鋸齒
54、波的仿真</p><p> 在Quartus II軟件輸入上述代碼,再通過編譯和時序仿真,可得到如下的仿真波形。</p><p> 上圖中的輸出制式模擬信號各采樣點的數(shù)字編碼,由于沒有經(jīng)過數(shù)模轉換,輸出結果就如圖中所示。當將程序下載到硬件后,在示波器上就可以顯示鋸齒波波形了。</p><p> 3.3各個控制單元的實現(xiàn)</p><p>
55、 3.3.1頻率控制單元</p><p> 頻率控制單元包括按鍵輸入識別模塊、分頻數(shù)產(chǎn)生模塊和分頻模塊。其器件圖分別如圖6、圖7和圖8所示。</p><p> 在按鍵輸入識別模塊中共有4個輸入端。其中一個時鐘輸入端,以一個頻率調</p><p> 節(jié)輸入端,一個使系統(tǒng)輸出波形的頻率為最大的控制輸入端和一個使系統(tǒng)輸出波形的頻率為最小的控制輸入端。本課程設計要求
56、輸出波形的頻率在每按一次相應的按鍵時,就增加或減少500Hz。而實驗室的硬件設備上的按鍵都是撥碼是按鍵,即按鍵按下后一直有效,這顯然不能滿足要求。于是按鍵輸入識別模塊中用如下的代碼實現(xiàn)按鍵沒按一次都能有效的功能。</p><p> if button0='0' and button1='1' then</p><p> if cnt=40 then<
57、;/p><p><b> cnt<=0;</b></p><p><b> else</b></p><p> cnt<=cnt+1;</p><p><b> end if;</b></p><p> elsif button0=
58、39;1' and button1='0' then</p><p> if cnt=40 then</p><p><b> cnt<=0;</b></p><p><b> else</b></p><p> cnt<=cnt+1;</p>
59、<p><b> end if;</b></p><p> 以上代碼實現(xiàn)的只是頻率增長的功能,同理就可以實現(xiàn)頻率減小的功能。</p><p> 當按下按鍵輸入識別模塊中分別使整個系統(tǒng)輸出最大和最小頻率的波形的控制輸入端時 ,在按相應的使頻率增減的按鍵則實現(xiàn)頻率從最大或最小開始增加或減少的功能。</p><p> 在分頻數(shù)產(chǎn)
60、生模塊中有一個輸入端接收從按鍵輸入識別模塊中輸出地對頻率的控制信號的輸入端,一個分頻數(shù)輸出端,四個相應的接數(shù)碼管以顯示系統(tǒng)輸出信號的頻率的輸出端。</p><p> 當分頻數(shù)產(chǎn)生模塊的輸入端接收從按鍵輸入識別模塊中輸出地對頻率的控制信號后,便產(chǎn)生相應的分頻數(shù)送到輸出端,同時將與分頻數(shù)相應頻率送到與數(shù)碼管相接的輸出端。其VHDL代碼見本課程設計的附錄。</p><p> 在分頻模塊中有一
61、個系統(tǒng)時鐘輸入端,一個分頻數(shù)輸入端和一個頻率輸出端。分頻器的功能主要是根據(jù)分頻數(shù)產(chǎn)生相應的輸出頻率。</p><p> 3.3.2波形輸出控制單元</p><p> 波形輸出控制單元中只包括一個數(shù)據(jù)選擇器模塊。其器件圖如圖9所示</p><p> 在該模塊為4選1的數(shù)據(jù)選擇器,包括4個數(shù)據(jù)輸入端,一個數(shù)據(jù)選擇輸入端和一個數(shù)據(jù)輸出端。其功能是根據(jù)數(shù)據(jù)選擇輸入端輸
62、入的數(shù)據(jù)來選擇相應的數(shù)據(jù)送到輸出端。從而實現(xiàn)數(shù)據(jù)的選擇輸出。</p><p><b> 3.4硬件測試</b></p><p> 本課程設計是簡易多功能信號發(fā)生器,其總共有6個輸入端和6個輸出端。具體的輸入輸出端可見圖1中所示。</p><p> 根據(jù)引腳所鎖定圖將系統(tǒng)中的各個輸入輸出端口鎖定到合適的引腳上。需要注意的是本系統(tǒng)用到了數(shù)碼管
63、顯示,所以應該選定實驗箱的模式6。另外,本實驗輸入的時鐘頻率是12MHz。</p><p> 當引腳鎖定完畢后,將程序下載到試驗箱中,連好示波器,在輸入端輸入相應的值即可得到相應的輸出波形。具體的硬件仿真波形如下:</p><p> 在clk端輸入12MHz的時鐘信號,當圖1的原理圖中的bx[1..0]輸入“00”時得到的是方波波形,如圖10所示。改變sel的值可以該變輸出波形的幅值。
64、按頻率控制單元中介紹的方法可以實現(xiàn)波形頻率的改變。</p><p> 在clk端輸入12MHz的時鐘信號,當圖1的原理圖中的bx[1..0]輸入“01”時得到的是鋸齒波波形,如圖11所示。改變sel的值可以該變輸出波形的幅值。按頻率控制單元中介紹的方法可以實現(xiàn)波形頻率的改變。</p><p> 在clk端輸入12MHz的時鐘信號,當圖1的原理圖中的bx[1..0]輸入“11”時得到的是
65、正弦波波形,如圖12所示。改變sel的值可以該變輸出波形的幅值。按頻率控制單元中介紹的方法可以實現(xiàn)波形頻率的改變。</p><p><b> 4 結論</b></p><p> EDA技術是當前數(shù)字系統(tǒng)設計領域比較火熱的一種工具,他可以大大縮短設計需要的時間,降低成本的同時也提高了系統(tǒng)的穩(wěn)定性。使用VHDL語言描述硬件系統(tǒng)使得EDA技術有了更為廣闊的空間。本設計使
66、用了基于Altera公司的開發(fā)軟件工具Quartus II,本系統(tǒng)即實現(xiàn)了可以輸出三種波形的簡易多功能波形發(fā)生器,仿真結果證明,該設計正確有效,可以作為制作實物的理論依據(jù)。 對于EDA技Quartus II進行了系統(tǒng)的設計和仿真。簡易波形發(fā)生器在生活中各個場合都有著大量的使用術我一直都有著濃厚的興趣,借做課設的機會,認真的研究了一下這么科學。發(fā)現(xiàn)EDA技術比我們想象中的要有很大的難度。里面有很多的思想來源于信息電子技術輯算法的設計,需要
67、有很強的C語言編程功底。學習一門知識要從最基本的體系構架開始,倘若一開始就從頂層設計入手,就會造成很多基本原理、基本概念上的偏差,甚里面的基本知識,包括電路的概念以及寄存器傳送的基本知識。VHDL語言與C語言有很大的不同,但是C語言的編程思想也可以移植到VHDL語言當中來,尤其是一些邏至會拖延設計的時間,事倍功半。雖然可設完成了,但我意識到,我對于這門學科只是停留在入門</p><p><b> 參考
68、文獻</b></p><p> [1] 潘松,黃繼業(yè). EDA技術實用教程.北京:科學出版社,2002.</p><p> [2] 甘歷.VHDL應用與開發(fā)實際.北京:科學出版社,2003.</p><p> [3] 孫延鵬,張芝賢.VHDL與可編程邏輯器件應用.航空工業(yè)出版社,2006.</p><p> [4] 趙明富
69、,李立軍,石新鋒,沈獻博.EDA技術基礎.北京大學出版社,2007.</p><p> [5] 黃仁欣.EDA技術實用教程.清華大學出版社,2006.</p><p><b> 附錄</b></p><p><b> 方波</b></p><p> library ieee;</p&g
70、t;<p> use ieee.std_logic_1164.all;</p><p> entity fangbo is</p><p> port(clock,sel:in std_logic;</p><p> dout1:out integer range 0 to 255);</p><p> end fan
71、gbo;</p><p> architecture bhv of fangbo is</p><p> type mem_type is array(0 to 63) of integer range 0 to 255;</p><p> constant mem:mem_type:=(255,255,255,255,255,255,255,255,255,
72、255,255,255,255,255,255,255,</p><p> 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);</p><p> signal address:in
73、teger range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p><p> if clock'event and clock='1' then&
74、lt;/p><p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p><p> address<=address+1;<
75、;/p><p> dout1<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> dout1<=mem(address);</p><p><b> end
76、if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p><
77、;b> 正弦波</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity sin2 is</p><p> port(clock,sel:in std_logic;</p><p> d
78、out4:out integer range 0 to 255);</p><p><b> end sin2;</b></p><p> architecture bhv of sin2 is</p><p> type mem_type is array(0 to 63) of integer range 0 to 255;</
79、p><p> constant mem:mem_type:=(255,254,252,249,245,239,233,225,</p><p> 217,207,197,186,174,162,150,137,</p><p> 124,112,99,87,75,64,53,43,34,</p><p> 26,19,13,8,4,1,0
80、,0,1,4,8,</p><p> 13,19,26,34,43,53,64,75,87,99,</p><p> 112,124,137,150,162,174,186,197,207,</p><p> 217,225,233,239,245,249,252,254,255);</p><p> signal address:i
81、nteger range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p><p> if clock'event and clock='1' then
82、</p><p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p><p> address<=address+1;&l
83、t;/p><p> dout4<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> dout4<=mem(address);</p><p><b> end
84、 if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p>&l
85、t;b> 鋸齒波</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity juchi is</p><p> port(clock,sel:in std_logic;</p><p>
86、 dout2:out integer range 0 to 255);</p><p> end juchi;</p><p> architecture bhv of juchi is</p><p> type mem_type is array(0 to 63) of integer range 0 to 255;</p><p>
87、; constant mem:mem_type:=(0,4,8,12,16,20,24,28,</p><p> 32,36,40,44,48,52,56,60,</p><p> 64,68,72,76,80,84,88,92,</p><p> 96,100,104,108,112,116,120,124,</p><p> 1
88、28,132,136,140,144,148,152,156,</p><p> 160,164,168,172,176,180,184,188,</p><p> 192,198,200,204,208,212,216,220,</p><p> 224,228,234,238,242,246,250,255);</p><p>
89、signal address:integer range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p><p> if clock'event and clock=
90、'1' then</p><p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p><p> address&
91、lt;=address+1;</p><p> dout2<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> dout2<=mem(address);</p><p&g
92、t;<b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p&
93、gt;<p><b> 三角波</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity sanjiao is</p><p> port(clock,sel:in std_logic;<
94、/p><p> dout3:out integer range 0 to 255);</p><p> end sanjiao;</p><p> architecture bhv of sanjiao is</p><p> type mem_type is array(0 to 63) of integer range 0 to 25
95、5;</p><p> constant mem:mem_type:=(0,8,16,24,32,40,48,56,</p><p> 64,72,80,88,96,104,112,120,</p><p> 128,136,144,152,160,168,176,184,</p><p> 192,200,208,216,224,2
96、32,240,248,</p><p> 255,248,240,232,224,216,208,200,</p><p> 192,184,176,168,160,152,144,136,</p><p> 128,120,112,104,96,88,80,72,</p><p> 64,56,48,40,32,24,16,8);&
97、lt;/p><p> signal address:integer range 0 to 63;</p><p><b> begin</b></p><p> process(clock)</p><p><b> begin</b></p><p> if cloc
98、k'event and clock='1' then</p><p> if address>63 then</p><p> address<=0;</p><p><b> else</b></p><p> if sel='1' then</p>
99、;<p> address<=address+1;</p><p> dout3<=(mem(address))/2;</p><p><b> else</b></p><p> address<=address+1;</p><p> dout3<=mem(addres
100、s);</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end
101、 bhv;</b></p><p><b> 按鍵輸入識別模塊</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity aa is</p><p> port(clk:i
102、n std_logic;</p><p> btn:in std_logic_vector(1 downto 0);</p><p> highh:in std_logic;</p><p> loww:in std_logic;</p><p> addr:out integer range 0 to 40);</p>
103、<p><b> end aa;</b></p><p> architecture bhv of aa is</p><p> signal cnt:integer range 0 to 40 :=0;</p><p> signal button0,button1,button2,button3:std_logic;&l
104、t;/p><p><b> begin</b></p><p> process(highh,loww,clk,button0,button1)</p><p><b> begin</b></p><p> if clk'event and clk='1' then&l
105、t;/p><p> button0<=btn(0);</p><p> button1<=button0;</p><p> button2<=btn(1);</p><p> button3<=button2;</p><p> if highh='1' then<
106、/p><p><b> cnt<=40;</b></p><p> elsif loww='1' then</p><p><b> cnt<=0;</b></p><p><b> else</b></p><p>
107、if button0='0' and button1='1' then</p><p> if cnt=40 then</p><p><b> cnt<=0;</b></p><p><b> else</b></p><p> cnt<=cnt
108、+1;</p><p><b> end if;</b></p><p> elsif button0='1' and button1='0' then</p><p> if cnt=40 then</p><p><b> cnt<=0;</b>&l
109、t;/p><p><b> else</b></p><p> cnt<=cnt+1;</p><p><b> end if;</b></p><p> elsif button2='0' and button3='1' then</p>&
110、lt;p> if cnt=0 then</p><p><b> cnt<=40;</b></p><p><b> else</b></p><p> cnt<=cnt-1;</p><p><b> end if;</b></p>
111、<p> elsif button2='1' and button3='0' then</p><p> if cnt=0 then</p><p><b> cnt<=40;</b></p><p><b> else</b></p><p>
112、; cnt<=cnt-1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p&
113、gt;<p> end process;</p><p> addr<=cnt;</p><p><b> end bhv;</b></p><p><b> 分頻模塊</b></p><p> library ieee;</p><p> u
114、se ieee.std_logic_1164.all;</p><p> entity fenpin is</p><p> port(shu:in integer range 0 to 937;</p><p> clk:in std_logic;</p><p> clock:out std_logic);</p>
115、<p> end fenpin;</p><p> architecture bhv of fenpin is</p><p> signal num:integer range 0 to 937;</p><p> signal i:integer range 0 to 937:=0;</p><p> signal t
116、emp:std_logic:='0';</p><p><b> begin</b></p><p> process(clk,i,temp)</p><p><b> begin</b></p><p> if clk'event and clk='1
117、9; then</p><p> if i=shu then</p><p><b> i<=0;</b></p><p> temp<=not temp;</p><p><b> else</b></p><p><b> i<=i+
118、1;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> clock<=temp;</p><p> end process;</p><p><b> end b
119、hv;</b></p><p><b> 分頻數(shù)產(chǎn)生模塊</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity pinlv is</p><p> port(addre
120、ss:in integer range 0 to 40;</p><p> shu:out integer range 0 to 937;</p><p> wan,qian,bai,shi,ge:out std_logic_vector(3 downto 0));</p><p> end pinlv;</p><p> archi
121、tecture bhv of pinlv is</p><p><b> begin</b></p><p> process(address)</p><p><b> begin</b></p><p> case address is</p><p> whe
122、n 0=>shu<=937;wan<="ZZZZ";qian<="ZZZZ";bai<="0001";shi<="0000";ge<="0000";</p><p> when 1=>shu<=172;wan<="ZZZZ";qian
123、<="ZZZZ";bai<="0101";shi<="0000";ge<="0000";</p><p> when 2=>shu<=93;wan<="ZZZZ";qian<="0001";bai<="0000";shi
124、<="0000";ge<="0000";</p><p> when 3=>shu<=62;wan<="ZZZZ";qian<="0001";bai<="0101";shi<="0000";ge<="0000";<
125、/p><p> when 4=>shu<=46;wan<="ZZZZ";qian<="0010";bai<="0000";shi<="0000";ge<="0000";</p><p> when 5=>shu<=37;wan<=&
126、quot;ZZZZ";qian<="0010";bai<="0101";shi<="0000";ge<="0000";</p><p> when 6=>shu<=31;wan<="ZZZZ";qian<="0011";bai<=
127、"0000";shi<="0000";ge<="0000";</p><p> when 7=>shu<=26;wan<="ZZZZ";qian<="0011";bai<="0101";shi<="0000";ge<=&
128、quot;0000";</p><p> when 8=>shu<=24;wan<="ZZZZ";qian<="0100";bai<="0000";shi<="0000";ge<="0000";</p><p> when 9=>
129、shu<=20;wan<="ZZZZ";qian<="0100";bai<="0101";shi<="0000";ge<="0000";</p><p> when 10=>shu<=18;wan<="ZZZZ";qian<=&quo
130、t;0101";bai<="0000";shi<="0000";ge<="0000";</p><p> when 11=>shu<=16;wan<="ZZZZ";qian<="0101";bai<="0101";shi<=&qu
131、ot;0000";ge<="0000";</p><p> when 12=>shu<=15;wan<="ZZZZ";qian<="0110";bai<="0000";shi<="0000";ge<="0000";</p>
132、<p> when 13=>shu<=28;wan<="ZZZZ";qian<="0110";bai<="0101";shi<="0000";ge<="0000";</p><p> when 14=>shu<=13;wan<="
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 函數(shù)信號發(fā)生器課程設計說明書
- eda課程設計--信號發(fā)生器
- eda課程設計-簡易信號發(fā)生器
- eda課程設計--dds信號發(fā)生器
- eda課程設計---函數(shù)信號發(fā)生器的設計
- 蒸汽發(fā)生器課程設計說明書
- eda設計實驗課程設計-函數(shù)信號發(fā)生器
- eda課程設計-多功能波形信號發(fā)生器
- eda課程設計--基于cpld的信號發(fā)生器設計
- 課程設計說明書《多種波形發(fā)生器》
- eda課程設計——基于dds的正弦信號發(fā)生器設計
- eda課程設計--基于fpga的dds信號發(fā)生器設計
- eda音樂發(fā)生器課程設計
- eda課程設計報告---正弦函數(shù)信號發(fā)生器的設計
- 基于vhdl語言信號發(fā)生器的設計--eda課程設計
- 信號發(fā)生器課程設計----函數(shù)信號發(fā)生器
- eda課程設計--任意波形發(fā)生器
- 信號發(fā)生器課程設計報告--函數(shù)信號發(fā)生器的設計
- eda課程設計報告--樂曲發(fā)生器
- 信號發(fā)生器課程設計---函數(shù)發(fā)生器的設計
評論
0/150
提交評論