<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 基于FPGA的可編程定時(shí)器/計數器8253的設計與實(shí)現

基于FPGA的可編程定時(shí)器/計數器8253的設計與實(shí)現

作者:■ 中國科學(xué)院 研究生院 閆永志中國科學(xué)院 沈陽(yáng)計算技術(shù)研究所 劉偉 何方 時(shí)間:2005-04-27 來(lái)源:eaw 收藏

摘    要:本文介紹了可編程定時(shí)器/計數器8253的基本功能,以及一種用語(yǔ)言設計可編程定時(shí)器/計數器8253的方法,詳述了其原理和設計思想,并利用Altera公司的器件ACEX 1K予以實(shí)現。
關(guān)鍵詞:;;

引言
在工程上及控制系統中,常常要求有一些實(shí)時(shí)時(shí)鐘,以實(shí)現定時(shí)或延時(shí)控制,如定時(shí)中斷,定時(shí)檢測,定時(shí)掃描等,還要求有計數器能對外部事件計數。要實(shí)現定時(shí)或延時(shí)控制,有三種主要方法:軟件定時(shí)、不可編程的硬件定時(shí)、可編程的硬件定時(shí)器。其中可編程定時(shí)器電路的定時(shí)值及其范圍可以很容易地由軟件來(lái)確定和改變,功能較強,使用靈活。Intel的定時(shí)器/計數器為可編程定時(shí)器PIT,型號為8253,改進(jìn)型為8254,就是為完成上述功能而設計出來(lái)的一種電路。
隨著(zhù)ASIC的發(fā)展,在實(shí)際工程中通用的8253PIT芯片表現出如下的不足:1. 計數頻率不夠,8253計數速率最高2MHz,即使是其改進(jìn)型8254也往往不能滿(mǎn)足一些需要較高計數頻率的工程。2. 8253PIT沒(méi)有復位信號,輸出的初始狀態(tài)不受控制。針對8253的這些局限性,在實(shí)際工程中往往需要重新設計8253,并把8253的部分功能作為一個(gè)獨立的模塊嵌入到設計中,以實(shí)現完成某種特定功能的ASIC。

8253的基本功能和內部結構
主要功能
* 每片內部包含有3個(gè)獨立的16位計數通道;
* 每個(gè)計數器都可以按照二進(jìn)制或二—十進(jìn)制計數;
* 每個(gè)計數器的計數速率可高達2MHz;
* 每個(gè)計數通道有6種工作方式,可由程序設置和改變;
* 所有的輸入/輸出電平信號都與TTL兼容。
內部結構
8253的內部結構如圖1所示。
1. 數據總線(xiàn)緩沖器。這是8253與CPU數據總線(xiàn)連接的8位雙向三態(tài)緩沖器,CPU通過(guò)數據總線(xiàn)緩沖器將控制命令字和計數初值寫(xiě)入8253芯片,或者從8253計數器中讀取當前計數值。
2. 讀/寫(xiě)邏輯。這是8253內部操作的控制部分。首先有片選信號CS的控制部分,當CS為高時(shí),數據總線(xiàn)緩沖器處在三態(tài),系統的數據總線(xiàn)脫開(kāi),故不能進(jìn)行編程,也不能進(jìn)行讀寫(xiě)操作。其次,由這部分選擇讀寫(xiě)操作的端口(3個(gè)計數器及控制字寄存器),并控制數據傳送的方向。
3. 控制字寄存器。在8253初始化編程時(shí),由CPU寫(xiě)入控制字以決定通道的工作方式。此寄存器只能寫(xiě)入而不能讀出。實(shí)際上,8253的3個(gè)計數器通道都有各自的控制字寄存器,存放各自的控制字,初始化編程時(shí),這3個(gè)控制字分三次共用一個(gè)控制端口地址寫(xiě)入各自的通道.它們是利用最高兩位的狀態(tài)不同來(lái)區分的。
4. 計數器通道。包括計數器0、計數器1、計數器2。它們的結構完全相同,彼此可以按照不同的方式獨立工作。每個(gè)通道包括:一個(gè)8位的控制寄存器;一個(gè)16位的計數初值寄存器;一個(gè)計數執行部件,他是一個(gè)16位的減法計數器;一個(gè)16位的輸出鎖存器。
每個(gè)通道都對輸入脈沖CLK按二進(jìn)制或二—十進(jìn)制,從預置值開(kāi)始減1計數。當預置值減到零時(shí),從OUT輸出端輸出一信號。計數過(guò)程中,計數器受到門(mén)控信號GATE的控制。

8253的設計
根據8253的內部結構,設計8253主要分為兩大部分:總線(xiàn)控制部分和定時(shí)/計數部分。
總線(xiàn)控制部分設計
這一部分主要完成數據的讀/寫(xiě),以及控制字的寫(xiě)入。用設計這部分前,應該了解8253的端口選擇(見(jiàn)表1)和控制字(見(jiàn)圖2)。
設計的關(guān)鍵在于對8253端口控制字的掌握。寫(xiě)信號到來(lái)時(shí),首先要判斷是控制字還是計數初始值。如果是初始值,其中先寫(xiě)低字節,再寫(xiě)高字節部分是重點(diǎn),需要一個(gè)信號來(lái)判斷寫(xiě)入的是新數據還是上一數據沒(méi)寫(xiě)完的高字節部分.其他計數器的讀/寫(xiě)大同小異。只要對8253的端口控制字了解清楚以及對讀/寫(xiě)的時(shí)序有一定的了解,這一部分的邏輯很容易用VHDL語(yǔ)言描述出來(lái).該進(jìn)程可對外發(fā)出控制信號,表示控制字及數據寫(xiě)入完畢,可以進(jìn)行計數器的計數操作了。該控制信號可以作為下面介紹的計數部分的觸發(fā)信號。
計數器部分設計
8253有3個(gè)獨立的計數器,每個(gè)計數器有6種工作模式,完成不同的功能?,F以方式4為例介紹VHDL設計,其他的可以在方式4基礎上加以修改。
這種工作方式,當寫(xiě)入控制字后輸出為高。當寫(xiě)入計數值后,再過(guò)一個(gè)時(shí)鐘周期,計數執行部件獲得計數初值,并開(kāi)始減1計數。當計數到0后輸出變低電平,此低電平一直維持一個(gè)時(shí)鐘周期,然后又自動(dòng)變?yōu)楦唠娖?,并一直維持高電平,計數器停止計數。這種方式計數是一次性的,只有輸入新的計數值之后,才能開(kāi)始新的計數。
下面介紹方式4的設計過(guò)程:
CPU寫(xiě)入控制字后,輸出outs立即復位,方式4中復位后outs為高電平。CPU寫(xiě)入計數初值的下一個(gè)CLK脈沖,計數初值被送到計數執行部件并開(kāi)始減1計數,又經(jīng)過(guò)N個(gè)時(shí)鐘周期后才輸出一個(gè)負脈沖。當GATE=1時(shí),允許計數,GATE=0時(shí),禁止計數。這樣就實(shí)現了方式4基本的軟件觸發(fā)功能。
if clk1'event and clk1='0' then  ——時(shí)鐘脈沖下降沿到來(lái)
if gate1='1' then         ——門(mén)控位為1,允許計數
if ce1>"0000000000000001" then
ce1<=ce1-1;
——減1計數,ce為計數執行部件
elsif ce1="0000000000000001" then
out1<='0';           ——初值減到1時(shí)輸出低電平
     ce1<=ce1-1;         ——繼續減1
elsif ce1="0000000000000000" then
out1<='1';           ——初值減到0時(shí)輸出高電平
    end if;
   elsif gate1='0' then
——門(mén)控位為0,禁止計數
    null;
   end if;
  end if;
上面的小程序雖不完整但是卻描述出了方式4的軟件觸發(fā)基本功能。若在計數過(guò)程中改變計數值,新值寫(xiě)入后的下一個(gè)CLK周期時(shí),此計數值被寫(xiě)入計數執行部件并從新的計數值開(kāi)始計數.如果寫(xiě)入的計數值是兩個(gè)字節,那么寫(xiě)入第一個(gè)字節時(shí)計數不受影響,寫(xiě)入第二個(gè)字節后的下一個(gè)時(shí)鐘周期,計數執行部件獲得新值,并從新值開(kāi)始重新計數,叫做軟件再觸發(fā).軟件再觸發(fā)功能只要在上面的程序中加入相應的判斷信號和控制信號即可實(shí)現。
完整的8253寫(xiě)過(guò)程流程
實(shí)際上完整的8253就是一個(gè)擁有多個(gè)進(jìn)程的復雜結構體。讀總線(xiàn)過(guò)程、寫(xiě)總線(xiàn)過(guò)程、每個(gè)計數器的6種工作方式都是一個(gè)獨立的進(jìn)程.進(jìn)程之間是并行的,只要進(jìn)程的敏感信號發(fā)生變化,該進(jìn)程就被觸發(fā)一次,而進(jìn)程內部是按照時(shí)序順序執行的。以寫(xiě)過(guò)程為例,寫(xiě)總線(xiàn)進(jìn)程本身是靠敏感信號wr和cs來(lái)觸發(fā)的,無(wú)論寫(xiě)入控制字還是寫(xiě)入計數初值后,寫(xiě)總線(xiàn)進(jìn)程都會(huì )對外發(fā)出信號以表示某個(gè)計數器的控制字寫(xiě)入完畢或者某個(gè)計數器的某個(gè)工作方式的計數初值已經(jīng)寫(xiě)入,可以進(jìn)行計數了。而這些信號又相應的作為其他進(jìn)程的敏感信號,進(jìn)程之間的通信就是依靠這些信號來(lái)完成的。這些進(jìn)程之間都是并發(fā)執行的,具體哪個(gè)進(jìn)程被執行取決于控制字。圖3給出了寫(xiě)過(guò)程的流程,讀過(guò)程與之類(lèi)似。

設計結果驗證
本設計開(kāi)發(fā)軟件采用Altera公司的集成開(kāi)發(fā)軟件MAX+PLUS II 10.2完成。并用該公司的ACEX 1K系列芯片予以驗證。
之所以選用ACEX 1K系列芯片,是因為它是一種低成本高密度的FPGA芯片系列,是首選的中規模器件產(chǎn)品。它具有如下特點(diǎn):
* ACEX 1K采用查找表(LUT)和EAB(嵌入式陣列塊)相結合的結構,特別適用于實(shí)現復雜邏輯功能存儲器功能,例如通信中應用的數字信號處理、多通道數據處理、數據傳遞和微控制等。
* 典型門(mén)數為1萬(wàn)到10萬(wàn)門(mén),有多達49152位的RAM(每個(gè)EAB有4096位RAM)。
* 器件內核采用2.5V電壓,功耗低,能夠提供高達250MHz的雙向I/O功能,完全支持33MHz和66MHz的PCI局部總線(xiàn)標準。
* 具有快速連續式、延時(shí)可預測的快速通道互連;具有實(shí)現快速加法器、計數器、乘法器和比較器等算術(shù)功能的專(zhuān)用進(jìn)位鏈,以及實(shí)現高速多扇入邏輯功能的專(zhuān)用級連接。
通過(guò)仿真、綜合,并下載到FPGA中進(jìn)行驗證,本設計可以很好地實(shí)現其功能?!?/P>

參考文獻
1 曾繁泰,陳美金. VHDL程序設計
2 林明權. VHDL數字控制系統設計范例

塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理


關(guān)鍵詞: FPGA IP VHDL

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>