文章出處

一、實驗目的

1)進一步熟悉Quartus II軟件和GW48-PK2S實驗系統的使用方法;

2)用狀態機實現序列檢測器的設計,了解一般狀態機的設計與應用

二、實驗內容

1. 基本命題

利用Quartus II實現一個8位的序列檢測器設計;給出仿真波形。最后進行引腳鎖定并進行測試,硬件驗證設計電路對給定序列的檢測功能。

2. 擴展命題

在上述設計基礎上,通過修改設計,實現以最簡便的預置方法,獲得n位序列檢測器的功能。

三、實驗儀器與器材

計算機1臺,GW48-PK2S實驗箱1臺,Quartus6.0 1套。

 

四、實驗

1. 基本命題

總體設計

設計兩個進程。

進程Com1:實現序列的檢測

進程Com2:實現檢測結果的輸出

程序設計

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITY SCHK IS

  PORT(DIN, CLK, CLR  :INSTD_LOGIC;--串行輸入數據位/工作時鐘/復位信號

        AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--檢測結果輸出

END SCHK;

ARCHITECTURE behav OF SCHK IS

    SIGNAL Q :INTEGERRANGE0TO8;

    SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0);   --8位待檢測預置數

BEGIN

    D <="11100101"  ;--8位待檢測預置數:密碼:E5H

 Com1:PROCESS( CLK, CLR )

  BEGIN

  IF CLR = '1' THEN    Q <=0;

  ELSIF  CLK'EVENTAND CLK='1' THEN--時鐘到來時,判斷并處理當前輸入的位

     CASE Q IS

      WHEN0=>  IF DIN = D(7)THEN Q <=1;ELSE Q <=0;ENDIF;

      WHEN1=>  IF DIN = D(6)THEN Q <=2;ELSE Q <=0;ENDIF;

      WHEN2=>  IF DIN = D(5)THEN Q <=3;ELSE Q <=0;ENDIF;

      WHEN3=>  IF DIN = D(4)THEN Q <=4;ELSE Q <=0;ENDIF;

      WHEN4=>  IF DIN = D(3)THEN Q <=5;ELSE Q <=0;ENDIF;

      WHEN5=>  IF DIN = D(2)THEN Q <=6;ELSE Q <=0;ENDIF;

      WHEN6=>  IF DIN = D(1)THEN Q <=7;ELSE Q <=0;ENDIF;

      WHEN7=>  IF DIN = D(0)THEN Q <=8;ELSE Q <=0;ENDIF;

      WHENOTHERS=>  Q <=0;

            ENDCASE;

    ENDIF;

  ENDPROCESS;

  Com2:PROCESS( Q )                                 --檢測結果判斷輸出

  BEGIN

      IF Q =8  THEN  AB <="0001";     --序列數檢測正確,輸出 "1"

      ELSE      AB <="0011";           --序列數檢測錯誤,輸出 "3"

      ENDIF;

  ENDPROCESS;

END behav ;

 

 

仿真分析

clip_image002

6-1 仿真波形圖

仿真預測:當輸入的結果是預置序列的時候,輸出0001;反之,輸出0011

硬件測試

1-1  SCHKGWAC6板上目標芯片EP1C6Q240C8的引腳鎖定信息

端口名稱

端口符號

GWAC6板輸入輸出元件

GWAC6板接口

目標器件引腳

備注

輸入引腳D

DIN

按鍵1

PIO1

233

模式No.5

 

清零端

CLR

按鍵2

PIO2

234

 主頻率

CLK

按鍵3

PIO3

235

 4位數字量輸出引腳

AB

數碼管7

PIO40~47

161-164

 

clip_image004

6-2引腳的配置

 

2. 擴展命題

總體設計

本命題通過改寫case判斷語句,將要檢測的序列和序列的位數關聯,通過IF語句對狀態進行判斷。

程序設計

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITY SCHK IS

  PORT(DIN, CLK, CLR ,BIT_COUNT :INSTD_LOGIC;--串行輸入數據位/工作時鐘/復位信號/要檢測的位數標識碼

        AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--檢測結果輸出

END SCHK;

ARCHITECTURE behav OF SCHK IS

    SIGNAL Q :INTEGERRANGE0TO8;

    SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0);   --8位待檢測預置數

    SIGNAL Count:INTEGERRANGE0TO8;      --要檢測的位數(最多支持8)

 

BEGIN

    D <="11100000"  ;--8位待檢測預置數:--11100000

 Com1:PROCESS( CLK, CLR )

  BEGIN

  IF BIT_COUNT='0' THEN Count<=3;--判斷要檢測多少位

  ELSE Count<=4;ENDIF;

  IF CLR = '1' THEN    Q <=0;

  ELSIF  CLK'EVENTAND CLK='1' THEN--時鐘到來時,判斷并處理當前輸入的位

        if Q=(Count+1)THEN Q<=0;ENDIF;--開始新的一輪的檢測

        if(DIN = D(7-Q))THEN Q<=Q+1;ELSE Q<=0;ENDIF;--進行狀態的檢測

    ENDIF;

  ENDPROCESS;

  Com2:PROCESS( Q )                                 --檢測結果判斷輸出

  BEGIN

      IF Q =(Count+1)  THEN  AB <="0001";     --序列數檢測正確,輸出 "1"

      ELSE      AB <="0011";           --序列數檢測錯誤,輸出 "3"

      ENDIF;

  ENDPROCESS;

END behav ;

 

 

仿真分析

BIT_COUNT為低電平的時候,實現4位序列檢測器的功能;當BIT_COUNT為高電平的時候,實現5位序列檢測器的功能。設待檢測的序列為“11100000”。

clip_image006

6-3 5位序列檢測器波形圖

 

硬件測試

1-2  SCHKGWAC6板上目標芯片EP1C6Q240C8的引腳鎖定信息

端口名稱

端口符號

GWAC6板輸入輸出元件

GWAC6板接口

目標器件引腳

備注

輸入引腳D

DIN

按鍵1

PIO1

233

模式No.5

 

清零端

CLR

按鍵2

PIO2

234

 主頻率

CLK

按鍵3

PIO3

235

 

 檢測位數標識

BIT_COUNT

按鍵4

PIO4

236

 

 4位數字量輸出引腳

AB

數碼管7

PIO40~47

161-164

 

clip_image008

6-4 引腳的配置

 

五、實驗思考題

如果帶檢測預置數必須以右移方式進入序列檢測器,那么該程序該做如何修改?

總體設計

同序列檢測中數據右移輸入的思路,但是我們這次不進行檢測,收到什么就將其存入程序中的預置數變量中。我們需要額外設置一個輸入變量,變量ISE用來標示是否進行預置數序列的輸入,當ISE=1,輸入口DIN用來輸入預置數序列的;ISE=0,輸入口DIN用來輸入要檢測的序列。其中預置數序列的長度BIT_COUNT相關。

程序設計

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITY SCHK IS

  PORT(DIN, CLK, CLR ,BIT_COUNT,ISE :INSTD_LOGIC;--串行輸入數據位/工作時鐘/復位信號/要檢測的位數標識碼/預置數序列的輸入使能

        AB :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--檢測結果輸出

END SCHK;

ARCHITECTURE behav OF SCHK IS

    SIGNAL Q :INTEGERRANGE0TO8;

    SIGNAL D :STD_LOGIC_VECTOR(7DOWNTO0);   --8位待檢測預置數

    SIGNAL Count:INTEGERRANGE0TO8;      --要檢測的位數(最多支持8)

 

BEGIN

 Com1:PROCESS( CLK, CLR )

  BEGIN

  IF BIT_COUNT='0' THEN Count<=3;--判斷要檢測多少位

  ELSE Count<=4;ENDIF;

  IF CLR = '1' THEN    Q <=0;

  ELSIF  CLK'EVENTAND CLK='1' THEN--時鐘到來時,判斷并處理當前輸入的位

        if Q=(Count+1)THEN Q<=0;ENDIF;--開始新的一輪的檢測

        --ISE=1的時候,開始預置數序列的輸入

        if ISE='1' then D(7-Q)<=DIN;Q<=Q+1;

        else

        if(DIN = D(7-Q))THEN Q<=Q+1;ELSE Q<=0;ENDIF;--進行狀態的檢測

        endif;

    ENDIF;

  ENDPROCESS;

  Com2:PROCESS( Q )                                 --檢測結果判斷輸出

  BEGIN

      IF Q =(Count+1)AND ISE='0'  THEN  AB <="0001";     --當序列數檢測正確并且預置數使能為低電平的時候,輸出 "1"

      ELSE      AB <="0011";           --序列數檢測錯誤,輸出 "3"

      ENDIF;

  ENDPROCESS;

END behav ;

 

仿真分析

clip_image010

6-5  帶有預置數功能的4位序列檢測器波形圖

 

硬件測試

1-3  SCHKGWAC6板上目標芯片EP1C6Q240C8的引腳鎖定信息

端口名稱

端口符號

GWAC6板輸入輸出元件

GWAC6板接口

目標器件引腳

備注

輸入引腳D

DIN

按鍵1

PIO1

233

模式No.5

 

清零端

CLR

按鍵2

PIO2

234

 主頻率

CLK

按鍵3

PIO3

235

 檢測位數標識

BIT_COUNT

按鍵4

PIO4

236

 預置數使能

ISE

按鍵5

PIO5

237

 4位數字量輸出引腳

AB

數碼管7

PIO40~47

161-164

 

 

clip_image012

                         圖6-6  引腳的配置

 


文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()