VerilogHDL簡單計算器設計說明書_第1頁
VerilogHDL簡單計算器設計說明書_第2頁
VerilogHDL簡單計算器設計說明書_第3頁
VerilogHDL簡單計算器設計說明書_第4頁
VerilogHDL簡單計算器設計說明書_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/目錄TOC\o"1-3"\u第一章設計目的及任務要求11.1設計目的11.2設計任務11.3課設要求1第二章設計思路22.1設計總體框圖22.2設計原理22.2.1計算其原理22.2.2數碼顯示原理22.2.3八位數碼管掃描的原理3第三章設計源程序及分析43.1計算器模塊43.1.1計算器源程序43.1.2計算器程序分析43.2數碼管顯示部分53.2.1數碼管顯示源程序53.2.2數碼管顯示程序分析53.3循環(huán)掃描模塊63.3.1循環(huán)掃描程序63.3.2循環(huán)程序分析63.4總程序及其分析7第四章時序仿真和結果驗證104.1計算器時序仿真及其分析104.2數碼管時序仿真及分析104.3總體時序仿真圖104.4結果驗證11第五章心得體會12第一章設計目的及任務要求1.1設計目的〔1進一步加強熟練EDA基礎知識?!?熟練掌握Quartus6.0軟件的使用以及用該軟件編程和仿真的全過程。〔3培養(yǎng)獨立思考問題,解決問題的能力以及查閱相關資料和資料的正確使用能力,為明年的畢業(yè)設計打下良好的設計基礎。1.2設計任務設計一個簡單計算器,輸入為8位二進制數,分別用兩位數碼管顯示,輸出的計算結果為16位二進制數,并用四位數碼管顯示,能夠實現+、-、*、/四種運算,其中除法的結果顯示分為商和余數兩部分,分別用兩位數碼管顯示。1.3課設要求〔1說明題目的設計原理和思路、采用方法及設計流程?!?系統(tǒng)框圖、Verilog語言設計程序或原理圖?!?對各子模塊的功能以及各子模塊之間的關系做較詳細的描述?!?詳細說明調試方法和調試過程?!?說明測試結果:仿真時序圖和結果顯示圖,并對其進行說明和分析。第二章設計思路2.1設計總體框圖有分析可知,本次課程設計可以分成五個木塊來實現相應的功能,分別是輸入模塊,計算模塊,掃描模塊,輸出模塊以及顯示模塊。圖一設計總體框圖2.2設計原理2.2.1計算其原理Verilog語言中可直接用運算符+、-、*、/、%來實現四則運算,系統(tǒng)會根據程序自動綜合出相應的計算器。分別是加法器模塊,減法器模塊,乘法器模塊和除法器模塊,當程序變得正確的話則各個程序會按照一定的步驟一步步的往下執(zhí)行的。數碼顯示原理7段數碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進制BCD碼譯碼,然而數字系統(tǒng)中的數據處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數的譯碼顯示,最方便的方法就是利用譯碼程序在FPGA/CPLD中來實現。設計7段譯碼器,輸出信號LED7S的7位分別接如圖一數碼管的7個段,高位在左,低位在右。例如當LED7S輸出為"1101101”時,數碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1;接有高電平的段發(fā)亮,于是數碼管顯示"5”。注意,這里沒有考慮表示小數點的發(fā)光管,如果要考慮,需要增加段h圖二共陰極七段數碼管2.2.3八位數碼管掃描的原理圖三所示的是8位數碼掃描顯示電路,其中每個數碼管的7個段:g、f、e、d、c、b、a都分別連在一起,8個數碼管分別由8個選通信號k1、k2、…k8來選擇。被選通的數碼管顯示數據,其余關閉。如在某一時刻,k3為高電平,其余選通信號為低電平,這時僅k3對應的數碼管顯示來自段信號端的數據,而其它7個數碼管呈現關閉狀態(tài)。根據這種電路狀況,如果希望在8個數碼管顯示希望的數據,就必須使得8個選通信號k1、k2、…k8分別被單獨選通,并在此同時,在段信號輸入口加上希望在該對應數碼管上顯示的數據,于是隨著選通信號的掃變,就能實現掃描顯示的目的。圖三8位數碼管顯示驅動電路掃描電路通過可調時鐘輸出片選地址SEL[2..0]。由SEL[2..0]通過3-8譯碼器決定了8位中的哪一位顯示,SEL[2..0]變化的快慢決定了掃描頻率f掃描的快慢。掃描頻率大于人眼的分辨率時,呈現出八個數碼管同時點亮。第三章設計源程序及分析3.1計算器模塊3.1.1計算器源程序mdulejsq<a,b,c,out>;input[7:0]a,b;input[1:0]c;otput[15:0]out;reg[15:0]outreg[7:0]out1,out2;always@<a,b,c,out>case<c>2'b00:out=a+b;2'b01:out=a-b;2'b10:out=a*b;2'b11:beginout1=a/b;out2=a%b;out={out1,out2};enddefault:;endcaseendmodule3.1.2計算器程序分析該模塊是本次設計的核心部分,用于實現四則運算,兩位八位二進制數a、b作為待計算的輸入,并輸入兩位二進制數c作為計算功能選擇,00代表加法運算、01代表減法運算、10代表乘法運算、11代表除法運算。輸出16位二進制數out位運算結果。并在總體設計中把輸入、輸出端接到數碼管上。3.2數碼管顯示部分3.2.1數碼管顯示源程序moduleDECL7S<A,LED7S>;input[3:0]A;output[6:0]LED7S;reg[6:0]LED7S;always@<A>begincase<A>4'b0000:LED7S<=7'b0111111;4'b0001:LED7S<=7'b0000110;4'b0010:LED7S<=7'b1011011;4'b0011:LED7S<=7'b1001111;4'b0100:LED7S<=7'b1100110;4'b0101:LED7S<=7'b1101101;4'b0110:LED7S<=7'b1111101;4'b0111:LED7S<=7'b0000111;4'b1000:LED7S<=7'b1111111;4'b1001:LED7S<=7'b1101111;4'b1010:LED7S<=7'b1110111;4'b1011:LED7S<=7'b1111100;4'b1100:LED7S<=7'b0111001;4'b1101:LED7S<=7'b1011110;4'b1110:LED7S<=7'b1111001;4'b1111:LED7S<=7'b1110001;endcaseendendmodule3.2.2數碼管顯示程序分析該模塊是整個設計中的顯示部分,是一個編碼器組合邏輯設計,每個數碼管可顯示十六進制0至F,對應4位二進制數,因此輸入端a、b分別用兩個數碼管顯示,輸出out用四個數碼管顯示,該設計中需要八個同樣的數碼管顯示器,即。此模塊將在總程序中被調用八次。3.3循環(huán)掃描模塊循環(huán)掃描程序modulexhsm<clk,rst,count,Dout>;inputclk,rst;output[6:0]Dout;output[2:0]count;reg[6:0]Dout;reg[2:0]count;always@<posedgeclkornegedgerst>beginif<!rst>count<=3'b000;elseif<count==3'b111>count<=3'b000;elsecount<=count+3'b001;endalways@<posedgeclk>begincase<count>3'b000:Dout<=LED7S1;3'b001:Dout<=LED7S2;3'b010:Dout<=LED7S3;3'b011:Dout<=LED7S4;3'b100:Dout<=LED7S5;3'b101:Dout<=LED7S6;3'b110:Dout<=LED7S7;3'b111:Dout<=LED7S8;endcaseendendmodule3.3.2循環(huán)程序分析該模塊是一個循環(huán)計數器,在時鐘和復位信號的控制下,從000—111循環(huán)計數分別控制八個數碼管循環(huán)點亮,由于時鐘的頻率比較快,大于人眼的分辨率,所以顯示出八個數碼管同時點亮,即同時顯示計算器的輸入、輸出。3.4總程序及其分析modulejsq9<a,b,c,Dout,count,clk,rst>;input[7:0]a,b;inputclk,rst;input[1:0]c;output[6:0]Dout;output[2:0]count;reg[6:0]Dout;reg[2:0]count;reg[15:0]out;reg[6:0]LED7S1,LED7S2,LED7S3,LED7S4,LED7S5,LED7S6,LED7S7,LED7S8;DECL7Su1<.A<a[7:4]>,.LED7S<LED7S1>>;DECL7Su2<.A<a[3:0]>,.LED7S<LED7S2>>;DECL7Su3<.A<b[7:4]>,.LED7S<LED7S3>>;DECL7Su4<.A<b[3:0]>,.LED7S<LED7S4>>;DECL7Su5<.A<out[15:12]>,.LED7S<LED7S5>>;DECL7Su6<.A<out[11:8]>,.LED7S<LED7S6>>;DECL7Su7<.A<out[7:4]>,.LED7S<LED7S7>>;DECL7Su8<.A<out[3:0]>,.LED7S<LED7S8>>;reg[7:0]out1,out2;always@<a,b,c,Dout,count,clk,rst>case<c>2'b00:out=a+b;2'b01:out=a-b;2'b10:out=a*b;2'b11:beginout1=a/b;out2=a%b;out={out1,out2};enddefault:;endcasealways@<posedgeclkornegedgerst>beginif<!rst>count<=3'b000;elseif<count==3'b111>count<=3'b000;elsecount<=count+3'b001;endalways@<posedgeclk>begincase<count>3'b000:Dout<=LED7S1;3'b001:Dout<=LED7S2;3'b010:Dout<=LED7S3;3'b011:Dout<=LED7S4;3'b100:Dout<=LED7S5;3'b101:Dout<=LED7S6;3'b110:Dout<=LED7S7;3'b111:Dout<=LED7S8;endcaseendendmodulemoduleDECL7S<A,LED7S>;input[3:0]A;output[6:0]LED7S;reg[6:0]LED7S;always@<A>begincase<A>4'b0000:LED7S<=7'b0111111;4'b0001:LED7S<=7'b0000110;4'b0010:LED7S<=7'b1011011;4'b0011:LED7S<=7'b1001111;4'b0100:LED7S<=7'b1100110;4'b0101:LED7S<=7'b1101101;4'b0110:LED7S<=7'b1111101;4'b0111:LED7S<=7'b0000111;4'b1000:LED7S<=7'b1111111;4'b1001:LED7S<=7'b1101111;4'b1010:LED7S<=7'b1110111;4'b1011:LED7S<=7'b1111100;4'b1100:LED7S<=7'b0111001;4'b1101:LED7S<=7'b1011110;4'b1110:LED7S<=7'b1111001;4'b1111:LED7S<=7'b1110001;endcaseendendmodule該程序是本次設計的最終程序,主要是將以上三個模塊聯(lián)系起來。其中反復調用數碼管顯示模塊,將其與計算器模塊相連。其輸入A在u1中與計算器輸入a的高四位相連,輸出LED7S與LED7S1相連,在硬件上實現用一個數碼管顯示輸入a的高四位,以此類推u2模塊實現用數碼管顯示a的低四位,u3對應b的高四位,u4對應b的第四位,u5對應out的高四位,u6對應out次高四位,u7對應out的次低四位,u8對應out的低四位。循環(huán)計數器模塊,與八個數碼管顯示模塊相連,當輸出count為某一確定時,將不同數碼管的輸出賦給程序的總輸出Dout點亮相應的數碼管,例如當count=3‘b000時,LED7S1賦給Dout,此時試驗箱是對應輸入a的高四位的數碼管被點亮。通過以上連接該程序實現了輸入為8位二進制數,分別用兩位數碼管顯示,輸出的計算結果為16位二進制數,并用四位數碼管顯示,能夠實現+、-、*、/四種運算,其中除法的結果顯示分為商和余數兩部分,分別用兩位數碼管顯示的設計要求。第四章時序仿真和結果驗證4.1計算器時序仿真及其分析圖四計算器時序仿真圖如圖四所示為計算器的實序仿真圖,當輸入a為00000001、b為00000001、c為01時輸出out為0000000000000000即1-1=0;當輸入a=00000010,b=00000010,c=10時輸出out=0000000000000100.即2*2=4,當輸入a=00000011,b=00000011,c=11時輸出out1=00000001,out2=00000000,即3/3=1余數為0當輸入a=00000100,b=00000100,c=00時輸出out=00001000即4+4=8.經此驗證分析證明此計算器計算準確無誤。模塊設計成功。4.2數碼管時序仿真及分析圖五數碼管時序仿真圖如圖五所示為數碼管顯示器的時序仿真波形,當輸入為0011時七段數碼管中abcdefg的高低電平分別為1111001即abcdg點亮顯示數字3,當輸入為0000時七段數碼管對應顯示1111110即abcdef被點亮顯示數字0.經驗證其他數字顯示均正確,七段數碼管顯示器模塊設計仿真成功。4.3總體時序仿真圖圖六所示為整個設計的仿真波形圖,對其分析如下,首先分析最下邊三行的循環(huán)計數器部分,當復位信號為0時count計為000當復位為1每當時鐘上升沿來臨時count加1,計滿后恢復000繼續(xù)循環(huán),此部分驗證成功。接下來看控制顯示部分,輸入a=00000000,b=00000000,c=00,當count=000時顯示a的高四位0000,Dout=01111111,顯示數字0;正確。當count=001時顯示a的低四位0000,Dout=01111111,顯示數字0,正確。經驗證,其他數碼管顯示與相應的輸入也是一一對應,因此時序仿真成功。圖六總體時序仿真圖4.4結果驗證如下圖所示在試驗箱中輸入a=00000010,b=000011

溫馨提示

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

評論

0/150

提交評論