實驗五 含有控制信號的計數器VHDL設計


一、實驗目的

學習計數器的設計、仿真和硬件測試,進一步熟悉VHDL設計技術。

二、實驗儀器與器材

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

三、實驗

1. 基本命題

Quartus上設計一個含計數使能、異步復位和計數值並行預置功能的4位加法計數器,並進行編輯、編譯、綜合、適配、仿真,給出其所有信號的時序仿真波形。

1)        實驗原理

由數電知識可知,4位加法計數器由clk時鍾,rst置位,en使能,cq輸出,cout進位輸出構成。

2)        程序設計

111111111

 

3)        編譯仿真波形

clip_image004

1   4位加法計數器波形

從圖1分析可知,在每一個時鍾上身沿到來的時候,4位加法計數器計數值加1(圖中1),最大計數值為15,並進行進位輸出(圖中2);當rst為高電平時,輸出清零。

2. 擴展命題

在上述設計基礎上,設計具有同步復位和計數值並行預置功能的8位加法計數器。並進行編輯、編譯、綜合、適配、仿真,給出其所有信號的時序仿真波形。

1)        實驗原理

由原來的設計的兩個4位加法計數器件組成一個8位加法計數器U0。設有兩個4位加法計數器U1U2。我們規定U1U0的低位,U2U0的高位。將U1的進位輸出cout連接到U2的時鍾輸入clkU1U2rst連接在一起作為總置位端brsten也連接在一起,作為總使能端benU2的進位輸出cout作為總進位輸出bcout

2)        程序設計

clip_image005

3)        編譯仿真波形

clip_image007

             圖2.1   8位加法計數器從0計數到26

clip_image009

2.2   8位加法計數器從26計數到50

8位加法計數器可以計數到196,但是后面的計數運行正常且與前面相似,不再截圖。

4)        分析結果

從圖中可以看出,實驗的結果與預期相符。

 

 

四、實驗設計思路

5-1是一含計數使能、異步復位和計數值並行預置功能的4位加法計數器。如圖所示,圖中間是4位鎖存器;rst是異步清信號,高電平有效;clk是鎖存信號;D[30]4位數據輸入端。當ENA1時,多路選擇器將加1器的輸出值加載於鎖存器的數據端;當ENA0時將0000加載於鎖存器。

clip_image011

附圖5-1  4位加法計數器的RTL電路圖

設計提示:

若目標器件是EP1C6Q240C8,建議選實驗電路模式5,用鍵8PIO7)控制RST;用鍵7PIO6)控制ENA;計數溢出COUT接發光管D8PIO15);輸出Y是計數輸出,接數碼1PIO19-PIO16,低位靠右);時鍾CLKclock0,通過跳線選擇4Hz信號。引腳鎖定后進行編譯、下載和硬件測試實驗。

五、實驗思考題

1)是否可以不定義信號 CQI,而直接用輸出端口信號完成加法運算,即 OUTY <= OUTY + 1   為什么?

假設可行,將cnt4中的實驗程序修改為直接使用輸出端口信號完成加法運算,如圖3所示。經分析,程序中的輸出cq是不可讀的,另外,如果沒有一個變量來保存程序的計數值,那么程序就相當於一個組合邏輯電路,不具備計數的功能。

 

111111111

3直接使用輸出端口信號完成加法運算

 

六、問題的總結

 1Cnt4中的不准確的進位輸出,導致cnt8中的計數出錯。
之前在cnt4判斷進位的輸出的語句如圖3 所示。該語句檢測當計數值為15的時候,就進行輸出。當4位加法計數器的數量為一個的時候,可以正常工作。但是復用cnt4的時候,發現8位加法計數器cnt8的計數出現了如圖4的錯誤。經分析,在cnt8中時,當低位cnt4的計數值為15,同時輸出一個進位信號到高位cnt4,照成高位cnt4多計數了一次。由於在下一個時鍾到來的時候,低位的cnt4才重新從0開始計數,因此會產生仿真結果與預期不符。只要我們將程序修改為如下方程序塊1
所示。

111111111

3 進位輸出語句

111111111

3 Cnt8計數輸出不准確

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITY cnt4 IS

PORT(clk, rst, en :INstd_logic;        --clk時鍾,rst置位,en使能

cq :OUTstd_logic_vector(3DOWNTO0);--cq輸出

cout :OUTstd_logic);                 --cout進位輸出

END cnt4;

ARCHITECTURE behave OF cnt4 IS

BEGIN

    PROCESS(clk,rst,en)

       VARIABLE cqi :std_logic_vector(3DOWNTO0);

       BEGIN

           IF rst = '1' THEN  cqi :=(OTHERS=>'0');-- 計算機異步復位

           ELSIF clk='1' and clk'eventTHEN        -- 檢測時鍾上升沿

              IF en='1' THEN                        -- 檢測是否允許計數(同步使能)

                  IF cqi <15  THEN  cqi := cqi +1;  -- 允許計數,檢測是否小於15

                  ELSE cqi :=(OTHERS=>'0');      -- 大於15,計數值清零

                  ENDIF;

              ENDIF;

           ENDIF;

         IF cqi =15THEN

           IF clk='1' and clk'eventTHEN 

              cout <= '1';                         -- 計數大於15,輸出進位信號

           ENDIF;

           ELSE cout <='0';

         ENDIF;

         cq <= cqi;                                   -- 將計數值送往輸出端口

ENDPROCESS;

END behave;

 

代碼塊1 修改后的cnt4代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM