《數(shù)字電子技術》課程設計--基于fpga的數(shù)字電子時鐘設計與實現(xiàn)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《數(shù)字電子技術》課程設計</p><p>  基于FPGA的數(shù)字電子時鐘設計與實現(xiàn)</p><p>  完成日期 2011年 1 2月</p><p><b>  目錄</b></p><p>  一.所用設備與器材1</p><p>  1.1 儀器設備1&l

2、t;/p><p><b>  1.2 器件1</b></p><p><b>  二.系統(tǒng)方案1</b></p><p><b>  2.1設計思想1</b></p><p>  2.1.1課題背景綜述1</p><p>  2.1.2 Quartu

3、s II軟件介紹以及如何使用2</p><p>  2.2工作原理及系統(tǒng)框圖5</p><p><b>  三.軟件方案7</b></p><p>  3.1程序流程圖7</p><p>  3.2 程序清單10</p><p>  四.調試及結果14</p><p

4、>  4.1 模塊仿真14</p><p>  4.2系統(tǒng)仿真16</p><p>  4.3程序下載16</p><p>  4.4分析運行結果18</p><p><b>  一.所用設備與器材</b></p><p><b>  1.1 儀器設備</b>&

5、lt;/p><p>  DE2-70、PC機、GWINSTEC SFG_2010</p><p><b>  1.2 器件</b></p><p>  數(shù)碼管、LED燈、微動開關、撥動開關、USB-BLEAST模塊、電源模塊</p><p><b>  二.系統(tǒng)方案</b></p><

6、;p><b>  2.1設計思想</b></p><p><b>  2.1.1課題背景</b></p><p>  數(shù)字時鐘與機械時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命。此外,數(shù)字時鐘可以擴展一些額外的功能,諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動開關路燈、通斷動力設備、甚至各種定時電器

7、的自動啟用等,但是所有這些,都是以鐘表數(shù)字化為基礎的。因此,研究萬年歷及擴展其應用,有著非?,F(xiàn)實的意義。由于現(xiàn)場可編程門陣列(FPGA)具有門陣列的高邏輯密度和高可靠性以及可編碼邏輯器件的用戶可編程特性,因此,在FPGA基礎上設計萬年歷可以很大程度的減少系統(tǒng)設計和維護的風險,降低產品成本,縮短設計周期。</p><p>  2.1.2 Quartus II軟件</p><p>  Quar

8、tus II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設計流程外,提供了完善的用戶圖形界面設計方式。具有運行速度快,界面統(tǒng)

9、一,功能集中,易學易用等特點。   </p><p>  Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方

10、便地實現(xiàn)各種DSP應用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設計、嵌入式軟件開發(fā)、可編程邏輯設計于一體,是一種綜合性的開發(fā)平臺。Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸

11、如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和HardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。Alte</p><p>  Altera的Quartus II可編程邏輯軟件屬于第四代PLD開發(fā)平臺。該平臺支持一個工作組環(huán)境下的設計要求,其中包括支持基于Internet的協(xié)作設計。Quartus平臺與Cadence、

12、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應商的開發(fā)工具相兼容。改進了軟件的LogicLock模塊設計功能,增添 了FastFit編譯選項,推進了網絡編輯性能,而且提升了調試能力。支持MAX7000/MAX3000等乘積項器件 。</p><p><b>  使用方法:</b></p><p>  (一

13、)在File(文件)中找到New Project Wizard創(chuàng)建一個新的工程。如圖1所示:</p><p>  圖1 打開FILE文件</p><p> ?。ǘ┰诘谝粰谥休斎牍こ檀嫒〉穆窂剑诙谌龣谳斎牍こ堂蛯嶓w名,必須一樣,如圖2所示:</p><p><b>  圖2 存取路徑</b></p><p> 

14、?。ㄈ⑾嚓P的文件加入進來,沒有相關的文件可跳過此步。如圖3所示:</p><p>  圖.3 添加相關文件</p><p> ?。ㄋ模┻x擇相關的Devices的名字,選用的是數(shù)字編號為896c6的device。</p><p>  圖4 選擇896C6的Devices</p><p> ?。ㄎ澹┻x擇相應的文件類型,我們選用的是Verilo

15、g HDL File,如圖5</p><p>  圖5 打開Verilog文件</p><p><b>  2.2系統(tǒng)工作原理</b></p><p>  2.2.1 系統(tǒng)框圖</p><p>  設計并仿真實現(xiàn)一個基于FPGA的數(shù)字電子時鐘, 其基本功能框圖如圖6。振蕩器采用ALTERA的DE2-70開發(fā)板的50MHz

16、輸出,分頻器將50MHz的方波進行分頻進而得到1Hz的標準秒脈沖,時、分、秒計時模塊分別由二十四進制時計數(shù)器、六十進制分計數(shù)器和六十進制秒計數(shù)器完成,校時模塊完成時和分的校正。電子時鐘可擴展功能為:仿電臺報時和定時鬧鐘等,如圖6所示。</p><p>  圖6 數(shù)字電子時鐘組成框圖</p><p>  2.2.2 系統(tǒng)基本功能</p><p>  設計一個具有時、分

17、、秒計時的數(shù)字電子時鐘電路;</p><p>  2)按照24小時制計時,或電路可選24進制計時和12進制計時;</p><p>  3) 準確計時,以數(shù)字形式顯示時、分、秒的時間;</p><p>  4) 具有分、時校正功能,校正輸入脈沖頻率為1Hz;</p><p>  5) 復位功能,時、分、秒計時清零。</p><

18、;p>  2.2.3 系統(tǒng)的顯示單元</p><p>  顯示單元:共陽極數(shù)碼管作用:用來顯示時鐘的數(shù)字信號。如圖7所示</p><p><b>  圖7共陽極數(shù)碼管</b></p><p><b>  三.系統(tǒng)軟件方案</b></p><p>  3.1系統(tǒng)各單元流程</p>

19、<p>  用流程圖描述軟件設計思路。流程圖繪制要規(guī)范,如處理為矩形框,判斷為棱形框等,不宜太粗,并以文字說明來闡述軟件工作原理</p><p><b>  六進制流程圖</b></p><p><b> ?。?lt;/b></p><p><b>  圖8六進制流程圖</b></p>

20、<p><b>  十進制流程圖</b></p><p>  圖9 10進制流程圖</p><p><b>  24進制流程圖</b></p><p>  圖10 24進制流程圖</p><p><b>  60進制流程圖</b></p><

21、p>  圖11 60進制流程圖</p><p><b>  LED七段引腳</b></p><p>  圖12 LED七段引腳</p><p><b>  頂層文件</b></p><p><b>  圖13頂層文件</b></p><p>&l

22、t;b>  3.2 程序清單</b></p><p><b>  1.六進制</b></p><p><b>  counter6</b></p><p>  module counter6(Q,nCR,EN,CP);</p><p>  input CP,nCR,EN;</

23、p><p>  output [3:0] Q;</p><p>  reg [3:0] Q;</p><p>  always @(posedge CP or negedge nCR)</p><p><b>  begin </b></p><p>  if(~nCR) Q<=4'b0

24、000;//if nCR=0,counter is clear</p><p>  else if(~EN) Q<=Q;//if EN=0,stop countering</p><p>  else if(Q==4'b0101) Q<=4'b0000;</p><p>  else Q<=Q+1'b1;//counter+

25、+</p><p><b>  end</b></p><p><b>  Endmodule</b></p><p><b>  2.十進制</b></p><p><b>  counter10</b></p><p>  mo

26、dule counter10(Q,nCR,EN,CP);</p><p>  input CP,nCR,EN;</p><p>  output [3:0] Q;</p><p>  reg [3:0] Q;</p><p>  always @(posedge CP or negedge nCR)</p><p>&

27、lt;b>  begin </b></p><p>  if(~nCR) Q<=4'b0000;//if nCR=0,counter is clear</p><p>  else if(~EN) Q<=Q;//if EN=0,stop countering</p><p>  else if(Q==4'b1001) Q

28、<=4'b0000;</p><p>  else Q<=Q+1'b1;//counter++</p><p><b>  end</b></p><p><b>  Endmodule</b></p><p><b>  3.二十四進制</b>&l

29、t;/p><p><b>  counter24</b></p><p>  module counter24(CntH,CntL,nCR1,EN,CP);</p><p>  input CP,nCR1,EN;</p><p>  output [3:0] CntH,CntL;</p><p>  

30、reg [3:0] CntH,CntL;</p><p>  always @(posedge CP or negedge nCR1)</p><p><b>  begin </b></p><p>  if(~nCR1) {CntH,CntL}<=8'h00;//if nCR=0,counter is clear</p&

31、gt;<p>  else if(~EN) {CntH,CntL}<={CntH,CntL}; //if EN=0,stop countering</p><p>  else if((CntH>2)||((CntH==2)&&(CntL>=3)))</p><p>  {CntH,CntL}<=8'h00;</p&g

32、t;<p>  else if((CntH==2)&&(CntL<3))</p><p>  begin CntH<=CntH;CntL<=CntL+1'b1;end</p><p>  else if(CntL==9)</p><p>  begin CntH<=CntH+1'b1;CntL&l

33、t;=4'b0000;end</p><p><b>  else </b></p><p>  begin CntH<=CntH;CntL<=CntL+1'b1;end</p><p><b>  end</b></p><p>  Endmodule </p&g

34、t;<p><b>  4.六十進制</b></p><p><b>  counter60</b></p><p>  module counter60(Cnt,nCR,EN,CP);</p><p>  input CP,nCR,EN;</p><p>  output [7:0]

35、 Cnt;</p><p>  wire [7:0] Cnt;</p><p><b>  wire ENP;</b></p><p>  counter10 UC0(Cnt[3:0],nCR,EN,CP);</p><p>  counter6 UC1(Cnt[7:4],nCR,ENP,CP);</p>

36、<p>  assign ENP=(Cnt[3:0]==4'h9);</p><p>  Endmodule </p><p>  5.top_clock</p><p>  module top_clock(Second,Minute,Hour,_1Hz,nCR,AdjMinKey,AdjHrkey);</p><p>

37、  input _1Hz,nCR,AdjMinKey,AdjHrkey;</p><p>  output [7:0] Second,Minute,Hour;</p><p>  wire [7:0] Hour,Minute,Second;</p><p>  supply1 Vdd;</p><p>  wire MinCP,HrCP;&l

38、t;/p><p>  counter60 UT1(Second,nCR,Vdd,_1Hz);</p><p>  counter60 UT2(Minute,nCR,Vdd,~MinCP);</p><p>  counter24 UT3(Hour[7:4],Hour[3:0],nCR,Vdd,~HrCP);</p><p>  assign Mi

39、nCP=AdjMinKey ? _1Hz:(Second==8'h59);</p><p>  assign HrCP=AdjHrkey ? _1Hz:({Minute,Second}==16'h5959);</p><p>  Endmodule </p><p><b>  6.count</b></p>&l

40、t;p>  module count(Q1,Q2,Q3,Q4,Q5,Q6,_50MHzIn,AdjMinkey,AdjHrkey,nCR);</p><p>  output [6:0] Q1,Q2,Q3,Q4,Q5,Q6;</p><p>  wire [6:0] Q1,Q2,Q3,Q4,Q5,Q6;</p><p>  input nCR,_50MHzIn

41、;</p><p>  wire _1Hz,_1KHz;</p><p>  input AdjMinkey,AdjHrkey;</p><p>  wire [7:0] Hour,Minute,Second;</p><p>  Divided_Frequency C1(_1KHz,nCR,_50MHzIn);</p><

42、;p>  Divided_Frequency U0(_1Hz,nCR,_1KHz);</p><p>  top_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey);</p><p>  from0to9 LED0(Q1,Second[3:0]);</p><p>  from0to9 LED1(Q

43、2,Second[7:4]);</p><p>  from0to9 LED2(Q3,Minute[3:0]);</p><p>  from0to9 LED3(Q4,Minute[7:4]);</p><p>  from0to9 LED4(Q5,Hour[3:0]);</p><p>  from0to9 LED5(Q6,Hour[7:4

44、]);</p><p><b>  endmodule</b></p><p>  7.from0to9</p><p>  module from0to9(HEX,D);</p><p>  output [6:0] HEX;</p><p>  input [3:0] D;</p&

45、gt;<p>  reg [6:0] HEX;</p><p>  always @(D) </p><p><b>  begin</b></p><p><b>  case(D)</b></p><p>  4'd0:{HEX[0],HEX[1],HEX[2],HEX[3

46、],HEX[4],HEX[5],HEX[6]}=7'b0000001;</p><p>  4'd1:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001111;</p><p>  4'd2:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=

47、7'b0010010;</p><p>  4'd3:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000110;</p><p>  4'd4:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001100;</p>

48、;<p>  4'd5:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100100;</p><p>  4'd6:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100000;</p><p>  4'd7:{

49、HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0001111;</p><p>  4'd8:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000000;</p><p>  4'd9:{HEX[0],HEX[1],HEX[2],HEX

50、[3],HEX[4],HEX[5],HEX[6]}=7'b0000100;</p><p>  default:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b111111;</p><p><b>  endcase</b></p><p><b>  en

51、d</b></p><p><b>  endmodule</b></p><p>  8.Divided_Frequency(分頻)</p><p>  module Divided_Frequency(_1HzOut,nCR,_5kHzIN);</p><p>  input _5kHzIN,nCR;&l

52、t;/p><p>  output _1HzOut;</p><p>  supply1 Vdd;//define Vdd as high level</p><p>  wire [15:0] Q;//counter's output signal(intermediate variable )</p><p>  wire EN1,E

53、N2,EN3;//counter's enable signal(intermediate variable )</p><p>  counter10 DU0(Q[3:0],nCR,Vdd,_5kHzIN);//use decimal counter module</p><p>  counter10 DU1(Q[7:4],nCR,EN1,_5kHzIN);</p>

54、<p>  counter10 DU2(Q[11:8],nCR,EN2,_5kHzIN);</p><p>  counter10 DU3(Q[15:12],nCR,EN3,_5kHzIN);</p><p>  assign EN1=(Q[3:0]==4'h9);</p><p>  assign EN2=(Q[7:4]==4'h9)

55、&(Q[3:0]==4'h9);</p><p>  assign EN3=(Q[11:8]==4'h9)&(Q[7:4]==4'h9)&(Q[3:0]==4'h9);</p><p>  assign _1HzOut=Q[15];//assign _500HzOut=Q[0];</p><p><b&g

56、t;  endmodule</b></p><p><b>  四.調試及結果</b></p><p><b>  4.1 模塊仿真</b></p><p><b>  六進制波形圖</b></p><p>  圖14 EN、nCR為高電平時的6進制計數(shù)波形<

57、/p><p><b>  10進制波形圖</b></p><p>  圖15 CP=CLOCK EN是高電平 nCR是高電平</p><p><b>  24進制波形圖</b></p><p>  圖16 CP=CLOCK EN是高電平 nCR是高電平</p><p><b

58、>  60進制波形圖</b></p><p>  圖17 CP=CLOCK EN是高電平 nCR是高電平</p><p><b>  4.2系統(tǒng)仿真運行</b></p><p>  圖18 倒計時功能截圖1</p><p>  圖19 在51S處,LED燈亮</p><p> 

59、 圖20 在52S處,LED燈不亮</p><p>  圖21 在53處LED燈亮</p><p><b>  圖22</b></p><p><b>  圖23</b></p><p><b>  圖24</b></p><p><b>  

60、4.3程序下載</b></p><p> ?。ㄒ唬┐蜷_輸入管教程序,如圖25所示:</p><p><b>  圖25</b></p><p> ?。ǘ┐_定管腳,如圖26所示:</p><p><b>  圖26</b></p><p> ?。ㄈ┐蜷_輸入程序,

61、如圖27所示:</p><p><b>  圖27</b></p><p> ?。ㄋ模⒊绦蜉斎朦c板,如圖28所示</p><p><b>  圖28</b></p><p><b>  4.4分析總結</b></p><p>  這兩周的大型作業(yè)時用F

62、PGA設計電子時鐘計數(shù)器并能開發(fā)出各種如鬧鐘和在各時段亮燈的功能。開始的時候是興奮、畢竟開發(fā)軟件并能在單片機上實現(xiàn)電子時鐘中的功能是很神奇的事情,但是在學習的過程中還是碰到了各種問題,比如程序書寫格式的規(guī)范,錯誤的查找都讓我漸漸感到茫然。幸好,我們是三個同學為一組,我們可以互相幫助、集思廣益,最終還是可以順利把程序調適成功。所以我深刻地感覺到團隊的力量是很重要的。另外分工明確也讓我們在后面的學習過程中效率倍增,一人負責寫程序、其他人負責

63、校對和程序燒錄。當然在這過程中還是暴露出了一些問題,比如在書寫程序遇到瓶頸的時候,看到其他小組已經寫好程序并能成功運行,于是我們抱著偷懶的態(tài)度就拷貝別人的程序而沒有去做修改,就燒錄了。但是在老師的檢查的過程中馬上就識破了我們的程序不是自己寫的。通過這件事我們懂得了做任何事不能由偷懶的態(tài)度,要腳踏實地地去做,否則就是自欺欺人。</p><p>  課程設計誠然是一門專業(yè)課,給我們很多專業(yè)知識以及專業(yè)技能上的提升,同

64、時又是一門講道課,一門辯思課,給了我們許多道,給了我們很多思,給了我們莫大的空間。同時,設計讓我們感觸很深。使我們對抽象的理論有了具體的認識。通過這次課程設計,我們掌握了Quartus II 的使用;熟悉了EDA工具的使用;了解了Verilog HDL語言的運用;以及掌握了不同進制計數(shù)器及時鐘控制電路的設計方法和技術,通過查詢資料,也了解了多功能數(shù)字鐘的工作原理</p><p>  通過這次的大型作業(yè),我們基本上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論