




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
地址譯碼技術及存儲器接口
6.1I/O端口的尋址方式6.1.1I/O端口I/O端口是微處理器CPU與I/O設備直接通信的地址。實際應用中,通常把I/O接口電路中能被CPU直接訪問的寄存器或某些特定器件稱為端口。CPU通過這些端口發送命令,讀取狀態和傳送數據,因此,一個接口可有幾個端口,如命令口、狀態口、數據口等。有的接口包括的端口多(如8255并行接口芯片有4個端口,8237A芯片內有16個端口),有的端口少(8251、8259A芯片內只有兩個端口)。對端口操作也有所不同,有的端口只能寫或只能讀,有的既可以寫也可以讀。一般一個端口只能寫入或讀出一種信息,但也有幾種信息共用一個端口,如8255的一個命令口可接收兩種不同的命令,8259A的一個命令口,可接受四種不同的命令等。
6.1I/O端口的尋址方式從編程的角度來看,提供給系統和專用程序調用的ROM-BIOS中斷功能及對應的各個軟件中斷例程,實際上都是對指定的I/O接口實施控制。尤其是當你編寫應用程序時要想繞過DOS或ROM-BIOS,直接對硬件設備編程以達到高效運行的目的,就必然涉及對指定的I/O接口進行控制,也就是要通過對I/O接口的端口地址完成讀寫操作。如何實現對這些端口的訪問,就是所謂I/O端口尋址問題。有兩種尋址方式,一種是端口地址與存儲器地址統一編址,即存儲器映射方式;另一種是I/O端口地址和存儲器地址分開獨立編址,即I/O映射方式。6.1I/O端口的尋址方式
6.1.2端口地址編址方式
1.統一編址這種方式是從存儲空間劃出一部分地址空間給I/O設備,把I/O接口中的端口當作存儲器單元一樣進行訪問,不設置專門的I/O指令,凡對存儲器可以使用的指令均可用于端口。68系列、65系列微型機就采用這種方式。統一編址方式由于對I/O設備的訪問是使用訪問存儲器的指令,指令類型多,功能齊全,這不僅使訪問I/O設備端口實現輸入/輸出操作靈活、方便,而且還可以對端口內容進行算術邏輯運算、移位等。另外,能給端口有較大的編址空間,這對大型控制系統和數據通信系統是很有意義的。這種方式的缺點是端口占用了存儲器的地址空間,使存儲器容量減小,另外,指令長度比專門I/O指令要長,因而執行時間較長。6.1I/O端口的尋址方式2.獨立編址獨立編址不占用存儲器空間,微處理器設置專門的輸入/輸出指令來訪問端口,產生專用訪問檢測信號,與地址線結合,形成一個獨立的I/O空間。如Intel系列、Z-80系列機和大型計算機采用這種方式。其最主要的優點是:(1)輸入/輸出指令和訪問存儲器指令有明顯的區別,可使程序編制清晰,便于理解。6.1I/O端口的尋址方式
(2)使用專門的控制信號和。因此,這種方式要求CPU設置兩組讀/寫控制信號,即存儲器讀/寫和I/O讀/寫。例如8086/8088最小模式下要用M/引腳和/構成兩組控制信號;而在最大模式下,由于引腳不夠用,沒有直接輸出M/、和這些對外設和存儲器進行讀/寫操作的控制信號,而是由S2、S1、S0輸出3個總線周期狀態信號編碼送至總線控制器8288,經8288解讀后,再生成存儲器讀/寫(和)和I/O讀/寫(和)兩組控制信號。其缺點是:輸入/輸出指令類型少,一般只能對端口進行傳送操作。6.1I/O端口的尋址方式
6.1.3端口訪問指令80X86CPU構成的PC機,CPU外圍接口芯片及I/O接口部件皆采用獨立的編址方式,采用IN和OUT指令實現數據輸入/輸出操作。以8086/8088為例,其I/O地址空間為64KB,即0000H~0FFFFH(A0~A15),但在IBM-PC/XT機中,僅使用了A0~A9構成的1KBI/O地址空間。其中A9有特殊意義:A9為0的地址是系統板上CPU輔助接口芯片的512個端口地址;A9為1的地址是I/O通道上的512個端口地址。6.1I/O端口的尋址方式
(1) 8086/8088采用I/O端口與累加器之間的傳送。在I/O指令中可采用單字節地址或雙字節地址尋址方式。若用單字節地址,則最多可訪問256個端口。系統主機板上的I/O端口,采用單字節地址,并且是直接尋址方式,其指令格式為:輸入IN AX,PORT ;輸入16位數據
IN AL,PORT ;輸入8位數據輸出 OUT PORT,AX ;輸出16位數據
OUT PORT,AL ;輸出8位數據6.1I/O端口的尋址方式若用雙字節地址作為端口地址,則最多可尋址64K個端口。I/O擴展的接口控制卡,采用雙字節地址,并且是寄存器間接尋址方式,端口地址放在寄存器DX中。其指令格式為:輸入 MOV DX,XXXXH IN AX,DX ;16位傳送或 IN AL,DX ;8位傳送輸出 MOV DX,XXXXH OUT DX,AX ;16位傳送或 OUT DX,AL ;8位傳送6.1I/O端口的尋址方式
(2)80286和80386還支持I/O端口直接與RAM之間的數據傳送。輸入 MOV DX,PORT LES DI,BUFFER_IN INSB ;8位傳送
(INSW) ;16位傳送輸出 MOV DX,PORT LDS SI,BUFFER_OUT OUTSB ;8位傳送
(OUTSW);16位傳送6.1I/O端口的尋址方式這里的輸入/輸出是對RAM而言的。輸入時,用DX:DI指向目標緩沖區BUFFER_IN;輸出時,用DX:SI指向源緩沖區BUFFER_OUT。在INS和OUTS指令前加上重復前綴REP,則可實現I/O設備與RAM之間成批數據的傳輸。在PC系列微機中,不僅匯編語言支持端口的讀/寫操作,C語言、Basic語言等同樣支持端口的讀/寫操作。6.1I/O端口的尋址方式
(3) C語言中的端口讀/寫函數。在PC系列微機上運行的幾種C語言版本,都支持端口的輸入/輸出操作,C語言中的幾個庫函數就是為端口讀/寫設置的,這些庫函數實際上是調用了匯編的IN/OUT指令,因為這些函數已存在于C語言的庫函數中,由于TurboC提供了程序庫支持,使我們可在TurboC集成操作環境下,從編輯源程序,到編譯、鏈接、執行及排錯皆可一氣呵成,大大提高程序設計效率。在接口設計中,常用到的TurboC函數如下:inportb()outport()clrscr()getch()kbhit()delay()sound()6.1I/O端口的尋址方式
【例6.1】利用inportb()函數從指定的輸入端口2F0H讀取一個字節的數據,并顯示在屏幕上。Inportb()的原型為:
inport(intport);頭文件為:
dos.h程序:main(){unsignedcharc;c=inport(0x2f0);printf("data=%0x",c);}6.1I/O端口的尋址方式
【例6.2】將一個字節輸出到輸出端口360H。outport()的原型:
voidoutportb(intport,unsignedcharvalue);頭文件為:
dos.h程序:main(){outport(0x360,0x55);}6.1I/O端口的尋址方式
(4) 運行于Windows9x環境下的VisualC++程序中,對I/O端口的訪問有兩種方法,第一種方法是在C源程序中嵌入匯編代碼,例如:_asm{movdx,264hmoval,100outdx,al}第二種方法是調用函數_inp
和_outp,前者用來讀字節型端口的數據,后者將數據輸出到字節型端口。6.1I/O端口的尋址方式
(5) 在Windows2000環境下,它的安全機制以及對多種硬件平臺的支持,使得用戶已不能直接訪問機器的硬件資源,要和端口打交道,必須編寫相應的設備驅動程序。在將編好的設備驅動程序安裝之后,在VisualC++源程序中對I/O端口最直接的訪問是調用控制I/O操作的API函數(DeviceIoControl)。VisualBasic本身不支持對I/O端口的訪問,可以編寫動態鏈接庫的方法,使其能實現對I/O端口的訪問。6.1I/O端口的尋址方式6.1.4I/O端口地址分配和選用不同的微機系統對I/O端口地址的分配是不同的。例如PC系列機把I/O端口地址空間分成兩部分,即系統板上的I/O芯片和I/O擴展槽上的接口控制卡端口地址。PC/XT和PC/AT系統提供了A0~A9這10位地址線作為I/O端口地址,總共1024個端口。其中,前256個端口(000~0FFH)供系統板上的I/O接口芯片使用,如表6.1所示;后768個端口(100~3FFH)為擴展槽上的I/O接口控制卡使用,如表6.2所示。兩表中所示的是端口的地址范圍,實際使用時,有的I/O接口可能僅用到其中的前幾個地址。6.1I/O端口的尋址方式I/O接口名稱PC/XTPC/ATDMA控制器1000~00FH000~01FHDMA控制器2……0C0~0DFHDMA頁面控制器080~083H080~09FH中斷控制器1020~021H020~03FH中斷控制器2……0A0~0BFH定時器040~043H040~05FH并行接口芯片060~063H……鍵盤控制器……060~06FHRT/CMOSRAM……070~07FHNMI屏蔽寄存器0A0H……協處理器……0F0~0FFH表6.1系統板上芯片的端口地址6.1I/O端口的尋址方式I/O接口名稱PC/XTPC/AT游戲控制卡200~20FH200~20FH擴展器/接收器210~21FH……并行口控制卡1370~37FH370~37FH并行口控制卡2270~27FH270~27FH串行口控制卡13F8~3FFH3F8~3FFH表6.2擴展槽上接口控制卡的端口地址6.1I/O端口的尋址方式I/O接口名稱PC/XTPC/AT串行口控制卡22F0~2FFH2F0~2FFH原型插件板300~31FH300~31FH同步通信卡13A0~3AFH3A0~3AFH同步通信卡2380~38FH380~38FH單顯MDA3B0~3BFH3B0~3BFH彩顯CGA3D0~3DFH3D0~3DFH彩顯EGA/VGA3C0~3CFH3C0~3CFH硬驅控制卡320~32FH1F0~1FFH軟驅控制卡3F0~3F7H3F0~3F7H6.1I/O端口的尋址方式只要設計I/O接口電路,就必然要使用I/O端口地址。在選定I/O端口地址時要注意:(1)凡是已被系統配置所占用的地址一律不能使用。(2)原則上講,未被占用的地址用戶可以使用,但對計算機廠家申明保留的地址,不要使用,否則,會發生I/O端口地址重疊和沖突造成你開發的產品與系統不兼容而失去使用價值。(3)一般用戶可使用300~31FH地址,這是IBM-PC系列機留作實驗卡用的。在用戶可用的I/O地址范圍內,為了避免與其他用戶開發的插板發生地址沖突,最好采用地址開關。6.2I/O端口地址譯碼6.2.1I/O端口地址譯碼方法每當CPU執行IN或OUT指令時,就進入了I/O端口讀/寫周期,此時首先是端口地址有效,然后是I/O讀/寫控制信號或有效,把對端口地址譯碼而產生的譯碼信號同或結合起來一同控制對I/O端口的讀或寫操作。但是PC微機所支持的端口地址數目很多,每次端口操作是針對哪個端口呢?這就要根據對端口地址譯碼所產生的地址選擇信號來選中指定的端口,然后由或控制其讀或寫操作,沒有被選中的端口不產生任何動作。6.2I/O端口地址譯碼按照上面分析的原則,似乎就可以進行I/O端口的選通與讀/寫操作了。但是,實際上I/O地址譯碼電路不僅與地址信號有關,而且還與控制信號有關,它把地址和控制信號進行組合,產生對芯片的選擇信號。因此,I/O地址譯碼電路除了要受A0~A9這10根地址線所限定的地址范圍之外,還要考慮下面的一些控制信號,如:利用、信號控制對端口的讀/寫。用AEN信號控制非DMA傳送。用信號控制是8位還是16位的I/O端口。用(或)信號控制端口奇偶地址。6.2I/O端口地址譯碼由以上分析可知,在設計地址譯碼電路時,除了精心選擇地址范圍之外,還要根據CPU與I/O端口交換數據時的流向(讀/寫),數據寬度(8位/16位),以及是否采用奇偶地址的要求來引入相應的控制信號,從而形成地址譯碼電路。微機中包括許多不同的I/O接口,如串行接口、并行接口、磁盤接口、顯示器接口等,但任何時刻只有一種裝置與CPU通信,外界的各個外設均是通過數據總線與PC做信息交換,各個數據總線是并接在一起的。那么系統是如何區分選擇6.2I/O端口地址譯碼
要通信的外設呢?各個外設裝置本身均有一個控制信號如片選信號(CHIPSELECT,),一般低電平有效,例如要選取外設一做數據傳送,則令外設一的控制信號有效,則外設一的內部數據總線就會打開,而其他各個外設因為控制信號無效而內部呈現高阻抗,自然就與系統數據總線隔離開來。外設的控制信號就是這樣通過I/O地址譯碼而產生的。也就是說,給不同的外設分配不同的端口地址,而端口地址通過譯碼電路產生控制信號來選擇外設。當CPU與某外設進行數據傳送時,只要在地址總線上送出其相應的端口地址,就能選中該外設,再配合其他控制信號,完成數據傳送。6.2I/O端口地址譯碼以PC/XT機為例,8088對外部I/O接口芯片或部件的譯碼是使用A0~A9地址線,結合、、AEN等控制信號線來完成的。其中AEN信號線必須使用。AEN=0時,即不是DMA操作時譯碼才有效;AEN=1時,即DMA操作時,使譯碼無效,避免在DMA周期影響對外設的數據傳送。譯碼電路在整個I/O接口電路設計中占有重要的地位。譯碼電路的輸出信號,通常是低電平有效,高電平無效。6.2I/O端口地址譯碼6.2.2固定式端口地址譯碼所謂固定譯碼是指接口中用到的端口地址不能更改。一般接口卡中大部分都采用固定式譯碼。
(1) 用門電路進行端口地址譯碼。這是一種最基本最簡單的端口地址譯碼方法,它一般采用與門、與非門、反相器及或非門等,如74LS08、74LS32、74LS30等。如圖6.1所示為可譯出2F8H讀操作端口地址的譯碼電路,圖6.1中AEN參加譯碼,它對端口地址譯碼進行控制,從而避免了在DMA周期,由DMA控制器對這些I/O端口地址的非DMA傳送方式的外部設備進行讀操作。6.2I/O端口地址譯碼如果接口電路中需要兩個端口地址,一個用于輸入,一個用于輸出,譯碼輸出可用和信號進行控制,以分別實現讀/寫訪問,此時的一個端口地址等效于兩個端口地址。如圖6.2表示了這種控制電路。6.2I/O端口地址譯碼圖6.12F8H端口譯碼電路6.2I/O端口地址譯碼圖6.22E2H端口讀/寫譯碼電路6.2I/O端口地址譯碼(2)用譯碼器進行端口地址譯碼。若接口電路中需要使用多個端口地址時,則采用譯碼器譯碼比較方便。譯碼器的型號很多,如3-8譯碼器74LS138,8205;4-16譯碼器74LS154;雙2-4譯碼器74LS139和74LS155等。3-8譯碼器74LS138是最常見的譯碼電路之一,它可以從輸入的3個代碼(A、B、C)中譯出8個輸出(Y0~Y7)。它的3個輸入控制端是G1、、,只有當G1=1,==0時,才允許對輸入端A、B、C進行譯碼。74LS138的真值表如表6.3所示。6.2I/O端口地址譯碼輸入控制端輸入代碼輸出G1
CBAY7Y6Y5Y4Y3Y2Y1Y0100000111111101000011111110110001011111011100011111101111001001110111110010111011111表6.374LS138輸入/輸出真值表6.2I/O端口地址譯碼輸入控制端輸入代碼輸出10011010111111100111011111110×
××
×
×11111111×1××
×
×11111111×
×1×
×
×111111116.2I/O端口地址譯碼從表6.3中可以看出,當滿足控制電平,即把G1接高電平,和接低電平時,則輸出的狀態由C、B、A這三個輸入信號的編碼來決定。如,當CBA=000時,Y0=0;當CBA=111時,Y7=0,由此可譯出8個譯碼選通輸出信號(低電平有效)。當控制條件不滿足時,則輸出全為1,不產生譯碼選通輸出信號,即譯碼無效6.2I/O端口地址譯碼如圖6.3所示的電路是PC/XT系統板上的接口控制電路的端口地址譯碼電路。圖中地址線的高5位A5~A9經過74LS138譯碼器,分別產生了8237、中斷控制器8259、定時/計數器8253、并行接口8255等接口芯片的片選信號,而地址線的低5位A0~A4作為接口芯片內部寄存器的訪問地址。從74LS138譯碼器的真值表可知,當地址是000~01XH時,便有輸出為低,選中8237,由于A0~A3未接8237,故8237的端口地址是000~01FH。從其他芯片的端口地址范圍也容易看出,如8259的片選地址是02X~03XH,口地址范圍是020~03FH。6.2I/O端口地址譯碼圖6.3PC/XT系統板上的接口控制電路的端口地址譯碼電路6.2I/O端口地址譯碼6.2.3開關式可選端口地址譯碼如果用戶要求接口卡的端口地址能適應不同的地址分配場合,或為系統以后擴充留有余地,則可以使用開關式端口地址譯碼。這種譯碼方式可以通過開關使接口卡的I/O端口地址根據要求加以改變而無須更改電路,其電路結構形式有如下幾種:
(1) 用比較器和地址開關進行地址譯碼。在接口地址譯碼中,可采用比較器,將地址總線上送來的地址,或者某些地址范圍與預設的地址或地址范圍進行比較。若兩者相等,表示地址總線送來的端口地址為接口地址或接口所用到的端口地址范圍,于是便可以啟動接口執行預定的操作。6.2I/O端口地址譯碼常用的比較器有4位比較器74LS85、8位比較器74LS688。對于74LS688,它將輸入的8位數據P0~P7與另一8位數據Q0~Q7相應進行比較,可比較大于、小于或等于,在地址譯碼中僅使用比較相等的功能,大于、小于則不同。如圖6.4所示的電路中,把P0~P7連接有關的地址線和控制線,Q0~Q7連接地址開關,而輸出端P接到譯碼器74LS138的控制端上。根據比較器的特性,當輸入端P0~P7的地址與輸入端Q0~Q7的開關狀態一致時,輸出為低電平,使譯碼器進行譯碼。因此,使用時可預置DIP地址開關為某一值,得到一組所要求的端口地址。在圖6.4中讓和參加譯碼,分別產生8個讀/寫端口地址,并且當A9=1、AEN=0時譯碼才有效。6.2I/O端口地址譯碼圖6.4用比較器組成的可選式譯碼電路6.2I/O端口地址譯碼(2)使用跳線的可選式譯碼電路。如果根據需要,要改變譯碼器的譯出地址,可以用跳線或跳接開關對譯碼器的輸入地址進行反相或不反相的選擇。如果要改變跳線的連接方向,則有多達1024種選擇。6.3GAL器件在I/O地址譯碼電路中的應用
6.3.1GAL器件的特點
1.GAL的基本結構GAL主要是由可編程的與陣列、固定(不可編程)的或陣列、可編程的輸出邏輯宏單元(OLMC)3部分電路組成。GAL是利用EEPROM浮柵技術制成的器件。目前常用的GAL器件中,普通型器件GAL16V8使用最多。GAL16V8是20腳DIP封裝,如圖6.5所示。GAL20V8是24腳封裝,與GAL16V8相比較,除了容量有所不同外,在結構上沒有太大差別。下面以GAL16V8為例,說明其結構特點如下:6.3GAL器件在I/O地址譯碼電路中的應用圖6.5GAL16V8的引腳圖6.3GAL器件在I/O地址譯碼電路中的應用
(1)GAL16V8的1~9和11引腳固定作輸入使用,13~18也可以配置成輸入引腳,因此輸入最多可為16個。GAL16V8最多可配置8個輸出邏輯宏單元(OLMC12~OLMC19)。這也是GAL16V8命名的由來。(2)GAL16V8的與陣列有64條行線和32條列輸入線,與陣列共分8個陣列塊。每個陣列塊有8條行線,每條行線接一個與門。(3)GAL16V8系列器件的OLMC共有3種工作模式,它們是寄存器模式、復雜模式、簡單模式。6.3GAL器件在I/O地址譯碼電路中的應用
(4)行線是與門的輸入線,列輸入線是輸入信號提供線。與門輸出的乘積項由行線和列輸入線交叉點處的可編程單元的編程情況決定。應須說明,雖然GAL的編程單元不是實體熔絲,但是編程單元CMOS管的導通恰好同實體熔絲編程后熔絲保留相對應,CMOS管截止恰好同實體熔絲熔斷相對應。因此,在研究GAL編程及有關方面問題時,也借用熔絲這一術語。(5)1號引腳(CLK)經一級緩沖器引至OLMC的CK端和OLMC19的M端。6.3GAL器件在I/O地址譯碼電路中的應用
2.GAL的特點GAL(GenericArrayLogic)是美國LATTICE公司于20世紀80年代提出的可編程邏輯器件PLD,它具有如下特點:(1) 實現多種邏輯功能,它可以實現組合邏輯電路和時序邏輯電路的多種功能。(2) 采用電擦除工藝,門陣列的每個單元可以反復改寫(至少100次),因而整個器件的邏輯功能可以重新配置,因此它是產品開發研制中的理想工具。(3) 具有硬件加密單元,可以防止抄襲電路設計和非法復制。(4) 速度高而功耗低,具有高速電擦寫能力,改寫整個芯片只需數秒鐘,而功耗只有雙極型邏輯器件的1/2或1/4,緩解了溫升問題。6.3GAL器件在I/O地址譯碼電路中的應用
6.3.2GAL器件的開發過程及工具
1.PLD(GAL)開發工具PLD之所以能迅速廣泛應用,有兩個主要原因:一是生產廠家不斷推出新品種,使其功能越來越強。二是已具有品種多、使用方便、功用性強的PLD開發軟件和硬件,用戶設計開發PLD極為方便。PLD開發系統主要由兩部分組成:硬件、微型計算機及編程器;PLD開發軟件。6.3GAL器件在I/O地址譯碼電路中的應用
2.PLD(GAL)器件設計的一般步驟一般可按下列步驟進行設計:(1) 設計構思。即用真值表、邏輯方法和狀態圖這三種方法中的任一種,將所要設計的問題變為設計文件。(2) 選擇器件型號。根據設計文件的要求,選擇合適的工業器件型號,要考慮到輸入、輸出的引腳數目,是組合邏輯器件還是時序邏輯器件等。(3) 將設計文件按照所應用的HDL語言的要求,寫成源文件,然后上機編譯、仿真和測試。(4) 編程器編程。將生成的編程文件下載到編程器,對器件編程。此處的編程器件是最終所使用的器件,如GAL16V8、GAL20V8等。6.3GAL器件在I/O地址譯碼電路中的應用
3.采用邏輯方程的設計方法通常采用的邏輯方程(布爾方程)、真值表和狀態圖這三種描述方法都各自有其特點,我們可選擇其中任一種設計方法。下面以邏輯方程的描述方法為例作簡要說明。邏輯方程也叫布爾方程。它是在邏輯表達式的基礎上以方程式的形式列寫了邏輯函數的輸入變量與輸出變量之間的邏輯關系。在采用邏輯方程的設計方法時,又采用了一些高級設計語言所能接受的語句,將邏輯方程加以簡化,使其形成了一套簡煉的設計方程。在設計時,應注意以下幾個問題:(1) 邏輯方程分為兩種:非時鐘控制的組合輸出方程和時鐘控制的狀態輸出方程。組合輸出方程用等號“=”連接,而狀態輸出方程則用“:=”連接。比如,F=ABC為組合邏輯輸出方程,其中A、B、C是輸入變量,F是輸出變量。6.3GAL器件在I/O地址譯碼電路中的應用
而F:=ABC是狀態輸出方程,也簡稱為狀態方程。當輸入變量A、B、C狀態改變后,只有時鐘信號作用后F才改變。(2) 在方程式中的元素,既可以是輸入的單個變量,也可以是一個用標識符所代表的集合。(3) 在采用邏輯方程時,允許使用語句:IF…THEN…;ELSE…;IF后面的內容是邏輯方程實施的條件,一般為工作狀態的控制信息,當用表達式列寫時要用小括號括起來。THEN和ELSE后面是輸出方程或狀態方程。“ELSE…;”是語句的轉移部分,沒有轉移時可以不用。如IF(A=1)THENQ:=B;ELSEQ:=C;其含義是當A=1時,Q在時鐘作用下轉換為狀態B;A≠1時Q在時鐘作用下轉換為狀態C。6.3GAL器件在I/O地址譯碼電路中的應用
4.ABEL語言的源文件及特點ABEL語言是美國DATAI/O公司開發的一種邏輯設計軟件,它具有如下特點:
(1) 語言適用于各種型號的PLD器件。
(2) 語言本身高度結構化。
(3) 邏輯描述的形式靈活多樣,可用高級布爾方程、真值表與狀態圖3種方法輸入。
(4) 具有仿真和測試的測試向量。
(5) 具有有效的宏指令及指示。6.3GAL器件在I/O地址譯碼電路中的應用
module…
模塊開始flag'……' 標記title'……' 標題"nameDEVICE'devicetype'; 說明使用的工業器件型號…device'……';"pinandnodedeclarations; 引腳和結點定義"namesPINpin#s;"namesNODEnode#s;……pin……;……pin……;"constantdeclarations 常量說明H,L,X=1,0,·X·;6.3GAL器件在I/O地址譯碼電路中的應用
……=….….;equations…
布爾方程"name=expression;…=…;enable…=…;…=…;test-vectors 向量測試"inputs outputs([……]->[……])……end…6.3GAL器件在I/O地址譯碼電路中的應用
6.3.3采用GAL的I/O地址譯碼電路設計
1.應用GAL設計地址譯碼在使用GAL設計地址譯碼器時應注意以下幾點:一是根據選定的GAL器件,根據ABEL源文件的結構、格式及要求實現的邏輯功能,編寫出ABEL源文件;二是利用ABEL軟件,對ABEL文件進行編譯、化簡、仿真等,最后生成JED編程器下載文件;三是利用編程器把JED文件寫入(“燒入”)GAL器件中。下面以圖6.6所示,對端口2F0H的讀寫控制端口的地址譯碼為例,說明GAL器件在端口地址譯碼中的應用。6.3GAL器件在I/O地址譯碼電路中的應用
圖6.6端口2F0H譯碼的GAL16V8引腳圖6.3GAL器件在I/O地址譯碼電路中的應用
【例6.3】利用GAL設計一個I/O端口地址譯碼電路,實現對端口2F0H的讀/寫控制。根據題意,地址譯碼器的輸入包括:10條地址線A0~A9和3條控制線、、AEN,即共13條輸入信號。譯碼器的輸出為端口2F0H的讀控制信號R2F0和端口2F0H的寫控制信號W2F0,即兩條輸出信號。依據上面分析,選用GAL16V8便可,GAL16V8的引腳定義如圖6.6所示。在本例中,R2F0、W2F0的邏輯表達式可作如下描述:
=A9.A8.A7.A6.A5.A4.A3.A2.A1.A0.IOR.AEN=A9.A8.A7.A6.A5.A4.A3.A2.A1.A0.IOW.AEN根據上面分析及ABEL語言的語法規則、文件結構,便可寫出對2F0H端口的讀、寫控制的ABEL源文件如下所示:6.3GAL器件在I/O地址譯碼電路中的應用
modul–decodertitle'addressdecoderforport2f0h'decoderdevice'P16V8C';X,C,L,H=·X·,·C·,0,1;A0,A1,A2,A3,A4,A5,A6 pin1,2,3,4,5,6,7;A7,A8,A9,AEN,IOR,IOW pin8,9,11,13,14,15;W2f0,R2f0pin18,19;Add=[A9,A8,A7,A6,A5,A4,A3,A2,A1,A0];"R2F0=2f0h*/IOR*/AEN"W2F0=2f0h*/IOW*/AENequations!R2F0=A9&!A8&A7&A6&A5&A4&!A3&!A2&!A1&!A0&!AEN&!IOR;!W2F0=A9&!A8&A7&A6&A5&A4&!A3&!A2&!A1&A0&!AEN&!IOW;end-decoder6.3GAL器件在I/O地址譯碼電路中的應用
2.GAL的開發及使用中應注意的問題
(1)GAL開發的軟件和硬件需求。
①建立用戶源文件。
②編譯用戶源文件。
(2)器件編程。
①在專用的軟件系統環境下,啟動編程器,使計算機和編程器進行通信,將JEDEC數據文件下載到編程器上。6.3GAL器件在I/O地址譯碼電路中的應用
② 選擇目標器件的制造廠家、型號進行器件匹配。
③ 將GAL器件插入插座并鎖緊,這一步必須注意芯片引腳序號與插座引腳號要對應,否則器件可能被毀壞。
④下載編程,即將下載到編程器上的JEDEC數據文件寫入到GAL芯片中。6.3GAL器件在I/O地址譯碼電路中的應用
(3) 實際功能驗證。將芯片從編程器取下,放入到實驗電路中或實際工作的系統中進行實際功能驗證,如果功能正確,說明開發工作結束;如果功能驗證不正確,則還要返回到第一步重新修改設計。
(4) GAL器件的供電電源要加去耦電容。GAL器件接入到系統電路時,在GAL的Vcc引腳和地之間要并接一個0.1μF左右的電容器去耦,以此提高GAL器件工作的可靠性。
(5) GAL器件不用端的處理。GAL器件的不使用管腳切忌懸空,一律要求接地或接Vcc。否則會引起附加干擾,影響整個芯片的性能。6.3GAL器件在I/O地址譯碼電路中的應用
(6) 充分利用內部反饋。在利用GAL器件進行邏輯設計時,常常遇到利用中間輸出變量。所謂中間輸出變量,是指不是真正輸出到外界的變量??梢詫⒅虚g輸出變量設置在不同的輸出端上,然后利用內部反饋緩沖器將其引入到與陣列重新組成邏輯操作。
(7)防止I/O引腳過壓。當I/O引腳加入高于Vcc或低于地電平的電壓時,在該I/O引腳上會產生latch-up(鎖死)現象,結果損壞內部的CMOS管。一般要求輸入信號的高、低電平偏差在允許值0.5V以內,同時要注意GAL芯片未加電源電壓以前不要加輸入信號。6.3GAL器件在I/O地址譯碼電路中的應用
(8) 保證GAL輸入引腳的信號上升沿和下降沿。GAL的輸入引腳所加信號的上升沿和下降沿太慢會將噪聲引入芯片內,引起誤翻轉。如果已知輸入信號上升沿和下降沿太慢時,可將信號先經過一級施密特觸發器,信號經整形后再輸入到GAL的輸入端。
(9) 必須嚴格遵循GAL電源的最大上升時間規定。許多PLD器件在加電期間要完成寄存器的加電復位操作,GAL器件也是如此。太緩慢的電源電壓上升率會給噪聲引入GAL芯片造成可乘之機。
6.3GAL器件在I/O地址譯碼電路中的應用
(10)注意GAL輸入端參數對外電路的影響。在用GAL實現單穩和振蕩器時,GAL的輸入電阻和電容會對單穩和振蕩器的參數產生影響,在選擇單穩和振蕩器參數時要考慮GAL芯片輸入/輸出的影響,最好通過實驗確定其參數。
(11)修改GAL邏輯設計。在修改用GAL實現的邏輯電路設計時,不要直接修改JED文件,而要先修改源文件,然后再對修改后的源文件進行編譯,重新得到修改后的熔絲圖和JED文件。6.3GAL器件在I/O地址譯碼電路中的應用
(12)選用合適的GAL編程寫入器。有些GAL編程器對與之配合的計算機的主頻要求不同,有些GAL編程器在586個人計算機上能正確對GAL芯片編程寫入,而在PⅡ個人計算機上反而不能正確對GAL芯片編程寫入,在選購編程器時必須注意編程器對個人計算機的時鐘頻率匹配問題。
(13)關于解決乘積項不足問題。當某一輸出邏輯宏單元的乘積項不足時,可以借用另外宏單元實現擴充乘積項的邏輯操作,然后將其輸出再反饋到乘積項不足宏單元的與陣列輸入。6.3GAL器件在I/O地址譯碼電路中的應用
(14)GAL的上電復位。GAL16V8和GAL20V8器件編程后都要進行功能驗證,上電之前,如果芯片工作在寄存器模式下,必須將11腳(GAL16V8)或13腳(GAL20V8)接低電平或接地。上電之后,工作在寄存器模式下的各輸出邏輯宏單元中的D觸發器的Q端應復位成“0”,相應的輸出引腳應為高電平。如果狀態正確,可繼續進行功能驗證,否則,說明編程有誤或芯片出了問題。6.4半導體存儲器接口6.4.1半導體存儲器接口的基本技術存儲器與CPU的連接可以從以下幾個方面考慮。
1.信號線連接要求存儲器芯片的外部引腳分為數據線(DB)、地址線(AB)和控制線(CB)。CPU對存儲器的讀寫操作首先是向地址線發地址信號,然后向控制線發讀/寫信號,最后在數據線上傳送數據信息。同時,每一片存儲器芯片的地址線、數據線和控制線都必須和CPU建立正確的連接,才能進行正確的操作。CPU與存儲器的連接就是指地址線、數據線和控制線的連接。6.4半導體存儲器接口數據線的連接:一般系統的數據總線與存儲器的數據線相連接。地址線的連接:存儲器與CPU地址總線的連接必須滿足對芯片所分配的地址范圍的要求。CPU發出的地址信號必須實現兩種選擇,首先對存儲器芯片的選擇,使相關芯片的片選端有效,稱為片選;然后在選中的芯片內部再選擇某一存儲單元,稱為字選。片選信號和字選信號均由CPU發出的地址信號經譯碼電路產生。字選信號由存儲器芯片的內部譯碼電路產生,這部分譯碼電路不須用戶設計??刂凭€的連接:系統控制線的讀/寫控制需要與存儲器芯片的控制線連接。6.4半導體存儲器接口這里介紹外部譯碼電路的三種譯碼方法。
1) 線性選擇法這種方法直接用CPU地址總線中的某一高位線作為存儲器芯片的片選信號,簡稱為線性選擇法。線性選擇法的優點是連接簡單,片選信號的產生不需要復雜的邏輯電路,只用一條地址線與的簡單組合就可產生有效的。例如,某一計算機共有16條地址線,只需接入1KB的RAM和1KB的ROM。因此可以確定,當地址范圍要求如圖6.7所示時,字選線為10條,可用A0~A9充當。若用A10作片選,則RAM和ROM的地址為圖中的第一組;當用A11作片選時,地址范圍如圖中的第二組。6.4半導體存儲器接口從圖6.7可知,A11作片選時,RAM和ROM的地址不連續。同理,用A12~A15中的任一條作片選,RAM和ROM的地址間隙更大。圖中用A11作片選時,RAM和ROM的地址不連續,其范圍是將A10作為“0”考慮給出的,當A10為“1”時也應尋址到這些RAM和ROM。另外,A12~A15當取值為非全0時,如果譯碼電路未對這些高位地址線進行管理,則將出現另外許多組地址,這種情況稱為地址的多義性。6.4半導體存儲器接口圖6.7線選法控制電路及地址分配6.4半導體存儲器接口由以上分析可知,當采用線選法時,若低位地址線用于字選,高位地址線用作線選,且高位地址未全部用完而又沒有對其實施控制時,出現地址的不連續和多義性,這是線性法的兩大缺點。線選法還有另一種局限,即使所有的高位地址線都用作線選,其能尋址的存儲空間也十分有限。在大系統中,線選法有限的尋址能力限制了存儲器系統的擴展,這也是它的一個弱點。6.4半導體存儲器接口2) 部分譯碼法用部分高位地址進行譯碼產生片選信號。如圖6.8所示采用6116存儲器芯片(2KB×8)用部分譯碼法實現的8KB存儲器。只用A12、A11的高位地址來譯碼實現對4個芯片的選中。要選中芯片0#時,應使A12、A11為低電平,譯碼器的有效,相應的芯片0#的片選信號有效,選中芯片0#。其地址分配和有效地址對應表如表6.4所示。6.4半導體存儲器接口圖6.8部分譯碼法存儲器譯碼系統電路6.4半導體存儲器接口A12A11有效芯片地址范圍000#0000H~07FFH011#0800H~0FFFH102#1000H~17FFH113#1800H~1FFFH表6.4地址分配和有效地址對照表6.4半導體存儲器接口3) 全譯碼法全譯碼法將高位地址全部作為譯碼器輸入,用譯碼器的輸出作為片選信號。這種尋址方法中,低位地址線用作字選,與芯片的地址輸入端直接相連;高位地址線全部連接譯碼電路,用來生成片選信號。這樣,所有的地址線均參與片內或片外的地址譯碼,不會產生地址的多義性和不連續性,全譯碼法的存儲器系統的電路如圖6.9所示。6.4半導體存儲器接口圖6.9全譯碼存儲器系統電路6.4半導體存儲器接口如圖6.9所示的存儲系統大小為12KB,其中低8KB為EPROM,由兩片2732A(4KB×8位)芯片組成,地址范圍為0000H~1FFFH(其中,2732A(1)為0000H~0FFFH,2732A(2)為1000H~1FFFH);高4KB為RAM,由兩片6116(2KB×8位)芯片組成,地址范圍為2000H~2FFFH(其中,6116(1)為2000H~27FFH,6116(2)為2800H~2FFFH)。CPU為8位機型(如Z-80),16根地址線A0~A15全部參加譯碼。其中,每片EPROM為4KB,故A0~A11用作片內字選,A12~A15用作片選;RAM每片為2KB,A0~A10用作片內字選,A11~A15用作片選。為寫控制信號,為讀控制信號,為存儲器選通信號,3條信號線均為CPU輸出,低電平有效。從圖6.9所示可見,地址線全部參加譯碼,故地址不會出現多義性。6.4半導體存儲器接口
2.地址分配要求系統內存通常分為ROM和RAM兩部分。其中ROM用于存放系統監控程序等固化程序及常數,RAM可分為系統區和用戶區兩部分。系統區是監控程序或操作系統存放數據的區域,用戶區分為程序區和數據區兩部分,分別用于存放用戶程序和數據,所以,內存分配是一個重要的問題。就目前而言,單片的存儲器芯片容量有限,計算機的內存儲器系統需要由多個芯片組成。因此,針對存儲器地址的分配,要知道哪些地址區域需要ROM,哪些區域需要RAM,即在具體電路中需要明確地址譯碼與片選信號的產生。以Intel8086CPU為例,根據Intel8086CPU的特性,高地址區域應該是ROM區域,因為Intel8086CPU復位后執行的第一條指令一定在該區域;而低地址區域必須連接RAM芯片作為RAM系統區,因為低地址區域是CPU存放中斷向量表等信息的系統區。6.4半導體存儲器接口3.驅動能力考慮在CPU的設計中,一般輸出線的直流負載能力為帶一個TTL負載,而在連接中,CPU的每一根地址線或數據線,都有可能連接多片存儲器芯片。所以,在存儲器芯片與CPU的連接過程中,要考慮CPU外接有多少個存儲器芯片及CPU與存儲器芯片間的物理距離等因素。現在的存儲器芯片都為MOS電路,直流負載很小,主要的負載是電容負載,因此在小型系統中,CPU可以與存儲器芯片直接相連,在較大的系統中,就要考慮CPU是否需要加緩沖器,由緩沖器的輸出帶負載。6.4半導體存儲器接口6.4.2靜態RAM與CPU的連接靜態RAM有多種型號,6264是一個典型的8KB×8的SRAM芯片,有數據線8位D7~D0,地址線13位A12~A0,內部主要包括256×256的存儲器矩陣、行列地址譯碼器及數據輸入輸出控制邏輯電路。在存儲器讀周期,選中單元的8位數據經I/O控制電路輸出;在存儲器寫周期,外部8位數據經輸入數據控制電路的I/O控制電路寫到所選中的存儲單元中。當片選信號無效時,芯片數據線呈高阻狀態。如圖6.10所示是6264芯片的引腳圖,表6.5提供了6264芯片引腳與芯片工作狀態的關系。6.4半導體存儲器接口圖6.106264引腳圖6.4半導體存儲器接口片選輸出控制寫信號工作狀態001存儲器讀010存儲器寫1××未選中表6.56264引腳功能與芯片工作狀態6.4半導體存儲器接口通常一片存儲器芯片的存儲容量不可能正好是CPU的內存尋址范圍。當單片RAM不能滿足存儲容量的要求時,這時可把多個單片RAM進行組合,擴展成大容量存儲器。多片存儲芯片的組合,可能是為了滿足CPU數據線寬度的需要,也可能是為了給CPU提供更大的存儲空間。前者是對數據線的擴展,后者是對地址線的擴展。在實際應用中,常常需要對這兩方面同時進行擴展。6.4半導體存儲器接口1.位擴展如圖6.11所示為1024×1的存儲器芯片與8位CPU的連接。由于每片存儲器芯片只有1位數據線,因此需要8片存儲器芯片,才能滿足CPU的8位數據線的要求,每一片存儲器芯片連接1位數據線。在這種結構中,每片存儲器芯片除了數據線連至CPU不同位的數據線外,地址線和控制線的連接都是相同的,因為8片芯片為一組,一旦被選中,則同時工作,或者輸入,或者輸出。6.4半導體存儲器接口圖6.11用1024×1位的芯片組成1KBRAM6.4半導體存儲器接口
2.字擴展如圖6.12所示是由兩片6264靜態RAM構成的16KB存儲器。低位地址線A12~A0直接連至每一片6264芯片的地址輸入端,高位地址線經譯碼以后產生片選信號,分別連接到兩片6264的片選輸入端。地址譯碼器74LS138是一個常用的3-8譯碼器,當地址A19~A16=1110時,該譯碼器被選中,也就是說,該譯碼器Y7~Y0輸出的地址范圍為0E0000H~0EFFFFH。其中,當A15~A13=000時,Y0輸出有效,其地址范圍為0E0000~0E1FFFH;當A15~A13=001時,Y1輸出有效,其地址范圍為0E2000H~0E3FFFH。至于6264存儲器芯片的數據線和控制線,則直接與CPU的數據線及對應控制線相連接即可。6.4半導體存儲器接口圖6.12兩片6264靜態RAM構成的16KB存儲器6.4半導體存儲器接口從圖6.12所示可知,CPU的地址線A12~A0負責了芯片內部存儲單元的尋址,而不同存儲芯片的選擇,則是由地址線A19~A13來完成的。只有當A19~A13=1110000時,選中第一片RAM芯片;當A19~A13=1110001時,選中第二片RAM芯片。兩者的區別在于地址線A13=0或1。6.4半導體存儲器接口
控制信號的連接時必須注意:(1)CPU的寫信號與RAM芯片的寫信號相連接,CPU的讀信號與RAM芯片的讀信號或輸出控制信號相連接。如果某些RAM芯片的讀寫控制信號是合為一根的信號線,則可根據其電平要求連接CPU的寫信號線或讀信號線。(2)為了區別于I/O訪問,保證只有在存儲器讀或寫操作期間才能訪問到存儲器芯片,所以CPU與存儲器的接口電路中要體現存儲器訪問這一操作性質,例如將M/信號參與控制用于片選的地址譯碼器,以保證只有在存儲器訪問期間地址譯碼器才工作。6.4半導體存儲器接口6.4.3動態RAM與CPU的連接4164就是一個64KB×1的DRAM芯片,外部有8位地址輸入線提供行地址和列地址、一位數據輸入線和一位數據輸出線及行列地址選通信號線等。如圖6.13所示是4164的外部引腳圖,如圖6.14所示是4164芯片的內部結構圖。6.4半導體存儲器接口圖6.134164的外部引腳6.4半導體存儲器接口圖6.144164芯片的內部結構圖6.4半導體存儲器接口64KB的存儲器是由4個128×128存儲矩陣構成的,通過最高位的行地址和列地址選擇不同的存儲矩陣。每個128×128存儲矩陣有7位行地址和7位列地址進行選擇。7位行地址線經過譯碼產生128條選擇線,分別選擇128行;7位列地址經過譯碼后也產生128條選擇線,分別選擇128列。6.4半導體存儲器接口4164的外部引腳有:A7~A0:地址輸入。DIN:數據輸入線。DOUT:數據輸出線。:行地址選通,該信號有效,地址線輸入行地址。:列地址選通,該信號有效,地址線輸入列地址。:寫信號,當芯片選中時,低電平表示寫狀態,高電平表示讀狀態。由于動態
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國光標檢查器行業發展動態與投資前景預測報告
- 2025年中國膠黏劑消泡劑行業市場全景分析及前景機遇研判報告
- 2025年金剛石磨塊項目規劃申請報告模板
- 2025年鼠抗病毒抗原單克隆抗體項目規劃申請報告模范
- 2025年高導熱石墨材料項目立項申請報告
- 2025年商業清潔劑項目規劃申請報告
- 鄉鎮衛生院藥房藥品購進驗收管理制度?
- 鄉鎮衛生院消防安全設施檢查管理制度?
- 中醫肛腸科中藥坐浴操作管理制度?
- 物理學電磁學知識詳解及練習
- 2025年高考真題-化學(安徽卷) 含答案
- 2025年八年級學業水平考試生物試卷 (附答案)
- 2024年佛山市南海公證處招聘筆試真題
- 拱墅區長慶街道招聘工作人員考試真題2024
- 拆除與清運合同協議書
- 2025年中級會計實務考試解析方法試題及答案回顧
- 食品許可證初級考試試題及答案
- 2025《銀行專業實務(銀行管理)》初級銀行人員高分必會試題庫1000題-單選400題
- 咖啡師考試試題及答案
- 2025年人教版新教材數學一年級下冊期末復習計劃
- 2024版壓力容器設計審核機考題庫-多選3-2
評論
0/150
提交評論