微處理器接口芯片設(shè)計(jì)實(shí)例_第1頁
微處理器接口芯片設(shè)計(jì)實(shí)例_第2頁
微處理器接口芯片設(shè)計(jì)實(shí)例_第3頁
微處理器接口芯片設(shè)計(jì)實(shí)例_第4頁
微處理器接口芯片設(shè)計(jì)實(shí)例_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微處理器接口芯片設(shè)計(jì)實(shí)例12.1可編程并行接口芯片設(shè)計(jì)實(shí)例12.2SCI串行接口芯片設(shè)計(jì)實(shí)例習(xí)題與思考題

12.1可編程并行接口芯片設(shè)計(jì)實(shí)例

凡是學(xué)習(xí)過微型計(jì)算機(jī)原理的讀者都知道,8255是典型的可編程并行接口芯片,它廣泛地應(yīng)用于各種接口電路中。為使設(shè)計(jì)的程序不過于復(fù)雜,這里所設(shè)計(jì)的芯片僅適用于8255的“0”型工作方式,即基本的輸入/輸出方式。

A0~A1——端口地址選擇信號(hào)線。8255有4個(gè)端口:其中3個(gè)為輸入/輸出口,1個(gè)為控制寄存器端口。具體規(guī)定如下:

A1A0 選擇端口

00 A口

01 B口

10 C口

11 控制寄存器

通常A0、A1與CPU的地址總線A0和A1相連接。

RESET——復(fù)位信號(hào)輸入,高電平有效。復(fù)位后,8255的A口、B口、C口均被定義為輸入。

PA0~PA7、PB0~PB7、PC0~PC7——3個(gè)輸入/輸出端口的引腳,其輸入/輸出方向由軟件來設(shè)定。

圖12-18255的引腳圖

2.內(nèi)部結(jié)構(gòu)

8255的內(nèi)部結(jié)構(gòu)框圖如圖12-2所示。

從圖12-2中可以看到,左邊的信號(hào)與CPU總線相連,而右邊的信號(hào)則與外設(shè)相連。A、B、C口的輸出均有鎖存能力,而輸入都沒有鎖存能力(這一點(diǎn)與原8255芯片略有區(qū)別)。

為了控制方便,將8255的3個(gè)口分成A、B兩組。其中,A組包括A口的8條線PA0~PA7和C口的高4位PC4~PC7;B組包括B口的8條線PB0~PB7和C口的低4位PC0~PC3。A組和B組都分別由軟件編程來加以控制。

圖12-2

8255的內(nèi)部結(jié)構(gòu)框圖

12.1.2

8255的工作方式及其控制字

8255有3種工作方式:方式0、方式1和方式2。前面已經(jīng)提到,為簡(jiǎn)化設(shè)計(jì)這里只設(shè)定為方式0。

1.8255的方式0

在此方式下,A口的8條線、B口的8條線、C口的高4位對(duì)應(yīng)的4條線和C口低4位對(duì)應(yīng)的4條線可分別定義為輸入或輸出。因?yàn)樯鲜?部分的輸入或輸出是可以互相獨(dú)立來定義的,故它們的輸入/輸出組合有16種。另外,在方式0的情況下,C口還具有按位置位和復(fù)位的能力,這一點(diǎn)將在后述的控制字中詳述。

2.控制字

8255具有很強(qiáng)大的功能,其不同功能的實(shí)現(xiàn)是通過對(duì)控制器寫不同控制字來實(shí)現(xiàn)的。8255有兩種控制字:方式控制字和C口位操作控制字。

1)方式控制字

8255的方式控制字的格式如圖12-3所示。方式控制字的標(biāo)志是控制字的最高位為“1”,即圖中的b7位為“1”。

圖12-3

8255的方式控制字的格式

如果現(xiàn)在設(shè)定A口為輸入口,B口為輸出口,C口的低4位為輸入,C口的高4位為輸出,那么控制字的格式應(yīng)為

控制字的值為91H,那么將該控制字寫向控制寄存器,就會(huì)使8255處于所設(shè)定的工作方式。

2)?C口位操作控制字

C口位操作控制字的格式如圖12-4所示。

圖12-4

C口位操作控制字的格式

該控制字和方式控制字的區(qū)別在于:控制字的最高位(b7位)為“0”,用此位作為軟開關(guān)可將控制字寫入不同的控制寄存器。例如,當(dāng)PC口作為輸出口時(shí),用如下控制字:

其值為0DH。將此值送控制寄存器地址就可以使PC6置“1”。

12.1.3

8255的結(jié)構(gòu)設(shè)計(jì)

由圖12-2所示的8255內(nèi)部結(jié)構(gòu)框圖可知,該芯片應(yīng)由3種邏輯電路構(gòu)成:鎖存器、組合邏輯電路和三態(tài)緩沖器。

1.鎖存器

鎖存器用于鎖存數(shù)據(jù)。在8255的結(jié)構(gòu)中應(yīng)定義7個(gè)鎖存器,它們是:

pa_latch——A口輸出鎖存器,8位;

pb_latch——B口輸出鎖存器,8位;

pcl_latch——C口低4位輸出鎖存器;

pch_latch——C口高4位輸出鎖存器;

ctrreg——方式控制字寄存器;

bctrreg——C口位控制字寄存器,4位;

ctrregF——選擇標(biāo)志寄存器,1位。

當(dāng)該標(biāo)志寄存器為“1”時(shí),數(shù)據(jù)存入方式控制字寄存器;當(dāng)它為“0”時(shí),數(shù)據(jù)的低4位存入C口控制字寄存器。

2.三態(tài)緩沖器

在8255芯片中數(shù)據(jù)線D0~D7和端口PA、PB、PC都可以是雙向的。因此,在設(shè)計(jì)該部分邏輯與外部接口時(shí),必須是三態(tài)的,即這些引腳都應(yīng)為三態(tài)雙向引腳。

3.組合邏輯電路

除上述兩類電路外,余下的基本上是選擇電路或譯碼電路。

12.1.48255芯片的VHDL描述

由于該VHDL描述的程序模塊將在MAX?+?plusⅡ的工具上進(jìn)行編譯、綜合和仿真,因此程序中應(yīng)采用RTL描述方式。

【例12-1】8255芯片的VHDL描述程序。

本程序清單的前4條說明語句用于所引用的IEEE庫。接著8行是8255的實(shí)體描述,其中輸入/輸出引腳與8255定義相同。在這里只是將PC口的8條線分成高4位和低4位而已。由于pa、pb、pc和d都是雙向的,因此在這里也定義成雙向。

8255的構(gòu)造體由5個(gè)進(jìn)程構(gòu)成,它們是讀進(jìn)程、寫進(jìn)程和形成pa、pb、pc三態(tài)輸出的三個(gè)進(jìn)程。下面對(duì)構(gòu)造體中的有關(guān)問題作一說明。

1.構(gòu)造體中各信號(hào)的定義和說明

1)內(nèi)部總線

在構(gòu)造體中定義了兩條內(nèi)部總線internal_bus_in和internal_bus_out,所有8位數(shù)據(jù)的輸入或輸出在8255芯片內(nèi)部都是通過這兩條總線實(shí)現(xiàn)的。

2)鎖存器和寄存器輸出

構(gòu)造體中信號(hào)pa_latch、pb_latch及pc_latch是8255芯片中A口、B口及C口鎖存器的輸出。信號(hào)ctrreg是方式控制寄存器的輸出。

其他信號(hào)是為了內(nèi)部連接而引入的,請(qǐng)讀者自行理解。

2.寫進(jìn)程

8255在方式0下寫進(jìn)程的流程圖如圖12-5所示。

在寫進(jìn)程最前面是將寫8255時(shí)的最高數(shù)據(jù)位送標(biāo)志寄存器保存,以便以后在判別是方式控制字還是位控制字時(shí)使用。這里的標(biāo)志寄存器采用的是變量ctrregF,而沒有采用信號(hào)量。

當(dāng)復(fù)位信號(hào)有效(reset?=?1)時(shí),對(duì)8255芯片進(jìn)行初始化。前面提到8255芯片復(fù)位后所有端口都處于輸入方式,故方式控制寄存器初始化值應(yīng)為9BH,其他均設(shè)置為“0”。

圖12-5寫進(jìn)程的流程圖

如果是寫狀態(tài),則根據(jù)數(shù)據(jù)線D0~D7送來的不同數(shù)據(jù)及地址線A0~A1的不同狀態(tài),將數(shù)據(jù)寫入控制寄存器或pa、pb、pc各輸出鎖存器。程序中的CASE語句用來實(shí)現(xiàn)C口的位控功能。當(dāng)寫控制寄存器的控制字為位控字(b7?=?0)時(shí),b3~b0的值就寫入位控寄存器。位控寄存器的輸出經(jīng)譯碼使C口的某一位置位或復(fù)位。

這里的位控寄存器bctrreg_v定義成一個(gè)變量。將其定義成信號(hào)量是否可以?會(huì)出現(xiàn)什么結(jié)果呢?請(qǐng)讀者自行思考。

3.讀進(jìn)程

讀進(jìn)程的程序如例12-1所示。其工作過程是當(dāng)選片信號(hào)有效(CS

=?0)和讀信號(hào)有效(RD=0)時(shí),從A口、B口或C口讀入外部設(shè)備提供的數(shù)據(jù)。注意,在本設(shè)計(jì)中所有端口輸入都是不鎖存的。

由于讀進(jìn)程程序比較簡(jiǎn)單,因此這里不再用流程圖說明。要注意的是,該讀進(jìn)程還描述了最終送數(shù)據(jù)總線D0~D7的數(shù)據(jù)是通過三態(tài)緩沖器來實(shí)現(xiàn)的。

12.1.58255芯片VHDL描述模塊的仿真

前面詳細(xì)解釋了8255芯片的VHDL描述程序的各組成部分。為了證明該程序模塊的正確性,我們用MAX+pulsⅡ的仿真器進(jìn)行了實(shí)際仿真,其仿真波形如圖12-6所示。

圖12-6

8255芯片VHDL模塊的仿真波形

圖12-6中,開始reset施加高電平(“1”),使8255芯片復(fù)位,所有端口都處于輸入方式。接著向方式控制寄存器寫控制字90H,使得A口變?yōu)檩斎肟?,B口、C口變?yōu)檩敵隹?。然后向控制寄存器?FH數(shù)據(jù),從仿真波形中可以看到,寫完后pch輸出變?yōu)?H。0FH是位控控制字,它使C口的最高位置“1”。將數(shù)據(jù)總線D0~D7的值改為FFH,再將該數(shù)據(jù)寫入C口,在寫操作完成后C口變?yōu)镕FH。下面再向控制寄存器寫位控控制字02H。該字表明要將pc1位清零。在寫操作完成后,pc1變?yōu)镈H,表明pc1位已清零。

再改變A口的輸入數(shù)據(jù)值,使其成為66H,讀A口就從A口得到66H值并從D0~D7輸出。改變D0~D7數(shù)據(jù)上的值,使其成為99H,并將該值寫向B口,那么在該寫操作完成后,在B口輸出端即得到99H輸出值。

由上述分析可知,該8255芯片的VHDL描述模塊的仿真結(jié)果是正確的,完全符合8255方式0的輸入/輸出功能。

12.2

SCI串行接口芯片設(shè)計(jì)實(shí)例

目前最常見的串行接口芯片有8251和8250,同樣為了簡(jiǎn)化設(shè)計(jì),這里只舉一個(gè)固定信號(hào)格式的串行接口芯片SCI的設(shè)計(jì)。

TXD——串行發(fā)送數(shù)據(jù)輸出;

rdFULL——接收寄存器“滿”信號(hào)輸出;

tdEMPTY——發(fā)送寄存器“空”信號(hào)輸出;

D0~D7——數(shù)據(jù)總線輸入/輸出端。

注意:D0~D7是雙向三態(tài)輸入/輸出端。

2.內(nèi)部結(jié)構(gòu)

SCI芯片的內(nèi)部結(jié)構(gòu)如圖12-8所示。它由狀態(tài)發(fā)生器、串并變換器、并串變換器、鎖存器和三態(tài)緩沖器組成。由圖12-8可知,該SCI芯片的功能和性能是固定的,而不是程序可編的。

圖12-8

SCI芯片的內(nèi)部結(jié)構(gòu)框圖

12.2.2串行數(shù)據(jù)傳送的格式與同步控制機(jī)構(gòu)

1.串行數(shù)據(jù)傳送的格式

SCI芯片以固定的串行數(shù)據(jù)傳送格式來傳送數(shù)據(jù)。傳送一個(gè)數(shù)據(jù)或一個(gè)字符共需10位,即1位啟動(dòng)位、8位數(shù)據(jù)位或1個(gè)字符、1個(gè)校驗(yàn)位、1個(gè)停止位。為了能對(duì)位進(jìn)行正確的操作,選取的每位數(shù)據(jù)位應(yīng)包含4個(gè)時(shí)鐘(CLK)周期。為了得到串行數(shù)據(jù)傳送的波特率(例如9600b/s),外部時(shí)鐘應(yīng)選取為38.4?kHz。

2.串行數(shù)據(jù)傳送的控制機(jī)構(gòu)

在異步串行數(shù)據(jù)傳送時(shí),由于沒有專門提供同步信號(hào),因此只能從所傳送的信號(hào)中提取同步信息,例如數(shù)據(jù)的啟動(dòng)位就為SCI的串并變換提供啟動(dòng)信號(hào)。

1)串行數(shù)據(jù)接收的同步控制

在串行數(shù)據(jù)接收的同步控制器中設(shè)置了一個(gè)6位的計(jì)數(shù)器,高4位為sh_r,低2位為sl_r。利用該計(jì)數(shù)器的計(jì)數(shù)狀態(tài)可實(shí)現(xiàn)串行數(shù)據(jù)接收的同步控制。計(jì)數(shù)器的狀態(tài)與串行數(shù)據(jù)接收、發(fā)送過程的波形關(guān)系如圖12-9所示。

圖12-9計(jì)數(shù)器的狀態(tài)與串行數(shù)據(jù)接收、發(fā)送過程的波形關(guān)系

從圖12-9中可以看到,在RXD端的啟動(dòng)位未到達(dá)以前,sh_r和sl_r都保持為“0”。當(dāng)同步控制機(jī)構(gòu)檢測(cè)到啟動(dòng)位以后,就立即將sh_r置為7H(0111B),sl_r置為0(00B)。此后計(jì)數(shù)器啟動(dòng),對(duì)CLK進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)到sh_r?=?FH,sl_r?=?3H時(shí),一個(gè)數(shù)據(jù)接收過程結(jié)束,計(jì)數(shù)器又處于0狀態(tài),等待下一個(gè)啟動(dòng)位的到來。根據(jù)此接收一個(gè)數(shù)據(jù)的過程即可畫出其狀態(tài)轉(zhuǎn)移圖如圖12-10所示

圖12-10接收一個(gè)數(shù)據(jù)的狀態(tài)轉(zhuǎn)移圖

從圖12-10中可以看到,sh_r從0H到6H的值都處于空閑狀態(tài),只有出現(xiàn)啟動(dòng)位后sh_r才跳到7H狀態(tài),此后每4個(gè)時(shí)鐘周期轉(zhuǎn)移一個(gè)狀態(tài)(即接收1位數(shù)據(jù)),直到sh_r為FH,

8位數(shù)據(jù)結(jié)束為止。

2)串行數(shù)據(jù)發(fā)送的同步控制

串行數(shù)據(jù)發(fā)送的同步控制與串行數(shù)據(jù)接收的同步控制類同,所不同的是啟動(dòng)發(fā)送數(shù)據(jù)的條件不是啟動(dòng)信號(hào),而是“空”信號(hào)tdEMPTY。當(dāng)發(fā)送鎖存器din_latch空時(shí),tdEMPTY?=?1;當(dāng)CPU向發(fā)送鎖存器寫入一個(gè)發(fā)送數(shù)據(jù)以后,tdEMPTY?=?'0'。該信號(hào)變?yōu)椤?”,將啟動(dòng)發(fā)送計(jì)數(shù)器,在CLK的同步下使sh_t置為7H,sl_t置為0H。在CLK時(shí)鐘驅(qū)動(dòng)下,sh_t從7H到FH逐個(gè)進(jìn)行計(jì)數(shù),完成一個(gè)數(shù)據(jù)的發(fā)送過程。發(fā)送一個(gè)數(shù)據(jù)的狀態(tài)轉(zhuǎn)移圖請(qǐng)讀者自行畫出。

12.2.3SCI芯片的VHDL描述

【例12-2】SCI芯片的VHDL描述程序。

程序清單的前4條語句用于所引用的IEEE庫,后續(xù)的5行語句是對(duì)SCI的實(shí)體進(jìn)行描述,對(duì)輸入/輸出引腳的定義與圖12-7所示的相同。需要指出的是,D0~D7是三態(tài)雙向數(shù)據(jù)總線。

1.構(gòu)造體上各信號(hào)的定義與說明

1)計(jì)數(shù)器輸出

在SCI芯片描述程序中定義了兩個(gè)計(jì)數(shù)器輸出。其中一個(gè)是發(fā)送計(jì)數(shù)器輸出scit,另一個(gè)是接收計(jì)數(shù)器輸出scir。另外,還將scit輸出分為高4位輸出sh_t和低2位輸出sl_t。同理,scir輸出分為sh_r和sl_r兩個(gè)輸出。

2)移位寄存器輸出

接收串行數(shù)據(jù)的移位寄存器輸出定義為d_fb。在一個(gè)數(shù)據(jù)接收結(jié)束后,它輸出的就是一個(gè)完整的8位數(shù)據(jù)值。

3)鎖存器輸出

SCI芯片有兩個(gè)鎖存器do_latch和din_latch。其中,do_latch鎖存移位寄存器輸出的數(shù)據(jù),而din_latch則鎖存要發(fā)送的數(shù)據(jù)。

4)標(biāo)志寄存器輸出

為了實(shí)現(xiàn)與計(jì)算機(jī)的讀/寫同步,這里設(shè)置了兩條狀態(tài)線rdFULL_s和tdEMPTY_s。當(dāng)接收數(shù)據(jù)裝入do_latch時(shí),rdFULL_s變?yōu)椤?”;當(dāng)計(jì)算機(jī)讀走該數(shù)據(jù)時(shí),則置“0”。當(dāng)計(jì)算機(jī)寫入一個(gè)發(fā)送數(shù)據(jù)至din_latch時(shí),tdEMPTY_s變?yōu)椤?”;當(dāng)一個(gè)數(shù)據(jù)發(fā)送完畢時(shí),則置“1”。txdF和rxdF是發(fā)送和接收過程的中間標(biāo)志。

2.內(nèi)部各進(jìn)程的描述

第1個(gè)進(jìn)程是對(duì)rdFULL標(biāo)志進(jìn)行置“0”、置“1”操作和在串行數(shù)據(jù)接收結(jié)束時(shí)將接收數(shù)據(jù)送給do_latch鎖存器輸出的進(jìn)程。當(dāng)接收結(jié)束時(shí),移位寄存器d_fb將數(shù)據(jù)送入do_latch,同時(shí)將標(biāo)志信號(hào)rdFULL_s置“1”,向計(jì)算機(jī)表示數(shù)據(jù)已準(zhǔn)備好,可以來讀取。當(dāng)rd?=?0且cs?=?0時(shí),表示計(jì)算機(jī)讀接收數(shù)據(jù),此時(shí)使rdFULL_s變?yōu)椤?”,表明數(shù)據(jù)已讀走,為下一次讀作準(zhǔn)備。

第2個(gè)進(jìn)程是寫數(shù)據(jù)進(jìn)程,計(jì)算機(jī)將數(shù)據(jù)總線上的一個(gè)數(shù)據(jù)寫入發(fā)送寄存器din_latch。

第3個(gè)進(jìn)程是對(duì)標(biāo)志rxdF進(jìn)行操作的進(jìn)程。當(dāng)rxd?=?‘0’,表明啟動(dòng)位到來時(shí),rxdF置“1”;當(dāng)一個(gè)數(shù)據(jù)接收完畢時(shí),將其置“0”。

第4個(gè)進(jìn)程是對(duì)txdF和tdEMPTY_s進(jìn)行置“0”、置“1”操作的進(jìn)程。當(dāng)寫發(fā)送寄存器時(shí)txdF和tdEMPTY_s置“0”,而一個(gè)數(shù)據(jù)發(fā)送結(jié)束時(shí),它們都被置“1”。

第5個(gè)進(jìn)程是讀進(jìn)程,當(dāng)rd?=?0和cs?=?0時(shí),變換好的數(shù)據(jù)從接收鎖存器do_latch輸出到數(shù)據(jù)總線data上。

第6個(gè)進(jìn)程是數(shù)據(jù)接收控制進(jìn)程,當(dāng)數(shù)據(jù)接收端rxd出現(xiàn)低電平,一個(gè)數(shù)據(jù)啟動(dòng)位到來時(shí),接收控制計(jì)數(shù)器scir將其置為“011100”(28),即sh_r?=?0111(7),一個(gè)接收計(jì)數(shù)周期開始。當(dāng)計(jì)數(shù)到63時(shí)(sh_r?=?1111,sl_r?=?11),scir清零并等待下一個(gè)啟動(dòng)位的到來。

第7個(gè)進(jìn)程是數(shù)據(jù)發(fā)送控制進(jìn)程,其原理同數(shù)據(jù)接收進(jìn)程。所不同的是,當(dāng)CPU寫一個(gè)數(shù)據(jù)到發(fā)送寄存器din_latch時(shí),其控制計(jì)數(shù)器scit開始一個(gè)發(fā)送的計(jì)數(shù)周期;當(dāng)一個(gè)數(shù)據(jù)發(fā)送結(jié)束,即scit計(jì)數(shù)到63后,就清“0”,等待下一個(gè)發(fā)送數(shù)據(jù)到來。

第8個(gè)進(jìn)程是接收數(shù)據(jù)移位控制進(jìn)程,進(jìn)行數(shù)據(jù)的串并變換。

第9個(gè)進(jìn)程是發(fā)送數(shù)據(jù)的并串變換進(jìn)程。

12.2.4

SCI芯片VHDL描述模塊的仿真

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論