1引言
半導(dǎo)體存儲器通常在電路中用于存放程序或數(shù)據(jù)。在長期的電路實(shí)踐中,筆者發(fā)現(xiàn),通過向非易失性(即掉電不會丟掉所存數(shù)據(jù))并行存儲器的存儲單元寫入特定的數(shù)據(jù),并合理地安排并行存儲器的地址線(An)、數(shù)據(jù)線(Dn)和使能(CE)、門控(OE)控制線引腳的功能,可以非常巧妙地將其作為組合邏輯芯片使用,大大簡化了電路的硬件設(shè)計。尤其在存儲器價格相當(dāng)?shù)土慕裉,合理、巧妙地使用非易失性并行存儲器,不僅可以簡化電路、方便調(diào)試、提高可靠性,還能有效地降低研發(fā)成本。本文將對非易失性并行存儲器作為多功能組合邏輯和時序邏輯芯片進(jìn)行研究探討。如果沒有特別指出,文中提到的存儲器均指非易失性并行存儲器。
在數(shù)字電路設(shè)計中,我們常常希望有某個特定功能的芯片,而市場上很難找到甚至沒有芯片能提供所需要的功能。這時,一個切實(shí)可行的辦法就是采用可編程邏輯器件(PLD)定制功能,這里討論用存儲器法實(shí)現(xiàn)。這種方法很容易推廣到其它容量和類型的非易失性并行存儲器,如EPROM、EEPROM、Flash等。即使以后推出新型工藝的非易失性存儲器芯片,只要是并行輸入/輸出的,存儲器法都適用。
2用EPROM2764(8k×8)實(shí)現(xiàn)的幾種電路
21將2764作為十六進(jìn)制-七段數(shù)碼管譯碼驅(qū)動器
數(shù)字電路中經(jīng)常需要十六進(jìn)制七段數(shù)碼管譯碼驅(qū)動芯片。已知的74LS48、74LS248等芯片由于只是BCD碼-七段數(shù)碼管驅(qū)動器,都不能正確顯示十六進(jìn)制A~F,如用門電路設(shè)計,雖然理論上可行,但所需芯片太多,接線過于復(fù)雜,而用存儲器實(shí)現(xiàn)卻很方便,并可自由選擇共陰或共陽譯碼輸出。限于篇幅,略去2764作為十六進(jìn)制七段數(shù)碼管譯碼驅(qū)動器(包括 74LS48)的真值表。
對2764編程寫入真值表中的數(shù)據(jù),僅使用16個地址單元(A3~A0:0000~1111)就能實(shí)現(xiàn)基本的十六進(jìn)制數(shù)到七段數(shù)碼管顯示的共陰譯碼功能。如果要驅(qū)動的七段數(shù)碼管是共陽的,只要將寫入2764的數(shù)據(jù)與D6-D0取反即可。我們只用了2764存儲器8位字長中的7位,未用的D7可根據(jù)電路具體需要用于小數(shù)點(diǎn)顯示或其它功能。
為了使這個譯碼驅(qū)動器能滿足各種場合的需要,我們引入“共陽/共陰選擇”功能,并參照74LS48,添加以下控制引腳:
CA/CK——共陽/共陰選擇,為低時芯片作為共陰型譯碼器;為高時則為共陽型譯碼器。
BI/RBO——滅燈入/下一位無效零消隱輸出,低電平時使七段全滅。
LT——燈測試,為低電平且BI/RBO為高時,a-g輸出全高,即將數(shù)碼管的七段都點(diǎn)亮,用來測試數(shù)碼管或芯片好壞;為高時正常譯碼顯示。
RBI——動態(tài)滅燈輸入,為低電平且LT、BI/RBO為高時,輸入十六進(jìn)制0時使數(shù)碼管不顯示,其它十六進(jìn)制值不受影響(常用于消隱所顯示整數(shù)部分前面的零);為高時輸入十六進(jìn)制0不會使數(shù)碼管消隱。由此再安排真值表(略)。
將真值表中的數(shù)據(jù)按地址寫入2764,沒有用到的高位地址線全部接地,我們就得到了一個功能完整的十六進(jìn)制-七段數(shù)碼管譯碼驅(qū)動器,而且功能上兼容74LS48等BCD碼-七段數(shù)碼管譯碼驅(qū)動器。圖1為其與七段數(shù)碼管的接線圖,圖中CA/CK(2764的3腳)應(yīng)接地,因為數(shù)碼管是共陰型的。RBI、BI/RBO、LT的意義和接法與74LS48完全一樣。
不難看出,在2764的8K個地址單元中我們僅使用了低端的256個。
22將2764作為八通道同相/反相器
由于電路設(shè)計的需要,我們希望有一種芯片提供8位通道,通過一個引腳的電平控制輸出與輸入是同相還是反相。我們知道,一個異或門是可以控制一位通道正反相的,因而用4重異或門74LS86可以實(shí)現(xiàn)希望的功能。但對于8通道來說,就需要2片74LS86。而用1片2764就可以實(shí)現(xiàn),先寫出8通道同相/反相器的真值表(略),再將真值表中的數(shù)據(jù)按其地址寫入 2764,就可以將其作為8通道同相/反相器了。當(dāng)(2764的腳A8)接高電平時,輸出與輸入是同相的;接地時,輸出與輸入是反相的。用于控制是否輸出,高電平時輸出為高阻態(tài),它是存儲器本來的功能,與寫入的數(shù)據(jù)無關(guān)。圖2為其引腳接法。實(shí)現(xiàn)8通道同相/反相器用了2764的512個低地址單元。
23用2764實(shí)現(xiàn)十六進(jìn)制(四位二進(jìn)制)與BCD碼的相互轉(zhuǎn)換
當(dāng)輸入的十六進(jìn)制數(shù)為0~9(二進(jìn)制為 0000~1001)時,輸出的兩個BCD碼的高字節(jié)總為0000,而低字節(jié)與輸入的四位二進(jìn)制相同;當(dāng)輸入的十六進(jìn)制數(shù)在A~F(二進(jìn)制為 1010~1111)時,輸出的高字節(jié)總為0001,而低字節(jié)為0000~0101。這個功能可以用門電路實(shí)現(xiàn),或使用1片74LS154(四十六譯碼器)、2片(74LS147)十線四線優(yōu)先編碼器及8個反相器,但都相當(dāng)麻煩。而用2764存儲器實(shí)現(xiàn)起來卻特別簡單(真值表略)。
由兩個BCD碼轉(zhuǎn)換到十六進(jìn)制則執(zhí)行與上面相反的轉(zhuǎn)換。兩個轉(zhuǎn)換電路分別見圖3(a)、3(b)所示。兩個轉(zhuǎn)換器分別占用8k存儲空間的前16個和256個地址單元。下面討論用1個存儲器實(shí)現(xiàn)2個轉(zhuǎn)換器的問題。

24使2764同時具有以上4種功能
上面例子中,我們都只是用到了2764的8k存儲空間中很少一部分低端地址,未用到的較高位地址線都是接地的,所以絕大多數(shù)存儲單元都閑置著。其實(shí)我們完全可以將各種功能的數(shù)據(jù)按地址分開寫到2764中,以提高芯片的利用率。在使用時將部分引腳置高電平或低電平,選擇出需要的功能。
圖4為用2764實(shí)現(xiàn)上述幾個功能的等效電路。通過改變F1F0(即2764的A10、A9腳)的電平,就可以使2764提供不同的功能。
由于各功能所需的存儲空間不一樣多,我們以需要最多存儲空間的功能為準(zhǔn),讓其它功能的數(shù)據(jù)也都占有這么多存儲空間,并只使用其中的低端地址(當(dāng)然,將幾個需要空間小的功能集中在一起,合著使用一塊與單個需要空間較大的功能相同大小的存儲區(qū),可以進(jìn)一步提高存儲空間的利用率)。在本例中占用空間最大的是8通道同相/反相器,它需要512個地址單元,所以其它3個功能也都占有512個地址單元。這樣仍難免存在存儲地址浪費(fèi)的問題。但即便如此,1片2764可實(shí)現(xiàn)的功能仍是相當(dāng)可觀的——以每個功能需要512個存儲地址計算,2764的8K地址單元就能實(shí)現(xiàn)16個相互獨(dú)立的功能。可見用存儲器實(shí)現(xiàn)組合邏輯功能芯片具有巨大的優(yōu)越性。
由以上例子可以看出,使用存儲器可以非常方便地實(shí)現(xiàn)各種組合邏輯芯片的功能,輸入信號的最大數(shù)目取決于存儲器的地址線條數(shù)(還有門控信號、片選信號等);而輸出信號的最大數(shù)目則取決于存儲器的字長。因此,如果用戶需要的輸入信號較多,可以選擇容量大的存儲芯片;需要的輸出較多,就選擇字長為16位、32位的芯片?傊,只要存儲器地址線和數(shù)據(jù)線條數(shù)滿足要求,就可以實(shí)現(xiàn)任何可以想象到的組合邏輯功能。
需要注意的是,以上我們一再強(qiáng)調(diào)是組合邏輯,而非時序邏輯,是因為存儲器沒有鎖存功能(在讀模式下),所以無法單獨(dú)實(shí)現(xiàn)時序邏輯。但若在存儲器輸入、輸出加上鎖存器,例如采用透明8D鎖存器74LS373、8D邊沿鎖存器74LS374,也是可以定制時序邏輯功能的。
25將2764作為四位格雷碼計數(shù)器
格雷碼是一種“單位間距”碼,其特點(diǎn)是相鄰兩個碼組間只有一位碼的取值不同,因而在通信中是一種可靠性較高的編碼。格雷碼還用于卡諾圖中,進(jìn)行各種信號的邏輯綜合用。從四位格雷碼編碼表(略),可推導(dǎo)出計數(shù)器真值表,如表1所示。





