

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 摘要</b></p><p> 本說明書首先介紹了VHDL語言的特點及發(fā)展史;接著簡要說明了D/A接口(函數(shù)發(fā)生器)的工作原理及設計思想和設計方案的確定;然后著重解釋了使用VHDL語言設計D/A接口(函數(shù)發(fā)生器)的具體操作步驟及主要流程。為了更加詳細的解釋清楚主要流程在本課程設計說明書中還附加了相應的圖片。最后還附加了實現(xiàn)設計的VHDL源程序。</p&g
2、t;<p> 關鍵詞:VHDL D/A接口 設計</p><p><b> 緒論</b></p><p> EDA是電子設計自動化(Electronic Design Automation)的縮寫。EDA技術就是依賴功能強大的計算機,在EDA工具軟件平臺上,對以硬件描述語言HDL(Hardware Description Language)為系
3、統(tǒng)邏輯描述手段完成的設計文件,自動地完成邏輯編譯、化簡、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測試,直至實現(xiàn)既定的電子線路系統(tǒng)功能。EDA技術使設計者的工作僅局限于利用軟件的方式來完成對系統(tǒng)硬件功能的實現(xiàn),可以說EDA技術的產生與發(fā)展是電子設計技術的一個巨大進步。EDA技術融合了眾多電子設計技術和計算機輔助技術,使得它在現(xiàn)代電子學方面的應用越來越廣泛,也成為電子、電氣類大學生必須熟練掌握的一種設計工具。</p><p
4、> 硬件描述性語言HDL是EDA技術的重要組成部分,常見HDL的有VHDL、HDL、ABEL、Verilog、AHDL、SystemC等。其中VHDL、Verilog在現(xiàn)在的EDA設計中使用的最多,也擁有了幾乎所有主流EDA工具的支持,而相對于其他語言VHDL更加完善。VHDL是英文全名是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language
5、,是硬件描述語言的業(yè)界標準之一。它作為一個規(guī)范語言和建模語言,具有與具體硬件電路無關及設計平臺無關的特性,而且還有很強的電路行為描述和建模能力,能從多個層次的數(shù)字系統(tǒng)進行建模和描述,從而大大簡化了硬件設計的任務,提高了設計效率和可靠性。</p><p> D/A轉換器的功能是把二進制數(shù)字信號轉換為與其數(shù)值成正比的模擬信號。AD558是并行8位D/A轉換芯片,應用CPLD可以完成對AD558的控制。CPLD與CP
6、LD結合之后可以完成函數(shù)發(fā)生器的基本功能:波形輸出。要實現(xiàn)這種結合就需要應用VHDL語言完成D/A接口的設計。通過合適的VHDL語言可以完成遞增斜波、遞減斜波、三角波、遞增階梯波的輸出。</p><p><b> 1.VHDL簡介</b></p><p> 1.1 VHDL的特點</p><p> VHDL語言功能強大、設計靈活。VHDL
7、語言可以用簡潔明確的源代碼來描述復雜的邏輯控制,它具有多層次的設計描述功能,層層細化,最后可直接生成電路級描述。VHDL支持同步電路、異步電路和隨機電路的設計,這是其他硬件描述語言雖不能比擬的。VHDL還支持多種設計方法,既支持自底向上的設計,又支持自頂向下的設計;既支持模塊化設計,又支持層次化設計。由于VHDL已經(jīng)成為IEEE標準所規(guī)定的硬件描述性語言,目前大多數(shù)EDA工具幾乎都支持VHDL。因為VHDL易讀和結構化且易于修改設計所以
8、在硬件電路設計過程中, VHDL語言得到廣泛應用。</p><p> VHDL語言獨立于器件的設計與工藝無關。因而設計人員用VHDL進行設計時,不需要考慮選擇器件得問題,就可以集中精力進行設計的優(yōu)化。當設計描述完成后,可以用多種不同的器件結構來實現(xiàn)其功能。</p><p> VHDL語言易于共享和復用。VHDL采用基于庫(Library)的設計方法,可以建立各種可再次利用的模塊。這些模
9、塊可以預先設計或使用以前設計中的存檔模塊,將這些模塊存放到庫中,就可以在以后的設計中進行復用,可以使設計成果在設計人員之間進行交流和共享,減少硬件電路設計。VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設計早期就能查驗設計系統(tǒng)的功能可行性,隨時可對設計進行仿真模擬。</p><p> VHDL語句的行為描述能力和程序結構決定了它具有支持大規(guī)模設計的分解和已有設計的再利用功能。這個特點很好的符合了市場需求。對
10、于用VHDL完成的一個確定的設計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動的把VHDL描述的設計轉變成門級網(wǎng)表。</p><p> 總之,由于VHDL語言有的這些優(yōu)良的特點,它被廣泛的應用在電子線路和電子系統(tǒng)的設計中。</p><p><b> 2.設計方案的確定</b></p><p> 2.1.AD558工作原理</p>
11、;<p> A/D轉換器和D/A轉換器是把微型計算機的應用領域擴展到檢測和過程控制的必要裝置,是把計算機和生產過程、科學實驗過程聯(lián)系起來的重要橋梁。D/A轉換器的功能是把二進制數(shù)字信號轉換為與其數(shù)值成正比的模擬信號。D/A轉換器相對于A/D轉換器在時序上要求較低。在D/A參數(shù)中一個最重要的參數(shù)就是分辨率,它是指輸入數(shù)字量發(fā)生單位數(shù)碼變化時,所對應輸出模擬量(電壓或電流)的變化量。分辨率是指輸入數(shù)字量最低有效位為1時,對應
12、輸出可分辨的電壓變化量ΔU與最大輸出電壓Um之比。</p><p> D/A轉換器AD558是EDA實驗箱上自帶的并行8位D/A轉換芯片,它可以把輸入的8位數(shù)字量轉化為0~2.56V的電壓量,它與CPLD器件聯(lián)合使用可以產生幾種波形。其芯片管腳外形和內部結構框圖分別如圖1、圖2所示:</p><p> 圖1 AD558芯片管腳外形圖</p><p> 圖2 A
13、D558內部結構框圖</p><p> AD558的真值表如圖3所示。由真值表可知:當CS為低電平、CE為電平時,AD558保持上次的轉換結果;當CS和CE同時為電平時,通過數(shù)據(jù)總線D[7..0]讀入數(shù)據(jù),同時講轉換結果輸出。</p><p> 圖3. AD558真值表</p><p><b> 2.2 設計方案</b></p>
14、;<p> 本次D/A接口(函數(shù)發(fā)生器)的設計中,轉換結果是時時輸出的。根據(jù)對AD558真值表的分析可知:當CE和CS同時置‘0’時AD558的工作模式為時時輸出。因此在本次設計中我只需要將CE和CS同時置‘0’即可。根據(jù)對AD558功能的分析可知:利用VHDL語言編寫源程序通過CPLD完成對AD558的控制,并與AD558結合可以完成四種波形的產生。</p><p> 具體設計方案如下:利用V
15、HDL語言設計0~255循環(huán)加法計數(shù)器、255~0循環(huán)減法計數(shù)器、0~128~0循環(huán)加減計數(shù)器、0~224等梯度循環(huán)加法計數(shù)器便可分別完成遞增斜波、遞減斜波、三角波、遞增階梯波的輸出。每個計數(shù)器還設計了片選端和清零端。當清零端為0時計數(shù)器恢復為初始狀態(tài)。為了實現(xiàn)輸出波形模式的選擇,在本次設計中我使用了一個四選一選擇器:輸入為2位邏輯數(shù)組輸出為4個一位邏輯量。每一種輸入狀態(tài)對于于一種輸出狀態(tài),每個狀態(tài)有且僅有一位為1,其余3位皆為0,每個
16、輸出量與一種計數(shù)器的片選端相連接,即每個輸入狀態(tài)都只選中一種輸出狀態(tài)。</p><p> 由于CPLD實驗箱上沒有D/A轉換器,為了顯示設計結果檢驗設計成果我決定使用7段數(shù)碼管顯示產生波形的數(shù)字量。由于輸出范圍為0~255,在十六進制數(shù)0H~EEH的范圍內,而且實驗箱上只有8個7段數(shù)碼管因此我各用2個7段數(shù)碼管顯示4種波形的輸出。</p><p> 在每個計數(shù)器輸出端口和7段譯碼器中間
17、添加一個輸入頻率為1000HZ的4選1數(shù)據(jù)選擇器,并利用兩個撥碼開關實現(xiàn)輸入數(shù)據(jù)的選擇。由于實驗箱上自帶的時鐘源頻率為20MHZ,為了得到1000HZ的頻率,我還設計了一個分頻器。以上即為本次D/A接口(函數(shù)發(fā)生器)的主要設計方案。</p><p><b> 3.設計流程</b></p><p> 首先啟動Quartus II軟件如圖4所示:</p>
18、<p> 圖4 Quartus II啟動界面</p><p> 接著利用向導,建立一個新的工程。在File菜單中選擇New Project Wizard選項啟動項目向導。如圖5所示,分別指定創(chuàng)建工程的路徑,工程名和頂層文件名。工程名和頂層文件可以一致也可以不同。一個工程中可以有多個文件,但只能有一個頂層文件。這里我將工程名取為:keshe,頂層文件名取為zhuanhuan。如圖5所示。</p
19、><p> 圖5 創(chuàng)建工程界面圖</p><p> 在圖5所示界面點擊NEXT按鈕出現(xiàn)對話框如圖6所示直接點Finish按鈕然后在出現(xiàn)的界面中依次點擊File/new出現(xiàn)如圖7所示界面。點擊創(chuàng)建VHDL編輯界面中VHDLFile按鈕即進入VHDL語言編輯區(qū)如圖8所示。</p><p> 圖6 創(chuàng)建工程的結束界面</p><p> 圖7創(chuàng)建
20、VHDLFile對話框</p><p> 圖8 VHDL語言編輯框</p><p> 在圖8所示的VHDL語言編輯框中依次輸入分頻器、四選一選擇器、循環(huán)加法計數(shù)器等4鐘計數(shù)器、七段譯碼器等功能模塊的VHDL語言源程序。輸入完成之后單擊保存圖標并輸入相應的文件名。保存之后即可對源程序進行編譯。如果編譯成功則源程序完全正確,否則應該返回到出錯處改正錯誤直至編譯成功為止。</p>
21、<p> 編譯成功之后選中源程序依次單擊File、NEW、create/update、create symbol file for current file便可對相應的模塊生產元器件。本次設計中對頂層文件采取原理圖輸入法,利用前期設計的各模塊的元器件圖連接成整體電路圖。修改設計直至編譯成功為止,電路原理圖如圖9所示:</p><p><b> 圖9 整體電路圖</b><
22、;/p><p> 原理圖設計成功之后,根據(jù)實驗箱上相應的管教,鎖定管教之后再次編譯,編譯成功之后就可以把程序下載到實驗箱上進行功能驗證了。若功能驗證結果符合設計要求則設計至此結束。</p><p><b> 結束語</b></p><p> 通過這次EDA課程設計,我對課堂上所學到的理論知識的理解加深了許多,自己動腦、動手設計的能力也得到了較
23、大提高。</p><p> 雖然我們這學期學習了EDA這門課,但是由于學時十分有限,當時學的有些不系統(tǒng)。而且在第八周課程及結束了,十一周考完考試之后就幾乎沒有再接觸EDA的知識了。在此次課程設計之前,有許多細節(jié)我已經(jīng)不是很清楚了,為此我特意花了兩天的時間提前再次學習了《EDA技術與VHDL》這本教材。我想這和課堂上的學習一樣是我能順利完成本次課程設計的一個重要原因。</p><p>
24、在這次課程設計的過程中,我對VHDL語言有了更深的認識。通過查閱相關資料和動手設計我發(fā)現(xiàn)我以前對VHDL語言的認識太過膚淺,認為VHDL語言只能用于設計小型的電路系統(tǒng)。但有了更深刻的認識之后我發(fā)現(xiàn)學好VHDL語言可以設計出大規(guī)模的、功能復雜的電路系統(tǒng)。以前之所以會有錯誤的認識是因為自己對VHDL語言的了解和掌握還不夠?,F(xiàn)在仔細想想,這次課程設計使得我對VHDL語言的理解與應用能力得到了較大的提升,也讓我認識到只要升入學習,提升的空間永遠
25、的存在的。</p><p> 在設計的過程中我遇到了一些問題,如:編寫源程序中出現(xiàn)了語法錯誤,使用原理圖設計頂層文件是對輸入輸入輸出端口的位數(shù)選擇錯誤和端口命名錯誤等。通過查閱書本和以前設計的程序我發(fā)現(xiàn)了產生錯誤的原因并解決了問題完成了設計。經(jīng)過反思我發(fā)現(xiàn)較大一部分錯誤時因為操作的不熟練照成的,這也讓我明白了要保持設計的高效率及必須經(jīng)常練習。</p><p> 另一方面我也發(fā)現(xiàn)了動手實
26、踐的重要性。動手實踐是理論知識得以靈活運用的必要前提,也是今后今后走上工作崗位之后能夠很好的完成設計工作的技術保證。只有遇到實際問題并根據(jù)自己對課堂上獲得的專業(yè)知識的理解來解決它才能真正的提高自己的能力。這也提醒我在平時的學習生活中不能一味埋頭于課本知識,當今社會競爭越來越激烈,社會對人才的要求越來越全面,只有理論知識是遠遠不夠的,必須靠動手能力做支撐。因此在學習之余我們應該積極參加各種與專業(yè)知識有關的實踐活動和知識競賽,鞏固所學的理論
27、知識,多注重培養(yǎng)實際動手能力和專業(yè)技術能力,這樣才能在以后的工作崗位上有所作為。</p><p><b> 附錄</b></p><p><b> 分頻器源程序:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;
28、</p><p> use ieee.std_logic_unsigned.all;</p><p> entity fpq is</p><p> port(clk: in std_logic;</p><p> f_out:out std_logic);</p><p> end entity;</
29、p><p> architecture bhv of fpq is</p><p> signal b:integer range 0 to 200000;</p><p><b> begin</b></p><p> process(clk)</p><p><b> beg
30、in </b></p><p> if clk'event and clk='1' then</p><p> if b=20000 then b<=0;f_out<='1';</p><p> elsif b<20000 then b<=b+1;f_out<='0
31、9;;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 4選1選擇器源程序:&
32、lt;/p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity xuanze4_1 is</p><p> port(a1:in std
33、_logic;</p><p> a2:in std_logic;</p><p> q1:out std_logic;</p><p> q2:out std_logic;</p><p> q3:out std_logic;</p><p> q4:out std_logic);</p>&
34、lt;p> end entity xuanze4_1;</p><p> architecture bhv of xuanze4_1 is</p><p> signal q:std_logic_vector(3 downto 0);</p><p> signal a:std_logic_vector(1 downto 0);</p>
35、<p><b> begin</b></p><p> process(a)</p><p><b> begin</b></p><p><b> a<=a1&a2;</b></p><p><b> case a is</b
36、></p><p> when "00" => q<="0001";</p><p> when "01" => q<="0010";</p><p> when "10" => q<="0100";
37、</p><p> when "11" => q<="1000";</p><p><b> end case;</b></p><p><b> q1<=q(0);</b></p><p><b> q2<=q(1)
38、;</b></p><p><b> q3<=q(2);</b></p><p><b> q4<=q(3);</b></p><p> end process;</p><p><b> end bhv;</b></p><
39、p><b> 遞增計數(shù)器源程序:</b></p><p> llibrary ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity dizeng is<
40、;/p><p> port(clk,cs,ret:in std_logic;</p><p> q1:buffer integer range 0 to 256);</p><p> end entity dizeng;</p><p> architecture bhv of dizeng is</p><p>
41、<b> begin</b></p><p> process(clk,cs,ret)</p><p><b> begin</b></p><p> if cs='1' then </p><p> if ret='0' then q1<=0;<
42、;/p><p> elsif ret='1' then </p><p> if clk'event and clk='1' then</p><p> if q1=255 then q1<=0;</p><p> elsif q1<255 then q1<=q1+1;</p
43、><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end pro
44、cess;</p><p><b> end bhv;</b></p><p><b> 遞減計數(shù)器源程序:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use
45、ieee.std_logic_unsigned.all;</p><p> entity dijian is</p><p> port(clk,cs,ret:in std_logic;</p><p> q1:buffer integer range 0 to 256);</p><p> end entity dijian;<
46、;/p><p> architecture bhv of dijian is</p><p><b> begin</b></p><p> process(clk,cs,ret)</p><p><b> begin</b></p><p> if cs='1
47、' then </p><p> if ret='0' then q1<=0;</p><p> elsif ret='1' then </p><p> if clk'event and clk='1' then</p><p> if q1=0 then q1&
48、lt;=255;</p><p> elsif q1>0 then q1<=q1-1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p>
49、<p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 三角波發(fā)生器源程序:</p><p> library ieee;</p><p> use i
50、eee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity sanjiao is</p><p> port(clk,cs,ret:in std_logic;</p><p> q:buffer integer range 0 to
51、 256);</p><p> end entity sanjiao;</p><p> architecture bhv of sanjiao is</p><p> signal q1:integer range 0 to 256;</p><p><b> begin</b></p><
52、p> process(clk,cs,ret,q1)</p><p><b> begin</b></p><p> if cs='1' then </p><p> if ret='0' then q1<=0;</p><p> elsif ret='1
53、9; then </p><p> if clk'event and clk='1' then</p><p> if q1=255 then q1<=0;</p><p> elsif q1<255 then q1<=q1+1;</p><p><b> end if;</b
54、></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> if q1<=128 then q<=q1;</p><p&
55、gt; elsif q1>128 then q<=255-q1;</p><p><b> end if;</b></p><p> end process;</p><p><b> end bhv;</b></p><p> 遞增階梯波發(fā)生器源程序:</p>
56、<p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity jieti is</p><p> port(clk,cs,ret:in std_logic;
57、</p><p> q1:buffer integer range 0 to 256);</p><p> end entity jieti;</p><p> architecture bhv of jieti is</p><p><b> begin</b></p><p> pr
58、ocess(clk,cs,ret)</p><p><b> begin</b></p><p> if cs='1' then </p><p> if ret='0' then q1<=0;</p><p> elsif ret='1' then <
59、/p><p> if clk'event and clk='1' then</p><p> if q1=224 then q1<=0;</p><p> elsif q1<224 then q1<=q1+32;</p><p><b> end if;</b></p&
60、gt;<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 bhv;</
61、b></p><p> 4選1選擇器源程序:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity choose is&
62、lt;/p><p> port(m1,m2:in std_logic;</p><p> a,b,c,d:in integer range 0 to 256;</p><p> q:out integer range 0 to 256);</p><p> end entity choose;</p><p>
63、architecture bhv of choose is</p><p> signal x:std_logic_vector(0 to 1);</p><p><b> begin</b></p><p><b> x<=m1&m2;</b></p><p> with x
64、 select</p><p> q<=a when "00",</p><p> b when "01",</p><p> c when "10",</p><p> d when others;</p><p><b> end
65、 bhv;</b></p><p><b> 7段譯碼器源程序:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity scan is</p><p> port(cl
66、k:in std_logic;</p><p> aa:in integer range 0 to 256;</p><p> out3:buffer integer range 0 to 7;</p><p> segout:out std_logic_vector(7 downto 0));</p><p><b> e
67、nd scan;</b></p><p> architecture behave of scan is</p><p> signal a,b,c,segin:integer range 0 to 9;</p><p><b> begin</b></p><p> a<=aa/100; b&
68、lt;=(aa-100*a)/10;c<=aa-100*a-10*b;</p><p><b> process</b></p><p><b> begin</b></p><p> wait until clk'event and clk='1';</p><
69、p> if out3=2 then out3<=0;</p><p> else out3<=out3+1;</p><p><b> end if;</b></p><p> case out3 is</p><p> when 0=>segin<=b;</p>&
70、lt;p> when 1=>segin<=a;</p><p> when 2=>segin<=c;</p><p> when others=>null;</p><p><b> end case;</b></p><p> end process; </p>
71、<p> with segin select</p><p> segout<="00111111"when 0,</p><p> "00000110"when 1,</p><p> "01011011"when 2,</p><p> "
72、01001111"when 3,</p><p> "01100110"when 4,</p><p> "01101101"when 5,</p><p> "01111101"when 6,</p><p> "00000111"when 7
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda設計實驗課程設計-函數(shù)信號發(fā)生器
- eda課程設計--信號發(fā)生器
- eda課程設計報告---正弦函數(shù)信號發(fā)生器的設計
- 信號發(fā)生器課程設計----函數(shù)信號發(fā)生器
- 信號發(fā)生器課程設計---函數(shù)發(fā)生器的設計
- eda課程設計-簡易信號發(fā)生器
- eda課程設計--dds信號發(fā)生器
- 信號發(fā)生器課程設計報告--函數(shù)信號發(fā)生器的設計
- 函數(shù)信號發(fā)生器課程設計
- 函數(shù)信號發(fā)生器課程設計
- 函數(shù)信號發(fā)生器課程設計
- 函數(shù)信號發(fā)生器課程設計
- 函數(shù)信號發(fā)生器課程設計--基于labview的函數(shù)信號發(fā)生器的設計
- 課程設計---函數(shù)信號發(fā)生器
- 課程設計-函數(shù)信號發(fā)生器
- 函數(shù)信號發(fā)生器課程設計
- 課程設計--函數(shù)信號發(fā)生器的設計
- 電工課程設計---函數(shù)信號發(fā)生器
- 函數(shù)信號發(fā)生器課程設計 (2)
- eda課程設計--基于cpld的信號發(fā)生器設計
評論
0/150
提交評論