第一篇:FPGA課程設計多功能數字鐘講解
多功能數字鐘
開課學期:2014—2015 學年第二學期 課程名稱: FPGA課程設計
學 院: 信息科學與工程學院
專 業: 集成電路設計與集成系統
班 級: 學 號: 姓 名:
任課教師:
2015 年 7 月 21 日
說 明
一、論文書寫要求與說明
1.嚴格按照模板進行書寫。自己可以自行修改標題的題目 2.關于字體:
a)題目:三號黑體加粗。
b)正文:小四號宋體,行距為1.25倍。
3.嚴禁抄襲和雷同,一經發現,成績即判定為不及格!!
二、設計提交說明
1.設計需要提交“電子稿”和“打印稿”;
2.“打印稿”包括封面、說明(即本頁內容)、設計內容三部分;訂書機左邊裝訂。
3.“電子稿”上交:文件名為 “FPGA課程設計報告-班級-學號-姓名.doc”,所有報告發送給班長,由班長統一打包后統一發送到付小倩老師。
4.“打印稿”由班長收齊后交到:12教305辦公室; 5.上交截止日期:2015年7月31日17:00之前。
第一章
緒論....................................................................................................................3 關鍵詞:FPGA,數字鐘....................................................................................................3 第二章 FPGA的相關介紹...............................................................................................4 2.1 FPGA概述........................................................................................................4 2.2 FPGA特點...........................................................................................................4 2.3 FPGA設計注意...................................................................................................5 第三章 Quartus II與Verilog HDL相關介紹..................................................................7 3.1 Quartus II..............................................................................................................7 3.2 Verilog HDL......................................................................................................7 第四章 設計方案..............................................................................................................8 4.1數字鐘的工作原理..............................................................................................8 4.2 按鍵消抖.............................................................................................................8 4.3時鐘復位..............................................................................................................8 4.4時鐘校時..............................................................................................................8 4.5數碼管顯示模塊。..............................................................................................8 第五章 方案實現與驗證..................................................................................................9 5.1產生秒脈沖..........................................................................................................9 5.2秒個位進位..........................................................................................................9 5.3按鍵消抖..............................................................................................................9 5.4復位按鍵設置....................................................................................................10 5.5 數碼管顯示。...................................................................................................10 5.6 RTL結構總圖....................................................................................................11 第六章 實驗總結............................................................................................................14 第七章 Verilog HDL源代碼附錄..................................................................................15
第一章
緒論
現代社會的標志之一就是信息產品的廣泛使用,而且是產品的性能越來越強,復雜程度越來越高,更新步伐越來越快。支撐信息電子產品高速發展的基礎就是微電子制造工藝水平的提高和電子產品設計開發技術的發展。前者以微細加工技術為代表,而后者的代表就是電子設計自動化(electronic design automatic, EDA)技術。
本設計采用的VHDL是一種全方位的硬件描述語言,具有極強的描述能力,能支持系統行為級、寄存器傳輸級和邏輯門級這三個不同層次的設計;支持結構、數據流、行為三種描述形式的混合描述,覆蓋面廣,抽象能力強,因此在實際應用中越來越廣泛。ASIC是專用的系統集成電路,是一種帶有邏輯處理的加速處理器;而FPGA是特殊的ASIC芯片,與其它的ASIC芯片相比,它具有設計開發周期短、設計制造成本低、開發工具先進、標準產品無需測試、質量穩定以及可實時在線檢測等優點。
在控制系統中,鍵盤是常用的人機交換接口,當所設置的功能鍵或數字鍵按下的時候,系統應該完成該鍵所對應的功能。因此,按鍵信息輸入是與軟件結構密切相關的過程。根據鍵盤結構的不同,采用不同的編碼方法,但無論有無編碼以及采用什么樣的編碼,最后都要轉換成為相應的鍵值,以實現按鍵功能程序的轉移。[1] 鐘表的數字化給人們生產生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、定時啟閉電路、定時開關烘箱、通斷動力設備,甚至各種定時電氣的自動啟用等,所有這些都是以鐘表數字化為基礎的。因此研究數字鐘以及擴大其應用有著非常現實的意義。
關鍵詞:FPGA,數字鐘
第二章 FPGA的相關介紹
FPGA(Field-Programmable Gate Array),即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。
2.1 FPGA概述
系統設計師可以根據需要通過可編輯的連接把FPGA內部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設計者而改變,所以FPGA可以完成所需要的邏輯功能。
FPGA一般由3種可編程電路和一個用于存放編程數據的靜態存儲器SRAM組成。這3種可編程電路是:可編程邏輯模塊(CLB--Configurable Logic Block)、輸入/輸出模塊(IOB--I/O Block)和互連資源(IR—Interconnect Resource)。可編程邏輯模塊CLB是實現邏輯功能的基本單元,它們通常規則的排列成一個陣列,散布于整個芯片;可編程輸入/輸出模塊(IOB)主要完成芯片上的邏輯與外部封裝腳的接口,它通常排列在芯片的四周;可編程互連資源包括各種長度的連接線段和一些可編程連接開關,它們將各個CLB之間或CLB、IOB之間以及IOB之間連接起來,構成特定功能的電路。
FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復雜的設計,而且消耗更多的電能。但是他們也有很多的優點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設計的開發是在普通的FPGA上完成的,然后將設計轉移到一個類似于ASIC的芯片上。另外一種方法是用CPLD(復雜可編程邏輯器件備)。
2.2 FPGA特點
FPGA的基本特點主要有:
1)采用FPGA設計ASIC電路,用戶不需要投片生產,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。3)FPGA內部有豐富的觸發器和I/O引腳。
4)FPGA是ASIC電路中設計周期最短、開發費用最低、風險最小的器件之一。5)FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。可以說,FPGA芯片是小批量系統提高系統集成度、可靠性的最佳選擇之一。編程互連資源IR可以將FPGA內部的CLB和CLB之間、CLB和IOB之間連接起來,構成各種具有復雜功能的系統。
FPGA是由存放在片內RAM中的程序來設置其工作狀態的,因此,工作時需要對片內的RAM進行編程。用戶可以根據不同的配置模式,采用不同的編程方式。
加電時,FPGA芯片將EPROM中數據讀入片內編程RAM中,配置完成后,FPGA進入工作狀態。掉電后,FPGA恢復成白片,內部邏輯關系消失,因此,FPGA能夠反復使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片FPGA,不同的編程數據,可以產生不同的電路功能。因此,FPGA的使用非常靈活。
FPGA有多種配置模式:并行主模式為一片FPGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片FPGA;串行模式可以采用串行PROM編程FPGA;外設模式可以將FPGA作為微處理器的外設,由微處理器對其編程。
2.3 FPGA設計注意
不管你是一名邏輯設計師、硬件工程師或系統工程師,甚或擁有所有這些頭銜,只要你在任何一種高速和多協議的復雜系統中使用了FPGA,你就很可能需要努力解決好器件配置、電源管理、IP集成、信號完整性和其他的一些關鍵設計問題。不過,你不必獨自面對這些挑戰,因為在當前業內領先的FPGA公司里工作的應用工程師每天都會面對這些問題,而且他們已經提出了一些將令你的設計工作變得更輕松的設計指導原則和解決方案。
本次實驗所采用的FPGA器件是Altera Cyclone V 5CSEMA5F31C6N
FPGA實物圖
FPGA數碼管介紹,每節數碼管低電平點亮高電平熄滅。LED序號如下圖所示:
根據上圖所示的順序,可以得出顯示的數組代碼。
4'd0: HEX0=7'b1000000;4'd1: HEX0=7'b1111001;4'd2: HEX0=7'b0100100;4'd3: HEX0=7'b0110000;4'd4: HEX0=7'b0011001;4'd5: HEX0=7'b0010010;4'd6: HEX0=7'b0000010;4'd7: HEX0=7'b1111000;4'd8: HEX0=7'b0000000;4'd9: HEX0=7'b0010000;
//0 低電平點亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9 default: HEX0=7'b1111111;//不符合條件的顯示零
第三章 Quartus II與Verilog HDL相關介紹
3.1 Quartus II Quartus II 是Altera公司的綜合性PLD/FPGA開發軟件,原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。
Quartus II 軟件擁有友好的界面,使用便捷,功能強大,當中可編程邏輯設計環境采用完成集成化,是先進的EDA工具軟件。該軟件具備諸多特點(例如:開放性,與結構無聯系,多平臺設計,完全集成化,設計庫豐富、工具模塊化等),支持原理圖、VHDL、VerilogHDL以及AHDL等多種設計輸入形式。Quartus II能夠在多系統上使用,為用戶的設計方式提供了完善的圖形界面。具有運行速度快,界面統一,功能集中,學用簡單等特點。
圖形或HDL編輯Analysis & Synthesis(分析與綜合)Filter(適配器)Assembler(編程文件匯編)編輯器Timing Analyzer(時序分析器)設計輸入綜合或編譯適配器件下載仿真
3.2 Verilog HDL
Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數字系統硬件的結構和行為的語言,用它可以表示邏輯電路圖、邏輯表達式,還可以表示數字邏輯系統所完成的邏輯功能。Verilog HDL和VHDL是世界上最流行的兩種硬件描述語言,都是在20世紀80年代中期開發出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發。兩種HDL均為IEEE標準。
第四章 設計方案
4.1數字鐘的工作原理
振蕩器產生穩定的高頻脈沖信號,作為數字鐘的時間基準,然后經過分頻器輸出標準秒脈沖。秒計數器滿60后向分計數器進位,分計數器滿60后向小時計數器進位,小時計數器按照“24翻0”規律計數。計數滿后各計數器清零,重新計數。計數器的輸出分別經譯碼器送數碼管顯示。計時出現誤差時,可以用校時電路校時、校分。控制信號由三個獨立按鍵輸入。輸入信號選擇FPGA器件上的50MHZ時鐘信號。
4.2 按鍵消抖
因為按鍵的物理結構并非理想式開關,在按鍵按下后會在一個很短的時間內出現電平抖動的情況,因此需要對按鍵進行消抖處理。這里的按鍵消抖與單片機中的按鍵消抖問題有所不同,不能采用延時的方法進行按鍵消抖,這里我選用對時鐘脈沖計數的方式來判斷按鍵是否按下。采用50MHZ時鐘信號,實測160ms的消抖時長較為合適,即8000000個時鐘上升沿。
4.3時鐘復位
按下復位按鍵后,所有位清零。
4.4時鐘校時
時鐘計時過程中,可對時鐘進行校時。本次設計不考慮對秒位進行校時,分鐘的個位和小時的個位加到10時會自動進位,因此只對分鐘的個位和小時的個位設置可以加1的校時按鈕,即可實現校時功能。整體比較容易實現。
4.5數碼管顯示模塊。
選擇需要顯示的時鐘位數作為敏感詞,用上述給出的顯示代碼對時鐘的每一位分別進行顯示處理。
第五章 方案實現與驗證
5.1產生秒脈沖
always@(posedge clk)。。。
如代碼展現,當計數器count記到50000000個時鐘上升沿的時候,向秒個位進1.count=count+1;
begin
end count=0;count_s0=count_s0+1;
//秒個位計數
if(count==32'd50000000)
//產生一個一秒的脈沖,//敏感詞為50MHZ時鐘上升沿
5.2秒個位進位
當秒的個位計數到10的時候,向秒的十位進位。
if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產生秒十位進位
5.3按鍵消抖
if(!inrst_m0)
count0=count0+1;if(count0==32'd8000000 &&!inrst_m0)
begin count0=0;count_m0=count_m0+1;end
對時鐘秒沖進行計數,計數達到8000000時,判斷此時的電平是否為0,若還是為0,則判斷按鍵按下,執行分鐘個位加1操作。
5.4復位按鍵設置
begin
if(!reset)
begin
count=0;
count_s0=0;count_s1=0;
count_m0=0;count_m1=0;
count_h0=0;count_h1=0;
end else
復位按鍵按下后所有位置零。
5.5 數碼管顯示。
always@(count_s0)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
//按鍵按下為邏輯0
//復位置零
//秒個位顯示
//0 低電平點亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
5.6 RTL結構總圖
顯示部分如下圖:
判斷主體如下圖:
部分引腳圖展現
最終實驗現象:
第六章 實驗總結
其實本次的多功能數字鐘設計其實應該還有很多其他的方法,比如用到外部中斷功能進行時鐘的校時,采用按鍵輸入加數碼管閃爍的方式進行校時位的選擇,但限于時間較短,這部分知識空白,所以本次設計實有所缺陷。
經歷了本次FPGA的設計,有很多感受,首先就是看了一點數字鐘設計方面的資料,遇到很多不理解的地方,于是就需要再和同學進行研究討論,在討論的過程中,能聽到其他人的思路,感覺特別有意思,同樣的功能,實現的方法有許許多多,努力把自己的想法實現,或是選擇一種你喜歡的設計借鑒一下,兩者都是很好的選擇。
通過這次設計實驗,著實培養了我們獨立思考、解決問題的能力,從最一開始的一籌莫展,沒有一點思路,感覺像平底拔樓一樣,從兩手空空到產生一個控制電路,從無到有,這是創造的力量。同時,和其他同學討論的過程也很重要,要說的還有就是最后實驗成功的喜悅是無可替代的,就好像你親手種的果樹長出了果實,養的雞下了雞蛋,是一種創造的喜悅,整個心就像是一個大箱子里面放著一塊糖,隱隱約約總能感覺到一絲甜蜜。
數碼管顯示的數字鐘是常見的技術,這次基于FPGA的多功能數字鐘設計具有很高的工程價值和現實意義。讓我們將知識服務于生活,將知識用于實踐,鍛煉了我們發現問題解決問題的能力。
這次FPGA的多功能數字鐘設計,加深了我們對FPGA設計的理解,培養了我們的邏輯思維和動手操作能力,使我們將知識與技能鏈接起來,使我們每個人的都在不斷進步,提高了專業技能,提高了動手實踐的綜合能力。
第七章 Verilog HDL源代碼附錄
module clock(reset,inrst_m0,inrst_h0,clk,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5);input clk,reset,inrst_m0,inrst_h0;output reg [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;reg [31:0] count=0,count0=0,count1=0;reg [3:0] count_s0=0,count_s1=0,count_m0=0,count_m1=0, count_h0=0,count_h1=0;
//實際寬度為25 always@(posedge clk)begin
if(!inrst_m0)
count0=count0+1;if(count0==32'd8000000 &&!inrst_m0)//按鍵消抖
begin count0=0;count_m0=count_m0+1;end if(!inrst_h0)count1=count1+1;if(count1==32'd8000000 &&!inrst_h0)
begin count1=0;count_h0=count_h0+1;end
//按鍵按下為邏輯0
//復位置零 if(!reset)begin count=0;count_s0=0;count_s1=0;count_m0=0;count_m1=0;count_h0=0;count_h1=0;end count=count+1;begin else
if(count==32'd50000000)
//產生一個一秒的脈沖,end count=0;count_s0=count_s0+1;
//秒個位計數
else if(count_s0==4'd10)
begin
end count_s0=0;count_s1=count_s1+1;
//產生秒十位進位
else if(count_s1==4'd6)
begin
end
//分個位計數 count_s1=0;count_m0=count_m0+1;else if(count_m0==4'd10)
begin
end
//分十位計數 count_m0=0;count_m1=count_m1+1;else if(count_m1==4'd6)
begin
end
//時個位計數 count_m1=0;count_h0=count_h0+1;else if(count_h0==4'd10)
begin
end
//滿24判斷 count_h0=0;count_h1=count_h1+1;else if(count_h0==4 && count_h1==2)
begin
count_h0=0;
count_h1=0;end
end
always@(count_s0)
begin
case(count_s0)
4'd0: HEX0=7'b1000000;
4'd1: HEX0=7'b1111001;
4'd2: HEX0=7'b0100100;
4'd3: HEX0=7'b0110000;
4'd4: HEX0=7'b0011001;
4'd5: HEX0=7'b0010010;
4'd6: HEX0=7'b0000010;
4'd7: HEX0=7'b1111000;
4'd8: HEX0=7'b0000000;
4'd9: HEX0=7'b0010000;
default: HEX0=7'b1111111;
endcase end
always@(count_s1)
begin
case(count_s1)
4'd0: HEX1=7'b1000000;
4'd1: HEX1=7'b1111001;
4'd2: HEX1=7'b0100100;
4'd3: HEX1=7'b0110000;
4'd4: HEX1=7'b0011001;
4'd5: HEX1=7'b0010010;
default: HEX1=7'b1111111;endcase
//秒個位顯示
//0 低電平點亮高電平熄滅//1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//秒十位顯示
//0 低電平點亮高電平熄滅//1 //2 //3 //4 //5
//不符合條件的顯示零
end
always@(count_m0)
begin
case(count_m0)
4'd0: HEX2=7'b1000000;
4'd1: HEX2=7'b1111001;
4'd2: HEX2=7'b0100100;
4'd3: HEX2=7'b0110000;
4'd4: HEX2=7'b0011001;
4'd5: HEX2=7'b0010010;
4'd6: HEX2=7'b0000010;
4'd7: HEX2=7'b1111000;
4'd8: HEX2=7'b0000000;
4'd9: HEX2=7'b0010000;
default: HEX2=7'b1111111;
endcase end always@(count_m1)
begin
case(count_m1)
4'd0: HEX3=7'b1000000;
4'd1: HEX3=7'b1111001;
4'd2: HEX3=7'b0100100;
4'd3: HEX3=7'b0110000;
4'd4: HEX3=7'b0011001;
4'd5: HEX3=7'b0010010;
default: HEX3=7'b1111111;
endcase end always@(count_h0)
begin
case(count_h0)
4'd0: HEX4=7'b1000000;4'd1: HEX4=7'b1111001;
//分個位顯示
//0 低電平點亮高電平熄滅 //1 //2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//分十位顯示
//0 低電平點亮高電平熄滅 //1 //2 //3 //4 //5
//不符合條件的顯示零
//時個位顯示
//0 低電平點亮高電平熄滅 //1
4'd2: HEX4=7'b0100100;
4'd3: HEX4=7'b0110000;
4'd4: HEX4=7'b0011001;
4'd5: HEX4=7'b0010010;
4'd6: HEX4=7'b0000010;
4'd7: HEX4=7'b1111000;
4'd8: HEX4=7'b0000000;
4'd9: HEX4=7'b0010000;
default: HEX4=7'b1111111;endcase End
always@(count_h1)
begin
case(count_h1)
4'd0: HEX5=7'b1000000;
4'd1: HEX5=7'b1111001;
4'd2: HEX5=7'b0100100;
default: HEX5=7'b1111111;
endcase end
endmodule
//2 //3 //4 //5 //6 //7 //8 //9
//不符合條件的顯示零
//時十位顯示
//0 低電平點亮高電平熄滅//1 //2
//不符合條件的顯示零
第二篇:多功能數字鐘課程設計
多功能數字鐘
朱安煙
(安陽師范學院 物電學院, 河南 安陽 455002)
摘要:時鐘相比具有更高的準確性和直觀性
因此得到了更加廣泛的使用。數字鐘從原理上講是一種典型的數字電路,其中
本設計采用六位LED
24小時計時方式根據數碼管動態顯示原理來進行顯示。用晶振產生振蕩脈加以分頻得到所需的鐘表秒脈沖,利用純數字電路,實現數字電子時鐘功能,時間重置功能。此次數字鐘的理圖設計,PCB圖的制作主要是基于altium designer軟件,利用proteus7.7軟件進行仿真,最終本設計實現24小時的時鐘計時、時間重置功能。
關鍵詞:LED數碼管
時序電路
邏輯電路
時鐘
校時引言
僅向。方案論證:
2.1方案一
由于是數字鐘的設計,可以用單片機AT89C51來實現計數功能,相對于純數字電路來講它具有功耗低、體積小、使用方便等優點。但在大二下半學期初期,對單片機方面的內容知識還不夠完善,加上用單片機為核心來做數字鐘還需做編程,對自身來說又是一難點。不過此法可以待以后,學習知識完善后再考慮。
2.2 方案二
繼而考慮到用原先學過的純數字電路來做,以74Ls160來做為計數的芯片,用六片分別實現 數字鐘的小時、分、秒、的計數,并用晶振加以分頻產生數字鐘所需的秒脈沖。
從以上兩種方案,很容易看出,采用方案二,用此法做即可以復習回顧早期學習的數電模電知識,又避免了單片機知識不足的問題,故用此法。結果與討論
3.1.1數字鐘主要計數芯片為74ls160其引腳圖如下:
這種同步可預置十進計數器是由四個D型觸發器和若干個門電路構成,內部有超前進位,具有計數、置數、禁止、直接(異步)清零等功能。對所有觸發器同時加上時鐘,使得當計數使能輸入和內部門發出指令時輸出變化彼此協調一致而實現同步工作。這種工作方式消除了非同步(脈沖時鐘)計數器中常有的輸出計數尖峰。緩沖時鐘輸入將在時鐘輸入上升沿觸發四個觸發器。這種計數器是可全編程的,即輸出可預置到任何電平。當預置是同步時,在置數輸入上將建立一低電平,禁止計數,并在下一個時鐘之后不管使能輸入是何電平,輸出都與建立數據一致。清除是異步的(直接清零),不管時鐘輸入、置數輸入、使能輸入為何電平,清除輸入端的低電平把所有四個觸發器的輸出直接置為低電平。超前進位電路無須另加門,即可級聯出n位同步應用的計數器。它是借助于兩個計數使能輸入和一個動態進位輸出來實現的。兩個計數使能輸入(ENP和ENT)計數時必須是高電平,且輸入ENT必須正反饋,以便使能動態進位輸出。因而被使能的動態進位輸出將產生一個高電平輸出脈沖,其寬度近似等于QA輸出高電平。此高電平溢出進位脈沖可用來使能其后的各個串聯級。使能ENP和ENT輸入的跳變不受時鐘輸入的影響。電路有全獨立的時鐘電路。改變工作模式的控制輸入(使能ENP、ENT或清零)縱使發生變化,直到時鐘發生為止,都沒有什么影響。計數器的功能(不管使能、不使能、置數或計數)完全由穩態建立時間和保持時間所要求的條件來決定。
管腳說明: CLR:清零復位端
當輸入為低電平時有效
CLK:時鐘信號接收端
A~D:讀入
QA~QD:輸出
ENT、ENP置一時芯片正常工作
LOAD:置數端
RCO:信號輸出端
GND:接地
Vcc:接高
工作方式:
3.1.2 7段LED數碼管
3.1.3 32.768KHZ晶振
32.768KHZ是一個標準的頻率,晶振頻率的應用主要有以下幾個方面的參數:尺寸、負載電容、頻率偏差、應用范圍。按尺寸外形來分主要分為插件和貼片的;插件的主要有2*
6、3*
8、49s 等,貼片的就有很多種了,跟據各公司的設計可的型號有很多,例如:日本KDS晶振就有49SMD、DST310S、SM—14J、DST520、DST410S等。
3.1.4 CD4060分頻器
CD4060由一振蕩器和14級二進制串行計數器位組成,振蕩器的結構可以是RC或晶振電路,CR為高電平時,計數器清零且振蕩器使用無效。所有的計數器位均為主從觸發器。在CP1(和CP0)的下降沿計數器以二進制進行計數。在時鐘脈沖線上使用斯密特觸發器對時鐘上升和下降時間無限制 引腳功能:
/CP1:時鐘輸入端
/CP0:時鐘輸出端
/CP0:反相時鐘輸出端
Q4~Q10,Q12~Q14:計數器輸出端
/Q14:第14級計數器反相輸出端
VDD:電源正
VSS:電源負
CR:清零端 3.1.5 74ls48
功能介紹:
74LS48除了有實現7段顯示譯碼器基本功能的輸入(DCBA)和輸出(Ya~Yg)端外,7448還引入了燈測試輸入端(LT)和動態滅零輸入端(RBI),以及既有輸入功能又有輸出功能的消隱輸入/動態滅零輸出(BI/RBO)端。
由7448真值表可獲知7448所具有的邏輯功能:
(1)7段譯碼功能(LT=1,RBI=1)
在燈測試輸入端(LT)和動態滅零輸入端(RBI)都接無效電平時,輸入DCBA經7448譯碼,輸出高電平有效的7段字符顯示器的驅動信號,顯示相應字符。除DCBA = 0000外,RBI也可以接低電平,見表1中1~16行。
(2)消隱功能(BI=0)
此時BI/RBO端作為輸入端,該端輸入低電平信號時,表1倒數第3行,無論LT 和RBI輸入什么電平信號,不管輸入DCBA為什么狀態,輸出全為“0”,7段顯示器熄滅。該功能主要用于多顯示器的動態顯示。
(3)燈測試功能(LT = 0)
此時BI/RBO端作為輸出端,端輸入低電平信號時,表1最后一行,與 及DCBA輸入無關,輸出全為“1”,顯示器7個字段都點亮。該功能用于7段顯示器測試,判別是否有損壞的字段。
(4)動態滅零功能(LT=1,RBI=1)
此時BI/RBO端也作為輸出端,LT 端輸入高電平信號,RBI 端輸入低電平信號,若此時DCBA = 0000,表1倒數第2行,輸出全為“0”,顯示器熄滅,不顯示這個零。DCBA≠0,則對顯示無影響。該功能主要用于多個7段顯示器同時顯示時熄滅高位的零。
3.2 原理設計
整體電路設計方案:
3.2.1 振蕩電路設計
振蕩電路由振蕩器產生的脈沖,振蕩器是數字鐘的核心。振蕩器的穩定度及頻率的精度決定了數字鐘的精確程度,次處有555定時器和晶振兩種產生秒脈沖的方法:555振蕩器做振蕩源一般用于精確度要求不高的場合,由門電路組成的多諧振蕩器的振蕩周期不僅與時間常數RC有關,而且還取決于門電路的閾值電壓VTH,由于VTH容易受到溫度、電源電壓及干擾的影響,因此頻率穩定性較差,只能用于對頻率穩定性要求不高的場合。考慮到振蕩頻率的精確度與穩定性固采用晶振做為振蕩源來實現振蕩電路,得時鐘脈沖更穩定,時間走的更準37.268KHz晶振 通過cd4060分頻器進行十四分頻得到0.5s的脈沖信號,再進行一個SN74LS74進行二分頻得到所需的秒脈沖信號:
3.2.2 校時電路設計
根據電路設計所知需要在分處和小時處需要校時,分別在分和時個位向十位進位處各加一開關,另一端接地并且在與地之間接100pf電容為防止按鍵抖動。
電路設計如下:
當開關處于自然位置時分十位clk端所接為高電平,當開關按下時則引入一低電平實其clk端有一個下降沿脈沖接入,使其產生了校時功能。
3.2.3顯示電路設計
顯示電路是用74ls48驅動七段共陰數碼管來作為時鐘顯示器。
電路設計如下:
3.2.4 計時電路設計
數字鐘的秒和分位都是從0到60循環計數的,所以可以用用異步清零法設計60進制計數器作為秒和分的計數器。用異步置數法設計小時所用的24進制計數器。秒、分位設計電路如下:
3.3 程序調試過程
在板子焊接好以后通上5V電源發現六Led燈只有三個能完整亮出來,其余的都不亮或是亮的不全,而且秒位不走,校時按鍵不管用。問題很多。
開始調試:
1、首先調試的是秒位為何不走,先測晶振石否起振,測量后發現晶振正常起振,然后從74ls160的clk端用示波器測試一下沒有脈沖信號輸入,則找74ls74的輸出口也無脈沖,以次往前推,最后測量出從74ls74輸入端有正確的脈沖輸入,輸出端卻無脈沖輸出。觀察后沒有連接錯誤,故用萬用表測vcc.end端都有正確的電平接入,再測量兩點間是否有漏焊現象,最后測出一處漏焊點使D端與Q端沒有接通。重新焊接后秒位正常計時。
2、秒位正常計時,但向秒的十位進位時總是顯示從8到19,查閱資料可知,在第一個160芯片到第二個160芯片中缺一個非門,充當延時作用,使個位計數到9再來一個脈沖下計數時再向前進位。加上非門進位正常了。
3、秒位向分位進位正常,但校時按鍵不能用,且分位向十分位不能進位,通過觀察焊接對比原理圖與pcb圖后發現,開關接地的一端弄反了,應是開關與接電容端相側對著的端接地。這個錯誤導致開關不能用,亦使分的十位端的74ls160芯片clk段一直接了地,故不能使其正常進位。修改過后則可以正常進位,且兩開關都能用了。
4、顯示小時位的第一個數碼管一直不亮,通過測量發現led數碼管沒有燒壞,能正常工作,通過對比PCB圖觀察沒有焊接錯誤,用萬用表測量則發現驅動次led的74ls48管沒有正常接地,連接跳線處有一虛焊,重新焊接后恢復正常。
5、但分向小時不能進位,由示波器觀察發現74ls160芯片clk端無脈沖輸入,但十分位有脈沖輸出,且導線也導通了,就觀察原理圖發現原理圖一處錯誤,分向時進位時是分滿60向前進一個脈沖,故分的TC端不用再接到時的CLK端了。找到錯誤后用鑷子將板上的銅線劃段,則正常進位了。
6、小時進位正常但顯示的不是24進制,顯示的是44進制,則推測可能是跳線連接錯誤,將顯示小時的十位 74ls160芯片接B端連接成接C端了,故使其顯示44進制,通過觀察、對比pcb圖,最后發現果然如此。修改過后小時為正常24進制了。
7、最后一個數碼管有三段老是不亮,觀察連接沒有錯誤,測量焊接也正常,最后用萬用表測量發現芯片沒有問題,那三段不亮的數碼管燒了。
8、調試好后在后來的觀察中發現從秒向分進位時有時一下進兩位,自己找不出來原因。問過老師后,老師說是由于防抖電容所致。嘗試著將電容先劃斷試了一下就沒有那種情況了。但此時校時開關由于抖動緣故,按一下有時跳3、4個位,校時不穩定了。結論
此數字鐘相對于機械鐘來說有低功耗,高精度,數字化顯示和不易損壞等特點。符合人們日常家居及辦公對鐘表的要求,可以作為家居、辦公等用表。
參考文獻
[1] 佘新平數學電子技術基礎 華中科技大學出版社 2009年
[2] 許樹玲 丁電寬 王晉 電子技術及實驗 內蒙古大學出版社2005年
[3] 佘新平數字電路設計·仿真·測試 華中大學出版社 2010年
附圖: 電路原理圖:
第三篇:基于FPGA的數字鐘課程設計
計算機與信息工程系
《脈沖與數字電路》 課程設計報告
專業
通信工程
班級
B090507
學號
B09050722
姓名
張亞威
報告完成日期
2011/06/24
指導教師
秦玉潔
評語:
成績:
批閱教師簽名:
批閱時間:
1.任務和設計要求
設計具有時、分、秒計數顯示,以24小時循環計時的時鐘電路,帶有清零和校準功能;
2.設計原理
采用硬件描述語言Verilog 進行編程,實現20MHZ晶振到1HZ的分頻;采用verilog語言實現數字表功能實現的各個模塊;通過各個模塊的代碼生成相應的模塊原理圖;再將各個模塊生成的原理圖進行疊加組成一個數字表系統;
3.系統設計
設計的數字表有6個輸入,16個輸出;
6個輸入中,有一個是時鐘信號,開發板上的28號引腳輸入的50MHZ的時鐘信號;一個清零端,當數字表正常顯示時,按下清零端可以實現
數字鐘整體電路圖:
4.各個模塊設計
基于EP1C6Q240C8的數字鐘設計,有6個模塊組成: Fdiv 分頻模塊
Control 模式選擇模塊 Tune 校正模塊 Zoushi 時間正常運行模塊 Saomiao 數碼管動態掃描模塊; Decoder BCD譯碼模塊;
Fdiv 模塊:
功能:實現20MHZ的時鐘信號分成10KHZ的信號和1HZ的信號;
輸入:clk 為20MHZ的時鐘信號; 輸出:f10000HZ 為10KH的時鐘信號;
F1HZ 為1HZ的時鐘信號; Fdiv 模塊代碼:
module fdiv(clk,f10000Hz,f1Hz);output f10000Hz,f1Hz;input clk;reg f10000Hz,f1Hz;integer CNT1=0,CNT2=0;always@(posedge clk)
begin
if(CNT1<1999)
begin
CNT1=CNT1+1;
f10000Hz<=1'b0;
end
else
begin
CNT1=0;
f10000Hz<=1'b1;
end
end
always@(posedge f10000Hz)
begin
if(CNT2<9999)
begin
CNT2=CNT2+1;
f1Hz<=1'b0;
end
else
begin
CNT2=0;
f1Hz<=1'b1;
end
end endmodule fdiv 模塊波形仿真:
由于實際的分頻波形仿真中,由于要將20MHZ的分成1HZ的,需要將信號縮小20 000 000倍,因此,此處采用將20HZ的先分成10HZ,然后再將10HZ的分成1HZ的時鐘信號;在仿真中這樣整,在實際演示中再改下代碼,實現真正的20MHZ到1HZ的分頻;它們只是一個倍數關系而已;
Control 模塊:
功能:實現電子表的正常顯示及時間校正模式的轉換;
輸入:key 模式修改鍵,每來一個高電平,mode加一次。如果mode 的值為2,則mode被賦值為 1;
Reset 復位鍵,如果reset 為 1,則mode 被賦值為0; 輸出:mode 用于輸出到下一級模塊,進行模式判斷; Control 模塊源代碼:
module control(mode,key,reset);input key,reset;output[1:0] mode;reg[1:0] mode;always@(posedge key)begin
if(reset)
begin
mode<=2'b00;
end
else
begin
mode<=mode+2'b01;
if(mode==2)
begin
mode<=2'b00;
end
end end endmodule Control 模塊波形仿真
Tune 模塊
功能:實現秒分時的校正;
輸入:Mode 為模式選擇,mode為0時是正常顯示時間模式;mode 為1時,是秒、分、時加一模式。Mode為2時,是時分秒減一模式;
Ht 為時調節輸入;
mt 為分調節輸入;
St 為秒調節輸入;
輸出:Aa 為秒的個位;
Ba 為秒的十位;
Da 為分鐘的個位;
Ea 為分鐘的十位;
Ga 為小時的個位;
Ha 為小時的十位; Tune 調時模塊源代碼:
module tune(mode,ht,mt,st,aa,ba,da,ea,ga,ha);input[1:0] mode;input ht;input mt;input st;output[3:0] aa;output[2:0] ba;output[3:0] da;output[2:0] ea;output[3:0] ga;output[1:0] ha;reg[3:0] aa,da,ga;reg[2:0] ba,ea;reg[1:0] ha;
always@(posedge st)begin
if(mode==1)
begin
aa<=aa+1;
if(aa==9)
begin
ba<=ba+1;
aa<=0;
end
if(ba==5&&aa==9)
ba<=0;
end
else if(mode==2)
begin
aa<=aa-1;
if(aa==0)
begin
ba<=ba-1;
aa<=9;
end
if(ba==0&&aa==0)
ba<=5;
end end always@(posedge mt)begin
if(mode==1)
begin
da<=da+1;
if(da==9)
begin
ea<=ea+1;
da<=0;
end
if(ea==5&&da==9)
ea<=0;
end
else if(mode==2)
begin
da<=da-1;
if(da==0)
begin
ea<=ea-1;
da<=9;
end
if(ea==0&&da==0)
ea<=5;
end end always@(posedge ht)begin
if(mode==1)
begin
ga<=ga+1;
if(ga==9)
begin
ha<=ha+1;
ga<=0;
end
if(ha==2&&ga==3)
begin
ha<=0;
ga<=0;
end
end
else if(mode==2)
begin
ga<=ga-1;
if(ga==0)
begin
ha<=ha-1;
ga<=9;
end
if(ga==0&&ha==0)
begin
ga<=3;
ha<=2;
end
end end
endmodule Tune
調時模塊仿真波形:
Mode 為0 時,ht,mt,st均不起作用;
Mode 為1時,小時加到23,ht再來一個上升沿,小時變為0;
Mode 為1時,秒、分加到59,st、mt再來一個上升沿,秒、分變成0;
Mode 為2時,小時減到0,ht再來一個上升沿,小時變為23;
Mode 為2時,秒、分減到0,st、mt再來一個上升沿,秒、分變成59;
Zou shi模塊:
功能:實現時間的正常顯示及校正顯示;
正常顯示,當秒加到59時,1HZ的脈沖信號CLK1再來一個上升沿,秒變為0,同時分加一;
當正常顯示時,復位端來一個上升沿的脈沖,顯示變成輸入端輸入的數據;
Mode 變成模式1時,顯示變成輸入端輸入的數據;
Mode 變成模式2時,顯示變成輸入端輸入的數據;
Sao miao模塊:
功能:實現數碼管的動態掃描;
輸入:clk10K 輸入10KHZ的時鐘信號作為數碼管的動態掃描時鐘信號;
a[3..0] 上一級輸出的秒的個位;
b[2..0] 上一級輸出的秒的十位;
c[3..0] 上一級輸出的分秒之間的標志位;
d[3..0] 上一級輸出的分的個位;
e[2..0] 上一級輸出的分的十位;
f[2..0] 上一級輸出的秒的時分之間的標志位; g[3..0] 上一級輸出的時的個位;
h[2..0] 上一級輸出的時的個位;
輸出:zx[3..0]數碼管將要顯示的4位BCD碼;
Zw[7..0]八位數碼管動態掃描輸出; Sao miao 數碼管掃描模塊源代碼:
module saomiao(a,b,c,d,e,f,g,h,f10000HZ,zx,zw);input f10000HZ;input[3:0] a,d,g,c,f;input[2:0] b,e;input[1:0] h;output[3:0] zx;output[7:0] zw;reg[3:0] zx;
reg[7:0] zw;reg[2:0] slip;always@(posedge f10000HZ)begin
if(slip==100)
slip<=4'b000;
else
slip<=slip+1'b1;end always@(slip)begin
case(slip)
4'd0:begin zw=8'b11111110;zx=a;end
4'd1:begin zw=8'b11111101;zx=b;end
4'd2:begin zw=8'b11111011;zx=c;end
4'd3:begin zw=8'b11110111;zx=d;end
4'd4:begin zw=8'b11101111;zx=e;end
4'd5:begin zw=8'b11011111;zx=f;end
4'd6:begin zw=8'b10111111;zx=g;end
4'd7:begin zw=8'b01111111;zx=h;end
default:zw=8'bx;
endcase end endmodule Sao miao 數碼管掃描模塊仿真波形:
Zx顯示的是上一級輸出的4位BCD碼,此處是以十進制的形式顯示的;
Decoder 模塊:
功能:將上一級輸出的4為BCD碼轉換成數碼管能正常顯示的數據;
輸入:zx[3..0]上一級輸出的4位BCD碼; 輸出:seg[6..0]數碼管能正常顯示的數據;
Decoder 譯碼模塊源代碼: module decoder(zx,seg);input[3:0] zx;output[6:0] seg;reg[6:0] seg;always@(zx)begin case(zx)4'b0000: seg<=7'b0111111;4'b0001: seg<=7'b0000110;4'b0010: seg<=7'b1011011;4'b0011: seg<=7'b1001111;4'b0100: seg<=7'b1100110;4'b0101: seg<=7'b1101101;4'b0110: seg<=7'b1111101;4'b0111: seg<=7'b0000111;4'b1000: seg<=7'b1111111;4'b1001: seg<=7'b1101111;4'b1010: seg<=7'b1000000;
default:seg<=7'bx;
endcase end endmodule Decoder 譯碼模塊仿真波形:
輸入的4位BCD碼從0~10,則數碼管顯示0~9和一橫標志位;
5.系統調試與性能分析
在第一次做好之后,下載到開發板里面,出現了問題,不能下載成功;最初認為是下載器的驅動沒有安裝好,后來經過認真的分析是因為在選擇芯片的時候,選錯了芯片;在進行了芯片的正確選擇,以及引腳的正確配置后,成功的加生成的.sof文件下載到了開發板中;
6.設計過程中遇到的問題及解決方法。
程序完全調時成功后,下載到開發板中,顯示全部為0,可能是時鐘分頻的問題;解決方法是修改源代碼,進行正確的時鐘信號分頻;
第四篇:多功能數字鐘課程設計報告
課題名稱 姓名 學號 院、系、部 專業 指導教師
電子技術課程設計報告書
2016年6月12日
一、設計任務及要求:
用中小規模集成芯片設計并制作多功能數字鐘,具體要求如下:
1、準確及時,以數字形式顯示時(00~23)、分(00~59)、秒(00~59)的時間。
2、具有校時功能。指導教師簽名:
2016
二、指導教師評語:
指導教師簽名:
2016
三、成績
指導教師簽名:
2016年6月年6月年6月日
日
日
多功能數字鐘課程設計報告 設計目的
一、設計原理與技術方法:
包括:電路工作原理分析與原理圖、元器件選擇與參數計算、電路調試方法與結果說明; 軟件設計說明書與流程圖、軟件源程序代碼、軟件調試方法與運行結果說明。
1、電路工作原理分析與原理圖
數字鐘實際上是一個對標準頻率(1Hz)進行計數的計數電路。由于標準的1Hz 時間信號必須做到準確穩定,所以通常使用輸出頻率穩定的石英晶體振蕩器電路構成數字鐘的振源。又由于計數的起始時間不可能與標準時間(如北京時間)一致,故需要在電路上加一個校時電路。因此一個具有計時、校時、報時、顯示等基本功能的數字鐘主要由振蕩器、分頻器、計數器、譯碼器、顯示器、校時電路、報時電路等七部分組成。石英晶體振蕩器產生的信號經過分頻器得到秒脈沖后,秒脈沖送入計數器計數,計數結果通過“時”、“分”、“秒”譯碼器譯碼,并通過顯示器顯示時間。由以上分析可得到原理框圖如下圖
圖1 實驗原理框圖
2、元器件選擇與參數計算
(1)晶體振蕩電路:產生秒脈沖既可以采用555脈沖發生電路也可以采用晶振脈沖發生電路。若由集成電路定時器555與RC組成的多諧振蕩器作為時間標準信號源,可使555與RC組成多諧振蕩器,產生頻率 f=1kHz的方波信號,再通過分頻則可得到秒脈沖信號。晶體振蕩器電路則可以給數字鐘提供一個頻率穩定準確的32768Hz的方波信號,可保證數字鐘的走時準確及穩定。相比二者的穩定性,晶振電路比555電路能夠產生更加穩定的脈沖,數字電路中的時鐘是由振蕩器產生的,振蕩器是數字鐘的核心。振蕩器的穩定度及頻率的精度決定了數字鐘計時的準確程度,所以最后決定采用晶振脈沖發生電路。石英晶體振蕩器的特點是振蕩頻率準確、電路結構簡單、頻率易調整,它是電子鐘的核心,用它產生標準頻率信號,再由分頻器分成秒時間脈沖。
所以秒脈沖晶體振蕩選用32768Hz的晶振,該元件專為數字鐘電路而設計,其頻率較低,有利于減少分頻器級數。從有關手冊中,可查得C1、C2均為20pF。當要求頻率準確度和穩定度更高時,還可接入校正電容并采取溫度補償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為20MΩ。
(2)分頻器電路:分頻器電路將32768Hz的高頻方波信號經32768(152)次分頻后得到1Hz的方波信號供秒計數器進行計數。分頻器實際上也就是計數器。該電路可通過CD4060與雙D觸發器74LS74共同實現。
(3)時間計數器電路:時間計數電路由秒個位和秒十位計數器、分個位和分十位計數器及時個位和時十位計數器電路構成,其中秒個位和秒十位計數器、分個位和分十位計數器為60進制計數器,而根據設計要求,時個位和時十位計數器為24進制計數器。計數器可以使用十進制的74LS160。
(4)譯碼驅動電路:譯碼驅動電路將計數器輸出的8421BCD碼轉換為數碼管需要的邏輯狀態,并且為保證數碼管正常工作提供足夠的工作電流。譯碼器可以使用CD4511。
(5)校時電路:可以通過基本的門器件、電阻與開關實現。由設計的電路圖可選擇與非門74LS00。(6)整點報時電路:一般時鐘都應具備整點報時電路功能,即在時間出現整點前數秒內,數字鐘會自動報時,以示提醒.其作用方式是發出連續的或有節奏的音頻聲波。
3、電路調試方法與結果說明(1)電路調試方法 ①數碼管的調試:可以用萬用表的負極接數碼管的3或8腳,正極依次接數碼管剩余的管腳所接電阻的另一端,并將萬用表調至測發光二極管檔位,從而測試數碼管的顯示是否正確。②“時”“分”“秒”電路的調試:將“時”“分”“秒”電路連接完成后,可以用函數信號發生器產生的1Hz方波信號分別作為“時”、“分”、“秒”的個位74LS160的計數脈沖,從而測試“時”是否為24進制,“分”和“秒”是否為60進制。③校時電路的調試:先將電路外接用函數信號發生器產生的2Hz方波信號,再分別通過校時、校分電路開關的斷開、閉合以及開關閉合后電路的工作情況判斷電路的校時、校分功能是否正確。
④秒脈沖產生電路的調試:將電路產生的秒時間脈沖接入示波器,觀察并計算電路是否產生1Hz方波信號。(2)結果說明
①數碼管的調試:當正極依次接1、2、4、5、7、9、10管腳時,數碼管依次是G、F、A、B、C、D、E亮。②“時”“分”“秒”電路的調試:“時”為24進制(從“00”到“23”),“分”和“秒”都為60進制(從“00”到“59”)。
③校時電路的調試:開關斷開時電路處于正常工作狀態,開關閉合時電路處于校時、校分狀態。
④秒脈沖產生電路的調試:電路產生1Hz方波信號。
4、軟件設計說明書與流程圖(1)秒脈沖產生電路
晶體振蕩器是構成數字式時鐘的核心,它保證了時鐘的走時準確及穩定。由于晶體具有較高的頻率穩定性及準確性,從而保證了輸出頻率的穩定和準確。晶體XTAL的頻率選為32768HZ。該元件專為數字鐘電路而設計,其頻率較低,有利于減少分頻器級數。從有關手冊中,可查得C1、C2均為20pF。當要求頻率準確度和穩定度更高時,還可接入校正電容并采取溫度補償措施。由于CMOS電路的輸入阻抗極高,因此反饋電阻R1可選為22MΩ。較高的反饋電阻有利于提高振蕩頻率的穩定性。通常,數字鐘的晶體振蕩器輸出頻率較高,為了得到1Hz的秒信號輸入,需要對振蕩器的輸出信號進行分頻。通常實現分頻器的電路是計數器電路,一般采用多級2進制計數器來實現。
本實驗中采用CD4060來構成分頻電路。管腳圖見圖2。CD4060在數字集成電路中可實現的分頻次數最高,而且CD4060還包含振蕩電路所需的非門,使用更為方便。CD4060計數為14級2進制計數器,可以將32768Hz的信號分頻為2Hz,再經過74LS74即可獲得1Hz的方波信號。原理電路圖如圖3所示,圖4為仿真電路圖。
圖2 D4060管腳圖
圖3 CD4060秒脈沖振蕩發生器
圖 4 產生1Hz時間脈沖的電路圖
(2)時間計數器電路 ①“秒”“分”電路
根據題目要求,“秒”和“分”都是60進制的,而且是從“00”到“59”,可以使用十進制的74LS160來實現這個功能。首先將兩片74LS160通過串行進位方式接成百進制計數器,即分別將“秒”和“分”個位的進位輸出信號經非門作為“秒”和“分”十位的計數輸入脈沖。當計數器從全0狀態開始計數,計入59個脈沖時,經與非門譯碼產生低電平信號立刻將兩片74LS160同時置零,于是便得到了60進制的計數器。74160的邏輯功能示意圖、引腳圖及功能表如下所示。
圖5 a)74160邏輯功能示意圖
b)74160引腳圖
圖6 74160邏輯功能表 ②“時”電路 根據題目要求,“時”是24進制的,而且是從“00”到“23”,可以使用十進制的74LS160來實現這個功能。首先將兩片74LS160通過串行進位方式接成百進制計數器,當計數器從全0狀態開始計數,計入23個脈沖時,經與非門譯碼產生低電平信號立刻將兩片74LS160同時置零,于是便得到了24進制的計數器。(3)譯碼驅動電路
計數器實現了對時間的累計以8421BCD碼形式輸出,選用顯示譯碼電路將計數器的輸出數碼轉換為數碼顯示器件所需要的輸出邏輯和一定的電流,選用CD4511作為顯示譯碼電路,選用LED數碼管作為顯示單元電路。由于CD4511是輸出高電平有效,所以選用七段共陰極LED數碼管。若將“秒”、“分”、“時”計數器的每位輸出分別接到相應七段譯碼器的輸入端,便可進行不同數字的顯示。“秒”用數碼管顯示如圖7所示。
圖7 “秒”的譯碼及驅動顯示電路圖(4)校時電路
數字種啟動后,每當數字鐘顯示與實際時間不符合,需要根據標準時間進行校時。通常,校正時間的方法是:首先截斷正常的計數通路,然后再進行人工觸發計數或將頻率較高的方波信號加到需要校正的計數單元的輸入端,校正好后,再轉入正常計時狀態即可。校“秒”時,采用等待校時。校“分”、“時”的原理比較簡單,采用加速校時。對校時電路的要求是 : 1.在小時校正時不影響分和秒的正常計數。2.在分校正時不影響秒和小時的正常計數。當開關斷開時,因為校正信號和0相與的輸出為0,而開關的另一端接高電平,正常輸入信號可以順利通過與或門,故校時電路處于正常計時狀態;當開關閉合時,情況正好與上述相反,這時校時電路處于校時狀態。與非門可選74LS00,非門則可用與非門2個輸入端并接來代替從而節省芯片。校時電路圖見圖8。
校時電路圖(5)整點報時電路
一般時鐘都應具備整點報時電路功能,即在時間出現整點前數秒內,數字鐘會自動報時,以示提醒。其作用方式是發出連續的或有節奏的音頻聲波。當時間在59分50秒到59分59秒期間時,分十位、分個位和秒十位均保持不變,分別為5、9和5,因此可將分計數器十位的QC和QA、個位的QD和QA及秒計數器十位的QC 和QA相與。電路在整點前6秒鐘內開始整點報時,即當時間在59分54秒到59分59秒期間時,報時電路產生報時控制信號,控制小喇叭產生低音;當時間為00分00秒時,報時電路產生報時控制信號,控制小喇叭產生高音。
5、軟件調試方法與運行結果說明(1)軟件調試方法
由于仿真時晶振不能正常工作,所以通過外接1KHz方波信號來調試電路。“時”“分”“秒”電路的調試:“時”為24進制(從“00”到“23”),“分”和“秒”都為60進制(從“00”到“59”)。校時電路的調試:可以通過校時、校分電路的開關來校對時間,并判斷電路的“時”“分”“秒”的進制是否正確。開關斷開時電路處于正常工作狀態,開關閉合時電路處于校時、校分狀態。(2)運行結果說明
數碼管的各部分可以正確顯示,電路的“時”為24進制(從“00”到“23”),“分”和“秒”都為60進制(從“00”到“59”)。開關斷開時電路處于正常工作狀態,開關閉合時電路處于校時、校分狀態,通過控制開關及輸入信號可以達到校時功能。
三、設計體會與建議 1.設計體會
我覺得此次的數字鐘設計實驗,電路原理相對來比較簡單,但電路圖比較復雜,所用芯片比較多,相應的連線也多,這就給焊接電路增加了較大的難度。不過通過此次實驗,使我更進一步地熟悉了芯片的結構,掌握了實驗中所用各芯片的工作原理和其具體的使用方法,同時還接觸到了一些新認識的芯片,增長了見識。這次課程設計是一次難得的鍛煉機會,讓我們能夠充分運用所學過的理論知識和自己動手實際操作的能力,另外還讓我們學習查找資料的方法,以及自己設計電路、焊接電路、分析解決電路存在的問題的能力。這對于我來說是很好的提高,填補了平日理論學習后實踐方面的空白。參考文獻
[1] 閻石.數字電子技術基礎[M].北京:高等教育出版社,2001年
[2] 楊素行.模擬電子技術基礎簡明教程[M].北京:高等教育出版社,2005年 [3]康華光.電子技術基礎[M].北京:高等教育出版社,1999年 [4]彭華林等編.數字電子技術[M].長沙:湖南大學出版社,2004年 [5]金唯香等編.電子測試技術[M].長沙:湖南大學出版社,2004年
第五篇:EDA課程設計——多功能數字鐘
哈爾濱工業大學(威海)電子學課程設計報告
帶有整點報時的數字鐘設計與制作
姓名: 蔣棟棟 班級: 0802503 學號: 080250331 指導教師:
井巖
目錄
一、課程設計的性質、目的和任務????????????3
二、課程設計基本要求?????????????????3
三、設計課題要求???????????????????3
四、課程設計所需要儀器????????????????4
五、設計步驟?????????????????????4
1、整體設計框圖???????????????????4
2、各個模塊的設計與仿真???????????????4
2.1分頻模塊???????????????????????4
2.2計數器模塊??????????????????????6
2.3控制模塊??????????????????????10
2.4數碼管分配?????????????????????13
2.5顯示模塊??????????????????????14
2.6報時模塊??????????????????????16
六、調試中遇到的問題及解決的方法???????????18
七、心得體會?????????????????????18
一、課程設計的性質、目的和任務
創新精神和實踐能力二者之中,實踐能力是基礎和根本。這是由于創新基于實踐、源于實踐,實踐出真知,實踐檢驗真理。實踐活動是創新的源泉,也是人才成長的必由之路。
通過課程設計的鍛煉,要求學生掌握電路的一般設計方法,具備初步的獨立設計能力,提高綜合運用所學的理論知識獨立分析和解決問題的能力,培養學生的創新精神。
二、課程設計基本要求
掌握現代大規模集成數字邏輯電路的應用設計方法,進一步掌握電子儀器的正確使用方法,以及掌握利用計算機進行電子設計自動化(EDA)的基本方法。
三、設計課題要求
(1)構造一個24小時制的數字鐘。要求能顯示時、分、秒。(2)要求時、分、秒能各自獨立的進行調整。
(3)能利用喇叭作整點報時。從59分50秒時開始報時,每隔一秒報時一秒,到達00分00秒時,整點報時。整點報時聲的頻率應與其它的報時聲頻有明顯區別。
#設計提示(僅供參考):(1)對頻率輸入的考慮
數字鐘內所需的時鐘頻率有:基準時鐘應為周期一秒的標準信號。報時頻率可選用1KHz和2KHz左右(兩種頻率相差八度音,即頻率相差一倍)。另外,為防止按鍵反跳、抖動,微動開關輸入應采用寄存器輸入形式,其時鐘應為幾十赫茲。
(2)計時部分計數器設計的考慮 分、秒計數器均為模60計數器。
小時計數為模24計數器,同理可建一個24進制計數器的模塊。(3)校時設計的考慮
數字鐘校準有3個控制鍵:時校準、分校準和秒校準。
微動開關不工作,計數器正常工作。按下微動開關后,計數器以8Hz頻率連續計數(若只按一下,則計數器增加一位),可調用元件庫中的邏輯門建一個控制按鍵的模塊,即建立開關去抖動電路(見書70頁)。
(4)報時設計的考慮
可以將高頻時鐘分頻得到約2KHz和1KHz的音頻,作為數字鐘的報時頻率。當電子鐘顯示XX:59:50時,數字鐘開始報時“DO“,持續一秒,而且每隔一秒報一下,直至顯示XX:00:00時報“DI”,持續一秒后停止。最后輸出至喇叭。應調用元件庫中的邏輯門建一個控制報時的模塊。
(5)建一個七段譯碼的模塊
因在系統可編程器件實驗箱上的數碼管沒有經過譯碼,故要用AHDL語言寫一個七段譯碼的模塊,且應考慮數碼管為共陽極。數碼管上的點(D2、D4、D6)應置Vcc。
四、課程設計所需要儀器
1、計算機一臺
2、quartusⅡ軟件
3、FPGA開發板
五、設計步驟
1、模塊介紹
(1)分頻模塊:產生1Hz、1KHz、2KHz頻率(2)計數器模塊:生成60進制、24進制計數器(3)控制模塊:按鍵控制、按鍵消抖
(4)顯示模塊:7段數碼管顯示器,分別顯示小時、分鐘、秒(5)報時模塊:進行整點報時
2、各個模塊的設計與仿真
2.1分頻模塊
CLK晶振頻率50MHZ,分成2KHZ,1KHZ,1HZ的信號。基準1HZ信號作為時鐘計時的秒計數時鐘信號;分頻的1KHZ,2KHZ信號用于報時電路的不同聲訊。
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity fre is port(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre is signal data1khz,data2khz,data1hz : std_logic := '0';begin clk1hz <= data1hz;clk1khz <= data1khz;clk2khz <= data2khz;clk1khz_pro : process(clk)--產生1khz信號 variable cnt : integer range 0 to 24999;begin if clk'event and clk='1' then if cnt = 24999 then cnt := 0;data1khz <= not data1khz;else cnt := cnt + 1;end if;end if;end process clk1khz_pro;clk2khz_pro : process(clk)--variable cnt : integer range 0 to 12499;begin if clk'event and clk='1' then if cnt = 12499 then cnt := 0;data2khz <= not data2khz;else cnt := cnt + 1;end if;end if;end process clk2khz_pro;clk1hz_pro : process(data1khz)--variable cnt : integer range 0 to 499;begin if data1khz'event and data1khz='1' then if sel='0' then cnt:=0;else if cnt = 499 then cnt := 0;data1hz <= not data1hz;else cnt := cnt + 1;end if;end if;end if;end process clk1hz_pro;end beh;
輸入模塊電路圖:
產生2khz信號 產生1hz 信號 5 freclkclk1hzclk2khzinst selclk1khz2.2計數器模塊
由秒計數器,分計數器,時計數器組成了最基本的數字鐘計時電路,兩個六十進制計數器與二十四進制計數器組合構成。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;
entity shuzizhong is port(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0));end shuzizhong;architecture behav of shuzizhong is
signal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=“0000”;signal sout,mout,hout :std_logic :='0';begin--秒的60進制進制 counter_sec_l : process(clk_change,s_en)begin
sl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_regc;hh<=high_regc;6 if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then low_rega <= “0000”;else low_rega <= low_rega+'1';end if;end if;end if;end process counter_sec_l;counter_sec_h : process(clk_change,s_en,low_rega)begin if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then if high_rega =“0101”then high_rega <= “0000”;else high_rega <= high_rega+'1';end if;end if;end if;end if;end process counter_sec_h;sout <= '1' when low_rega=“1001” and high_rega=“0101” else '0';
----分鐘的60進制設置 counter_min_l : process(clk_change,m_en)begin if clk_change'event and clk_change='1' then if m_en='1' then if sout='1'or sel='0' then if low_regb=“1001” then low_regb <= “0000”;else low_regb <= low_regb+'1';end if;end if;end if;end if;end process counter_min_l;counter_min_h : process(clk_change,m_en,low_regb)begin if clk_change'event and clk_change='1' then 7 if sout='1'or sel='0' then if m_en='1' then if low_regb=“1001” then
if high_regb =“0101”then
high_regb <= “0000”;else high_regb <= high_regb+'1';end if;end if;end if;end if;end if;end process counter_min_h;mout <= '1' when low_regb=“1001” and high_regb=“0101”and sout='1' else '0';--小時的24進制設置 counter_hour_l : process(clk_change,h_en)begin if clk_change'event and clk_change='1' then if h_en='1' then if mout='1'or sel='0' then if low_regc=“1001”or hout='1' then low_regc <= “0000”;else low_regc <= low_regc+'1';end if;end if;end if;end if;end process counter_hour_l;counter_hour_h : process(clk_change,h_en,hout)begin if clk_change'event and clk_change='1' then if mout='1'or sel='0' then if h_en='1' then if hout='1' then high_regc<=“0000”;else if low_regc=“1001” then high_regc <= high_regc+'1';end if;end if;end if;8 end if;end if;end process counter_hour_h;hout <= '1' when low_regc=“0011” and high_regc=“0010” else '0';secout<=sout;minout<=mout;hourout<=hout;a<=high_regb&low_regb&high_rega&low_rega;end behav;
輸入模塊電路圖:
shuzizhongclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]a[15..0]inst
2.3控制模塊
分五個狀態0狀態正常計時,按下按鍵進入下一狀態開始調時模式1,按下按鍵進入調秒模式2,按下按鍵進入調分模式3,按下按鍵進入調小時模式4.按下按鍵恢復正常計時模式。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_press is port(set ,mode: in std_logic;clk1khz,clk1hz: in std_logic;secout,minout: in std_logic;clk_change,clk2hz_en:out std_logic;sel,s_ce,m_ce,h_ce:out std_logic;s_en,m_en,h_en:out std_logic);end key_press;architecture beh of key_press is 9 signal key1,key2:std_logic;signal sce_reg, mce_reg ,hce_reg:std_logic;signal ssl,ssen,mmen,hhen:std_logic;signal con : integer range 0 to 4 :=0;--按鍵按下(延時)begin
key_press2 : process(set,clk1khz)variable cnt :integer range 0 to 999;begin if set='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and set='0' then cnt :=cnt+1;key2 <= '1';else cnt:=cnt+1;key2 <= '0';end if;end if;else cnt:=0;key2<='0';end if;end process key_press2;key_press1 : process(mode,clk1khz)variable cnt :integer range 0 to 999;begin if mode='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and mode='0' then cnt :=cnt+1;key1 <= '1';else cnt:=cnt+1;key1 <= '0';end if;end if;else cnt:=0;key1<='0';end if;end process key_press1;count : process(key1,key2)begin if key1'event and key1='1' then if con=4 then con<=0;else con<=con+1;end if;end if;10 end process count;con_pro : process(con)begin case con is when 0 => ssl<='1';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';when 1 => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='1';when 2 => ssl<='0';sce_reg <= '1';ssen <='1';mce_reg <= '0';mmen <='0';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 3 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '1';mmen <='1';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 4 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '0';mmen <='0';hce_reg <= '1';hhen <='1';clk2hz_en <='1';when others => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';end case;end process con_pro;sel_pro : process(ssl)begin case ssl is when '0'=> s_ce<=sce_reg;m_ce<=mce_reg;h_ce<=hce_reg;clk_change<=key2;when '1'=> s_ce<=ssen;11 m_ce<=mmen;h_ce<=hhen;clk_change<=clk1hz;when others=> s_ce<=ssen;m_ce<=secout;h_ce<=minout;clk_change<=clk1hz;end case;end process sel_pro;sel<=ssl;s_en<=ssen;m_en<=mmen;h_en<=hhen;end beh;
輸入模塊電路圖: key_presssetclk_changemodeclk2hz_enclk1khzselclk1hzs_cesecoutm_ceminouth_ces_enm_enh_eninst
2.4數碼管分配
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity display is port(datain : in std_logic_vector(3 downto 0);dataout : out std_logic_vector(7 downto 0));end display;architecture duan of display is begin process(datain)begin case datain is 12 when “0000” => dataout <=“11000000”;--dp,g,f,e,d,c,b,a when “0001” => dataout <=“11111001”;when “0010” => dataout <=“10100100”;when “0011” => dataout <=“10110000”;when “0100” => dataout <=“10011001”;when “0101” => dataout <=“10010010”;when “0110” => dataout <=“10000010”;when “0111” => dataout <=“11111000”;when “1000” => dataout <=“10000000”;when “1001” => dataout <=“10010000”;when “1010” => dataout <=“10111111”;when “1011” => dataout <=“10000011”;when “1100” => dataout <=“10100111”;when “1101” => dataout <=“10100001”;when “1110” => dataout <=“10000110”;when “1111” => dataout <=“10001110”;when others => null;end case;end process;end;
輸入模塊電路圖:
displaydatain[3..0]dataout[7..0]inst
2.5顯示模塊
使用七段數碼管顯示小時、分鐘與秒
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity scan is port(clk1khz : in std_logic;sl,sh,ml,mh,hl,hh : in std_logic_vector(3 downto 0);clk2hz_en : in std_logic;s_ce,m_ce,h_ce : in std_logic;en_out : out std_logic_vector(7 downto 0);13 dataout : out std_logic_vector(3 downto 0));end scan;architecture beh of scan is signal cnt : integer range 0 to 7;signal en : std_logic_vector(7 downto 0);signal clk2hz : std_logic;signal h_ce_reg,m_ce_reg,s_ce_reg : std_logic;begin h_ce_reg <= not h_ce;m_ce_reg <= not m_ce;s_ce_reg <= not s_ce;cnt_pro : process(clk1khz)begin if clk1khz'event and clk1khz='1' then if cnt = 7 then cnt <= 0;else cnt <= cnt + 1;end if;end if;end process cnt_pro;clk2hz_pro :process(clk1khz)variable c : integer range 0 to 499 := 0;begin if clk1khz'event and clk1khz='1' then if clk2hz_en ='1' then if c =499 then c := 0;clk2hz <= not clk2hz;else c := c + 1;end if;else clk2hz <= '0';end if;end if;end process clk2hz_pro;scan_pro : process(cnt,sl,sh,ml,mh,hl,hh)begin case cnt is when 0 => dataout <= sl;en <= “11111110”;when 1 => dataout <= sh;en <= “11111101”;when 2 => dataout <= ml;en <= “11110111”;when 3 => dataout <= mh;en <= “11101111”;when 4 => dataout <= hl;en <= “10111111”;14 when 5 => dataout <= hh;en <= “01111111”;when 6 => dataout <= “1010”;en <= “11111011”;when 7 => dataout <= “1010”;en <= “11011111”;when others => null;end case;end process scan_pro;
en_out <= en or((clk2hz & clk2hz)or(h_ce_reg & h_ce_reg))& clk2hz &((clk2hz & clk2hz)or(m_ce_reg & m_ce_reg))& clk2hz &((clk2hz & clk2hz)or(s_ce_reg & s_ce_reg));end beh;
輸入模塊電路圖:
scanclk1khzen_out[7..0]sl[3..0]dataout[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]clk2hz_ens_cem_ceh_ceinst
2.6報時模塊
利用蜂鳴器進行整點報時
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;--整點報時 entity baoshi is port(clk1khz,clk2khz : in std_logic;a:in std_logic_vector(15 downto 0);sel:in std_logic;bell:out std_logic);end baoshi;architecture zhong of baoshi is signal c1,ring:std_logic;begin ring_bell :process(clk1khz,clk2khz)15 begin case a is when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk2khz;when “***0” => c1<=clk2khz;when others => c1<='0';end case;end process ring_bell;
bs: process(c1)begin if sel='1' then if c1='1' then ring<='0';else ring<='1';end if;end if;end process bs;bell<=ring;
end zhong;
輸入模塊電路圖:
baoshiclk1khzbellclk2khza[15..0]selinst
整體模塊電路圖
displayshuzizhongs_enm_enh_enselclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]setmodefreclkINPUTVCCINPUTVCCdata[3..0]datain[3..0]secoutminoutinst1scanclk1khzclk1khzsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]a[15..0]dataout[7..0]OUTPUTdataout[7..0]en_out[7..0]dataout[3..0]OUTPUTen_out[7..0]data[3..0]key_presssetclk1khzmodeclk1khzclk1hzsecoutminoutclk_changeclk2hz_ensels_cem_ceh_ces_enm_enh_eninst6s_enm_enh_enselinst7a[15..0]INPUTVCChh[3..0]clk2hz_ens_cem_ceh_ceinst4baoshiclk1khzclk2khza[15..0]selclk1khzbellclk2khza[15..0]sel++selclkclk1hzselclk1khzclk2khzinst2clk1khzclk2khzsecoutminoutOUTPUTbellinst
六、調試中遇到的問題及解決的方法:
1、編程時,經常導致語法錯誤,如:“;”沒有寫上,變量類型沒有預先標明,前后變量名字由于缺少一個或多一個字母而導致出錯。解決辦法:對照錯誤,認真檢查程序,看哪個地方的標點,變量沒有寫上或標明。
2、進行編譯或波形仿真時,經常得到的不是預想中的結果。
解決辦法:將需要編譯或進行仿真的實體文件置頂,經檢錯無誤后,進行波形仿真,在仿真之前需要合理設置仿真結束時間和信號周期。
3、在控制時間的顯示的時候,由于變量太多多發現不能完全的控制住變量,導致顯示的時候出現了亂碼,數碼管顯示不正常 解決辦法:減少變量,仔細推敲,合理命名。
七、心得體會
一個多星期的課程設計讓我受益匪淺,也讓我真正明白理論與實踐相結合的重要性。通過具體實踐才能讓自己清楚哪些知識已經掌握,哪些知識仍需鞏固加強。與此同時,我也對EDA以及VHDL語言有了進一步了解,對于其結構、語法、功能等認識不少。當然,我目前所做的還僅僅只是一些基本操作,要想真正將其融會貫通還需要今后更多的學習與實踐。雖然只是一個小設計,我卻也從中學到了不少設計流程和一些相關問題。設計是一個十分嚴謹的過程,容不得隨意和馬虎。要想快速而高效地完成一項設計,必須先有一個清晰明了的設計思路,設想好一個整體框架,然后在此基礎上,逐漸將各個部分功能進行完善。在設計的過程中,也曾遇到不少困難,但正所謂堅持就是勝利,要想取得成功,必須要有努力付出,這樣所取得的結果才更有意義。