資源描述:
《數(shù)控分頻器設(shè)計(jì).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、EDA設(shè)計(jì)課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:數(shù)控分頻器設(shè)計(jì)學(xué)院名稱:專業(yè):班級(jí):姓名:高勝學(xué)號(hào)小組成員:指導(dǎo)教師:一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)數(shù)控分頻器的設(shè)計(jì)、分析和測(cè)試方法。二、設(shè)計(jì)任務(wù)及要求1、設(shè)計(jì)總體要求:在SmartSOPC試驗(yàn)箱上的實(shí)現(xiàn)數(shù)控分頻器的設(shè)計(jì)。在clk輸入64kHz或更高(要確保分頻后落在音頻范圍)的頻率信號(hào)(由int_div模塊分頻得到);輸出FOUT接蜂鳴器BUZZ-ER,由KEY1/KEY2控制輸入8位預(yù)置數(shù),并在數(shù)碼管1~2上顯示(調(diào)用key_led模塊)。2、設(shè)計(jì)基本要求:(1)能將頻率分頻。(2)進(jìn)行正常的蜂鳴器的蜂鳴功能。(3)由2個(gè)數(shù)碼管顯示預(yù)置數(shù)。一、系統(tǒng)設(shè)計(jì)1、整體
2、設(shè)計(jì)方案數(shù)控分頻器的輸出信號(hào)頻率為輸入數(shù)據(jù)的函數(shù)。數(shù)控分頻器的clk為時(shí)鐘輸入端,data是數(shù)據(jù)輸入端,fout是數(shù)控頻率輸出端。數(shù)控分頻器的輸出頻率受數(shù)據(jù)data的控制,data越大,輸出頻率越高。數(shù)控分頻器就是用計(jì)數(shù)值可并行預(yù)置的加法計(jì)數(shù)器設(shè)計(jì)完成的,方法是將計(jì)數(shù)溢出位與預(yù)置數(shù)加載輸入信號(hào)相接即可。數(shù)控分頻器是由數(shù)碼管顯示電路、按鍵控制電路、脈沖發(fā)生電路這3個(gè)基本電路組成。數(shù)控分頻器的系統(tǒng)框圖(見圖1):蜂鳴器數(shù)控分頻電路脈沖發(fā)生電路數(shù)碼管顯示按鍵控制圖1數(shù)控分頻器的系統(tǒng)框圖2、功能模塊電路設(shè)計(jì)48MHz的脈沖經(jīng)過分頻器分成64KHz,然后輸入帶數(shù)控分頻電路當(dāng)中,按鍵控制分頻電路
3、中的頻率變化,數(shù)碼管顯示預(yù)置數(shù),蜂鳴器響起。(1)輸入輸出模塊框圖(見圖2)圖2數(shù)控分頻器的輸入輸出模塊框圖(2)算法流程圖(見圖3)圖3數(shù)控分頻器的算法流程圖(3)Verilog源代碼按鍵控制電路代碼:modulekey_led(clock,key,led,hex,bin,seg,dig,ledin,data);inputclock;//系統(tǒng)時(shí)鐘(48MHz)input[7:0]key;//按鍵輸入(KEY1~KEY8)output[7:0]led;//LED輸出(LED1~LED8)output[15:0]hex;//4位16進(jìn)制數(shù)輸出(在數(shù)碼管1~4顯示)output[3:0]
4、bin;//4位2進(jìn)制數(shù)輸出(在LED1~LED4顯示)output[7:0]seg;//數(shù)碼管段碼輸出output[7:0]dig;//數(shù)碼管位碼輸出input[3:0]ledin;//LED顯示輸入(在LED5~LED8顯示)input[15:0]data;//數(shù)碼管顯示輸出(在數(shù)碼管5~8顯示)reg[15:0]hex_r;reg[3:0]bin_r;reg[7:0]seg_r;reg[7:0]dig_r;reg[16:0]count;//時(shí)鐘分頻計(jì)數(shù)器reg[7:0]dout1,dout2,dout3,buff;//消抖寄存器reg[2:0]cnt3;//數(shù)碼管掃描計(jì)數(shù)器re
5、g[3:0]disp_dat;//數(shù)碼管掃描顯存regdiv_clk;//分頻時(shí)鐘,用于消抖和掃描wire[7:0]key_edge;//按鍵消抖輸出//信號(hào)輸出assignhex=hex_r;assignbin=bin_r;assignseg=seg_r;assigndig=dig_r;assignled=~{ledin,bin_r};//時(shí)鐘分頻部分always@(posedgeclock)beginif(count<17'd)begincount<=count+1'b1;div_clk<=1'b0;endelsebegincount<=17'd0;div_clk<=1'b1;e
6、ndend//按鍵消抖部分always@(posedgeclock)beginif(div_clk)begindout1<=key;dout2<=dout1;dout3<=dout2;endend//按鍵邊沿檢測(cè)部分always@(posedgeclock)beginbuff<=dout1
7、dout2
8、dout3;endassignkey_edge=~(dout1
9、dout2
10、dout3)&buff;//4位16進(jìn)制數(shù)輸出部分always@(posedgeclock)//按鍵1beginif(key_edge[0])hex_r[15:12]<=hex_r[15:12]+1'b1;en
11、dalways@(posedgeclock)//按鍵2beginif(key_edge[1])hex_r[11:8]<=hex_r[11:8]+1'b1;endalways@(posedgeclock)//按鍵3beginif(key_edge[2])hex_r[7:4]<=hex_r[7:4]+1'b1;endalways@(posedgeclock)//按鍵4beginif(key_edge[3])hex_r[3:0]<=hex_r[3:0]+1'b1