新聞中心

EEPW首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的可編程定時(shí)器/計(jì)數(shù)器8253的設(shè)計(jì)與實(shí)現(xiàn)

基于FPGA的可編程定時(shí)器/計(jì)數(shù)器8253的設(shè)計(jì)與實(shí)現(xiàn)

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

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

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

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

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

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

參考文獻(xiàn)
1 曾繁泰,陳美金. VHDL程序設(shè)計(jì)
2 林明權(quán). VHDL數(shù)字控制系統(tǒng)設(shè)計(jì)范例

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


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

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉