EDA課程設(shè)計-信號發(fā)生器與數(shù)字鐘設(shè)計_第1頁
EDA課程設(shè)計-信號發(fā)生器與數(shù)字鐘設(shè)計_第2頁
EDA課程設(shè)計-信號發(fā)生器與數(shù)字鐘設(shè)計_第3頁
EDA課程設(shè)計-信號發(fā)生器與數(shù)字鐘設(shè)計_第4頁
EDA課程設(shè)計-信號發(fā)生器與數(shù)字鐘設(shè)計_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、EDA綜合設(shè)計報告EDA綜合設(shè)計報告題目:信號發(fā)生器與數(shù)字鐘設(shè)計學(xué)院:電氣信息學(xué)院 專業(yè):通信工程 姓名: 學(xué)號: 指導(dǎo)老師:汪敏 第一部分:信號發(fā)生器一、設(shè)計任務(wù)要求設(shè)計一個多功能信號發(fā)生器,根據(jù)輸入信號的選擇可以輸出遞增鋸齒波,遞減鋸齒波,三角波,階梯波,方波和正弦波六種信號,并能實現(xiàn)頻率選擇和幅度調(diào)節(jié),信號發(fā)生器的控制模塊可以用數(shù)據(jù)選擇器實現(xiàn),六種信號的選擇可以用6選1數(shù)據(jù)選擇器實現(xiàn)。二、方案設(shè)計(一)設(shè)計思路1.利用VHDL語言,設(shè)計分頻器,實現(xiàn)2分頻,4分頻,8分頻及16分頻,實現(xiàn)頻率選擇功能,生成模塊。與利用數(shù)據(jù)選擇器原理設(shè)計的頻率選擇器模塊相連,實現(xiàn)頻率選擇輸出。2.利用VHDL

2、語言,分別實現(xiàn)六種信號(遞增/遞減鋸齒波,三角波,階梯波,方波和正弦波)的輸出,生成模塊。3.將設(shè)計的各功能模塊按要求連接,分配引腳接口,連接實驗箱,進(jìn)行硬件測試,驗證實現(xiàn)功能。(二)程序流程 Clk 輸入 六種 波形 輸出 時鐘 頻率 波形 波形 幅度 選擇輸入 選擇 模塊 選擇 調(diào)節(jié) 波形 (三)設(shè)計軟件Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計流程外,提供了完善的用戶圖形界面設(shè)計方式。具有運行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶

3、可以充分利用成熟的模塊,簡化了設(shè)計的復(fù)雜性、加快了設(shè)計速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計流程的各個階段使用熟悉的第三方EDA工具。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設(shè)計、嵌入式軟件開發(fā)、可編程邏輯設(shè)計于一體,是一種綜合性的開發(fā)平臺。Quartus II提供了完全集成且與電路結(jié)構(gòu)無關(guān)的開發(fā)包環(huán)境,具有數(shù)字邏輯設(shè)計的全部特性。三、硬件設(shè)計(一)分頻器 分頻器的功能是:利用對時鐘上升沿計數(shù),從而實現(xiàn)可以輸出二分頻,四分頻,八分

4、頻及十六分頻模塊,分頻器模塊是為了實現(xiàn)信號發(fā)生器的頻率選擇功能。在VHDL編程中,設(shè)置一個4位標(biāo)準(zhǔn)邏輯矢量,并循環(huán)計數(shù),分別輸出它的每一位,即實現(xiàn)了分頻功能。生成的模塊如圖3-1示。圖3-1 利用波形仿真工具,生成改分頻器的波形圖,如下圖3-2示,該編程實現(xiàn)了分頻功能。圖3-2(二)頻率選擇器 頻率選擇器利用四選一數(shù)據(jù)選擇器原理,與分頻器結(jié)合實現(xiàn)各種分頻的頻率選擇輸出,接入各個信號的CLK輸入接口。四選一數(shù)據(jù)選擇器有四種實現(xiàn)方式:if語句,case語句,條件信號賦值語句及選擇信號賦值語句。本次設(shè)計采用條件信號賦值語句。s1,s2為輸出選擇端,q輸出選擇的頻率,生成的模塊如圖3-3示。圖3-3利

5、用波形仿真工具,生成的頻率選擇器波形如圖3-4示。圖3-4(三)輸出選擇模塊輸出選擇模塊與頻率選擇模塊原理一樣,本次設(shè)計實現(xiàn)六選一波形發(fā)生器,故輸出選擇模塊為六選一數(shù)據(jù)選擇器,利用CASE語句實現(xiàn)波形選擇輸出,設(shè)置sel位三位標(biāo)準(zhǔn)邏輯矢量,超出范圍case選擇指向null。且case選擇語句必須有others。生成模塊如圖3-5示。圖3-5(四)調(diào)幅模塊MegaWizard Plug-In Manager工具提供了豐富的庫函數(shù),這些庫函數(shù)專門針對Altera公司的器件進(jìn)行優(yōu)化,電路結(jié)構(gòu)簡單,并大大減少了設(shè)計者的工作量。通過MegaWizard Plug-In Manager工具的向?qū)?,設(shè)計者可

6、以利用Quartus II提供的庫函數(shù)自定義功能宏塊,并設(shè)置模塊參數(shù)和可選端口數(shù)值。調(diào)幅模塊利用該庫函數(shù)中的lpm_divide(除法器模塊),通過利用除法器模塊將輸出選擇模塊中的輸出值除以denom中設(shè)置的輸入值,從而實現(xiàn)調(diào)幅功能。生成模塊如圖3-6示。圖3-6(五)各信號模塊1.遞增鋸齒波設(shè)置clk及reset兩個標(biāo)準(zhǔn)邏輯位輸入端,一個8位標(biāo)準(zhǔn)邏輯矢量q輸出,具有異步復(fù)位功能,故進(jìn)程中敏感信號包括clk及reset,當(dāng)reset值為0時,輸出清零復(fù)位。檢測是否達(dá)到最大值“11111111”,未到則加一,實現(xiàn)遞增鋸齒波,到后清零重復(fù)循環(huán)。生成模塊如下圖3-7示。圖3-72.遞減鋸齒波與遞增鋸

7、齒波類似,具有相同的輸入輸出端,及異步復(fù)位功能。區(qū)別在于檢測是否達(dá)到最小值“00000000”,未到則減一,實現(xiàn)遞減鋸齒波,到后重置為“11111111”,循環(huán)重復(fù)實現(xiàn)鋸齒波輸出。生成模塊如下圖3-8示。圖3-83.三角波設(shè)置clk,reset兩個標(biāo)準(zhǔn)邏輯位輸入、一個8位標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)輸出、異步復(fù)位。reset為0時,輸出清零復(fù)位。設(shè)置局部變量a,當(dāng)a為0時,temp執(zhí)行連加計算,當(dāng)temp加至“11111111”時,a置為1;當(dāng)a為1時,temp執(zhí)行連減計算,當(dāng)temp減至“00000000”后,a置為0。依次循環(huán),實現(xiàn)三角波信號輸出。生成模塊如下圖3-9示。圖3-94.階梯波設(shè)置clk,

8、reset兩個標(biāo)準(zhǔn)邏輯位輸入、一個8位標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)輸出、異步復(fù)位。同樣reset為0時有效,輸出清零復(fù)位。檢測變量temp為“11111111”后置0,否則按16為步長增加temp的值,輸出階梯波信號,生成模塊如下圖3-10示。圖3-105.方波設(shè)置clk,reset兩個標(biāo)準(zhǔn)邏輯位輸入、一個8位標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)輸出、異步復(fù)位。檢測clk上升沿執(zhí)行temp加1計算,當(dāng)temp小于“10000000”時,a置1,否則a置0,當(dāng)a為1時,輸出q為“11111111”,a為0時,q為“00000000”。從而實現(xiàn)占空比為1:1的方波輸出。生成模塊如下圖3-11示。圖3-116.正弦波設(shè)置clk,r

9、eset兩個標(biāo)準(zhǔn)邏輯位輸入,一個0到255的整形實數(shù)輸出,異步復(fù)位。設(shè)置中間變量整形temp為0到63,檢測clk上升沿執(zhí)行temp加1計算,利用case語句,將temp對應(yīng)為正弦信號的x軸,分別將y軸的值賦給64個temp值相對應(yīng),從而輸出q,實現(xiàn)近似于正弦信號的輸出,生成模塊如圖3-12示。圖3-12四、波形仿真結(jié)果及分析(一)系統(tǒng)電路圖將上述模塊按功能邏輯連接,如下圖4-1示。具有一個clk時鐘輸入,一個reset復(fù)位信號輸入,一個(s1,s2)的頻率選擇端輸入,一個三位sel輸出信號選擇端輸入。一個8位的輸出信號輸出。圖4-1(二)管腳分配在前面選擇好一個合適的目標(biāo)器件(本次設(shè)計選擇為

10、EP2C35F672C8)完成設(shè)計的分析綜合過程,得到工程的數(shù)據(jù)文件以后,需要對設(shè)計中的輸入、輸出指定到具體的器件管腳號碼,指定管腳號碼稱為管腳分配或管腳鎖定。在菜單assignments中選擇pins項,點擊在下圖4-2中下面的表格右側(cè)的filter的下箭頭,選擇pins:all,將顯示本工程中所有的輸入輸出端口。選擇要分配的端口,在location對應(yīng)的行中雙擊鼠標(biāo)左鍵,將顯示芯片所有的引腳,選擇要使用的引腳即可。引腳鎖定后,必須再進(jìn)行一次編譯,將引腳信息編譯進(jìn)下載文件中。圖4-2(三)仿真波形創(chuàng)建波形仿真文件,選擇QUARTUSII軟件File>New,進(jìn)行新建,選擇Vector

11、Waveform File,點擊OK,則打開了一個空的波形編輯器。在波形編輯器窗口左邊的的端口名列表區(qū)點擊鼠標(biāo)右鍵,在彈出的對話框中選擇Insert Node or Bus命令,在彈出的對話框中,選擇需要的信號進(jìn)行仿真。這里,我們將分別對可選的6個信號波形進(jìn)行波形仿真。1.正弦波設(shè)置時鐘信號clk周期為10ns,reset為1。仿真波形如下圖4-3示。圖4-32.遞減鋸齒波設(shè)置同上,仿真波形如圖4-4示。圖4-53.遞增鋸齒波設(shè)置同上,仿真波形如圖4-6示。圖4-64.階梯波設(shè)置同上,仿真波形如圖4-7示。圖4-75.三角波設(shè)置同上,仿真波形如圖4-8示。圖4-86.方波設(shè)置同上,仿真波形如圖

12、4-9示。圖4-97.整體仿真1)頻率選擇為2分頻(s1,s2=0),調(diào)幅系數(shù)為1(denom=1),輸出選擇方波(sel=110),仿真波形如圖4-10示。圖4-102)頻率選擇為2分頻(s1,s2=0),調(diào)幅系數(shù)為2(denom=2,輸出幅值為原來二分之一),輸出選擇方波(sel=110),仿真波形如圖4-11示。圖4-113)頻率選擇為16分頻(s1,s2=1),調(diào)幅系數(shù)為2,輸出方波,仿真波形如圖4-12示。圖4-12五、硬件調(diào)試及結(jié)果(一)程序加載完成對期間的加載有兩種形式,一種是對目標(biāo)器件進(jìn)行加載文件,一種是對目標(biāo)器件的配置芯片進(jìn)行加載。1.使用下載電纜將PC機(jī)與實驗系統(tǒng)連接起來2

13、.選擇QUARTUSII 軟件的Tool>Programmer命令,進(jìn)行編譯器窗口,如下圖5-1示,如果沒有設(shè)置編程硬件,則編程硬件類型為No Hardware,需要對編程硬件進(jìn)行設(shè)置。點擊Hardware Setup編程硬件設(shè)置按鈕,將currently selected hardware設(shè)置為:USB-BlasterUSB-0。3.點擊start進(jìn)行文件加載,直到加載進(jìn)度變?yōu)?00%,文件成功加載完成。圖5-1(二)signaltap2Signaltap II嵌入邏輯分析儀集成到Quartus II設(shè)計軟件中,能夠捕獲和顯示可編程芯片(sopc)設(shè)計中實時信號的狀態(tài),這樣開發(fā)者就可以

14、在整個設(shè)計過程中以系統(tǒng)級的速度觀察硬件和軟件的交互作用。它支持多達(dá)1024個通道,采樣深度高達(dá)128Kb,每個分析儀均有10級觸發(fā)輸入/輸出,從而增加了采樣的精度。新建SignalTap II Logic Analyzer File文件,在instance中添加觀測節(jié)點(nodes),將要觀察的輸出信號q加入,設(shè)置clock為輸入的clk信號,采樣深度設(shè)為1k,重新編譯添加了signal tap的工程文件,編譯完后,在stp中點擊右上角的SOF Manager后面的.,選擇好剛剛生成的SOF文件,然后點擊program device。再點擊run analyzer運行該stp文件,觀察生成波形

15、。1.輸出正弦波設(shè)置sel=001,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-2示。圖5-22.輸出遞減鋸齒波設(shè)置sel=010,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-3示。圖5-33.輸出遞增鋸齒波設(shè)置sel=011,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-4示。 圖5-44.輸出階梯波設(shè)置sel=100,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-5示。圖5-55.輸出三角波設(shè)置sel=101,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形

16、如圖5-6示。圖5-66.輸出方波 1)設(shè)置sel=110,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-7示。圖5-72)設(shè)置sel=110,頻率(s1,s2)設(shè)為11,幅度調(diào)節(jié)(denom)設(shè)為001,波形如圖5-8示。圖5-83)設(shè)置sel=110,頻率(s1,s2)設(shè)為00,幅度調(diào)節(jié)(denom)設(shè)為010,波形如圖5-9示。圖5-9第二部分:數(shù)字鐘設(shè)計一、設(shè)計任務(wù)設(shè)計一個多功能數(shù)字鐘,要求顯示格式為:小時-分鐘-秒鐘,整點報時,報時時間為5秒,即從整點前5秒開始進(jìn)行報時提示,LED開始閃爍,過整點后,停止閃爍。系統(tǒng)時鐘選擇模塊的10Khz,要得到1Hz時鐘

17、信號,必須對系統(tǒng)時鐘進(jìn)行10,000次分頻。調(diào)整時間的按鍵模塊S1和S2,S1調(diào)節(jié)小時,每按下一次,小時增加一個小時,S2調(diào)整分鐘,每按下一次,分鐘增加一分鐘。另外用S3鍵作為系統(tǒng)時鐘復(fù)位,復(fù)位后全部顯示00-00-00。二、方案設(shè)計(一)設(shè)計思路1.要實現(xiàn)顯示時-分-秒、整點報時、小時和分鐘可調(diào)等功能,首先整個時鐘的工作應(yīng)該是在1Hz的信號作用下進(jìn)行,這樣每來一個時鐘的上升沿,秒加一,當(dāng)秒達(dá)到59,跳轉(zhuǎn)00,分鐘加一,當(dāng)分鐘增加到59,跳轉(zhuǎn)00,小時加一,當(dāng)小時增加到23,跳轉(zhuǎn)00,以此循環(huán)。2.在設(shè)計中,為了顯示方便,由于分鐘和秒鐘顯示范圍都是059,所以可以用一個3位的二進(jìn)制碼顯示十位,

18、用一個四位的二進(jìn)制碼顯示個位,對于小時因為它的范圍是從023,所以可以用一個2位的二進(jìn)制碼顯示十位,用4位二進(jìn)制碼顯示個位。3.設(shè)計中由于七段碼管是掃描的方式顯示,所以雖然時鐘信號需要的是1Hz,但掃描需要一個高頻信號,因此1Hz信號只能通過分頻的方式獲得。4.對于整點報時功能,主要是檢測分鐘與秒鐘是否達(dá)到59分55秒,到后LED燈開始閃爍。(二)程序流程23后清零到59到59Clk時鐘輸入 分頻實現(xiàn)1Hz 秒鐘計數(shù)加一 分鐘計數(shù)加一 小時計數(shù)加一5秒倒計時報警模塊數(shù)碼管動態(tài)掃描輸出三、軟件設(shè)計(一)分頻程序要實現(xiàn)1s的計時,需要對10k的系統(tǒng)時鐘實現(xiàn)10,000分頻,2的13次方為8192,

19、接近10000,故令一14位的標(biāo)準(zhǔn)邏輯矢量,當(dāng)小于10000時自加1,到后重賦初值。輸出第13位值,此值就為約等于1hz的時鐘信號。(二)計數(shù)程序設(shè)置6個整形信號,分別表示時分秒的個位與十位。Reset為異步復(fù)位信號,當(dāng)rst為0時,6個信號都清零復(fù)位。檢測1hz信號的上升沿,S1為調(diào)整小時按鈕,S2為調(diào)整分鐘按鈕,上升沿來后,若檢測到S1或S2按下(值為0),可以調(diào)整數(shù)字鐘起始值,又當(dāng)秒的個位自加到9后,十位加1,個位清零,當(dāng)秒十位到5,個位到9后,分的個位加1,秒的個位與十位同時清零,當(dāng)分的個位到9,后十位加一,個位清零,當(dāng)分十位到5,個位到9,小時的個位加一,當(dāng)小時的十位為2,個位為3,

20、同時分鐘為59,秒鐘為59后,小時清零。依次循環(huán),實現(xiàn)整個設(shè)置計數(shù)初值及計數(shù)的過程。通過多個if語句嵌套,來實現(xiàn)該計數(shù)功能。(三)報警程序判斷當(dāng)分鐘到59,秒鐘到54后,輸出四位標(biāo)準(zhǔn)邏輯矢量led_display, led_display外接四個LED,當(dāng)55秒時利用case語句依次輸出:1111,0111,0011,0001,1111 LED燈將出現(xiàn)相應(yīng)的閃爍效果,實現(xiàn)倒計時功能。四、波形仿真及分析新建波形文件,設(shè)置clk為10ns,rst為1,s1,s2部分為1,下圖4-1為輸出的波形圖,因display為循環(huán)掃描,輸出值不能明顯看出是數(shù)字鐘,此時我們需要進(jìn)行硬件測試,以便更好的觀察實驗現(xiàn)

21、象。圖4-1五、硬件調(diào)試及結(jié)果首先將管腳分配,具體分配如圖5-1示。圖5-1完成管腳分配后再進(jìn)行全編譯后,打開programmer如圖5-2示,將目標(biāo)文件加載到目標(biāo)板上,具體步驟如下:1.使用下載電纜將PC機(jī)與實驗系統(tǒng)連接起來2.選擇QUARTUSII 軟件的Tool>Programmer命令,進(jìn)行編譯器窗口,如下圖5-1示,如果沒有設(shè)置編程硬件,則編程硬件類型為No Hardware,需要對編程硬件進(jìn)行設(shè)置。點擊Hardware Setup編程硬件設(shè)置按鈕,將currently selected hardware設(shè)置為:USB-BlasterUSB-0。3.點擊start進(jìn)行文件加載,

22、直到加載進(jìn)度變?yōu)?00%,文件成功加載完成。圖5-2將數(shù)字信號源模塊的時鐘選擇為10Khz,觀察實驗箱如圖5-3示。圖5-3按下s2鍵,調(diào)節(jié)分鐘,如圖5-4示。圖5-4按下S1鍵,調(diào)節(jié)小時,如圖5-5示。圖5-5按下s3鍵開始,時分秒復(fù)位,如圖5-6示。圖5-6 當(dāng)59分55秒后LED開始倒計時,如圖5-7示。圖5-7示第三部分 總結(jié)一、結(jié)論本次課程設(shè)計完成了多波形信號發(fā)生器與數(shù)字鐘的設(shè)計,在設(shè)計信號發(fā)生器中,利用分頻器實現(xiàn)了信號的頻率調(diào)節(jié),利用除法器實現(xiàn)了信號的幅度調(diào)節(jié),再利用了數(shù)據(jù)選擇起實現(xiàn)了信號波形的選擇輸出,最終通過quartus ii 軟件中的signaltap ii觀察到了輸出波形

23、,驗證了實驗結(jié)果。在數(shù)字鐘的設(shè)計中,同樣利用分頻原理獲得了近似1hz的時鐘信號,設(shè)置S1,S2端進(jìn)行了時鐘的初值設(shè)定,設(shè)置了LED的整點報時功能,利用多層if嵌套實現(xiàn)時鐘的計時,進(jìn)位功能,最終將程序?qū)肽繕?biāo)板,通過實驗箱中的8位LED數(shù)碼管觀察到實驗結(jié)果。二、心得體會通過前期的EDA理論課學(xué)習(xí),對VHDL語言、對quartus ii 軟件有了初步的認(rèn)識與基礎(chǔ),所以在本次的課程設(shè)計中,將前期的學(xué)習(xí)內(nèi)容進(jìn)行了綜合,學(xué)習(xí)了quartus ii軟件中的signaltap ii 的使用方法,成功實現(xiàn)了波形的輸出,對整個EDA程序的設(shè)計流程有了更深的認(rèn)識,清楚了設(shè)計的總體步驟。參考文獻(xiàn)資料:1朱正偉等 E

24、DA技術(shù)及應(yīng)用 清華大學(xué)出版社 2014.72汪敏等, <EDA>課程實驗及綜合設(shè)計指導(dǎo)書 西南石油大學(xué) ,2013.63潘松等 EDA技術(shù)實用教程M 科學(xué)出版社,2005年第2版1-254章彬宏 EDA應(yīng)用技術(shù) 北京理工大學(xué)出版社,2007.75陳拓 使用SignalTap II邏輯分析儀調(diào)試FPGA,2008.7附錄一:信號發(fā)生器程序1.分頻器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity frequencyd

25、ivider is port(clk:in std_logic; clk_div2,clk_div4,clk_div8,clk_div16:out std_logic);end frequencydivider; architecture behave of frequencydivider is signal count:std_logic_vector(3 downto 0); begin process(clk) begin if clk'event and clk='1' then if count="1111" then count<

26、="0000" else count<=count+1; end if; end if; end process; clk_div2<=count(0); clk_div4<=count(1); clk_div8<=count(2); clk_div16<=count(3);end behave;2.頻率選擇library ieee;use ieee.std_logic_1164.all;entity switchfrequency is port( s1,s2:in std_logic; clk_div2,clk_div4,clk_div8,

27、clk_div16:in std_logic; q:out std_logic );end switchfrequency;architecture behave of switchfrequency is signal sel:std_logic_vector(1 downto 0); begin sel<=s1&s2; q<=clk_div2 when sel="00" else clk_div4 when sel="01" else clk_div8 when sel="10" else clk_div16;

28、 end behave;3.正弦波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sine is port(clk,reset:in std_logic; q:out integer range 0 to 255);end sine;architecture behave of sine isbegin process(clk,reset) variable tmp:integer range 0 to 63; begin if reset='0'then q<

29、=0; elsif clk'event and clk='1'then if tmp=63 then tmp:=0; else tmp:=tmp+1; end if; case tmp is when 00=>q<=255;when 01=>q<=254;when 02=>q<=252; when 03=>q<=249;when 04=>q<=245;when 05=>q<=239; when 06=>q<=233;when 07=>q<=225;when 08=>q&

30、lt;=217; when 09=>q<=207;when 10=>q<=197;when 11=>q<=186; when 12=>q<=174;when 13=>q<=162;when 14=>q<=150; when 15=>q<=137;when 16=>q<=124;when 17=>q<=112; when 18=>q<=99;when 19=>q<=87;when 20=>q<=75; when 21=>q<=64;when

31、22=>q<=53;when 23=>q<=43; when 24=>q<=34;when 25=>q<=26;when 26=>q<=19; when 27=>q<=13;when 28=>q<=8;when 29=>q<=4; when 30=>q<=1;when 31=>q<=0;when 32=>q<=0; when 33=>q<=1;when 34=>q<=4;when 35=>q<=8; when 36=>q&

32、lt;=13;when 37=>q<=19;when 38=>q<=26; when 39=>q<=34;when 40=>q<=43;when 41=>q<=53; when 42=>q<=64;when 43=>q<=75;when 44=>q<=87; when 45=>q<=99;when 46=>q<=112;when 47=>q<=124; when 48=>q<=137;when 49=>q<=150;when 50=>

33、q<=162; when 51=>q<=174;when 52=>q<=186;when 53=>q<=197; when 54=>q<=207;when 55=>q<=217;when 56=>q<=225; when 57=>q<=233;when 58=>q<=239;when 59=>q<=245; when 60=>q<=249;when 61=>q<=252;when 62=>q<=254; when 63=>q<=255

34、;when others=>null; end case; end if; end process;end;4.遞減鋸齒波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decreasesawtooth isport( clk:in std_logic; reset:in std_logic; q:out std_logic_vector(7 downto 0) ); end decreasesawtooth;architecture behave of decreasesaw

35、tooth isbegin process(clk,reset) variable temp:std_logic_vector(7 downto 0); begin if reset='0' then temp:="00000000" elsif clk'event and clk='1' then if temp="00000000" then temp:="11111111" else temp:=temp-1; end if; end if; q<=temp; end process

36、; end behave;5.遞增鋸齒波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity increasesawtooth isport( clk:in std_logic; reset:in std_logic; q:out std_logic_vector(7 downto 0) ); end increasesawtooth;architecture behave of increasesawtooth isbegin process(clk,reset) variable te

37、mp:std_logic_vector(7 downto 0); begin if reset='0' then temp:="00000000" elsif clk'event and clk='1' then if temp="11111111" then temp:="00000000" else temp:=temp+1; end if; end if; q<=temp; end process; end behave; 6.階梯波library ieee;use ieee.std

38、_logic_1164.all;use ieee.std_logic_unsigned.all;entity ladder is port(clk,reset:in std_logic; q:out std_logic_vector(7 downto 0); end ladder;architecture behave of ladder isbegin process(clk,reset) variable temp:std_logic_vector(7 downto 0); begin if reset='0' then temp:="00000000"

39、 elsif clk'event and clk='1' then if temp="11111111" then temp:="00000000" else temp:=temp+16; end if; end if; q<=temp; end process;end behave;7.三角波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity triangular is port(clk,reset:in std_l

40、ogic; q:out std_logic_vector(7 downto 0);end triangular;architecture behave of triangular isbegin process(clk,reset) variable tmp:std_logic_vector(7 downto 0); variable a:std_logic; begin if reset='0' then tmp:="00000000" elsif rising_edge(clk)then if a='0' then if tmp=&quo

41、t;11111110" then tmp:="11111111" a:='1' else tmp:=tmp+1; end if; elseif tmp="00000001" then tmp:="00000000" a:='0' else tmp:=tmp-1; end if; end if; end if; q<=tmp; end process; end behave;8.方波library ieee;use ieee.std_logic_1164.all;use ieee.std_

42、logic_unsigned.all;entity square is port(clk,reset:in std_logic; q:out integer range 0 to 255); end square;architecture behave of square isbegin process(clk,reset) variable temp:integer range 0 to 63; begin if reset='0' then elsif clk'event and clk='1' then if temp=63 then temp:=

43、0; else temp:=temp+1; end if; if temp<32 then q<=255; else q<=0; end if; end if; end process;end behave;8.波形選擇模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity output is port(sel:in std_logic_vector(2 downto 0); d1,d2,d3,d4,d5,d6:in std_logic_vector(7 downto

44、0); q:out std_logic_vector(7 downto 0);end output;architecture behave of output isbegin process(sel) begin case sel is when "001"=>q<=d1; when "010"=>q<=d2; when "011"=>q<=d3; when "100"=>q<=d4; when "101"=>q<=d5; when &

45、quot;110"=>q<=d6; when others=>null; end case; end process; end behave;附錄二:數(shù)字鐘程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity timer isport(clk: in std_logic;rst:in std_logic;s1,s2:in std_logic;led: out std_logic_vector(3 do

46、wnto 0);display:out std_logic_vector(7 downto 0);seg_sel:buffer std_logic_vector(2 downto 0);end timer;architecture behave of timer issignal disp_temp:integer range 0 to 15;signal disp_decode:std_logic_vector(7 downto 0);signal sec1,sec10:integer range 0 to 9;signal min1,min10:integer range 0 to 9;s

47、ignal hour1,hour10:integer range 0 to 9;signal clk_count1:std_logic_vector(13 downto 0);signal clk1hz:std_logic;signal led_count:std_logic_vector(2 downto 0);signal led_display:std_logic_vector(3 downto 0);begin process(clk)beginif(clk'event and clk='1')thenif(clk_count1<10000)thenclk

48、_count1<=clk_count1+1;elseclk_count1<="00000000000001"end if;end if;end process;clk1hz<=clk_count1(13);process(clk1hz,rst)beginif(rst='0')thensec1<=0;sec10<=0;min1<=0;min10<=0;hour1<=0;hour10<=0;elsif(clk1hz'event and clk1hz='1')then if(s1=

49、9;0')thenif(hour1=9)then hour1<=0; hour10<=hour10+1;elsif(hour10=2 and hour1=3)then hour1<=0; hour10<=0;else hour1<=hour1+1;end if; elsif(s2='0')then if(min1=9)then min1<=0; if(min10=5)then min10<=0; else min10<=min10+1; end if; else min1<=min1+1; end if; elsif

50、(sec1=9)then sec1<=0; if(sec10=5)then sec10<=0; if(min1=9)then min1<=0; if(min10=5)then min10<=0; if(hour1=9)then hour1<=0; hour10<=hour10+1; elsif(hour10=2 and hour10=3)then hour1<=0; hour10<=0; else hour1<=hour1+1; end if; else min10<=min10+1; end if; else min1<=min1+1; end if; else sec10<=sec10+1; end if;else sec1<=sec1+1;end if;end if;end process;process(clk)beginif(clk1hz'event and clk1hz='1')thenif(min10=5 and min1=9 and sec10=5 and sec1>3)thenled_count<=led_count+1;elseled_cou

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論