基于fpga的多功能數(shù)字鐘說明書_第1頁
已閱讀1頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  基于FPGA的多功能數(shù)字鐘</p><p><b>  一、設(shè)計題目</b></p><p>  基于FPGA的多功能數(shù)字鐘</p><p><b>  二、設(shè)計目的</b></p><p>  1.掌握可編程邏輯器件的應(yīng)用開發(fā)技術(shù)</p><p>  

2、——設(shè)計輸入、編譯、仿真和器件編程;</p><p>  2.熟悉一種EDA軟件使用;</p><p>  3.掌握Verilog設(shè)計方法;</p><p>  4.掌握分模塊分層次的設(shè)計方法;</p><p>  5.用Verilog完成一個多功能數(shù)字鐘設(shè)計;</p><p>  6.學(xué)會FPGA的仿真。</p

3、><p><b>  三、設(shè)計內(nèi)容</b></p><p>  設(shè)計一個多功能數(shù)字時鐘,具有時分、秒計數(shù)顯示、鬧鐘功能。能夠利用按鍵實現(xiàn)對鬧鐘時間的設(shè)定并在當(dāng)前顯示時間到時后能夠進(jìn)行鬧鐘提示。能夠利用按鍵實現(xiàn)“較時”、“較分”功能,隨時對數(shù)碼管的顯示進(jìn)行校正和校對。數(shù)字中系統(tǒng)主要由系統(tǒng)時鐘,三個功能按鍵(mode,turn,change),F(xiàn)PGA,數(shù)碼管和蜂鳴器部分組成

4、。</p><p>  四、FPGA及硬件描述語言簡介</p><p><b> ?。保疲校牵梁喗?lt;/b></p><p>  FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而

5、出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。</p><p>  目前以硬件描述語言(Verilog 或 VHDL)所完成的電路設(shè)計,可以經(jīng)過簡 </p><p>  單的綜合與布局,快速的燒錄至 FPGA 上進(jìn)行測試,是現(xiàn)代 IC 設(shè)計驗證的技術(shù)主流。這些可編輯元件可以被用來實現(xiàn)一些基本的邏輯門電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功

6、能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。   </p><p>  系統(tǒng)設(shè)計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者而改變,所以FPGA可以完成所需要的邏輯功能?!       ?           

7、  FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復(fù)雜的設(shè)計,而且消耗更多的電能。但是他們也有很多的優(yōu)點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設(shè)計的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移到一個類似于ASIC的芯片上。</p><p> ?。玻布枋稣Z言簡介</p>

8、<p>  硬件描述語言HDL(Hardware Description Language)是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言。目前,電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展,以硬件描述語言和邏輯綜合為基礎(chǔ)的自頂向下的電路設(shè)計方法在業(yè)界得到迅猛發(fā)展,HDL 在這種形勢下顯示出了巨大的優(yōu)勢,展望將來HDL 在硬件設(shè)計領(lǐng)域的地位將與C 和C++在軟件設(shè)計領(lǐng)域的地位一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計中,它將逐步取代傳統(tǒng)的邏

9、輯狀態(tài)表和邏輯電路圖等硬件描述方法,而成為主要的硬件描述工具。</p><p>  Verilog HDL是一種硬件描述語言(hardware description language),為了制作數(shù)字電路而用來描述ASICs和FPGA的設(shè)計之用。Verilog HDL是目前應(yīng)用最為廣泛的硬件描述語言,可以用來進(jìn)行各種層次的邏輯設(shè)計,也可以進(jìn)行數(shù)字系統(tǒng)的邏輯綜合,仿真驗證和時序分析等,適合算法級,寄存器級,邏輯級,

10、開關(guān)級、系統(tǒng)級和版圖級等各個層次的設(shè)計和描述。   </p><p>  Verilog HDL進(jìn)行設(shè)計最大的優(yōu)點是其工藝無關(guān)性,這使得工程師在功能設(shè)計,邏輯驗證階段可以不必過多考慮門級及工藝實現(xiàn)的具體細(xì)節(jié),只需根據(jù)系統(tǒng)設(shè)計的要求施加不同的約束條件,即可設(shè)計出實際電路。   </p><p>  Verilog HDL 是工業(yè)和學(xué)術(shù)界的硬件設(shè)計者所使用的兩種主要的HDL 之一,另一種是VH

11、DL?,F(xiàn)在它們都已成為IEEE 標(biāo)準(zhǔn)。兩者各有特點,但Verilog HDL 擁有更悠久的歷史、更廣泛的設(shè)計群體,資源也遠(yuǎn)比VHDL 豐富,且非常容易學(xué)習(xí)掌握。本設(shè)計提出了以 Verilog HDL 語言為手段,設(shè)計了多功能數(shù)字鐘。其代碼具有良好的可讀性和易理解性,源程序經(jīng)Altera 公司的QuartusⅡ 和ModelSim軟件完成綜合、仿真。此程序通過下載到FPGA 芯片后,可應(yīng)用于</p><p>  實

12、際的數(shù)字鐘顯示中。</p><p><b>  五、總體設(shè)計原理</b></p><p>  1、關(guān)于模式信號mode選擇各個功能顯示的構(gòu)思:</p><p>  考慮到使用mode按鍵產(chǎn)生0、1信號在正常時間顯示、調(diào)節(jié)時間功能、調(diào)節(jié)鬧鐘功能和跑表功能這四個功能之間的轉(zhuǎn)換。所以mode信號的作用主要體現(xiàn)在控制模塊(1)和顯示模塊中,雖然計時模塊

13、中也用到mode信號,但是它只是turn信號將秒信號清零的輔助作用,保證只有在m=0(即普通時鐘顯示)下turn信號清零功能才起作用,在校時功能下只能是分、小時的切換和跑表下的暫停功能。</p><p>  a、在控制模塊下的作用:</p><p>  在控制模塊下,其實mode和turn信號的作用更像2-4譯碼器的功能,將change數(shù)字上加信號按不同的mode和turn分成四個信號,

14、分別是count1(時間顯示下的分信號)、counta(時間顯示下的小時信號)、count2(鬧鈴顯示下的分信號)、countb(鬧鈴顯示下的小時信號)。</p><p>  b、在顯示模塊下的作用:</p><p>  同在控制模塊下的作用。只是將turn信號選出的小時和分鐘在同一個mode下一起送至數(shù)碼管顯示。</p><p>  2、關(guān)于時間調(diào)整和鬧鈴時間調(diào)

15、整中數(shù)字上加的原理:</p><p>  對于這個問題,我們要考慮兩種情況,首先是時間調(diào)整的情況:因為在時間調(diào)整下,數(shù)字的上加不僅受到change信號的作用(即人工調(diào)時),還受本身在1Hz信號下計時而隨時發(fā)生的累加。而鬧鈴時間調(diào)整不存在這種情況,因為鬧鈴下的時間數(shù)字發(fā)生上加只可能人工調(diào)節(jié)(change信號作用下)的結(jié)果。</p><p>  a、時間調(diào)整下的上加:</p>

16、<p>  由于在控制模塊(2)下又設(shè)置了快加的功能,所以有三部分信號對上加起作用,一是快加下的numXclk,表示以原始時鐘的速率上加,二是慢加下的change具體到各模塊、各位的count1或counta,三是秒信號記到9向分信號的進(jìn)位。</p><p>  b、鬧鈴時間調(diào)整下的上加:</p><p>  該部分原理同上,只是少了低位記到9向高位的進(jìn)位。所以只有兩部分組成,

17、一是快加下的numXclk,表示以原始時鐘的速率上加,二是慢加下的change具體到各模塊、各位的count2或countb。</p><p>  圖1 多功能數(shù)字鐘總體設(shè)計模塊</p><p><b>  六、各模塊說明</b></p><p><b>  1.分頻模塊</b></p><p>

18、;  由于FPGA內(nèi)部提供的時鐘信號頻率大約為50MHz,在這需要將它轉(zhuǎn)化成1Hz的標(biāo)準(zhǔn)時鐘信號供數(shù)字鐘的計時顯示;在此采用了級聯(lián)分頻法。</p><p><b>  代碼如下:</b></p><p>  module fenpin(clk,clk_1Hz,clk_100Hz,clk_1k);</p><p>  output clk_1Hz

19、,clk_100Hz,clk_1k;</p><p>  input clk;</p><p>  reg clk_1Hz=0,clk_3=0,clk_1=0,clk_2=0,clk_1k=0;</p><p>  reg [6:0] cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;</p><p>  wire clk

20、_100Hz;</p><p>  always @(posedge clk) </p><p><b>  begin</b></p><p>  if ( cnt1 < 156/2-1) /////////////////////////156分頻,生成1MHz信號</p><p>  begin

21、 </p><p>  cnt1 <= cnt1 + 1; </p><p>  end </p><p>  else </p><p>  begin </p><p>  cnt1 <

22、;= 0; </p><p>  clk_1 <= ~clk_1; </p><p><b>  end</b></p><p><b>  end</b></p><p>  always @(posedge clk_1)</p><p>  if (

23、 cnt2 < 156/2-1) ////////////////////100分頻,生成10000Hz信號</p><p>  begin </p><p>  cnt2 <= cnt2 + 1; </p><p>  end </p><p&

24、gt;  else </p><p>  begin </p><p>  cnt2 <= 0; </p><p>  clk_2 <= ~clk_2; </p><p><b>  end</b></p><p>  alw

25、ays @(posedge clk_2)</p><p>  if ( cnt5 < 10/2-1) //////////////////////10分頻,生成1kHz標(biāo)準(zhǔn)信號</p><p>  begin </p><p>  cnt5<= cnt5 + 1; </p

26、><p>  end </p><p>  else </p><p>  begin </p><p>  cnt5<= 0; </p><p>  clk_1k<= ~clk_1k; </p><p><b

27、>  end </b></p><p>  always @(posedge clk_2)</p><p>  if ( cnt3 < 100/2-1) //////////////////////100分頻,生成100Hz信號</p><p>  begin </p><p>

28、;  cnt3 <= cnt3 + 1; </p><p>  end </p><p>  else </p><p>  begin </p><p>  cnt3 <= 0; </p><p>  cl

29、k_3 <= ~clk_3; </p><p><b>  end</b></p><p>  assign clk_100Hz=clk_3;</p><p>  always @(posedge clk_3)</p><p>  if ( cnt4 < 100/2-1) ////////////

30、////////100分頻,生成1Hz標(biāo)準(zhǔn)信號</p><p>  begin </p><p>  cnt4<= cnt4 + 1; </p><p>  end </p><p>  else </p><p&

31、gt;  begin </p><p>  cnt4<= 0; </p><p>  clk_1Hz<= ~clk_1Hz; </p><p><b>  end</b></p><p><b>  endmodule</b></p>

32、<p>  最終輸出的是1Hz,100Hz,1kHz的標(biāo)準(zhǔn)時鐘信號clk_1Hz ,clk_100Hz,clk_1k。</p><p><b>  2、計時模塊</b></p><p>  原理:m是模式按鍵,當(dāng)m=0時,進(jìn)入計時模式,在計時模式下可以進(jìn)行時間調(diào)整。num3,num4產(chǎn)生加速調(diào)整時間,當(dāng)其值為1時,可以快速調(diào)整時間,該調(diào)整時間的頻率由c

33、lk提供。counta,count1是手動調(diào)節(jié)時間。Turn接按鍵,可以改變當(dāng)前調(diào)節(jié)的是小時還是分鐘,長按turn鍵還可以使秒鐘信號清零。sec1,min1,hour1輸出的是計時的秒,分,時。</p><p><b>  代碼如下:</b></p><p>  module jishi(clk,clk_1Hz,</p><p>  turn,

34、//// turn: 接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時</p><p>  mode,count1,counta,sec1,min1,hour1,num3,num4);</p><p>  input clk,clk_1Hz,turn,num3,num4;</p><p>  input mode;

35、</p><p>  input count1,counta;</p><p>  output [7:0] sec1,min1;</p><p>  output [7:0] hour1;</p><p>  wire clk_1Hz,ct1,cta,turn,num3,num4;</p><p>  reg [7:

36、0] sec1=0,min1=0;</p><p>  reg [7:0] hour1=0;</p><p>  reg [1:0] m;</p><p>  wire count1,counta;</p><p>  reg minclk,hclk;</p><p>  always @(posedge mode)

37、//mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b>  begin</b></p><p>  if(m==4) m<=0;</p><p>  else m<=m+1;</p><p><b>  end</b></p><p>  //

38、///秒鐘計時模塊//////</p><p>  always @(posedge clk_1Hz)</p><p>  if((sec1==8'h59)|turn&(!m))///////若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時。</p><p><b>  begin</b></p><p>

39、;  sec1<=0; //按住“turn”按鍵一段時間,秒信號可清零,該功能用于手動精確調(diào)時</p><p>  if(!(turn&(!m))) minclk<=1;///產(chǎn)生進(jìn)位</p><p><b>  end</b></p><p>  else begin</p><p>  if(

40、sec1[3:0]==4'b1001) </p><p>  begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; end</p><p>  else sec1[3:0]<=sec1[3:0]+1;</p><p>  minclk<=0;</p><

41、p><b>  end</b></p><p>  ////////分鐘計時模?///</p><p>  assign m_clk=minclk||count1;/////m_clk產(chǎn)生進(jìn)位或校正改變</p><p>  assign ct1=(num3&clk)|(!num3&m_clk); //ct1 用于計時、校

42、時中的分鐘計數(shù)</p><p>  always @(posedge ct1)</p><p><b>  begin</b></p><p>  if(min1==8'h59) begin min1<=0; hclk<=1; end</p><p>  else begin</p&g

43、t;<p>  if(min1[3:0]==9)</p><p>  begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; end</p><p>  else min1[3:0]<=min1[3:0]+1;</p><p><b>  hclk<=0;</b>&l

44、t;/p><p><b>  end</b></p><p><b>  end</b></p><p>  ////////小時計時模塊///</p><p>  assign h_clk=hclk||counta;//////h_clk產(chǎn)生進(jìn)位或校正改變</p><p> 

45、 assign cta=(num4&clk)|(!num4&h_clk); //cta 用于計時、校時中的小時計數(shù)</p><p>  always @(posedge cta)</p><p>  if(hour1==8'h23) hour1<=0;</p><p>  elseif(hour1[3:0]==9) </p>

46、;<p>  begin hour1[7:4]<=hour1[7:4]+1; hour1[3:0]<=0; end</p><p>  else hour1[3:0]<=hour1[3:0]+1;</p><p><b>  endmodule</b></p><p><b>  3、鬧鐘模塊

47、</b></p><p>  原理:num1,num2產(chǎn)生加速調(diào)整時間,當(dāng)其值為1時,可以快速調(diào)整時間,該調(diào)整時間的頻率由clk提供。countb,count2是手動調(diào)節(jié)鬧鐘時間。amin,ahour是輸出的鬧鐘的分鐘和小時,LD_alert指示當(dāng)前是否開啟鬧鐘。</p><p><b>  代碼如下:</b></p><p>  

48、module Alarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);</p><p>  input clk,num1,num2,count2,countb;</p><p>  output [7:0] amin;</p><p>  output [7:0] ahour;</p><p&

49、gt;  output LD_alert;</p><p>  wire LD_alert;</p><p>  reg [7:0] amin=0;</p><p>  reg [7:0] ahour=0;</p><p>  assign ct2=(num1&clk)|(!num1&count2); //ct2 用于定時狀態(tài)

50、下調(diào)整分鐘信號</p><p>  assign LD_alert=(ahour|amin)?1:0;//指示是否進(jìn)行了鬧鈴定時</p><p>  always @(posedge ct2)</p><p>  if(amin==8'h59) amin<=0;</p><p>  elseif(amin[3:0]==9

51、)</p><p>  begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; end</p><p>  else amin[3:0]<=amin[3:0]+1;</p><p>  assign ctb=(num2&clk)|(!num2&countb); ////ctb 用于定時狀態(tài)調(diào)節(jié)

52、小時信號</p><p>  always @(posedge ctb)</p><p>  if(ahour==8'h23) ahour<=0;</p><p>  elseif(ahour[3:0]==9)</p><p>  begin ahour[3:0]<=0; ahour[7:4]<=ahour[

53、7:4]+1; end</p><p>  else ahour[3:0]<=ahour[3:0]+1;</p><p><b>  endmodule</b></p><p>  4、控制模塊(1)</p><p>  原理:m是模式按鍵,當(dāng)m=0時,指當(dāng)前輸出的是計時功能;當(dāng)m=1時,指當(dāng)前調(diào)整的是鬧鐘時

54、間;當(dāng)m=2時,指當(dāng)前調(diào)整的是計時時間;當(dāng)m=3時,此時turn按鍵可用于跑表的暫停與開始。change 接按鍵,手動調(diào)整時,每按一次,計數(shù)器加1;如果長按,則連續(xù)快速加 1,用于快速調(diào)時和定時;turn接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時。count1,count2,counta,countb分別是用來調(diào)節(jié)計時時間和鬧鐘時間。LD_min,LD_hour,指示當(dāng)前調(diào)節(jié)的是

55、分鐘還是小時。</p><p><b>  代碼如下:</b></p><p>  Module ctrol(change,turn,count1,count2,counta,countb,pause,LD_min,LD_hour,mode);</p><p>  input change,mode,turn; </p><

56、p>  output count1,count2,counta,countb,pause,LD_min,LD_hour;</p><p>  reg [1:0] m;</p><p>  reg fm=0,count1=0,count2=0,counta=0,countb=0,pause=0,LD_min=0,LD_hour=0;</p><p>  wire

57、 mode,turn,change;</p><p>  always @(posedge mode) //mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b>  begin</b></p><p>  if(m==4) m<=0;</p><p>  else m<=m+1;</p&g

58、t;<p><b>  end</b></p><p>  always @(posedge turn)//////////接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;</p><p><b>  begin</b></p><p><b>  fm<=~fm;</b>&l

59、t;/p><p><b>  end</b></p><p>  always @ (m or fm or change)</p><p><b>  begin</b></p><p><b>  case(m)</b></p><p>  3: beg

60、in ////////3:跑表功能;</p><p><b>  if(fm) </b></p><p><b>  pause=1;</b></p><p><b>  else </b></p><p><b>  pause=0;</b></p

61、><p><b>  end</b></p><p>  2:begin ////////2:調(diào)節(jié)時間功能;</p><p><b>  if(fm) </b></p><p>  begincount1<=change; {LD_min,LD_hour}<=2; </p>

62、<p>  end//////指示當(dāng)前調(diào)整的是分鐘</p><p><b>  else </b></p><p>  begin counta<=change; {LD_min,LD_hour}<=1; </p><p>  end/////指示當(dāng)前調(diào)整的是小時</p><p>  {co

63、unt2,countb}<=0;</p><p><b>  end</b></p><p>  1:begin //////1:調(diào)節(jié)鬧鐘功能</p><p><b>  if(fm) </b></p><p>  begincount2<=change; {LD_min,LD_

64、hour}<=2; </p><p>  end/////指示當(dāng)前調(diào)整的是分</p><p><b>  else</b></p><p>  begin countb<=change; {LD_min,LD_hour}<=1; </p><p>  end/////指示當(dāng)前調(diào)整的是小時<

65、/p><p>  {count1,counta}<=0; </p><p><b>  end</b></p><p>  0: begin {count1,count2,counta,countb,LD_min,LD_hour}<=0;</p><p>  end ////0:計時功能</p>&

66、lt;p><b>  endcase</b></p><p><b>  end</b></p><p><b>  endmodule</b></p><p>  5、控制模塊(2)</p><p>  原理:此模塊是加速調(diào)節(jié)時間模塊,count1,count2,co

67、unta,countb是手動調(diào)節(jié)時間,當(dāng)長時間按這些鍵時,num1,num2,num3,num4的值會發(fā)生變化,當(dāng)他們值有為1時,對應(yīng)的調(diào)節(jié)會快速加1。</p><p><b>  代碼如下:</b></p><p>  module faster(clk,num1,num2,num3,num4,count1,count2,counta,countb);</p&

68、gt;<p>  input clk;</p><p>  input count1,count2,counta,countb;</p><p>  output num1,num2,num3,num4;</p><p>  wire count1,count2,counta,countb;</p><p>  reg[2:0]

69、 loop1=0,loop2=0,loop3=0,loop4=0;</p><p>  reg num1,num2,num3,num4;</p><p>  always @(negedge clk)//如果長時間按下“change”鍵,則生成“num*”信號用于連續(xù)快速加1</p><p>  if(count2) begin</p><p&

70、gt;  if(loop1==3) begin loop1<=0; num1<=1; end</p><p><b>  else</b></p><p>  begin loop1<=loop1+1; num1<=0; end</p><p><b>  end</b></p>&l

71、t;p>  else begin loop1<=0; num1<=0; end</p><p>  always @(negedge clk)</p><p>  if(countb) begin</p><p>  if(loop2==3) begin loop2<=0; num2<=1; end</p>&l

72、t;p><b>  else</b></p><p>  begin loop2<=loop2+1; num2<=0; end</p><p><b>  end</b></p><p>  else begin loop2<=0; num2<=0; end</p>

73、<p>  always @(negedge clk)</p><p>  if(count1) begin</p><p>  if(loop3==3) begin loop3<=0; num3<=1; end</p><p><b>  else</b></p><p>  begin

74、loop3<=loop3+1; num3<=0; end</p><p><b>  end</b></p><p>  else begin loop3<=0; num3<=0; end</p><p>  always @(negedge clk)</p><p>  if(cou

75、nta) begin</p><p>  if(loop4==3) begin loop4<=0; num4<=1; end</p><p><b>  else</b></p><p>  begin loop4<=loop4+1; num4<=0; end</p><p><b&

76、gt;  end</b></p><p>  else begin loop4<=0; num4<=0; end</p><p><b>  endmodule</b></p><p><b>  6、顯示模塊</b></p><p>  原理:同時輸入計時模塊的時

77、間和鬧鐘模塊的時間,選擇m值,當(dāng)m=0時,指當(dāng)前輸出的是計時模塊的時間;當(dāng)m=1時,指當(dāng)前輸出的是鬧鐘模塊的時間;當(dāng)m=2時,指當(dāng)前輸出的是調(diào)節(jié)計時模塊的時間;當(dāng)m=3時,指當(dāng)前輸出的是跑表計時的時間。</p><p><b>  代碼如下:</b></p><p>  Module show(min1,sec1,amin,hour1,ahour,MSH,MSL,SH

78、,SL,MH,ML,min,sec,hour,mode);</p><p>  input [7:0] min1,sec1,amin;</p><p>  input [7:0] hour1,ahour;</p><p>  input[3:0] MSH,MSL,SH,SL,MH,ML;</p><p>  input mode;</p

79、><p>  output [7:0] min,sec;</p><p>  output [7:0] hour;</p><p>  reg [7:0] min,sec;</p><p>  reg [7:0] hour;</p><p>  reg [1:0] m;</p><p>  alwa

80、ys @(posedge mode) //mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b>  begin</b></p><p>  if(m==4) m<=0;</p><p>  else m<=m+1;</p><p><b>  end</b></p&g

81、t;<p>  always @(min1 or sec1 or amin or hour1 or ahour or m) </p><p><b>  begin</b></p><p><b>  case(m)</b></p><p>  0:begin hour<=hour1; min&l

82、t;=min1; sec<=sec1; end</p><p>  1:begin hour<=ahour; min<=amin; sec<=8'hzz; end</p><p>  2:begin hour<=hour1; min<=min1; sec<=8'hzz; end</p><

83、p>  3: begin hour<={SH,SL}; min<={MSH,MSL}; sec<={MH,ML}; end</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  endmodule<

84、;/b></p><p><b>  7、響鈴模塊</b></p><p>  原理:同時輸入計時模塊的時間和鬧鐘模塊的時間。當(dāng)計時模塊的時間快到達(dá)整點時,會產(chǎn)生響聲;當(dāng)計時模塊的時分同時等于鬧鐘模塊的時分時,也產(chǎn)生響鈴。這時alert為1,如果在這時按住change鍵,可以屏蔽鬧鐘響鈴。</p><p><b>  代碼如下

85、:</b></p><p>  module ring(clk,clk_1k,min1,sec1,amin,hour1,ahour,change,alert);</p><p>  input [7:0] min1,sec1,amin;</p><p>  input [7:0] hour1,ahour;</p><p>  in

86、put change,clk,clk_1k;</p><p>  output alert;</p><p>  wire [7:0] min1,sec1,amin;</p><p>  wire [7:0] hour1,ahour;</p><p>  wire change;</p><p>  reg alert

87、1=0,alert2=0;</p><p>  reg [1:0] sound;</p><p><b>  reg ear;</b></p><p>  wire alert;</p><p>  wire clk_1k,clk;</p><p>  always @ (posedge clk)

88、</p><p>  if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))</p><p>  if(sec1<30) alert1<=1;</p><p>  else alert1<=0;</p><p> 

89、 else alert1<=0;</p><p>  always @ (posedge clk)</p><p><b>  begin </b></p><p>  if(sound==3) begin sound<=0; ear<=1; end</p><p>  //ear 信號用于產(chǎn)生

90、或屏蔽聲音</p><p>  else begin sound<=sound+1; ear<=0; end</p><p>  if((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))</p><p>  if(sec1>8'h54) alert2<

91、;=ear&clk_1k; //產(chǎn)生短音</p><p>  else alert2<=!ear&clk_1k; //產(chǎn)生長音</p><p>  else alert2 <= 0; //停止發(fā)聲</p><p><b>  end</b></p><p>  ///assign ale

92、rt=((alert1)?clk_100Hz&clk:0)|alert2;//產(chǎn)生鬧鈴音或整點報時音</p><p>  assign alert=((alert1)?clk_1k&clk:0)|alert2; //產(chǎn)生鬧鈴音或整點報時音</p><p><b>  endmodule</b></p><p><b>

93、;  8、跑表模塊</b></p><p>  原理:輸入該模塊的是100Hz時鐘信號。百分秒是模為100的BCD碼計數(shù)器,為方便數(shù)碼管顯示,將百分秒的兩位分別用4位的MSH(百分秒高位),MSL(百分秒低位)表示。這樣MSH,MSL就分別對應(yīng)每一個數(shù)碼管顯示的BCD碼。同理,秒信號為模為60的BCD碼計數(shù)器,兩位也用四位的SH(秒高位),SL(秒低位)。此時turn鍵可用作跑表的pause鍵,按下

94、turn鍵后跑表暫停,再按下后秒表啟動。此外clr按鍵可實現(xiàn)跑表的異步清零。</p><p>  /*信號定義:clk_100Hz: clk_100Hz 為時鐘信號;clr: 為異步復(fù)位信號;pause: 為暫停信號;MSH,MSL: 百分秒的高位和低位;SH,SL: 秒信號的高位和低位;MH,ML: 分鐘信號的高位和低位。 */</p><p>  module paobiao(clk_

95、100Hz,clr,pause,MSH,MSL,SH,SL,MH,ML);</p><p>  input clk_100Hz,clr;</p><p>  input pause;</p><p>  output[3:0] MSH,MSL,SH,SL,MH,ML;</p><p>  reg[3:0] MSH,MSL,SH,SL,MH,M

96、L;</p><p>  reg cn1,cn2; //cn1 為百分秒向秒的進(jìn)位,cn2 為秒向分的進(jìn)位</p><p>  //百分秒計數(shù)進(jìn)程,每計滿100,cn1 產(chǎn)生一個進(jìn)位</p><p>  always @(posedge clk_100Hz or posedge clr)</p><p><b>  begin<

97、;/b></p><p>  if(clr) begin //異步復(fù)位</p><p>  {MSH,MSL}<=8'h00;</p><p><b>  cn1<=0;</b></p><p><b>  end</b></p><p>  e

98、lse if(!pause) //PAUSE 為0 時正常計數(shù),為1 時暫停計數(shù)</p><p><b>  begin</b></p><p>  if(MSL==9) begin</p><p><b>  MSL<=0;</b></p><p>  if(MSH==9) </

99、p><p>  begin MSH<=0; cn1<=1; end</p><p>  else MSH<=MSH+1;</p><p><b>  end</b></p><p>  elsebegin</p><p>  MSL<=MSL+1; cn1<=

100、0;</p><p><b>  end</b></p><p><b>  end</b></p><p>  end //秒計數(shù)進(jìn)程,每計滿60,cn2 產(chǎn)生一個進(jìn)位</p><p>  always @(posedge cn1 or posedge clr)</p><

101、p><b>  begin</b></p><p>  if(clr) begin //異步復(fù)位</p><p>  {SH,SL}<=8'h00;</p><p><b>  cn2<=0;</b></p><p><b>  end</b>

102、</p><p>  elseif(SL==9) //低位是否為9</p><p><b>  begin</b></p><p><b>  SL<=0;</b></p><p><b>  if(SH==5)</b></p><p>  b

103、egin SH<=0; cn2<=1; end</p><p>  else SH<=SH+1;</p><p><b>  end</b></p><p><b>  else </b></p><p>  begin SL<=SL+1; cn2<=0

104、; end</p><p>  end //分鐘計數(shù)進(jìn)程,每計滿60,系統(tǒng)自動清零</p><p>  always @(posedge cn2 or posedge clr)</p><p><b>  begin</b></p><p><b>  if(clr)</b><

105、;/p><p>  begin {MH,ML}<=8'h00; end //異步復(fù)位</p><p>  else if(ML==9)begin</p><p><b>  ML<=0;</b></p><p>  if(MH==5) MH<=0;</p><p&g

106、t;  else MH<=MH+1;</p><p><b>  end</b></p><p>  else ML<=ML+1;</p><p><b>  end</b></p><p><b>  endmodule</b></p>&

107、lt;p>  七、各工作模式仿真波形</p><p>  1.時鐘正常計時波形 00:00:59時刻波形</p><p>  00:59:59時刻波形</p><p>  23:59:59時刻波形</p><p><b>  2.定時鬧鐘波形</b></p><p>  如圖所示為01

108、:02:00-01:02:59的一分鐘鬧鐘波形。</p><p><b>  3.仿電臺報時波形</b></p><p>  如圖所示,在任意小時59分的51、53、55、57秒內(nèi)蜂鳴器為低頻(512Hz)信號輸出,在59秒內(nèi)蜂鳴器為高頻(1024Hz)信號輸出,實現(xiàn)模仿電臺報時功能。</p><p><b>  4.整點報時波形&l

109、t;/b></p><p>  如圖所示,在06:00:00后的6秒內(nèi),蜂鳴器前半秒無輸入,后半秒有高頻(1024Hz)輸入,達(dá)到整點報時功能。在N小時整時刻,蜂鳴器會鳴響N次。如此仿真中為六點,響六下。</p><p>  分計數(shù)器仿真波形圖:</p><p>  小時計數(shù)器仿真波形圖:</p><p>  八、在FPGA板上調(diào)試過程

110、如下:</p><p>  1.當(dāng)前m=0,輸出的是計時模塊的時間;LD_alert=0,表示沒有設(shè)置鬧鐘。</p><p>  2.當(dāng)m=1時,輸出的是鬧鐘時間。改變change的值,可以調(diào)節(jié)鬧鐘的時間??梢钥闯鲈O(shè)置得鬧鐘為8:25。LD-alert=1提示設(shè)置了鬧鐘。</p><p>  3.當(dāng)m=2or3時,輸出的是調(diào)整計時模塊的時間。改變change的值,可

111、以調(diào)節(jié)時間??梢钥闯?,時間調(diào)整為8:21。</p><p>  4.從下可以看出,LD_alert=1,表明設(shè)置有鬧鐘。alert=0,表示鬧鐘時間還沒有到。</p><p>  時間為8:25:00,鬧鐘報警,alert=1,報警時間長為30秒,如果按住change鍵,則可以屏蔽鬧鈴。</p><p>  時間為8:25:31,鬧鈴?fù)V埂?lt;/p>&

112、lt;p><b>  測試成功!</b></p><p><b>  九、總結(jié)</b></p><p>  通過這次項目設(shè)計,我初步掌握了EDA設(shè)計的基本流程(即設(shè)計輸入—編譯—調(diào)試—仿真—下載),領(lǐng)會了自頂而下結(jié)構(gòu)化設(shè)計的優(yōu)點,并具備了初步的EDA程序設(shè)計能力。根據(jù)設(shè)計內(nèi)容,對FPGA也進(jìn)行了學(xué)習(xí),對軟件總體操作步驟初步了解了,但還是要提

113、高對FPGA的掌握能力,將FPGA運用到其他方面的應(yīng)用上。另外,設(shè)計中最重要的就verilog語言的應(yīng)用,對Verilog語言的學(xué)習(xí)不僅是能讀懂別人的程序,更重要的是能寫出條理清晰的程序。通過做多功能數(shù)字鐘,我發(fā)現(xiàn)自己對Verilog語言還不是很熟悉,編寫程序也不夠熟練,在接下來的時間里我還要要加強(qiáng)verilog語言的學(xué)習(xí),多看一些語言方面的書籍。</p><p>  在做設(shè)計的過程中,我感覺,這個項目最難的地方

114、在于將各個子模塊按照原理有機(jī)地結(jié)合起來,這需要扎實的理論功底,。相比而言,子模塊的設(shè)計難度不是太大,因為Verilog語言和C語言有很多相似之處,只要明白了實驗原理,就不難完成,水平的高下只體現(xiàn)在程序的簡潔與否。但是Verilog源程序的編寫很容易出現(xiàn)錯誤,有時候在沒注意的情況下就會出現(xiàn),這就需要耐心的調(diào)試。因為很多情況下,一長串的錯誤往往是由一個不經(jīng)意的小錯誤引起的。當(dāng)程序?qū)艺{(diào)屢錯的時候,可以去尋求同學(xué)的幫助,因為自己編寫的程序往往自

115、己看不出問題所在,說不定他們不經(jīng)意的一句話,就可能給我啟發(fā),使問題迎刃而解。 </p><p>  這次項目設(shè)計,給我感觸最深的還是行為態(tài)度問題。人的能力有大有小,但只要端正態(tài)度,不拋棄,不放棄,任何人都能取得令自己滿意的成績。</p><p>  附件1: 大學(xué)本科畢業(yè)論文(設(shè)計)工作程序</p><p>  注:1.提前或推延進(jìn)行畢業(yè)論文(設(shè)計)的,各階

116、段要求相同,日程自定;</p><p>  2.畢業(yè)論文(設(shè)計)工作三個階段時間安排,可根據(jù)各專業(yè)特點適當(dāng)調(diào)整。 </p><p>  附件2: 大學(xué)本科畢業(yè)論文(設(shè)計)撰寫規(guī)范</p><p>  一、畢業(yè)論文(設(shè)計)文本結(jié)構(gòu)</p><p>  畢業(yè)論文

117、(設(shè)計)主要由8個部分組成:①封面;②目錄;③題目;④中外文摘要;⑤正文;⑥參考文獻(xiàn);⑦謝辭;⑧附錄。</p><p>  二、畢業(yè)論文(設(shè)計)各部分規(guī)范</p><p><b>  1. 封面</b></p><p>  封面按學(xué)校規(guī)定的格式填寫,包括論文(設(shè)計)題目、作者姓名、指導(dǎo)教師姓名、學(xué)科專業(yè)等內(nèi)容。</p><p

118、><b>  2. 目錄</b></p><p>  目錄由畢業(yè)論文(設(shè)計)各部分內(nèi)容的順序號、名稱和頁碼組成,目次中的內(nèi)容一般列出二級標(biāo)題即可。目錄應(yīng)該用“…………”連接名稱與頁碼。</p><p><b>  3. 題目</b></p><p>  論文(設(shè)計)題目要恰當(dāng)、簡明、凝練,能夠反映論文的主題及其內(nèi)容,

119、做到文、題貼切。題目中不使用非規(guī)范的縮略詞、符號、代號和公式,通常不采用問話的方式。題目所使用的詞語應(yīng)當(dāng)考慮到有助于選擇關(guān)鍵詞和編制題錄、索引等。</p><p>  題目的中文字?jǐn)?shù)一般不超過20個字,外文題目不超過10個實詞,中外文標(biāo)題應(yīng)一致,居中編排格式。</p><p>  4. 中外文摘要及關(guān)鍵詞  摘要是對畢業(yè)論文(設(shè)計)內(nèi)容不加注釋和評論的簡短陳述。摘要主要是說明研究工作的目

120、的、方法、結(jié)果和結(jié)論。摘要應(yīng)具有獨立性和自含性,即不閱讀全文,就能獲得畢業(yè)論文(設(shè)計)必要的信息,使讀者確定有無必要閱讀全文。摘要中應(yīng)用第三人稱的方法記述論文的性質(zhì)和主題,不使用“本文”、“作者”等作為主語,應(yīng)采用“對…進(jìn)行了研究”、“報告了…現(xiàn)狀”、“進(jìn)行了…調(diào)查”等表達(dá)方式。排除在本學(xué)科領(lǐng)域已成為常識的內(nèi)容,不得重復(fù)題目中已有的信息。語句要合乎邏輯關(guān)系,盡量同正文的文體保持一致。結(jié)構(gòu)要嚴(yán)謹(jǐn),表達(dá)要簡明,語義要確切,一般不再分段落。對

121、某些縮略語、簡稱、代號等,除了相鄰專業(yè)的讀者也能清楚理解的以外,在首次出現(xiàn)處必須加以說明。摘要中通常不用圖表、化學(xué)結(jié)構(gòu)式以及非公知公用的符號和術(shù)語。</p><p>  畢業(yè)論文(設(shè)計)的摘要包含中文摘要和外文摘要。中文摘要字?jǐn)?shù)約為200~300字,外文摘要約為200~300個實詞。</p><p>  關(guān)鍵詞(Keywords)是為了文獻(xiàn)標(biāo)引,從《漢語主題詞表》或論文中選取出來,用以表示

122、全文主題內(nèi)容信息的詞語或術(shù)語。關(guān)鍵詞不宜用非通用的代號和分子式。</p><p>  關(guān)鍵詞一般為3~6個。關(guān)鍵詞的排序,通常應(yīng)按研究的對象、性質(zhì)(問題)和采取的手段排序。中文關(guān)鍵詞兩詞之間應(yīng)留出一個漢字的空間,不加任何標(biāo)點符號;外文關(guān)鍵詞之間用分號隔開。</p><p><b>  5. 正文</b></p><p>  畢業(yè)論文(設(shè)計)的正

123、文包括前言(引言)、正文、結(jié)論三個部分。外語類專業(yè)畢業(yè)生必須用所學(xué)專業(yè)外語撰寫。</p><p>  畢業(yè)論文(設(shè)計)的篇幅一般6000字左右。</p><p><b>  (1)前言(引言)</b></p><p>  前言(引言)主要說明研究工作的目的、范圍,對前人的研究狀況進(jìn)行評述分析,闡明研究設(shè)想、研究方法、實驗設(shè)計、預(yù)期結(jié)果、成果的意

124、義等。</p><p><b>  (2)正文</b></p><p>  正文是對研究工作與研究內(nèi)容的詳細(xì)表述,一般由標(biāo)題、文字、表格或公式等部分組成。該部分要運用選定的研究方法分析問題、論證觀點,盡量反映出研究能力和學(xué)術(shù)水平。正文是畢業(yè)論文(設(shè)計)的核心部分,占據(jù)主要篇幅。</p><p>  正文是論文的主體,要求觀點清晰、論點正確、論據(jù)

125、可靠、論證嚴(yán)密、層次清楚。</p><p>  正文中的圖表和計量單位要規(guī)范。圖須有序號、圖題、圖例、量和單位,圖序號須用阿拉伯?dāng)?shù)字,與圖題空 1 格,寫在圖下方;表格采用 3線表,表頭線和表尾線為粗黑線,表兩邊不要串寫文字,表序號須用阿拉伯?dāng)?shù)字,與標(biāo)題空 1格,寫在表上方;一律使用法定計量單位。</p><p><b>  (3)結(jié)論</b></p>

126、<p>  結(jié)論是對整個研究工作進(jìn)行歸納和總結(jié)。結(jié)論應(yīng)當(dāng)準(zhǔn)確、完整、明確、精練。如不可能導(dǎo)出應(yīng)有的結(jié)論,也可以沒有結(jié)論而進(jìn)行必要的討論,闡述本課題研究中存在的問題及進(jìn)一步開展研究的建議。</p><p><b>  6. 謝辭(致謝)</b></p><p>  謝辭(致謝)是對給予各類資助、指導(dǎo)和協(xié)助完成科研工作,以及提供各種條件的單位和個人表示的感謝。謝

溫馨提示

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

評論

0/150

提交評論