《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 基于CPLD芯片EPM7128設(shè)計(jì)的數(shù)據(jù)合并轉(zhuǎn)換器

基于CPLD芯片EPM7128設(shè)計(jì)的數(shù)據(jù)合并轉(zhuǎn)換器

2008-11-06
作者:魏占永

??? 摘? 要: 介紹了基于CPLD芯片EPM7128設(shè)計(jì)的數(shù)據(jù)合并轉(zhuǎn)換器。其中,控制串行口數(shù)據(jù)合并時(shí)間的計(jì)數(shù)器電路和并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)的移位電路都是在CPLD中完成的,數(shù)據(jù)塊合并由相應(yīng)的軟件實(shí)現(xiàn),最終形成PCM流輸出,。?

??? 關(guān)鍵詞: CPLD? 數(shù)據(jù)合并轉(zhuǎn)換器? 串行口? PCM流

?

??? 數(shù)據(jù)交換機(jī)的傳送速率很高,當(dāng)其和串行口通信時(shí),在發(fā)送前把數(shù)據(jù)分為兩部分分別發(fā)送到串行口,然后經(jīng)過(guò)數(shù)據(jù)合并轉(zhuǎn)換器把各個(gè)串行口的數(shù)據(jù)合并在一起并轉(zhuǎn)換成PCM流,。本文介紹了基于CPLD芯片EPM7128設(shè)計(jì)的數(shù)據(jù)合并轉(zhuǎn)換器。?

1 數(shù)據(jù)合并轉(zhuǎn)換器硬件電路?

1.1 主要硬件簡(jiǎn)介?

??? EPM7128是可編程的" title="可編程的">可編程的大規(guī)模邏輯器件,為ALTERA公司的MAX7000系列產(chǎn)品,具有高阻抗,、電可擦等特點(diǎn),可用門(mén)單元為2500個(gè),管腳間最大延遲為5ns,工作電壓" title="工作電壓">工作電壓為+5V,。?

??? IDT7205為FIFO型異步讀寫(xiě)的存儲(chǔ)器芯片,容量為8192×9比特,存取時(shí)間為12ns,有空、半滿(mǎn),、滿(mǎn)三個(gè)標(biāo)志位,最大功耗為660mW,工作電壓為+5V,。?

??? MSM486DX屬于PC104嵌入式系統(tǒng)的5X86系列,為AMD-133MHz CPU,具有COM1、COM2兩個(gè)串口,一個(gè)LPT并口,一個(gè)FLOPPY接口,一個(gè)IDE接口,一個(gè)VGA/LCD接口,一個(gè)AT-KEYBOARD 接口,16個(gè)中斷,額定功率為8W,工作電壓為+5V,。?

1.2 數(shù)據(jù)合并轉(zhuǎn)換器電路框圖?

??? 可編程的數(shù)據(jù)合并轉(zhuǎn)換器電路框圖如圖1所示,。圖中,DB為數(shù)據(jù)總線(xiàn),AB為地址總線(xiàn),R和W分別為讀寫(xiě)信號(hào)線(xiàn),INT5、INT7,、INT10和INT11為四個(gè)中斷,CS1,、CS2和CS3是在CPLD內(nèi)部生成的地址譯碼器Addr-encoder分別送給分頻" title="分頻">分頻器、兩個(gè)串行口的片選信號(hào),ORG是晶振送給分頻器的振蕩脈沖,CLK 是分頻器輸出的脈沖FRAMECLK和PCMCLK,WFIFO,、RFIFO是由CPLD生成的包含地址信息的訪(fǎng)問(wèn)FIFO的讀寫(xiě)脈沖, DATA_IN1和DATA_IN2為串行口輸入數(shù)據(jù),PCM_DATA是數(shù)據(jù)合并轉(zhuǎn)換器輸出的PCM流,PCMCLKA為輸出的碼同步時(shí)鐘" title="同步時(shí)鐘">同步時(shí)鐘,WORLDCLKA為輸出的字同步時(shí)鐘,。?

?

?

1.3 電路工作分析?

??? 晶振把時(shí)鐘脈沖送給分頻器,分頻器含有兩個(gè)可編程的定時(shí)器。分頻器把可控的FRAMECLK和PCMCLK送給CPLD,在CPLD內(nèi)部經(jīng)過(guò)邏輯組合形成三路脈沖信號(hào),一路控制計(jì)數(shù)器形成INT5,、INT7兩個(gè)幀頻中斷觸發(fā)脈沖,CPU接到中斷后立即寫(xiě)FIFO;另一路控制移位寄存器把并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)PCM流;第三路形成RFIFO去連續(xù)讀FIFO,。兩個(gè)串行口通過(guò)中斷方式(INT10、INT11)接收到外部數(shù)據(jù)后,暫存緩沖區(qū)內(nèi),按一定格式由中斷INT5控制寫(xiě)給FIFO,。?

2 CPLD內(nèi)部邏輯電路?

??? CPLD內(nèi)部邏輯電路如圖2所示,。圖中,虛線(xiàn)框內(nèi)為CPLD內(nèi)部電路,虛線(xiàn)框外為CPLD的I/O口。?

?

?

2.1 地址譯碼器?

??? 地址譯碼器Addr-encoder用VHDL語(yǔ)言生成,。Addr-encoder的輸出有總線(xiàn)驅(qū)動(dòng)器芯片74245的使能脈沖ENB,總線(xiàn)傳輸方向的使能脈沖DIR,寫(xiě)FIFO操作脈沖WFIFO,分頻器和串行口的片選CS1,、CS2和CS3,FIFO數(shù)據(jù)空滿(mǎn)標(biāo)志脈沖RFIFOFLAG,FIFO復(fù)位時(shí)鐘脈沖WCTRL,。?

2.2 數(shù)據(jù)移位部分?

??? FRAMECLK周期是PCMCLK 的8倍,它們都是分頻器送來(lái)的脈沖。FRAMECLK反相" title="反相">反相后作為FIFO的讀信號(hào),兩次反相后作為字同步時(shí)鐘,。PCMCLK直接作為移位寄存器74165的時(shí)鐘觸發(fā)脈沖,兩者與非后的輸出低電平作為74165重裝載數(shù)據(jù)的觸發(fā)電平,。它們的信號(hào)時(shí)序如圖3所示。?

?

?

??? 從三者的時(shí)序圖可知,每當(dāng)一個(gè)字節(jié)的最后一位完成移位后,在FRAMECLK脈沖反相的下降沿觸發(fā)下讀取FIFO數(shù)據(jù),這時(shí)74165的裝載使能74165STD恰好為低電平(與非結(jié)果),完成新數(shù)據(jù)裝載,然后在PCMCLK脈沖的上升沿作用下開(kāi)始新一輪次的數(shù)據(jù)移位,。?

2.3 幀長(zhǎng)計(jì)數(shù)器部分?

??? 兩個(gè)74161設(shè)計(jì)成1/64的分頻器,也叫幀長(zhǎng)計(jì)數(shù)器,此計(jì)數(shù)器的時(shí)鐘為FRAMECLK,計(jì)數(shù)器的輸出最高兩位邏輯與為中斷INT7,把與門(mén)輸出與次高位邏輯異或?yàn)橹袛郔NT5,。這樣,INT7比INT5在時(shí)序上早半個(gè)周期。開(kāi)機(jī)復(fù)位后,INT7脈沖首先產(chǎn)生,觸發(fā)中斷,CPU中斷后在服務(wù)程序中把64個(gè)字節(jié)數(shù)據(jù)寫(xiě)到FIFO,然后屏蔽中斷INT7,半個(gè)周期后,FIFO中還剩32個(gè)字節(jié)數(shù)據(jù)(因?yàn)镕IFO的讀脈沖和FRAMECLK反相同頻),。然后中斷INT5到來(lái),CPU響應(yīng)后,再寫(xiě)64個(gè)字節(jié)數(shù)據(jù)給FIFO,使FIFO中一直保持有數(shù)據(jù)的狀態(tài)(可避免讀FIFO正好落在兩個(gè)寫(xiě)FIFO之間,FIFO因無(wú)數(shù)據(jù)而讀死),。這樣,每當(dāng)中斷INT5到來(lái),都寫(xiě)64字節(jié)給FIFO,周而復(fù)始,所以把64字節(jié)定為幀長(zhǎng)。?

??? 設(shè)PCMCLK的頻率為f(MHz),則FRAMECLK的頻率為f/8,由于幀長(zhǎng)為64,所以有:幀頻=f/(8×64),PCM流速率=f(bit/s),。分頻器的分頻比是通過(guò)軟件設(shè)定的,所以PCM流的速率可編程。?

3 軟件設(shè)計(jì)?

??? 分頻器編程:?

??? outp(0x303,0x36);//方式3,方波,。//?

??? outp(0x300,0x50);//timer0,分頻比為80,。//?

??? outp(0x300,0x00);?

??? outp(0x303,0x74);//方式2,脈沖。//?

??? outp(0x301,0x08);//timer1,分頻比為8,。//?

??? outp(0x301,0x00);?

??? 數(shù)據(jù)合并:?

if((com1_count%24)==0) ;//串行口1的24字節(jié)數(shù)據(jù)放在數(shù)組Frame的4~27的位置,。//?

??? {? ?

??? com_buf1[com1_count++]=db1;?//串行口1接收數(shù)據(jù)//?

??? int Original_Counter;?

??? Original_Counter=com1_count/24;?

??? memcpy(Frame[Original_Counter-1]+4,&com_buf1[com1_count-24],24);?

??? }?

if((com2_count%24)==0) ;//串行口2的24字節(jié)數(shù)據(jù)放在數(shù)組Frame的28~51的位置。//?

??? {?

??????? com_buf2[com2_count++]=db2?;//串行口2接收數(shù)據(jù)//?

??????? int Original_Counter;?

??????? Original_Counter=com2_count/24;?

??????? memcpy(Frame[Original_Counter-1]+28,&com_?

buf2[com2_count-24],24) ;//合并后的數(shù)據(jù)放在Frame?

}?????????????????????? ? 數(shù)組中,。//?

??? 寫(xiě)FIFO: ?

void Send_To_Fifo(int number);? //Send_To_Fifo函數(shù)為中斷服務(wù)程序的一部分,。//?

{?

??? for(int i=0;i<64;i++)?

??? outp(WFIFO,Frame[number][i]); ? ??//數(shù)組送給FIFO,實(shí)現(xiàn)數(shù)據(jù)合并//?

}?

參考文獻(xiàn)?

1 Stefan sjoholm, Lennart lindh.邊計(jì)年, 薛宏熙譯.用VHDL設(shè)計(jì)電子線(xiàn)路. 北京:清華大學(xué)出版社, 2001?

2 李廣軍, 王厚軍. 實(shí)用接口技術(shù). 成都: 電子科技大學(xué)出版社, 1998?

3 譚浩強(qiáng). C程序設(shè)計(jì). 北京: 清華大學(xué)出版社,1996

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀(guān)點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話(huà)通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話(huà):010-82306118;郵箱:[email protected],。