版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 簡(jiǎn)易信號(hào)發(fā)生器 </b></p><p><b> 課程設(shè)計(jì)要求</b></p><p> 1. 完成實(shí)驗(yàn)板上DAC的匹配電阻選擇、焊接與調(diào)試,確保其可以正常工作。</p><p> 2. 根據(jù)直接數(shù)字頻率合成(DDFS)原理設(shè)計(jì)正弦信號(hào)發(fā)生器,頻率步進(jìn)1Hz,最高輸出頻率不限
2、,在波形不產(chǎn)生失真(從輸出1KHz正弦轉(zhuǎn)換為輸出最高頻率正弦時(shí),幅度衰減不得大于10%)的情況下越高越好。頻率字可以由串口設(shè)定,也可以由按鍵控制,數(shù)碼管上顯示頻率值。</p><p> 3. 可以控制改變輸出波形類(lèi)型,在正弦、三角波、鋸齒波、方波之間切換。</p><p> 4. 輸出波形幅度可調(diào),最小幅度步進(jìn)100mV。</p><p> 直接數(shù)字頻率合成(
3、DDS)原理</p><p> 直接數(shù)字頻率合成技術(shù)是根據(jù)相位間隔對(duì)正弦信號(hào)進(jìn)行取樣、量化、編碼,然后儲(chǔ)存在EPROM中構(gòu)成一個(gè)正弦查詢表。頻率合成時(shí),相位累加器在參考時(shí)鐘的作用下對(duì)時(shí)鐘脈沖進(jìn)行計(jì)數(shù),同時(shí)將累加器輸出的累加相位與頻率控制字K預(yù)置的相位增量相加,以相加后的吉果形成正弦查詢表的地址;取出表中與該相位對(duì)應(yīng)的單元中的幅度量化正弦函數(shù)值,經(jīng)D/A轉(zhuǎn)換器輸出模擬信號(hào),再經(jīng)低通濾波器平滑得到符合要求的模擬信號(hào)
4、。相位累加器的最大計(jì)數(shù)長(zhǎng)度與正弦查詢表中所存儲(chǔ)的相位分隔點(diǎn)數(shù)相同,由于相位累加器的相位增量不同,將導(dǎo)致一周期內(nèi)的取樣點(diǎn)數(shù)不同,在取樣頻率(由參考時(shí)鐘頻率決定)不變的情況下,輸出信號(hào)的頻率也相應(yīng)變化。</p><p> fin=M(fclk/2^n)</p><p><b> 系統(tǒng)設(shè)計(jì)</b></p><p><b> 總體設(shè)計(jì)方
5、案</b></p><p> 信號(hào)發(fā)生器從總體上可以分為系統(tǒng)控制模塊,波形產(chǎn)生模塊和D/A轉(zhuǎn)換模塊。</p><p> 系統(tǒng)控制模塊負(fù)責(zé)處理按鍵的讀入,按鍵處理,將頻率和幅度在數(shù)碼管上顯示,調(diào)節(jié)頻率和幅度以及波形的選擇。</p><p> 波形發(fā)生模塊負(fù)責(zé)按照控制模塊輸入的信號(hào),輸出相應(yīng)的波形(正弦波,方波鋸,齒波,三角波),以及輸出相應(yīng)幅度和頻率
6、的信號(hào)。</p><p> D/A轉(zhuǎn)換模塊負(fù)責(zé)將輸入的數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)。</p><p> 3.2 系統(tǒng)控制模塊</p><p> 按鍵控制模塊和數(shù)碼顯示模塊</p><p> 1)、按鍵讀取模塊設(shè)計(jì)思路:由于按鍵按下時(shí)有一段時(shí)間的低電平,而按下時(shí)A、B、C、D的輸入鍵值始終是高電平,故可以通過(guò)在20M時(shí)鐘的每個(gè)上升沿來(lái)檢測(cè)按鍵
7、輸入端的電平變化,經(jīng)過(guò)消抖后就可以判斷是哪個(gè)按鍵按下。</p><p> 按鍵檢測(cè)和按鍵值讀取的主要進(jìn)程:</p><p> process(clk_key)</p><p> variable counter: std_logic_vector(15 downto 0);</p><p> variable state:intege
8、r range 4 downto 0;</p><p><b> begin</b></p><p> if rising_edge(clk_key)then</p><p> case state is</p><p> when 0 => if (abcd(0)='0' or abcd(
9、1)='0' or abcd(2)='0'or abcd(3)='0') then </p><p><b> state:=1;</b></p><p> else state:=0;</p><p><b> end if;</b></p><p
10、> when 1 => if counter>="1111111111111110" then</p><p><b> state:=2;</b></p><p> counter:="0000000000000000";</p><p> else counter:=coun
11、ter+1;</p><p><b> state:=1;</b></p><p><b> end if;</b></p><p> when 2 => if abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)
12、='0' then</p><p> case abcd is</p><p> when "0111"=>key_value_1<="00";state:=3;</p><p> when "1011"=>key_value_1<="01"
13、;state:=3;</p><p> when "1101"=>key_value_1<="10";state:=3;</p><p> when "1110"=>key_value_1<="11";state:=3;</p><p> when othe
14、rs=>state:=0;</p><p><b> end case;</b></p><p> else state:=0;</p><p><b> end if;</b></p><p> when 3 => if (abcd(0)='0' or abcd
15、(1)='0' or abcd(2)='0'or abcd(3)='0')then</p><p> if counter>="0000000000000011"then </p><p> counter:="0000000000000000";out_clk<='1'
16、;</p><p> else counter:=counter+1;</p><p><b> end if;</b></p><p><b> state:=3;</b></p><p><b> else </b></p><p><
17、b> state:=4;</b></p><p> out_clk<='1';</p><p><b> end if;</b></p><p> when 4 => if counter>="0000000000000111" then</p>&l
18、t;p><b> state:=0;</b></p><p> counter:="0000000000000000";out_clk<='0';</p><p> else counter:=counter+1;</p><p><b> state:=4;</b>
19、</p><p><b> end if;</b></p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process;</p><p> 2)、按鍵處理和顯示模塊設(shè)
20、計(jì)思路</p><p> 外接的四個(gè)按鍵的分配:</p><p> A:數(shù)碼管頻率顯示和幅度顯示切換;</p><p> B:波形之間的切換(用四個(gè)LED對(duì)應(yīng)顯示);</p><p> C:選擇要調(diào)節(jié)的數(shù)碼管(用四個(gè)LED對(duì)應(yīng)顯示);</p><p> D:對(duì)選擇的數(shù)碼管進(jìn)行調(diào)節(jié)(0~9循環(huán)顯示);</
21、p><p> 數(shù)碼管顯示:從左往右依次是頻率(單位Hz)或幅度(mV)值的千、百、十、個(gè)位。</p><p> LED燈顯示:左邊四位是作為要調(diào)節(jié)的數(shù)碼管的指示</p><p> 右邊四位是作為輸出波形的指示</p><p> 3.3 波形產(chǎn)生模塊</p><p> 圖表 1信號(hào)發(fā)生模塊RTL圖</p>
22、;<p><b> 正弦波的產(chǎn)生</b></p><p> 我們根據(jù)DDS算法,將根據(jù)控制信號(hào)輸入的頻率數(shù)值fin,我們?cè)O(shè)置了一個(gè)25位的計(jì)數(shù)器,da初值為A。</p><p> 這樣da的高八位da(24:17)會(huì)每隔一定的時(shí)間t加1,這就可以作為時(shí)鐘信號(hào)</p><p> data= da(24:17),它會(huì)從1加到2
23、55,這就可以作為rom的地址信號(hào)不斷的重復(fù)讀取rom中的正弦信號(hào)的數(shù)值,這就產(chǎn)生了正弦信號(hào)的數(shù)字信號(hào)。</p><p> 由以上的data也可以作為三角波,鋸齒波,矩形波的時(shí)鐘信號(hào),每個(gè)時(shí)間t產(chǎn)生一個(gè)信號(hào),這樣信號(hào)的每個(gè)周期讀取了256個(gè)數(shù)值。改變時(shí)間t也就可以改變信號(hào)的周期,我們可以通過(guò)改變輸入數(shù)值改變時(shí)間t:</p><p> n=(131072-A)/fin (
24、fin為輸入頻率Hz)</p><p> fclk=n*256 (fclk為時(shí)鐘頻率)</p><p> 這樣就可以計(jì)算出A的數(shù)值。</p><p><b> 三角波的產(chǎn)生</b></p><p> 由以上的data(0~255)我們可以設(shè)一個(gè)變量ds(0~255),在data(0~255)<
25、127時(shí)加1,</p><p> data(0~255)>127時(shí)減1,這樣就可以得出與正弦波相同頻率的三角波信號(hào)。</p><p><b> 鋸齒波的產(chǎn)生</b></p><p> 由以上的data(0~255)我們可以設(shè)一個(gè)變量dj(0~255),在data(0~255)<255時(shí)加1, data(0~255)=255時(shí)變
26、為0,這樣就可以得出與正弦波相同頻率的鋸齒波。</p><p><b> 方波的產(chǎn)生</b></p><p> 由以上的data(0~255)我們可以設(shè)一個(gè)變量ds(0~255),在data(0~255)<127時(shí)為255,data(0~255)>127時(shí)變?yōu)?,這樣就可以得出與正弦波相同頻率的矩形信號(hào)。</p><p> 3
27、.4 波形選擇模塊</p><p> 選用一個(gè)四選一的數(shù)據(jù)選擇器:</p><p> 3.5 幅度調(diào)節(jié)模塊</p><p> 由于輸出地信號(hào)最大為255,最小為0,而D/A轉(zhuǎn)換器的輸入范圍也是0~255,并且D/A轉(zhuǎn)換器沒(méi)有參考信號(hào)調(diào)節(jié)的地方,因此只能改變輸出的數(shù)字信號(hào)的大小。也就是在FPGA里面改變。</p><p><b>
28、; 這里有兩種方法:</b></p><p> 第一種就是在數(shù)據(jù)選擇器的輸出端加上一個(gè)除法器,將輸出信號(hào)除以33,平均0分為33份,然后再按照輸入幅度的控制信號(hào)乘以相應(yīng)的數(shù)。但這樣有個(gè)缺點(diǎn),就是精度不夠高,這里的除法器時(shí)整數(shù)除法,無(wú)法進(jìn)行小數(shù)運(yùn)算,會(huì)是輸出數(shù)值減小很大。</p><p> 第二種方法就是預(yù)先將所有可能的數(shù)值先算好,存到FPGA里面根據(jù)當(dāng)前的輸出數(shù)值和要輸出
29、地幅度選擇已經(jīng)算好的數(shù)據(jù)。這樣處理起來(lái)速度快,精度高(因?yàn)檫@里預(yù)先采用浮點(diǎn)數(shù)計(jì)算),但缺點(diǎn)是占用資源大,好在FPGA資源夠用,我們采用第二種方法。</p><p><b> 程序如下:</b></p><p> case fz1 is</p><p> when 33=> dout1:=din1;</p><p
30、> when 32=> case din1 is</p><p> when 255 => dout1:=247;</p><p> when 254 => dout1:=246;</p><p><b> ……</b></p><p> when others =>dout1:
31、= 0;</p><p><b> end case;</b></p><p> when 31=> case din1 is</p><p> when 255 => dout1:=240;</p><p><b> ……</b></p><p>&
32、lt;b> ……</b></p><p> When 0=> dout1:=0;</p><p><b> end case;</b></p><p> 3.6 D/A轉(zhuǎn)換模塊</p><p> 這是一個(gè)同相求和運(yùn)算電路 </p><p> 根據(jù)公式u0=R
33、f(ui1/R1+ui2/R2+ui3/R3+…),可以計(jì)算出</p><p> R43=2*R44=4*R45=8*R46=16*R47=32*R48=64*R49=128*R50</p><p><b> R43=2*R42</b></p><p><b> 因此可以選取</b></p><p
34、> R40=1 kΩ R41=1 kΩ R42=1 kΩ R43=2kΩ R44=4kΩ</p><p> R45=8 kΩ R46=16 kΩ R47=32 kΩ R48=64 kΩ R49=128 kΩ</p><p> R50=256 kΩ</p><p><b> 4 總結(jié)</b><
35、/p><p> 通過(guò)本次EDA技術(shù)課程設(shè)計(jì),我們掌握了系統(tǒng)的數(shù)字電子設(shè)計(jì)的方法,也知道了實(shí)驗(yàn)調(diào)試適配的具體操作方法,理解了綜合設(shè)計(jì)的基本方法。在設(shè)計(jì)過(guò)程中,我們遇到了各種問(wèn)題,在老師的指導(dǎo)下和我們自己的努力,互相合作,克服了各種問(wèn)題,最后取得了成功。但是本次設(shè)計(jì)還不是很成功的,由于時(shí)間比較短,我僅完成了所要求的功能,輸出信號(hào)的頻率范圍還不夠高,精度也不夠高。通過(guò)設(shè)計(jì),提高了我們對(duì)EDA技術(shù)的認(rèn)識(shí).這個(gè)設(shè)計(jì)雖然很小,
36、但麻雀雖小,五臟具全,對(duì)我們這樣的初學(xué)者來(lái)說(shuō)不失為好的選擇。</p><p> 因?yàn)檫€可以再修改好一些,我想自己在以后的學(xué)習(xí)和工作中一定會(huì)更加努力,把知識(shí)充實(shí)好。最后再次感謝老師的指導(dǎo)和幫助。</p><p><b> 附錄:</b></p><p> 加法器產(chǎn)生時(shí)鐘信號(hào)程序:</p><p> library
37、ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity adder32b is</p><p> port (clk:in std_logic;</p><p>
38、 a:in std_logic_vector(24 downto 0);</p><p> s:out std_logic_vector(24 downto 0));</p><p> end adder32b;</p><p> architecture behav of adder32b is</p><p> constant
39、db1:std_logic_vector:="01101001010111011";</p><p> constant db2:std_logic_vector:="01101101010001011";</p><p><b> begin </b></p><p> aa:process(cl
40、k)</p><p> variable da:std_logic_vector(24 downto 0);</p><p> variable dk1:std_logic;</p><p><b> begin</b></p><p> if clk'event and clk='1'
41、then</p><p> dk1:=da(17);</p><p><b> da:=da+a;</b></p><p> if dk1/=da(17) then</p><p> if a(13 downto 0)>"00101110111000" then</p>&
42、lt;p> da(16 downto 0):=db2;</p><p><b> else </b></p><p> da(16 downto 0):=db1;</p><p><b> end if;</b></p><p><b> end if;</b>
43、</p><p><b> end if;</b></p><p><b> s<=da;</b></p><p> end process;</p><p> end behav;</p><p><b> 數(shù)據(jù)選擇器:</b><
44、/p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity mux41a is</p><p> port (--clk:in std_l
45、ogic;</p><p> a,b,c,d:in std_logic_vector(7 downto 0);</p><p> s: in std_logic_vector(3 downto 0);</p><p> dout:out std_logic_vector(7 downto 0)</p><p><b> );
46、</b></p><p> end mux41a;</p><p> architecture behav of mux41a is</p><p> signal da:std_logic_vector(7 downto 0);</p><p><b> begin</b></p>&
47、lt;p> process(s)</p><p><b> begin</b></p><p><b> case s is</b></p><p> when "1110"=> da<=a;</p><p> when "1101"
48、;=> da<=b;</p><p> when "1011"=> da<=c;</p><p> when "0111"=> da<=d;</p><p> when others =>da<=a;</p><p><b> end c
49、ase;</b></p><p> end process;</p><p><b> dout<=da;</b></p><p> end behav;</p><p><b> 方波</b></p><p> library ieee;<
50、/p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity fangbo is</p><p> port (clk: in std_logic;</p><p> din: in s
51、td_logic_vector(7 downto 0);</p><p> dout:out std_logic_vector(7 downto 0));</p><p> end fangbo;</p><p> architecture behav of fangbo is</p><p> signal da:std_logic
52、_vector(7 downto 0);</p><p> signal db:std_logic;</p><p><b> begin </b></p><p> db<=din(0);</p><p> aa:process(db)</p><p><b> beg
53、in</b></p><p> if db'event and db='1' then</p><p> if din>"01111111" then</p><p> da<="00000000";</p><p><b> else&
54、lt;/b></p><p> da<="11111111";</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> bb:p
55、rocess(clk)</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p><b> dout<=da;</b></p><p><b> end if;</
56、b></p><p> end process;</p><p> end behav;</p><p><b> 三角波:</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p>&l
57、t;p> use ieee.std_logic_unsigned.all;</p><p> entity sanjiao is</p><p> port (clk: in std_logic;</p><p> din: in std_logic_vector(7 downto 0);</p><p> dout:out
58、std_logic_vector(7 downto 0));</p><p> end sanjiao;</p><p> architecture behav of sanjiao is</p><p> signal dc:std_logic_vector(7 downto 0);</p><p> signal db:std_l
59、ogic;</p><p><b> begin </b></p><p> db<=din(0);</p><p> aa:process(db)</p><p> variable da:std_logic_vector(7 downto 0);</p><p><b>
60、; begin</b></p><p> if db'event and db='1' then</p><p> if din>"01111111" then</p><p> if da="00000000" then </p><p> da:=
61、"00000100";</p><p><b> end if;</b></p><p><b> da:=da-4;</b></p><p><b> else </b></p><p> if da<"11111100"
62、; then </p><p> da:=da+4;</p><p><b> else </b></p><p> da:="11111000";</p><p><b> end if;</b></p><p><b> end
63、 if;</b></p><p><b> end if;</b></p><p><b> dc<=da;</b></p><p> end process;</p><p> bb:process(clk)</p><p><b>
64、begin</b></p><p> if clk'event and clk='1' then</p><p><b> dout<=dc;</b></p><p><b> end if;</b></p><p> end process;<
65、;/p><p> end behav;</p><p><b> 鋸齒波</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;<
66、;/p><p> entity juchi is</p><p> port (clk: in std_logic;</p><p> din: in std_logic_vector(7 downto 0);</p><p> dout:out std_logic_vector(7 downto 0));</p><
67、p> end juchi;</p><p> architecture behav of juchi is</p><p> signal da:std_logic_vector(7 downto 0) :="00000000";</p><p> signal db:std_logic;</p><p>&
68、lt;b> begin </b></p><p> db<=din(0);</p><p> process(db)</p><p><b> begin</b></p><p> if db'event and db='1' then</p>&l
69、t;p><b> da<=da+2;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(clk)</p><p><b> begin</b></p>&l
70、t;p> if clk'event and clk='1' then</p><p><b> dout<=da;</b></p><p><b> end if;</b></p><p> end process;</p><p> end behav
71、;</p><p><b> 鍵盤(pán)掃描</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.st
72、d_logic_unsigned.all;</p><p> entity key is</p><p> port(A,B,C,D:in std_logic;--鍵盤(pán)模塊的四個(gè)外接按鍵,編號(hào)依次是A、B、C、D</p><p> clk_key:in std_logic;--時(shí)鐘信號(hào),作為消抖計(jì)時(shí)</p><p> key_valu
73、e:out std_logic_vector(1 downto 0);--輸出按鍵值</p><p> out_clk:out std_logic:='0'--鍵值傳送脈沖信號(hào),寬度為8個(gè)時(shí)鐘信號(hào)周期_| |____</p><p><b> );</b></p><p> end entity;</p>&
74、lt;p> architecture art of key is</p><p> signal key_value_1:std_logic_vector(1 downto 0);</p><p> signal abcd:std_logic_vector(3 downto 0);</p><p><b> begin</b>&l
75、t;/p><p> abcd<=A&B&C&D;</p><p> --------------------------------------------------------------------</p><p> process(clk_key)</p><p> variable counter:
76、 std_logic_vector(15 downto 0);</p><p> variable state:integer range 4 downto 0;</p><p><b> begin</b></p><p> if rising_edge(clk_key)then</p><p> case s
77、tate is</p><p> when 0 => if (abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0') then </p><p><b> state:=1;</b></p><p> else
78、state:=0;</p><p><b> end if;</b></p><p> when 1 => if counter>="1111111111111110" then</p><p><b> state:=2;</b></p><p> coun
79、ter:="0000000000000000";</p><p> else counter:=counter+1;</p><p><b> state:=1;</b></p><p><b> end if;</b></p><p> when 2 => if
80、abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0' then</p><p> case abcd is</p><p> when "0111"=>key_value_1<="00";state:=3;<
81、/p><p> when "1011"=>key_value_1<="01";state:=3;</p><p> when "1101"=>key_value_1<="10";state:=3;</p><p> when "1110"=&
82、gt;key_value_1<="11";state:=3;</p><p> when others=>state:=0;</p><p><b> end case;</b></p><p> else state:=0;</p><p><b> end if;&l
83、t;/b></p><p> when 3 => if (abcd(0)='0' or abcd(1)='0' or abcd(2)='0'or abcd(3)='0')then</p><p> if counter>="0000000000000011"then ---------
84、--------------------------------</p><p> counter:="0000000000000000";out_clk<='1';</p><p> else counter:=counter+1;</p><p><b> end if;</b></p&
85、gt;<p><b> state:=3;</b></p><p><b> else </b></p><p><b> state:=4;</b></p><p> out_clk<='1';</p><p><b>
86、 end if;</b></p><p> when 4 => if counter>="0000000000000111" then</p><p><b> state:=0;</b></p><p> counter:="0000000000000000";out_cl
87、k<='0';</p><p> else counter:=counter+1;</p><p><b> state:=4;</b></p><p><b> end if;</b></p><p><b> end case;</b><
88、/p><p><b> end if;</b></p><p> end process;</p><p> --------------------------------------------------------------------------------</p><p> process(key_va
89、lue_1)</p><p><b> begin</b></p><p> if clk_key'event and clk_key='0' then</p><p> key_value<=key_value_1;</p><p><b> end if;</b&
90、gt;</p><p> end process;</p><p><b> end art;</b></p><p><b> 數(shù)碼管顯示</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.al
91、l;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity shuma is</p><p><b> port(</b></p><p> key
92、_clk :in std_logic;--由鍵盤(pán)模塊輸出的脈沖,用于數(shù)碼顯示模塊接受鍵值</p><p> clk_shuma:in std_logic;</p><p> key_in:in std_logic_vector(1 downto 0);</p><p> duan:out std_logic_vector(7 downto 0);</p&
93、gt;<p> wei:out std_logic_vector(3 downto 0);</p><p> led_out1,led_out2:out std_logic_vector(3 downto 0):="1110";--LED顯示輸出,用于指示要調(diào)節(jié)的數(shù)碼管</p><p> fhw_out:out std_logic_vector(27
94、 downto 0)</p><p><b> );</b></p><p> end shuma;</p><p> architecture body_shuma of shuma is</p><p> signal key_buff:std_logic_vector(1 downto 0);--輸入鍵值的
95、緩沖信號(hào)</p><p> signal wei_buff:std_logic_vector(3 downto 0);--數(shù)碼管位選端的鎖存信號(hào)</p><p> signal duan_buff:std_logic_vector(7 downto 0);</p><p> ----段的四個(gè)計(jì)數(shù)信號(hào),同時(shí)也是頻率的段碼值</p><p>
96、; signal duan1:std_logic_vector(3 downto 0):="0001";</p><p> signal duan2,duan3,duan4:std_logic_vector(3 downto 0):="0000";</p><p> ----[[[[[幅度的段碼十進(jìn)制值,幅度的初始化值是2200mv</p
97、><p> signal h_duan1,h_duan2:std_logic_vector(3 downto 0):="0010";</p><p> signal h_duan3,h_duan4:std_logic_vector(3 downto 0):="0000";</p><p> ----段的四個(gè)顯示信號(hào)頻率計(jì)數(shù)初
98、值,按共陽(yáng)</p><p> signal duan_1:std_logic_vector(7 downto 0):="00000110";--///'1'</p><p> signal duan_2,duan_3,duan_4:std_logic_vector(7 downto 0):="00111111";--'0&
99、#39;</p><p> ----波形選擇信號(hào)</p><p> signal select_1:std_logic_vector(1 downto 0):="10";</p><p> ----掃描時(shí)鐘信號(hào)</p><p> signal scan_clk:std_logic_vector(1 downto 0
100、):="00";</p><p> ---------------------波形信號(hào)</p><p> signal wave:std_logic_vector(3 downto 0):="1110";</p><p> -----------------------------------------------&l
101、t;/p><p> signal flag:std_logic;</p><p><b> begin</b></p><p> --------------------------------------------------------------</p><p> fhw_out<=duan1&
102、duan2&duan3&duan4&h_duan1&h_duan2&wave;</p><p> --------------------------------------------------------------</p><p> ------------按鍵值接收進(jìn)程,通過(guò)接收脈沖,接收按鍵值----------</p>
103、<p> process(key_clk)</p><p><b> begin</b></p><p> if rising_edge(key_clk) then--用鍵值脈沖的上升沿來(lái)觸發(fā)鍵值的接收</p><p> key_buff<=key_in;</p><p><b>
104、end if;</b></p><p> end process;</p><p> -------------鍵值處理進(jìn)程---------</p><p> process(key_buff)</p><p> variable select_led1: std_logic_vector(3 downto 0):=&q
105、uot;1110";</p><p> variable select_led2: std_logic_vector(3 downto 0):="1110";</p><p><b> begin</b></p><p> if key_clk'event and key_clk='0'
106、; then--用鍵值脈沖的下降沿來(lái)觸發(fā)</p><p> if key_buff="01" then--波形選擇信號(hào)</p><p> case select_led2 is</p><p> when "0111"=>select_led2:="1110";</p><p
107、> when "1110"=>select_led2:="1101";</p><p> when "1101"=>select_led2:="1011";</p><p> when "1011"=>select_led2:="0111";
108、</p><p> when others=>select_led2:="0111";</p><p><b> end case;</b></p><p> elsif key_buff="10" then----數(shù)碼管顯示進(jìn)程,用LED顯示,要調(diào)節(jié)的數(shù)碼管</p><p
109、> case select_led1 is</p><p> when "0111"=>select_led1:="1110";</p><p> when "1110"=>select_led1:="1101";</p><p> when "110
110、1"=>select_led1:="1011";</p><p> when "1011"=>select_led1:="0111";</p><p> when others=>select_led1:="1110";</p><p><b>
111、 end case;</b></p><p> elsif key_buff="11" then</p><p> case select_led1 is</p><p> when "1110"=>if flag='0'then</p><p> if du
112、an1=9 then</p><p> duan1<="0000";</p><p><b> else</b></p><p> duan1<=duan1+1;</p><p><b> end if;</b></p><p>
113、elsif flag='1'then</p><p> if h_duan1=9 then</p><p> h_duan1<="0000";</p><p><b> else</b></p><p> h_duan1<=h_duan1+1;</p>
114、<p><b> end if;</b></p><p><b> end if;</b></p><p> when "1101"=>if flag='0'then</p><p> if duan2=9 then</p><p>
115、 duan2<="0000";------------</p><p><b> else</b></p><p> duan2<=duan2+1;</p><p><b> end if;</b></p><p> elsif flag='1
116、9;then</p><p> if h_duan2=9 then</p><p> h_duan2<="0000";</p><p><b> else</b></p><p> h_duan2<=h_duan2+1;</p><p><b>
117、 end if;</b></p><p><b> end if;</b></p><p> when "1011"=>if flag='0'then</p><p> if duan3=9 then</p><p> duan3<="000
118、0";------------</p><p><b> else</b></p><p> duan3<=duan3+1;</p><p><b> end if;</b></p><p> elsif flag='1'then</p>&l
119、t;p> h_duan3<="0000";</p><p><b> end if;</b></p><p> when "0111"=>if flag='0'then</p><p> if duan4=9 then</p><p>
120、duan4<="0000";</p><p><b> else</b></p><p> duan4<=duan4+1;</p><p><b> end if;</b></p><p> elsif flag='1'then</p&
121、gt;<p> h_duan4<="0000";</p><p><b> end if;</b></p><p> when others=>select_led1:="1110";</p><p><b> end case;</b></p
122、><p> elsif key_buff="00" then</p><p> flag<=not flag;</p><p><b> else </b></p><p> select_led1:="1110";</p><p> selec
123、t_led2:="1110";</p><p><b> end if;</b></p><p> led_out2<=select_led2;--led_out2用于顯示波形</p><p> led_out1<=select_led1;--led_out1用于顯示要調(diào)節(jié)的數(shù)碼管</p>&
124、lt;p> wave<=select_led2;</p><p><b> end if;</b></p><p> end process;</p><p> -----------------------------------------------</p><p> ------------
125、掃描間隔計(jì)數(shù)進(jìn)程------------------------------</p><p> -----------------------------------------------</p><p> process(clk_shuma,scan_clk)</p><p> variable scan_counter:std_logic_vector(
126、17 downto 0):="000000000000000000";-----------改計(jì)數(shù)值-------------------------------------------</p><p><b> begin</b></p><p> if clk_shuma'event and clk_shuma='1'
127、; then</p><p> scan_counter:=scan_counter+1;</p><p><b> end if;</b></p><p> scan_clk<=scan_counter(17 downto 16);-------------------------------------改計(jì)數(shù)值-</p&g
128、t;<p> end process;</p><p> ------------段碼和位碼輸出進(jìn)程--------------</p><p> process(scan_clk)</p><p><b> begin</b></p><p> case scan_clk is</p>
129、;<p> when "00" =>duan_buff<=duan_1;wei_buff<="0111";</p><p> when "01" =>duan_buff<=duan_2;wei_buff<="1011";</p><p> when &qu
130、ot;10" =>duan_buff<=duan_3;wei_buff<="1101";</p><p> when "11" =>duan_buff<=duan_4;wei_buff<="1110";</p><p><b> end case;</b>&l
131、t;/p><p> end process;</p><p> process(clk_shuma)</p><p><b> begin</b></p><p> if(clk_shuma'event and clk_shuma='1')then</p><p>
132、duan<=duan_buff;wei<=wei_buff;</p><p><b> end if;</b></p><p> end process;</p><p> ------------------------------------------</p><p> ------------
133、數(shù)碼管計(jì)數(shù)值向顯示段碼轉(zhuǎn)換進(jìn)程</p><p> --'0','1','2','3','4','5','6','7','8','9'</p><p> --3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,
134、6fh</p><p> ------------------------------------------</p><p> process(duan1)</p><p> variable a:std_logic_vector(3 downto 0);</p><p><b> begin</b></
135、p><p> if flag='0'then</p><p><b> a:=duan1;</b></p><p> elsif flag='1'then</p><p> a:=h_duan1;</p><p><b> end if;</b
136、></p><p><b> case a is</b></p><p> when "0000"=>duan_1<="11000000";</p><p> when "0001"=>duan_1<="11111001";<
137、;/p><p> when "0010"=>duan_1<="10100100";</p><p> when "0011"=>duan_1<="10110000";</p><p> when "0100"=>duan_1<=&
138、quot;10011001";</p><p> when "0101"=>duan_1<="10010010";</p><p> when "0110"=>duan_1<="10000010";</p><p> when "0111
139、"=>duan_1<="11111000";</p><p> when "1000"=>duan_1<="10000000";</p><p> when "1001"=>duan_1<="10010000";</p><
140、;p> when others=>duan_1<="00000000";</p><p><b> end case;</b></p><p> end process;</p><p> process(duan2)</p><p> variable a:std_log
141、ic_vector(3 downto 0);</p><p><b> begin</b></p><p> if flag='0'then</p><p><b> a:=duan2;</b></p><p> elsif flag='1'then</
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)--信號(hào)發(fā)生器
- 簡(jiǎn)易信號(hào)發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)-簡(jiǎn)易信號(hào)發(fā)生器
- 簡(jiǎn)易信號(hào)發(fā)生器 課程設(shè)計(jì)
- 簡(jiǎn)易信號(hào)發(fā)生器課程設(shè)計(jì)
- 簡(jiǎn)易信號(hào)發(fā)生器課程設(shè)計(jì)
- eda課程設(shè)計(jì)--dds信號(hào)發(fā)生器
- 微機(jī)課程設(shè)計(jì)--簡(jiǎn)易信號(hào)發(fā)生器
- eda設(shè)計(jì)實(shí)驗(yàn)課程設(shè)計(jì)-函數(shù)信號(hào)發(fā)生器
- eda課程設(shè)計(jì)---函數(shù)信號(hào)發(fā)生器的設(shè)計(jì)
- 模電簡(jiǎn)易信號(hào)發(fā)生器課程設(shè)計(jì)
- 模電課程設(shè)計(jì)-簡(jiǎn)易信號(hào)發(fā)生器
- eda課程設(shè)計(jì)-多功能波形信號(hào)發(fā)生器
- eda音樂(lè)發(fā)生器課程設(shè)計(jì)
- eda課程設(shè)計(jì)--基于cpld的信號(hào)發(fā)生器設(shè)計(jì)
- 模電課程設(shè)計(jì)-簡(jiǎn)易信號(hào)發(fā)生器報(bào)告
- 模電課程設(shè)計(jì)——簡(jiǎn)易函數(shù)信號(hào)發(fā)生器
- eda課程設(shè)計(jì)——基于dds的正弦信號(hào)發(fā)生器設(shè)計(jì)
- 信號(hào)發(fā)生器課程設(shè)計(jì)----函數(shù)信號(hào)發(fā)生器
- eda課程設(shè)計(jì)--基于fpga的dds信號(hào)發(fā)生器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論