① 基於FPGA的可編程定時器/計數器8253的設計與實現
基於FPGA的可編程定時器/計數器8253的設計與實現
摘??? 要:本文介紹了可編程定時器/計數器8253的基本功能,以及一種用VHDL語言設計可編程定時器/計數器8253的方法,詳述了其原理和設計思想,並利用Altera公司的FPGA器件ACEX 1K予以實現。
關鍵詞:FPGA;IP;VHDL
引言
在工程上及控制系統中,常常要求有一些實時時鍾,以實現定時或延時控制,如定時中斷,定時檢測,定時掃描等,還要求有計數器能對外部事件計數。要實現定時或延時控制,有三種主要方法:軟體定時、不可編程的硬體定時、可編程的硬體定時器。其中可編程定時器電路的定時值及其范圍可以很容易地由軟體來確定和改變,功能較強,使用靈活。Intel的定時器/計數器為可編程定時器PIT,型號為8253,改進型為8254,就是為完成上述功能而設計出來的一種電路。
隨著ASIC的發展,在實際工程中通用的8253PIT晶元表現出如下的不足:1. 計數頻率不夠,8253計數速率最高2MHz,即使是其改進型8254也往往不能滿足一些需要較高計數頻率的工程。2. 8253PIT沒有復位信號,輸出的初始狀態不受控制。針對8253的這些局限性,在實際工程中往往需要重新設計8253,並把8253的部分功能作為一個獨立的IP模塊嵌入到設計中,以實現完成某種特定功能的ASIC。
8253的基本功能和內部結構
主要功能
* 每片內部包含有3個獨立的16位計數通道;
* 每個計數器都可以按照二進制或二—十進制計數;
* 每個計數器的計數速率可高達2MHz;
* 每個計數通道有6種工作方式,可由程序設置和改變;
* 所有的輸入/輸出電平信號都與TTL兼容。
內部結構
8253的內部結構如圖1所示。
1. 數據匯流排緩沖器。這是8253與CPU數據匯流排連接的8位雙向三態緩沖器,CPU通過數據匯流排緩沖器將控制命令字和計數初值寫入8253晶元,或者從8253計數器中讀取當前計數值。
2. 讀/寫邏輯。這是8253內部操作的控制部分。首先有片選信號CS的控制部分,當CS為高時,數據匯流排緩沖器處在三態,系統的數據匯流排脫開,故不能進行編程,也不能進行讀寫操作。其次,由這部分選擇讀寫操作的埠(3個計數器及控制字寄存器),並控制數據傳送的方向。
3. 控制字寄存器。在8253初始化編程時,由CPU寫入控制字以決定通道的工作方式。此寄存器只能寫入而不能讀出。實際上,8253的3個計數器通道都有各自的控制字寄存器,存放各自的控制字,初始化編程時,這3個控制字分三次共用一個控制埠地址寫入各自的通道.它們是利用最高兩位的狀態不同來區分的。
4. 計數器通道。包括計數器0、計數器1、計數器2。它們的結構完全相同,彼此可以按照不同的方式獨立工作。每個通道包括:一個8位的控制寄存器;一個16位的計數初值寄存器;一個計數執行部件,他是一個16位的減法計數器;一個16位的輸出鎖存器。
每個通道都對輸入脈沖CLK按二進制或二—十進制,從預置值開始減1計數。當預置值減到零時,從OUT輸出端輸出一信號。計數過程中,計數器受到門控信號GATE的控制。
8253的設計
根據8253的內部結構,設計8253主要分為兩大部分:匯流排控制部分和定時/計數部分。
匯流排控制部分設計
這一部分主要完成數據的讀/寫,以及控制字的寫入。用VHDL設計這部分前,應該了解8253的埠選擇(見表1)和控制字(見圖2)。
設計的關鍵在於對8253埠控制字的掌握。寫信號到來時,首先要判斷是控制字還是計數初始值。如果是初始值,其中先寫低位元組,再寫高位元組部分是重點,需要一個信號來判斷寫入的是新數據還是上一數據沒寫完的高位元組部分.其他計數器的讀/寫大同小異。只要對8253的埠控制字了解清楚以及對讀/寫的時序有一定的了解,這一部分的邏輯很容易用VHDL語言描述出來.該進程可對外發出控制信號,表示控制字及數據寫入完畢,可以進行計數器的計數操作了。該控制信號可以作為下面介紹的計數部分的觸發信號。
計數器部分設計
8253有3個獨立的計數器,每個計數器有6種工作模式,完成不同的功能。現以方式4為例介紹VHDL設計,其他的可以在方式4基礎上加以修改。
這種工作方式,當寫入控制字後輸出為高。當寫入計數值後,再過一個時鍾周期,計數執行部件獲得計數初值,並開始減1計數。當計數到0後輸出變低電平,此低電平一直維持一個時鍾周期,然後又自動變為高電平,並一直維持高電平,計數器停止計數。這種方式計數是一次性的,只有輸入新的計數值之後,才能開始新的計數。
下面介紹方式4的設計過程:
CPU寫入控制字後,輸出outs立即復位,方式4中復位後outs為高電平。CPU寫入計數初值的下一個CLK脈沖,計數初值被送到計數執行部件並開始減1計數,又經過N個時鍾周期後才輸出一個負脈沖。當GATE=1時,允許計數,GATE=0時,禁止計數。這樣就實現了方式4基本的軟體觸發功能。
if clk1'event and clk1='0' then ——時鍾脈沖下降沿到來
if gate1='1' then ——門控位為1,允許計數
if ce1>"0000000000000001" then
ce1<=ce1-1;
——減1計數,ce為計數執行部件
elsif ce1="0000000000000001" then
out1<='0'; ——初值減到1時輸出低電平
???? ce1<=ce1-1; ——繼續減1
elsif ce1="0000000000000000" then
out1<='1'; ——初值減到0時輸出高電平
??? end if;
?? elsif gate1='0' then
——門控位為0,禁止計數
??? null;
?? end if;
? end if;
上面的小程序雖不完整但是卻描述出了方式4的軟體觸發基本功能。若在計數過程中改變計數值,新值寫入後的下一個CLK周期時,此計數值被寫入計數執行部件並從新的計數值開始計數.如果寫入的計數值是兩個位元組,那麼寫入第一個位元組時計數不受影響,寫入第二個位元組後的下一個時鍾周期,計數執行部件獲得新值,並從新值開始重新計數,叫做軟體再觸發.軟體再觸發功能只要在上面的程序中加入相應的判斷信號和控制信號即可實現。
完整的8253寫過程流程
實際上完整的8253就是一個擁有多個進程的復雜結構體。讀匯流排過程、寫匯流排過程、每個計數器的6種工作方式都是一個獨立的進程.進程之間是並行的,只要進程的敏感信號發生變化,該進程就被觸發一次,而進程內部是按照時序順序執行的。以寫過程為例,寫匯流排進程本身是靠敏感信號wr和cs來觸發的,無論寫入控制字還是寫入計數初值後,寫匯流排進程都會對外發出信號以表示某個計數器的控制字寫入完畢或者某個計數器的某個工作方式的計數初值已經寫入,可以進行計數了。而這些信號又相應的作為其他進程的敏感信號,進程之間的通信就是依靠這些信號來完成的。這些進程之間都是並發執行的,具體哪個進程被執行取決於控制字。圖3給出了寫過程的流程,讀過程與之類似。
設計結果驗證
本設計開發軟體採用Altera公司的集成開發軟體MAX+PLUS II 10.2完成。並用該公司的ACEX 1K系列FPGA晶元予以驗證。
之所以選用ACEX 1K系列晶元,是因為它是一種低成本高密度的FPGA晶元系列,是首選的中規模器件產品。它具有如下特點:
* ACEX 1K採用查找表(LUT)和EAB(嵌入式陣列塊)相結合的結構,特別適用於實現復雜邏輯功能存儲器功能,例如通信中應用的數字信號處理、多通道數據處理、數據傳遞和微控制等。
* 典型門數為1萬到10萬門,有多達49152位的RAM(每個EAB有4096位RAM)。
* 器件內核採用2.5V電壓,功耗低,能夠提供高達250MHz的雙向I/O功能,完全支持33MHz和66MHz的PCI局部匯流排標准。
* 具有快速連續式、延時可預測的快速通道互連;具有實現快速加法器、計數器、乘法器和比較器等算術功能的專用進位鏈,以及實現高速多扇入邏輯功能的專用級連接。
通過模擬、綜合,並下載到FPGA中進行驗證,本設計可以很好地實現其功能。■
參考文獻
1 曾繁泰,陳美金. VHDL程序設計
2 林明權. VHDL數字控制系統設計範例
② (微機原理)用8086,8253,8251,8255,8259和8237其中的幾種設計一個簡單的實驗,請給點思路
可編程定時/計數器8253實驗
一、實驗要求
利用8086外接8253可編程定時/計數器,可以實現方波的產生。
二、實驗目的
1、學習8086與8253的連接方法。
2、學習8253的控制方法。
3、掌握8253定時器/計數器的工作方式和編程原理
三、實驗說明
8253晶元介紹
8253是一種可編程定時/計數器,有三個十六位計數器,其計數頻率范圍為0-2MHz,用+5V單電源供電。
8253的功能用途:
⑴延時中斷;⑵可編程頻率發生器;⑶事件計數器;⑷二進制倍頻器⑸實時時鍾;⑹數字單穩⑺復雜的電機控制器。
8253的六種工作方式:
⑴方式0:計數結束中斷;⑵方式l:可編程頻率發生;⑶方式2:頻率發生器;⑷方式3:方波頻率發生器;⑸方式4:軟體觸發的選通信號;⑹方式5:硬體觸發的選通信號。
四、實驗步驟
1、Proteus模擬
a.在Proteus中打開設計文檔「8253_STM.DSN」;
b.建立實驗程序並編譯,模擬;
c.如不能正常工作,打開調試窗口進行調試。
參考程序:
CODE SEGMENT
ASSUMECS:CODE
START:
JMPTCONT
TCONTROEQU0A06H
TCON0EQU0A00H
TCON1EQU0A02H
TCON2 EQU0A04H
TCONT:
MOVDX,TCONTRO
MOVAL,16H;計數器0,只寫計算值低8位,方式3,二進制計數
OUTDX,AL
MOVDX,TCON0
MOVAX,20 ;時鍾為1MHZ,計數時間=1us*20=20us,輸出頻率50KHZOUTDX,AL
JMP$
CODEENDS
ENDSTART
五、實驗電路及連線
1、Proteus實驗電路