基于可編程器件的任意進制計數(shù)器的設(shè)計方法
1 引言
目前計數(shù)器設(shè)計主要有軟件、硬件電路搭建和EDA技術(shù)編程實現(xiàn)等多種方式。其中,EDA技術(shù)編程實現(xiàn)方式由于具有軟件的靈活性和接近硬件電路計數(shù)器的最高計數(shù)頻率而應(yīng)用廣泛。但對于位寬8 bit以上,模式較復(fù)雜的計數(shù)器采用EDA技術(shù)編程、調(diào)試卻非常繁瑣。Altera公司考慮到工程上的具體應(yīng)用,增加MAX+plus II設(shè)計軟件的靈活性,設(shè)置LPM(Librarv of Parameterized Moclules)元件庫供設(shè)計人員使用。該庫包含一些常用功能模塊所生成的元件,其元件引腳和參數(shù)由用戶直接指定,可適應(yīng)不同設(shè)計需要(如利用LPM元件庫中的lpm_counter元件設(shè)計任意進制計數(shù)器)。使用LPM元件庫優(yōu)點如下:(1)LPM設(shè)計的電路與結(jié)構(gòu)無關(guān);(2)設(shè)計人員利用LPM設(shè)計時,不用擔(dān)心芯片利用率和效率等問題,無需自行設(shè)計基本的標(biāo)準(zhǔn)邏輯單元來構(gòu)造某種功能,直到設(shè)計結(jié)束,設(shè)計人員都無需考慮其最終結(jié)構(gòu),設(shè)計輸入和模擬仿真獨立于物理結(jié)構(gòu)。作為EDIF(電子設(shè)計交換格式)標(biāo)準(zhǔn)的一部分,LPM得到EDA界的廣泛支持。
2 lpm_counter元件介紹
lpm_counter是LPM元件庫的可調(diào)參數(shù)計數(shù)器元件,其最大計數(shù)位寬為32 bit,最小計數(shù)時鐘周期達8 ns(125 MHz,使用EPM7032LC44-6實現(xiàn));實現(xiàn)加、減或可逆計數(shù);同步或異步清零/置數(shù)功能可選;通過參數(shù)設(shè)置,實現(xiàn)任意進制、輸出位寬不超過32 bit的加、減或可逆同步/異步計數(shù)器。
2.1 引腳及功能描述
1pm_counter元件的引腳端中,只有時鐘端是必選的,需要外界提供計數(shù)信號;其他引腳端都為可選,當(dāng)這些引腳端未選中時,其值為缺省值,引腳在計數(shù)器圖形符號中不顯示。
各引腳端功能描述如下:
data[]:數(shù)據(jù)輸入總線端,輸入信號位寬由LPM_WIDTH決定,用于異步或同步置數(shù)。
clock:時鐘端,上升沿觸發(fā)。
clk_en:時鐘信號輸入允許端;缺省值為“1”(允許)。
cnt_en:計數(shù)允許端,缺省值為“1”(允許)。在同步置數(shù)、同步輸入設(shè)置或同步清零時為“0”(禁止)。
updown:計數(shù)方向控制端,缺省值為“l(fā)”(加計數(shù))。若選擇“LPM_DIRECTION”參數(shù),則該引腳端禁止使用。
cin:低位進位端,若省略,其缺省值為“0”。
aclr:異步清零端,缺省值為“0”(禁止)。如果同時輸入異步清零和異步輸入設(shè)置信號,則異步清零信號有效,屏蔽異步輸入設(shè)置信號。
aset:異步輸入設(shè)置端,缺省值為“0”(禁止)。當(dāng)aset端輸入“1”時,q[]輸出全“1”或為“LPM_AVALUE”指定值。
aload:異步置數(shù)端,缺省值為“O”(禁止)。若選用“異步置數(shù)”端,必須連接“data[]”端。該aload端可置入計數(shù)初始值。
sclr:同步清零端,缺省值為“O”(禁止)。如果同時輸入同步清零和同步輸入設(shè)置信號,則同步清零信號有效,屏蔽同步輸入設(shè)置信號。
sset:同步輸入設(shè)置端,缺省值為“0”(禁止)。當(dāng)sset端輸入“1”時,q[]輸出全“l(fā)”或為“LPM_SVALUE”指定值。
sload:同步置數(shù)端,缺省值為“O”(禁止)。若選用“同步置數(shù)”端,必須連接“dat[]”端。該sload端可置入計數(shù)初始值。
q[]:計數(shù)值輸出端,輸出位寬由“LPM_WIDTH”決定。
eq[15..0]:輸出端,計數(shù)器模值必須小于16。當(dāng)計數(shù)值為c時,則輸出端eq[c]為1(高電平)。例如:當(dāng)計數(shù)值c=0時,則輸出端eq[0]=l;當(dāng)計數(shù)值c=1時,則輸出端eq[1]=1;……。
cout:進位端。
2.2 參數(shù)及功能
lpm_counter元件參數(shù)中LPM_WIDTH參數(shù)是必選項.其他參數(shù)為可選項。各參數(shù)的功能說明如下:
LPM_WIDTH(計數(shù)位寬):該參數(shù)最大取值為32。它決定計數(shù)器置數(shù)端(data[])和輸出端(q[])的位寬;決定LPM_MODULUS的最大取值(2 LPM_WIDTH)。若LPM_MODULUS參數(shù)取值大于2 LPM_WIDTH,則計數(shù)器不能正常工作。
LPM_DIRECTION(計數(shù)方向):有“UP”,“DOWN”和“UNUSED”3種取值。如果使用LPM_DIRECTION參數(shù),則updown端不連接,其參數(shù)默認值為“UP”。
LPM_MODULUS(計數(shù)模數(shù)):該參數(shù)決定計數(shù)器的進制:如果該參數(shù)不設(shè)置,則其缺省值為二進制,且其最大計數(shù)值為2 LPM_WIDTH;如果aload(或sload、asel、sset)所置數(shù)值比LPM_MODULUS參數(shù)大,則計數(shù)值出錯。
LPM_AVALUE(異步計數(shù)初值):如果aset=1,則該計數(shù)初值被加載。如果該指定值比LPM_MODULUS大,則計數(shù)器輸出值出錯。
LPM_SVALUE(同步計數(shù)初值):如果sset=1,則該計數(shù)初值被加載。如果該指定值比LPM_MODULUS大,則計數(shù)器輸出值出錯。
3 設(shè)計實例
某型帶峰谷費率設(shè)置的數(shù)字電能表要安裝一實時鐘模塊,實現(xiàn)日、時、分、秒等計時功能,實現(xiàn)不同時段用戶所耗電能以不同費率計費。圖l為該電能表計時模塊原理框圖。
由于日、時、分、秒計數(shù)器的結(jié)構(gòu)除計數(shù)進制不同外,其他部分完全一樣,因此圖1中僅給出秒計數(shù)電路部分。本設(shè)計實例以其中的秒脈沖計數(shù)器為例,以lpm_counter元件為基礎(chǔ),設(shè)計一個可異步清零、可置數(shù)的60進制異步計數(shù)器.說明采用lpm_counter元件設(shè)計任意進制計數(shù)器的方法。
3.1 調(diào)入lpm_counter元件
首先打開MAX+plus II軟件,然后建立圖形輸入文件“S_count60.gdf”,在圖形編輯器的空白處雙擊鼠標(biāo)左鍵,打開元件輸入對話框。在對話框的Symbol Libraries窗口中雙擊X:maxplus2max21ibmega_lpm(X為MAX+plus II軟件所在盤的盤符);在Symbol Files窗口中雙擊lpm_counter,得到LPM_COUNTER元件。
3.2 參數(shù)設(shè)置
從mega_lpm元件庫調(diào)入的LPM_COUNTER元件,其缺省狀態(tài)為二進制計數(shù)器,必須根據(jù)設(shè)計要求對其設(shè)置,得到符合設(shè)計要求的計數(shù)器。LPM_COUNTER元件的設(shè)置包括參數(shù)設(shè)置和引腳端設(shè)置兩部分,下面分別加以說明:
(1)參數(shù)設(shè)置設(shè)計一個60進制的計數(shù)器,必須設(shè)置LPM_WIDTH(計數(shù)位寬)和LPM_MODULUS(計數(shù)模數(shù))兩個參數(shù),LPM_MODULUS=60;又因為LPM_MODULUS必須小于2 LPM_WIDTH,因此必需滿足LPM_WIDTH≥6,這里設(shè)置LPM_WIDTH=6。如果通過總線置計數(shù)器計數(shù)初值,則其他參數(shù)可不設(shè)置。
(2)引腳端設(shè)置 根據(jù)設(shè)計要求,該計數(shù)器為可異步清零、可置數(shù)60進制異步計數(shù)器,因此對外連接的引腳端應(yīng)包括:clock、clk_en、data[]、aclr、aload、q[]端和進位端cout。此處data[]和q[]端位寬由LPM_WIDTH(計數(shù)位寬)參數(shù)決定。
(3)操作步驟在Symbol Files窗口中雙擊lpm_counter在得到LPM_COtINTER元件的同時,將打開如圖2所示的參數(shù)設(shè)置對話框。
在對話框中的“Ports”區(qū)的“Name”窗口中選中所需引腳端,然后在“Port Status”區(qū)選擇“Used”,重復(fù)上述過程,直到所需的引腳端全部設(shè)置完畢。在對話框中的“Parameters”區(qū)的“Name”窗口中選中需要設(shè)置的參數(shù)。然后在“ParametersValue”編輯窗口中填入相應(yīng)的參數(shù)值,單擊按鈕“Change”,即可完成該參數(shù)的設(shè)置;重復(fù)上述過程,直到所需參數(shù)全部設(shè)置完畢,點擊“OK”,退出LPM元件參數(shù)設(shè)置對話框。以上設(shè)置完成后,就可按常規(guī)圖形輸入方式給元件添加輸入、輸出引腳,并對引腳命名,從而完成整個設(shè)計。完成設(shè)計后的電路如圖3所示。
3.3 仿真測試
對上述電路進行波形仿真,得到圖4所示的仿真結(jié)果。從仿真結(jié)果可看出,該計數(shù)器實現(xiàn)60進制加計數(shù)、清零和置數(shù)功能,進位脈沖正常。并將其下載到FPGA器件進行測試,各控制端功能正常,計數(shù)器運行良好,性能穩(wěn)定,達到設(shè)計目標(biāo)。
3.4 方案實現(xiàn)
采用上述方法分別設(shè)計出秒、分、時、日計數(shù)器及秒脈沖形成分頻器。該分頻器對系統(tǒng)時鐘11.059 2 MHz脈沖進行分頻,從而形成秒脈沖。通過對這些計數(shù)器進行組合,共同構(gòu)成完整的實時鐘模塊。該模塊清零、校時等功能由上位機通過RS485總線對其控制實現(xiàn)。通過裝機運行,測得月誤差在27 s內(nèi),達到較高的計時精度。
4 結(jié)束語
由于MAX+plus II設(shè)計軟件的mega_lpm元件庫(可調(diào)參數(shù)元件)所提供的庫元件都經(jīng)Ahera公司的測試和優(yōu)化.可保證元件的邏輯穩(wěn)定性,保證可編程器件的芯片利用率及效率達到最優(yōu)。因此使用LPM庫元件設(shè)計計數(shù)器電路時,可使設(shè)計人員擺脫硬件電路的束縛以及避免軟件編程、調(diào)試等煩瑣細節(jié)問題,從而系統(tǒng)設(shè)計大大提高設(shè)計效率。