eda課程設(shè)計(jì)-簡(jiǎn)易信號(hào)發(fā)生器_第1頁(yè)
已閱讀1頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論