簡易邏輯繪圖設計發展電路實驗應用例
3-1 範例一: 二對四解碼器(decode24.gdf)
1. 電路原理及發展:
數位組合邏輯電路中最簡易應用為解碼器,例如將二個s0,s1輸入狀態共有四個組合予以解碼成對應各別輸出m0,m1,m2,m3,對應輸出及輸入關係式應為:
m0=/s0×/s1 m1=s0×/s1
m2=/s0×s1 m3 =s0×s1
將輸入S0,S1分別以NOT倒相閘反相成/S0,/S1後再透過AND閘組合成個別之輸出,因此同上一章操作例需由ENTER
SYMBOL檔中之PRIM分支檔中選擇NOT閘及AND閘組合連線成如下圖3-1之電路圖。
圖3-1 為二對四解碼器之電路繪圖
根據上列所繪電路及各輸出入接腳設定於Altera公司之84
pin接腳8282ALC-4型之cpld拖拉線如圖3-2所示,並予以組譯完成後,以dnld3程式予以載入基本數位邏輯實驗器,即完成此數位電路設計及接線測試實驗如下:
圖3-2 為二對四解碼器之IC接線配置圖
當我們設計測試完成一個電路圖後便可在“檔案F”中作Create
Default Symbol將此圖檔於現行之檔案目次下存入符號檔內當作一只IC或圖檔群,以後可像7400等叫出此編號予排列繪圖就可以,是相當方便的,此方塊圖群可由“編輯E”中予以叫出如下圖3-3所示:
圖3-3 為二對四解碼器之IC圖群方塊接線配置圖
2. 測試與實驗:
二對四解碼器之輸入端由P01=S0,P02=S1之DIP開關並對應LED顯示予以輸入,而輸出則由P55=M0,P56=M1,P57=M2,P58=M3予以輸出再透過CD,40106驅動LED顯示,對應輸入輸出如下真值表:
S1
S0
M0
M1
M2
M3
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
1
1
0
0
0
1
3-2 範例二 算術運算單元全加器
1. 電路原理及發展:
二進位加法運算中,1+1=0進位1,而1+0=1進位為0,0+1=1故沒進位=0,0+0=0也沒進位,故此不含進位運算之二進位加法器稱之為半加器,此半加器即為a(b之運算結果,而進位值則為a×b之結果,也就是說和s=a(b進位c=a×b等二種邏輯運算結果,但此僅是第一位之運算,若到第二位運算時必須將前一位之進位也一起加上,故形成3位元之加算,此三位元加算須使用二個半加器組成,即s=a(b(c,進位就變成c(a×b)+(a×c)+(b×c)之組合運算,此稱為全加器,根據上列分析設計繪出電路如圖3-4所示:
圖3-4 全加器之邏輯結構電路圖
一樣我捫也將此電路存檔作為一個IC模組,檔名相同為fadd.sym,以後將可隨時很方便的叫出應用,各接腳對應ALTERA公司所生產之8282編號CPLD之各接腳設定如圖3-5所示,將實驗測試如下:
圖3-5 全加器之驗佈線圖
2. 測試與實驗:
全加器之運算單元FADD.GDF含有三位元加法運算,2位元之輸入x,y接到P01,P02之DIP開關對應LED顯示,進位輸入CI接到P03之DIP開關及對應LED顯示,而和S輸出則接到P13端輸出直接驅動DP1之七段LED顯示器之A段,進位輸出CO接到P14之DP1七段LED之B段顯示,對應輸入輸出如下真值表:
X=P01
Y=P02
CI=P03
S=P13
CO=P14
0
0
0
0
0
1
0
0
1
0
0
1
0
1
0
1
1
0
0
1
0
0
1
1
0
1
0
1
0
1
0
1
1
0
1
1
1
1
1
1
3-3 範例三 四位元加法器(4fadd.gdf)
1. 電路原理及發展:
將全加器四個加以並聯,而進位予以串聯,就是將CO輸入到CI串聯形成四位元全加器,將實驗五之全加器模組四個叫出予以並聯,CO,CI串聯如圖3-6所示,CPLD之接腳設定如圖3-7其中CI輸入是接於P34,加數及被加數輸入P01-P09,和輸出是接到P55-P63,對應此電路測試實驗如下:
圖3-6 四位元加法器電路
圖3-7 四位元加法器之接腳設定圖
圖3-7 (續)
2. 測試與實驗:
四位元加法器運算單元4ADD.GDF含有四位元加法運算,及一個進位CI輸入,被加數為X0,X1,X2,X3,加數為Y0,Y1,Y2,Y4,結果之和數為S0,S1,S2,S3及CO輸出,根據全加器法則對應八個輸入之被加數及加數和進位輸入等9個位元以任意數予以輸入相加後觀察並記錄其輸出和及進位輸出如下表列,並檢測是否正確?
CI
X3
X2
X1
X0
Y3
Y2
Y1
Y0
CO
S3
S2
S1
S0
上列六個基本邏輯實驗電路都相當簡單,但可看到是一步一步漸近式發展而來,深入淺出,極易學習,且可以看到實驗測試與傳統以麵包板或萬用PCB連接得密密麻麻繁雜像蜘珠網比較起來是相當簡潔方便多了,至於連接到電源,訊號源,輸入開關,訊號脈衝,LED驅動顯示或七段LED驅動顯示等極為方便,線路清晰一目了然,實在是數位電路之一大革命。
前面六個基本實驗也可使用簡易之PAL16L8或GAL16V8之20PIN約二十幾元之IC就可達成,但若電路再複雜些如八位元全加器或減法器則PAL,GAL將無法勝任,故將再往下進一步發展作實驗測試:
3-4 範例四:HDL語編寫布林表示式及等式作組合邏輯設計
對應組合邏輯之編寫使用布林表示式及等式設定是最簡潔方便,在組合邏輯標示語法時,可宣告節點NODE,定義多位元之群組GROUPS,條件邏輯等等及雙向接腳BIDR之宣告,例舉如下:
SUBDESIGN boole1
(
a0 , a1 , b
: INPUT;
out1, out2
: OUTPUT;
)
BEGIN
out1 = a1 &
! a0 ;
out2 = out1 #
b ;
END ;
上列邏輯語中宣告a0,a1,b為輸入,而out1,out2則宣告為輸出故邏輯語仍以BEGIN指令開始,以END指令作結束,以“=”代表邏輯等式,“&”代表和閘AND而“#”代表或閘OR之運算,“!”則為倒向NOT運算,以一般邏輯式則為:
out1 = a1 × /a0 out2 = out1
+ b
3-5範例五 :HDL編寫八位元加減器
圖3-8 gadds8.tdf之八位元加減運算之邏輯語法編寫內含
將上列程式予以設定接腳如圖3-9並予以組譯載入測試實驗之。
圖3-9 gadds8.tdf之八位元加減運算之實驗接腳圖
將上列邏輯描述語也可如同繪圖法一樣予以模組化存檔,且可由繪圖模式呼叫一起應用,當然也可混合使用,模組化存錄操作與繪圖法相同,於檔案選項Files下執行Create
Defealt Symbole功能則將此邏輯語模組化存於.sym檔,可於繪圖法中取用此邏輯語模組方塊圖與繪圖法混合使用,取用此邏輯語模組其檔案名稱與原檔案名稱相同,但附屬檔名為.sym不同,取用出來時如下圖3-10所示,由於輸入輸出為群體化故以巴士線格式繪出輸入輸出線,使用方法將於往後說明及操作應用,若於此模組化方塊內CLICK二下欲叫出其內部結構時將出現如圖3-8之邏輯語結構。
圖3-10 8addsb.tdf 八位元加減運算之邏輯邏輯語模組圖
3-5範例五:以HDL之IF THEN或CASE WHEN 編寫八位元ALU
若要設計八位元ALU在前面之繪圖法中到可看到有點煩雜,若使用邏輯語法之多條件判別運算則相當簡易,例舉說明如下:
若以s0,,s1,s2三個輸入作八種運算模式選擇作多重條件設定則需以IF
s [ ] = = xx指令條件作THEN之執行運算,接著再以SLEIF s [ ] ==yy THEN等繼續依條件判別而執行對應不同之運算,s2作算術和鑼輯運算之選擇,當s2=0時為算術運算,若s2=1則為邏輯運算,s2
s1 s0= 000=0時為加算,當s2 s1 s0=001=1時為減算,s2 s1 s0=010=2為a[ ]之加一運算,s2
s1 s0=011=3則為a[ ]之減一運算,若s2=1即s2 s1 s0=100=4則為邏輯運算即將a[
]作NOT邏輯運算,當s2 s1 s0=101=5則為邏輯運算即將a[ ]與b [ ]作AND邏輯運算,s2
s1 s0=111=6邏輯運算即將a[ ]與b [ ]作OR運算,當s2 s1 s0=111=7則邏輯運算為將a[
]與b [ ]作XOR互斥或閘邏輯運算,類同於前章所介紹之8位元ALU,圖3-11為此8位元ALU運算單元之邏輯描述語法之HDL語言。IF指令後需以ENDIF結束,若有往後條件判別繼續執行時則需以“ELSIF指令作為標示判別,圖4-11邏輯語法標示著以”IF“條件開始,THEN為運算式,接著以”ENDIF“結束或以”ELSIF“另一條件判別,”THEN“為對應運算,一直連著判別運算,若條件沒有全部作判別時其餘則以”ESLE“指令之運算標示告知,不然此ELSE指令可省略。
圖3-11 tgalu.tdf之八位元ALU運算之邏輯語法編寫內含
邏輯語之ALU組譯完成後將接腳配置如圖3-12所示,試予以載入實驗發展系統中作測試,記錄實驗並予討論之。
圖3-12 tgalu.tdf之八位元ALU運算之接腳配置圖
若將IF,ELSIF,THEN指令改成以條件狀態CASE指令作群值a
[ ]之設定條件,搭配WHEN之a [ ]實際值以“n=>”條件引導作運算時,寫法會顯得簡易方便多了,WHEN的意思是當CASE所宣告之條件群值為n值時以=>符號標示導致下列運算,將圖3-11之8位元ALU轉成同等功能語法之,CASE,WHEN,=>等格式描述如圖3-13所示,將其以前面之設定及接腳編排環境下予以組譯並作測試,比較記錄分析之:
短短幾行之邏輯描述語就可設計出十分煩雜之數位結構電路,HDL語法實在是當今數位電路發展之主流:
圖3-13 cgalu.tdf之八位元ALU運算之另一種邏輯語法編寫內含
在電路結構組譯後到底會產生那些檔案呢?我們可叫出已經組譯完成之alu4.gdf檔案再將此檔案由檔頭金字塔叫出後出現如圖3-14之圖示,其中包含此檔案所包含入之各單元結構檔,同時有此檔案同名屬性為.acf之CPLD各種型態設定(Assign),即Altera
Configure Files,另外.RPT為整個檔案組譯完成後各個接腳定義結構,CPLD之邏輯結構單元設定及編牌之.RPT檔以及對應CPLD之各邏輯電路結構單元之設定結構編位(Fitting)之.Fit檔,詳細之各檔功能及相關訊息將於往後討論之。
圖3-14 為alu4.gdf之組譯結構檔案表
3-6 範例六:HDL之TABLE指令編寫七段LED顯示及解碼器
BCD 對應七段LED顯示之解碼若以真值表繪製後須再以化簡後列邏輯關係式,即AND,OR運算式再予以組譯而成,若繪邏輯電路則更煩雜,HDL語法中有“TABLE”指令將輸出入關係以列表方式列出後,組譯器會自動將其組譯化簡成邏輯運算閘結構,以圖3-15所列為BCD碼之A,B,C,D輸入對應七段碼顯示0
- 9及A,B,C,D,E,F等字形輸出之a - f顯示碼輸出運算:
由邏輯語中可見輸入以i [3 .. 0]之邏輯群作輸入,而輸出分別為a,b,c,d,e,f,g等標示之,TABLE
指令下應標示如下:
I [ 3..0 ] => a, b, c, d, e, f
,g等輸入,輸出格式標示著,故以下之真值表表格應對齊此表格排列標示:
H"0" => 1, 1, 1, 1, 1, 1, 0以下依次排列之。
若輸入群體之標示也可改成單體排列序標示法如圖3-15所示,將此二個邏輯語法分別建立.SYM之符號模組檔時其方塊結構將稍有不同,圖3-16所列為群組化之輸入標示法與各別標示法之方塊模組圖:
以群體標示輸入時,其所建立之符號模組是以巴士線BUS匯流排標示,若以個體標示時其輸出入線各以一條標碼線型態繪出。
將圖3-15或圖3-16予以設定組譯並標示CPLD各接腳設定如圖3-17所示,輸出端接於DP1之七段顯示器A-F段予以對應顯示輸出,此七段顯示器之陰極以短路夾接於J7之GND地端即可。
圖3-15 為BCD群體式對應0-F之七段LED顯示解碼邏輯語
圖3-16 為BCD各別式對應0-F之七段LED顯示解碼邏輯語
圖3-17 為BCD對應0-F之七段LED顯示解碼邏輯模組
3-6-1 TABLE指令編寫作記憶體,I/O解碼器之運算
微電腦記憶體位址分配解碼控制以及週邊之解碼控制,其位址線A15-A0及m/io,rom,ram,print,sp
[ ]等之解碼控制設計如圖3-18。
圖3-18 微電腦記憶體及週邊解碼邏輯描述語
圖3-18解碼邏輯語中記憶體ROM,RAM之位址分配相當廣大且佔好幾萬個位址,若一一將每個輸入變數addr
[15.. 0]等共64k定址的話,ROM定址為0000H - 3FFFH之16K位址要列真值表簡直是發瘋的事,但卻可以將各位元不管其為0或1的變化都包含在內之各位元以“X”符號標示Don't
Care則真值表將簡化多了,圖3-18描述之ROM之解碼定址為:
ROM致能為1時即為{!( m/io) &
!addr15 & !addr 14 },addr13 - addr0之值則以x標示不管之狀態值,RAM之解碼定址為:
RAM致能為1時即為{!( m/io) &
addr15 & !addr 14 & !addr13},而其餘addr12 - addr0之值則以x標示不管之狀態值,故RAM之解碼定址為8000H
- 9FFFH值:
將上列邏輯描述語編輯好後對應CPLD予以設定型態後,先作儲存及檢測(Save
& Check),若有錯誤(Error)或警告(Warning)訊息時可根據其訊息予以修改直到無誤為止,有的警告是沒關係的,當初步檢測完成後,需對應各個輸入及輸出腳位予以設定編排後再重新予以完整之組譯,一切都正常後就可載入發展系統中根據接腳設定之輸出入訊號作對應之測試,實驗,記錄並討論之。
3-7範例七:時序邏輯:同步計數器
在同步計數器中,不但是脈衝波要同步計數,連清除(CLEAR)及控制脈衝輸入之致能也要與CLK同步,這在高頻計數偵測電路之應用上是相當重要的,圖3-19採用同步式清除(CLEAR)及致能(ENABLE)控制,此種在N模數計數控制時是相當重要的,其優點將在往後會予以詳細作測試實驗及討論說明的。
使用D型正反器作計數時,除頻電路是將輸出/Q回授接到D輸入端而成,但CPLD內部鑼輯單元僅有Q輸出,為配合計數致能EN之控制,反向閘由XOR閘控制,若EN=1時輸入回授之Q將會倒向成/Q訊號,但若EN=0則XOR閘並不倒向而令D型正反器保存其原D=Q值而不轉態,即不作計數控制,另使用一個2輸入AND閘,其一端由CLEAR端輸入與XOR閘輸出作AND控制其輸出到D型正反器D輸入端,也就是當CLEAR清除輸入端為0時,經AND
閘控制時轉成0=LOW輸入D端,而需在下一個CLK脈衝來臨時將所有D=0資料輸入而栓鎖著0輸出,此即為同步清除之控制模式。
此種同步清除及同步計數器在使用非2的N次方模數計數時是相當有用的,例如將此四位元同步清除計數器要作除10計數時,可將輸出計數到9=1001B值時,因為依序計數故僅需將Q3×Q0=F10與清除控制輸入CLR及致能EN控制一起加入AND閘組合控制,其輸出經NOT閘加入圖3-20模組之CLRN端,當數到9時此CLRN=0就會在第10個CLK來臨達10之計數值時會令所有計數值清除為0000B值,若不是使用同步清除(CLEAR)控制,而改採用圖6-14電路之直接清除控制端時,回授清除須取Q3×Q1=11B即1010B值作直接清除控制,但此時所有輸出會有此1010B之計數值瞬間出現而產生短瞬之GLITCH訊號出現,雖然極短暫但在高頻計數之高脈衝高靈敏偵測計數下是會產生錯誤計數的,但若採用同步清除式之同步計數器時將會在第10個計數脈衝來臨時正確地清除為0000B值,各輸出決不會出現瞬間之1010B值之雜訊而產生錯誤之計數值。
圖3-19 四位元同步清除控制之同步計數電路(SCLRCNT.GDF)
圖3-20同步清除控制之同步計數器極適合高頻計數之回授清除式N數計數器,要作N數計數時需在N-1=M數時將其為1值之輸出作NAND運算控制再配合EN控制作同步回授式N模數計數器了。
圖3-20 四位元同步清除控制之同步除10計數電路(SDECCNT.GDF)
3-7-1 各種HDL作多功能同步計數器
圖3-21 四位元同步清除控制之同步計數HDL語法(psclrct.tdf)
同步計數器之HDL描述法在計數方面之描述相當簡單,例如圖3-21之HDL描述僅為count[].d=count[15..0].q
+ 1其意思是說D型正反器共使用16組,其D輸入值每次在CLK來臨時等於輸出Q值再遞增加一回授回來等於輸入D值。
注意!在描述清除(CLR),及控制致能(ENA)時是在條件描述環境下,因此需與輸入之脈衝波CLK同步,而各正反器之脈衝波ff
[ ].clk=clk之描述說明所有正反器是並接於clk輸入端,但清除clr之描述是當clr輸入為1時令所有ff[].d=0值,此意即僅令正反器之D輸入為0值,故HDL組譯器必需根據此種描述以組合閘連同並列資料傳輸作運算,因此當D被設為0時要等下一個脈衝波CLK來臨時才會令輸出Q=D=0之清除運作,故此為同步式(CLK)之清除控制。
16位元計數器,以HDL語法描述是簡易多了,要以繪圖法實在不知要畫到什麼時後,但若將四位元除十計數電路組成元件模組就方便多了,圖6-21即為此種應用,若以HDL描述法很簡易的就可完成,圖3-22為8位元之二個十進位除10之除100同步計數控制HDL語法。圖3-22對應二個除十計數器分別予以描述,CNTA之計數遞增條件為ENA=1時,但當計數到CNTA.D=9時CNTA.D=0,為同步式,左邊所描述為DFF正反器之輸入端即D輸入,故在下一個CLK來臨之第10個脈衝時因CNTA.D=0而令輸出CNTA.Q=0達到同步除十之正確敘述,若CNTA.D不為9時即(ELSE)之描述令CNTA.D=CNTA.Q+1,注意!輸入端必需寫在左邊,而輸出端需寫在右邊,因DFF之D為輸入Q為輸出,若不予標示則左邊代表D而右邊代表Q,可簡化為CNTA=CNTA+1之描述,注意!IF指令後為條件敘述而後為對應執行之THEN指令,此時條件之後必需有一個條件不成立之執行命令ELSE宣告對應執行,最後須有END指令終結,若IF之條件COND1後之THEN執行EX1後,若在非條件一COND1之情況下另有條件時可以ELSIF指令宣告另一個條件COND2後又以THEN導引對應其執行EX2,若此EX2之執行又可設定條件之IF作COND3條件及其對應執行之THEN後EX3執行,每一個IF都需要以END
IF作終結,故圖3-22之CNTA敘述是這樣的:
1. IF CLR(COND1) THEN CNTA[]=0(EX1);若COND1則執行EX1
2. ELSIF ENA(COND2) THEN;非COND1則另一COND2對應執行
3. IF CNTA[]==9(COND3) THEN CNTA=0(EX2);新的IF條件COND3
4. ELSIF CNTA=CNTA+1(EX3);非COND3條件之對應執行EX3
5. END IF;終止第3行之COND3之IF指令
6. ELSE CNTA=CNTA(EX4);對應非COND1及非COND2之執行
7. END IF;終止第1行之IF指令
注意!IF及THEN ELSIF ELSE END
IF等搭配對應執行確實不可混亂,否則錯了就很麻煩。
SUBDESIGN psclr99
( clk,ena,clr :INPUT;
a[3..0] ,b[3..0] :OUTPUT;
)
VARIABLE
cnta[3..0],cntb[3..0]
:DFF;
BEGIN
cnta[].clk =clk; cntb[].clk=clk
;
a[]=cnta[]; b[]=cntb[]
;
IF clr THEN cnta[].d =0
;
ELSIF (ena==VCC)THEN
IF (cnta[]==9) THEN
cnta[]=0
;
ELSE cnta[]=cnta[]+1 ;
END IF ;
ELSE cnta[]=cnta[]
;
END IF;
IF clr THEN cntb[].d =0
;
ELSIF (ena & (cnta[]==9))THEN
IF (cntb[]==9) THEN
cntb[]=0
;
ELSE cntb[]=cntb[]+1 ;
END IF ;
ELSE cntb[]=cntb[] ;
END IF;
END;
圖3-22 二個十進位除100之計數器HDL語法(一)
可將圖3-22之HDL描述法予以綜合編寫,即令CNTA和CNTB同時予以並進描述如圖6-23所示,其描述方式如下:
將各種條件及狀態動作時之對應CNTA﹐CNTB之控制執行同時描述,但要注意!描述CNTA及CNTB之計數狀態時須同時描述其計數之進行,例如IF
CNTA=9 THEN CNTA=0;在此CNTA計數達9轉0之情況下才可作CNTB之計數描述,,故先作CNTB值之檢測IF
CNTB=9 THEN CNTB=0之描述執行,接著作ELSE CNTB=CNTB+1之執行,即在CNTA=9轉為0之下才可令CNTB作加1之執行,接著ELSE之描述當CNTA不為9時才可作CNTA之計數描述即CNTA=CNTA+1而此時CNTB=CNTB即CNTB不作遞增。
SUBDESIGN pslr99
( clk,ena,clr :INPUT;
a[3..0] ,b[3..0] :OUTPUT;
)
VARIABLE
cnta[3..0],cntb[3..0]
:DFF;
BEGIN
cnta[].clk =clk; cntb[].clk=clk;
a[]=cnta[]; b[]=cntb[];
IF clr THEN cnta[].d =0 ; cntb[].d
=0 ;
ELSIF ena THEN
IF (cnta[]==9) THEN cnta[]=0
;若CNTA=9則CNTA=0之情況下
IF (cntb[]==9) THEN
cntb[]=0 ;先判別CNTB=9?而CNTB=0
ELSE cntb[]=cntb[]+1;若CNTB不等於9就作遞增加一之執行
END IF ;CNTB值之判別執行結束
ELSE cnta[]=cnta[] + 1;CNTA不為就執行CNTA遞增1
cntb[]=cntb[] ;而CNTB則維持原值不變
END IF ;結束CNTA為9之判別
ELSE cnta[]=cnta[] ; cntb[]=cntb[];ENA不成立即
;ENA=0時停止計數
END IF ;結束IF CLR THEN之判別END;
圖6-23 二個十進位除100之計數器HDL語法(二)
任何N模數之計數器或除頻器都可利用上述之繪圖法作計數值同步或非同步N-1值或N值之回授重設控制而達成此N模數計數除頻控制,使用HDL描述時則更簡易多了,若將複雜電路作成模組時再予以方塊結構作組合控制設計,同樣對應整體電路功能方塊就簡單明瞭,而且電路作越多其模組元件就越多,故你是一個快速的IC設計製造廠,任何IC或模組電路,不管SSI﹐MSI﹐LSI之規模都是得心應手。
3-7-2 HDL描述多位元含載入之上下計數器
16位元同步載入LOAD控制含計數致能ENA及直接清除CLR之計數器其HDL描述語法可參考圖3-24所示,原則上沒什麼改變與前節中所描述計數器沒有什大差別,僅多一個同步載入d[15..0]之資料由LOAD加以控制而已。
SUBDESIGN ahdlcnt
( clk,load ,ena,clr,d[15..0]
:INPUT;
q[15..0]
:OUTPUT;)
VARIABLE
count[15..0] :DFF;
BEGIN
count[].clk =clk;
count[].clrn=!clr;
IF load THEN
count[].d =d[];
ELSIF ena THEN
count[].d =count[].q+1;
ELSE
count[].d =count[].q;
END IF;
q[]=count[];
END;
圖3-24 HDL描述16位元直接清除及可同步載入之計數器
若加上U/D之輸入作上下計數控制時只要將圖3-25之HDL語法以U/D之條件作二個計數器之判別而對應描述,即IF
U/D則作同圖3-25之描述,在ELSE中即當U/D=0時執行下數計數,與上數計數之描述所不同僅在計數描述之,count[].d=count[].q-1即作遞減之處理就可以了,組譯編輯好後,各輸入輸出腳對應CPLD之設定則如圖3-26所示。
SUBDESIGN ldudcnt
( clk,load ,ena,clr,u/d,d[15..0]
:INPUT;
q[15..0]
:OUTPUT; )
VARIABLE
count[15..0] :DFF;
BEGIN
count[].clk =clk;
count[].clrn=!clr;
IF u/d THEN
IF load THEN
count[].d =d[];
ELSIF ena THEN
count[].d =count[].q+1;
ELSE
count[].d =count[].q;
END IF;
ELSE
IF load THEN
count[].d =d[];
ELSIF ena THEN
count[].d =count[].q-1;
ELSE
count[].d =count[].q;
END IF;
END IF;
q[]=count[];
END;
圖3-25 HDL描述16位元直接清除及可同步載入之上下計數器
圖3-26 16位元直接清除及可同步載入之上下計數器之CPLD接腳配置圖
3-7-3 N模數計數器及七段解碼顯示
將7490或其它除十電路等串接成除10之Qa
Qb Qc Qd BCD碼輸出再接到七段解碼器模組SVNSEG.TDF直接驅動7段LED顯示可作為一個最簡單之計數器,圖3-27使用74169之可載入同步上下計數之二進位四位元上下計數器,類同於74191,電路圖中將繪圖模式之74169與HDL邏輯描述語法SVNSEG.TDF之七段LED顯示解碼器予以連接應用與將各接腳配置如圖3-28所示,脈衝CLK接到發展系統之P73連續脈衝訊號產生器端,對應各載入之P01-P04=AIN-DIN端以及LDN
UPNDN﹐ENPSN﹐ENCLK等同步控制予以一一對應動作及測試,並予記錄討論。
圖3-29描述設計為使用HDL邏輯描述語所設計之四位元計數及七段解碼顯示控制之4CNT7S.TDF檔內含,其間所使用計數器為ALTERA公司元件庫所提供之元件4COUNT以FUNCTION及RETURNS予以描述輸出及輸入腳位,解碼器則以7SEGMENT之HDL邏輯描述語予以宣告同樣以FUNCTION及RETURNS敘述輸出入腳位載入並各別以COUNTER,DECODER之命名以VARIABLE指令宣告,同前電路一樣予以編輯、組譯、載入、實驗測試之。
應注意到七段解碼器之存錄元件接腳名稱,輸入端以矩陣模式標示為I0
I1 I2 I3而輸出端卻標示著A B C D E F G等非陣列式,故在HDL描述時會顯得不方便,尤其在多位數多個七段顯示器要描述接線時顯得比較麻煩,故另外重新編接腳名稱後再以7SEGD存檔,其輸出改稱為S0
S1 S2 S3 S4 S5 S6等矩陣列式編名,將來使用多個時比較可以矩陣簡化格式描述之。
圖3-27 同步上下計數及載入控制並以七段顯示碼顯示(udbcnt.gdf)
圖3-28 同步上下計數及載入控制並以七段顯示碼顯示之實驗配置圖
圖3-29 同步上下計數及載入控制並以七段顯示碼顯示之HDL描述語
3-7-4 多位N模計數器及並列解碼顯示器
將前面所設計之四個十進位數予以存檔建立模組化元件後,又多了個模組化IC可被取來應用,若將四個十進位計數器與四個七段LED顯示器模組加以連接則成為4位數七段LED顯示計數器,HDL描述語法如圖3-30所示,完全以陣列模數作各接腳連接標示,實在是簡易多了,圖3-31為其電路圖。
圖3-30 四個十進位數之同步計數並以七段顯示碼顯示之HDL描述語
圖3-31 四個十進位數之同步計數並以七段顯示碼顯示之電路(4BCDP7S.GDF)
圖3-32 四個十進位數之同步計數並以七段顯示碼顯示之接腳配置圖
圖3-32為CPLD接腳配置圖,若此圖3-33電路將其存錄於檔案元件庫內,元件命名為4BCDP7S,為完整LSI元件,將來取用時比較簡潔方便猶如繪方塊圖,在大系統電路中此種模組方塊圖方式比較易於瞭解系統結構,圖3-33電路中可見電路是簡易多了,如此地延伸下去彷如一個IC製造廠,IC之編號模式及功能將隨心所欲無所不求的。
圖3-33 四個十進位數之同步計數並以七段顯示碼顯示之模組電路(4BCPP7M.GDF)
3-7-5 四位數多工掃描解碼七段LED顯示計數器
前面所介紹四位數計數顯示器其對外輸出接腳數為4×7=28條接線,使得IC模組化後其體積一定相當大,若採用多工掃描方式將四個十六進位計數器之輸出分別接到四個四位元多工器作掃描選擇輸出時,四個多工器之四個輸出再接到一個七段LED顯示解碼器作七段顯示輸出,而多工器之輸入掃描控制碼則由另一個時脈衝經除頻輸出S0﹐S1之00﹐01﹐10﹐11等四個碼加以選擇控制掃描,此S0﹐S1再經一個2對4解碼器輸出C0﹐C1﹐C2﹐C3四個訊號以便控制七段共陰極LED之陰極端作掃描控制,圖3-34為完整四位數十六進制七段LED掃描顯示控制計數器電路,C端輸入為掃描顯示控制之頻率輸入,其再經一個十六進位除頻取C,D端輸出到多工器之S0﹐S1端作快速掃描輸出顯示,C﹐D端同時接到2對4解碼器作C0﹐C1﹐C2﹐C3輸出分別控制四個七段LED顯示之共陰極端作掃描控制。
將圖3-34電路中之十六進制計數器改成十進制計數器DECCNT.GDF電路元件時即成為四位數十進位制之計數器以掃描多工方式接到一個七段LED解碼顯示器予以掃描顯示觀測,圖3-35可被用來作為計數器或計頻儀之常用電路。
圖3-34 四位數十六進制多工掃描解碼七段LED顯示計數器電路(4BINSCN.GDF)
圖3-35 四位數十進制多工掃描解碼七段LED顯示計數器電路(4DSCN7S.GDF)
圖3-36 四位數多工掃描解碼七段LED顯示計數器之接腳配置圖
將上列各種多位計數多工掃描顯示器予以依次作編輯、組譯、對應各輸入輸出腳予以拖拉定位如圖3-36所示,並載入發展系統中分別予以測試分析、實驗記錄、討論,注意!掃描頻率C端之輸入需適當的調整觀察,或輸入掃描頻率為4kHz以上時因經除16故掃描頻率為250Hz,即每位數掃描時間為0.25MS,四位數掃描週期為1MS時間在視覺暫留時間以上,可同時觀測到四個位數值之顯示。
圖3-37 四位數十六進制多工掃描解碼七段LED顯示計數器模組化電路
圖3-38 四位數十進制多工掃描解碼七段LED顯示計數器模組化電路
同樣以圖3-37及圖3-38電路模組化予以編輯、組譯,並載入發展系統中分別予以測試分析、實驗記錄、討論。