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