基于verilog的序列信號檢測器_第1頁
基于verilog的序列信號檢測器_第2頁
基于verilog的序列信號檢測器_第3頁
基于verilog的序列信號檢測器_第4頁
基于verilog的序列信號檢測器_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗課程名稱序列信號檢測器姓名: 實驗?zāi)康?.熟悉使用Verilog Hdl語言;2.熟悉使用Modelsim、Design Compiler、Ise等工具;3.掌握用Verilog Hdl語言實現(xiàn)狀態(tài)機的方法;4.利用狀態(tài)機設(shè)計一個序列檢測器。二、實驗要求設(shè)計序列信號檢測器,具體要求:當(dāng)檢出輸入碼流為10011110或11011010時輸出檢出信號為1,否則為0,同時輸出檢出該碼流的個數(shù)(最大計數(shù)值可不超過255,否則給出計數(shù)溢出信號為1,要求驗證時輸入碼流來自Sequence.txt文件,在testbench中使用系統(tǒng)函數(shù)讀入,并把輸出的信息寫入Outcome.txt文件,輸出信息包括在什

2、么時候,哪個碼流,第幾次被檢測)。三、實驗原理圖3.1 序列檢測器頂層原理圖序列檢測器在數(shù)據(jù)通訊,雷達和遙測等領(lǐng)域中用與檢測同步識別標(biāo)志。它是一種用來檢測一組或多組序列信號的電路,一旦檢測到所需信號就輸出高電平,這在數(shù)字通信領(lǐng)域有廣泛的應(yīng)運。檢測碼流10011110的設(shè)計步驟首先,劃分8個狀態(tài)s0、s1、s2、s3、s4、s5、s6、s7;畫出狀態(tài)轉(zhuǎn)換圖如圖3.2所示。 圖3.2 檢測碼流10011110的狀態(tài)轉(zhuǎn)換圖畫出狀態(tài)轉(zhuǎn)換表如表3.3所示。表3.3檢測碼流10011110的狀態(tài)轉(zhuǎn)換表現(xiàn)態(tài)Sn次態(tài)Sn+1現(xiàn)態(tài)Sn次態(tài)Sn+1A=0A=1A=0A=1S0S0S1S1S2S1S2S0S3S3

3、S0S4S4S2 S5S5 S2S6S6S2 S7S7 S2 S02、檢測碼流11011010的設(shè)計步驟首先,劃分8個狀態(tài)ss0、ss1、ss2、ss3、ss4、ss5、ss6、ss7;畫出狀態(tài)轉(zhuǎn)換圖如圖3.4所示。圖3.4 檢測碼流11011010的狀態(tài)轉(zhuǎn)換圖畫出檢測碼流11011010的狀態(tài)轉(zhuǎn)換表如表3.5所示。表3.5檢測碼流11011010的狀態(tài)轉(zhuǎn)換表現(xiàn)態(tài)Sn次態(tài)Sn+1現(xiàn)態(tài)Sn次態(tài)Sn+1A=0A=1A=0A=1SS0SS0SS1SS1SS2SS0SS2SS3SS2SS3 SS0SS4SS4SS0 SS5SS5 SS6SS2SS6SS0 SS7SS7 SS0 SS2四、程序設(shè)計1.接

4、口說明類型名稱位寬描述備注inputclk1標(biāo)準(zhǔn)時鐘信號,周期為10nsinputrst1同步復(fù)位信號,低有效維持有效至少兩個時鐘周期inputData_in1一個2進制的輸入數(shù)據(jù)outputY_9e1檢測到碼流10011110的輸出信號,高有效持續(xù)一個時鐘周期outputY_da1檢測到碼流11011010的輸出信號,高有效持續(xù)一個時鐘周期outputNum_9e8檢測到碼流10011110的次數(shù)outputNum_da8檢測到碼流11011010的次數(shù)outputErr_9e1檢測到碼流10011110的次數(shù)超過255次, 高有效outputErr_da1檢測到碼流11011010的次數(shù)超

5、過255次, 高有效2.檢測碼流10011110的Verilog Hdl源代碼always (posedge clk)begin /進程1 檢測碼流10011110if(!rst)begin /同步復(fù)位Y_9e=1b0;Err_9e=1b0;Num_9e=8d0;stage0=s0;endelse begincase(stage0)/10011110s0:if(Data_in=0)beginstage0=s0;Y_9e=1b0; end else begin stage0=s1;/檢測到1 跳轉(zhuǎn)到洗衣狀態(tài) Y_9e=1b0; ends1:if(Data_in=0)begin /10stage0

6、=s2;/檢測到0 跳轉(zhuǎn)到下一狀態(tài)Y_9e=1b0; end else begin/11 stage0=s1;/檢測到1 等待下一個值Y_9e=1b0; ends2:if(Data_in=0)begin /100stage0=s3;/檢測到0 跳轉(zhuǎn)到下一狀態(tài)Y_9e=1b0; end else begin /101 stage0=s1;/檢測到1 跳轉(zhuǎn)到狀態(tài)1 Y_9e=1b0; ends3:if(Data_in=0)begin /1000stage0=s0;/檢測到0 跳轉(zhuǎn)到狀態(tài)0Y_9e=1b0; end else begin /1001 stage0=s4;/檢測到1 跳轉(zhuǎn)到下一狀態(tài) Y

7、_9e=1b0; ends4:if(Data_in=0)begin /10010stage0=s2;/檢測到0 跳轉(zhuǎn)到狀態(tài)2Y_9e=1b0; end else begin /10011 stage0=s5;/檢測到1 跳轉(zhuǎn)到下一狀態(tài)Y_9e=1b0; ends5:if(Data_in=0)begin /100110stage0=s2;/檢測到0 跳轉(zhuǎn)到狀態(tài)2Y_9e=1b0; end else begin /100111 stage0=s6;/檢測到1 跳轉(zhuǎn)到下一狀態(tài) Y_9e=1b0; ends6:if(Data_in=0)begin /1001110stage0=s2;/檢測到0 跳轉(zhuǎn)到

8、狀態(tài)2Y_9e=1b0; end else begin/1001111 stage0=s7;/檢測到1 跳轉(zhuǎn)到下一狀態(tài) Y_9e=1b0; ends7:if(Data_in=0)begin /10011110stage0=s0;/檢測到0 跳轉(zhuǎn)到狀態(tài)0 繼續(xù)檢測下一個碼流Y_9e=1b1;/檢測到一個碼流 Num_9e=255)beginNum_9e=8d0;Err_9e=1b1; /高有效 保持一個時鐘endelse beginErr_9e=1b0; /沒溢出 保持低電平end end else begin /10011111 stage0=s1;/檢測到1 跳轉(zhuǎn)到狀態(tài)1 Y_9e=1b0;

9、 enddefault:beginstage0=s0;Y_9e=1b0;Err_9e=1b0;Num_9e=8d0;endendcaseendend3.檢測碼流11011010的Verilog Hdl源代碼always (posedge clk)begin /進程2 檢測碼流11011010if(!rst)begin /同步復(fù)位Y_da=1b0;Err_da=1b0;Num_da=8d0;stage1=ss0; /狀態(tài)0endelse begincase(stage1)ss0:if(Data_in=0)begin /0stage1=ss0;Y_da=1b0;endelse begin /1st

10、age1=ss1; /檢測到1 跳轉(zhuǎn)到下一個狀態(tài)Y_da=1b0;endss1:if(Data_in=0)begin /10stage1=ss0; /檢測到0 跳轉(zhuǎn)到狀態(tài)0Y_da=1b0;endelse begin /11stage1=ss2; /檢測到1 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endss2:if(Data_in=0)begin /110stage1=ss3; /檢測到0 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endelse begin /111stage1=ss2; /檢測到1 等待檢測下一個值Y_da=1b0;endss3:if(Data_in=0)begin /1100stage1

11、=ss0; /檢測到0 跳轉(zhuǎn)到狀態(tài)0Y_da=1b0;endelse begin /1101stage1=ss4; /檢測到1 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endss4:if(Data_in=0)begin /11010stage1=ss0; /檢測到0 跳轉(zhuǎn)到狀態(tài)0Y_da=1b0;endelse begin /11011stage1=ss5; /檢測到1 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endss5:if(Data_in=0)begin /110110stage1=ss6; /檢測到0 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endelse begin /110111stage1=ss2; /

12、檢測到1跳轉(zhuǎn)到 狀態(tài)ss2Y_da=1b0; endss6:if(Data_in=0)begin /1101100stage1=ss0; /檢測到0 跳轉(zhuǎn)到狀態(tài)0Y_da=1b0;endelse begin /1101101stage1=ss7; /檢測到1 跳轉(zhuǎn)到下一狀態(tài)Y_da=1b0;endss7:if(Data_in=0)begin /11011010stage1=ss0; /跳轉(zhuǎn)到狀態(tài)0 繼續(xù)下一個碼流檢測Y_da=1b1; /檢測到一個碼流 11011010 置1 保持一個時鐘周期Num_da=255)beginNum_da=8d0;Err_da=1b1; /高有效 超過255個

13、置1 保持一個時鐘endelse beginErr_da=1b0;endendelse begin /11011011stage1=ss2; /檢測到1跳轉(zhuǎn)到 狀態(tài)ss2Y_da=1b0;enddefault:beginY_da=1b0; Err_da=1b0; Num_da=8d0; stage1=ss0;endendcaseendend4.Testbench源代碼timescale 10ns/1ns /時間單位module seq_test;/測試激勵模塊reg clk,rst,Data_in;wire Y_9e,Y_da,Err_9e,Err_da;wire 7:0Num_9e,Num_

14、da;parameter Num_serial1=10011110;parameter Num_serial2=11011010;reg 10:0i;reg mem0:4095;/位寬1bit,深度為4096的存取器integer fp_write;sequence DUT(.clk(clk),.rst(rst),.Data_in(Data_in),.Y_9e(Y_9e),/元件例化 .Y_da(Y_da),.Err_9e(Err_9e),.Err_da(Err_da),.Num_9e(Num_9e),.Num_da(Num_da);initial $readmemb(Sequence.txt

15、,mem); /讀文本Sequence.txt的數(shù)據(jù)加載到mem存取器中 地址0開始always #5 clk=clk; /產(chǎn)生系統(tǒng)時鐘initial begin /初始化塊 fp_write=$fopen(Outcome.txt);clk=0;rst=1;#40 rst=0;#40 rst=1;#800000 $stop;$fclose(fp_write);/必須放到停止函數(shù)之后endinitial begin/加載數(shù)據(jù)塊for(i=0;i4095;i=i+1)begin(posedge clk); /加載數(shù)據(jù) 時鐘同步Data_in=memi;endendalways (posedge c

16、lk) begin/寫文件if(Y_9e | Y_da)begin $fdisplay(fp_write,Num_serial1=10011110:%d counts, time:%d nsn,Num_9e,$time);$fdisplay(fp_write,Num_serial2=11011010:%d counts, time:%d nsn,Num_da,$time);endendendmodulealways (posedge clk) begin/寫文件if(Y_9e | Y_da)begin $fdisplay(fp_write,Num_serial1=10011110:%d cou

17、nts, time:%d nsn,Num_9e,$time);$fdisplay(fp_write,Num_serial2=11011010:%d counts, time:%d nsn,Num_da,$time);endendendmodule五、Modesim仿真圖1.復(fù)位 圖5.1 從圖5.1Wave中觀察可知,復(fù)位信號rst=0為四個時鐘周期滿足題目要求。圖5.22.分析碼流10011110從圖5.2波形圖分析,兩個黃色的光標(biāo)之間輸入的Data_in恰好是碼流10011110,Y_9e輸出1保持一個時鐘,Num_9e計1個數(shù)。圖5.3放大波形圖如圖5.3所示可以觀察到,檢測到碼流100

18、11110的相應(yīng)結(jié)果都是正確的圖5.4從波形仿真圖5.4中分析,檢測到碼流10011110超過255個時,Err_9e輸出1,結(jié)果正確。3.分析碼流11011010圖5.5從波形仿真圖5.5中分析,兩個黃色光標(biāo)之間的有一個碼流11011010,之后Y_da輸出1,則說明檢測到了一個碼流11011010,且Num_da計了一個數(shù)。圖5.6放大波形圖如圖5.6,多分析幾個情況,每次的結(jié)果都是正確的,檢測到碼流11011010,Y_da輸出1,保持一個時鐘,Num_da累加一次。圖5.7從波形圖5.7中分析,當(dāng)檢測到碼流11011010的個數(shù)超過255個時,Err_da輸出1,且保持一個時鐘周期,滿足題目要求。圖5.84.MEM數(shù)據(jù)從波形圖5.8中分析對比MEM和Data_in的數(shù)據(jù),可知讀進來的數(shù)據(jù)與Sequence.txt文件中的數(shù)據(jù)是匹配的。5.顯示檢測到碼流的個數(shù)和時間圖5.9Modesim命令窗口記錄了檢測到的碼流10011110(Num_serial1)和碼流11011010(Num_serial2)的個數(shù)及檢測到的時間。六、綜合1.在DC下綜合

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論