《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 基于IP核的PSTN短消息終端SoC軟硬件協(xié)同設(shè)計(jì)
基于IP核的PSTN短消息終端SoC軟硬件協(xié)同設(shè)計(jì)
中南大學(xué) 趙巖 清華大學(xué) 張果 張春
摘要: 介紹在基于微控制器IP核的PSTN短消息終端SoC設(shè)計(jì)當(dāng)中,如何合理劃分硬件和軟件的功能;從對微控制器IP核的配置與擴(kuò)展、片上外設(shè)在SFR總線上的映射、存儲(chǔ)空間的劃分與映射等三個(gè)方面,詳細(xì)講述SoC的軟硬件協(xié)同設(shè)計(jì)。
Abstract:
Key words :

 

1  概述

  PSTN短消息終端SoC是為固定電話網(wǎng)短消息業(yè)務(wù)而設(shè)計(jì)的一種數(shù)字終端處理芯片。片上集成了微控制器、RAM、FSK/DTMF調(diào)制解調(diào)器、LCD接口鍵盤掃描數(shù)據(jù)存儲(chǔ)器擴(kuò)展頁面尋址接口以及線路狀態(tài)控制接口;可以完成FSK和DTMF格式的短消息上傳、下傳,CID(Calling Identity Delivery,主叫識別信息傳送)號碼的接收,振鈴信號檢測,話機(jī)狀態(tài)控制等功能[1],提供了PSTN短消息終端的單芯片解決方案。其中,使用了DW8051_core IP核作為SoC的微控制器核心。

  SoC(System on chip,片上系統(tǒng))不僅指它的硬件平臺(tái),還包括運(yùn)行在其上的軟件成分。如果系統(tǒng)采用全硬件設(shè)計(jì)的方案,優(yōu)點(diǎn)是速度快、效率高,但是研制周期長,從而成本也高;用軟件實(shí)現(xiàn)則更為靈活,研制周期短。缺點(diǎn)是速度慢,效率比較低。因此,SoC設(shè)計(jì)必須在硬件與軟件功能劃分上有一個(gè)合理的權(quán)衡,并進(jìn)行協(xié)同設(shè)計(jì)[2]。

2  SoC系統(tǒng)任務(wù)的軟硬件功能劃分

  系統(tǒng)任務(wù)按功能可以分為通信、人機(jī)交互、Flash存儲(chǔ)器管理和外設(shè)管理四部分。通信的物理層功能即DTMF/FSK信號的調(diào)制解調(diào),涉及插值、加權(quán)、相關(guān)等DSP運(yùn)算。考慮到通信的實(shí)時(shí)性要求和所使用8位微控制器的數(shù)據(jù)處理能力,這些運(yùn)算由專門設(shè)計(jì)的Modem硬件邏輯實(shí)現(xiàn);而在數(shù)據(jù)鏈路層,比如建立和釋放與服務(wù)器的連接、超時(shí)控制、接收FSK數(shù)據(jù)幀、拆包、差錯(cuò)控制、提取返回消息層的信息和相應(yīng)標(biāo)志位的建立等,都交給微處理器由軟件實(shí)現(xiàn)。人機(jī)交互中的鍵盤掃描要不斷判斷是否有按鍵動(dòng)作發(fā)生,用軟件實(shí)現(xiàn)效率低,這里也用專門的硬件邏輯實(shí)現(xiàn)。其他人機(jī)交互功能,如菜單操作、短信編輯等,則都由軟件實(shí)現(xiàn)。Flash存儲(chǔ)器管理和外設(shè)管理在硬件提供了接口寄存器的情況下,由軟件實(shí)現(xiàn)。

  把實(shí)時(shí)性強(qiáng)、運(yùn)算量大和重復(fù)性強(qiáng)的功能交給硬件去實(shí)現(xiàn),然后在滿足系統(tǒng)性能要求的情況下,把盡可能多的任務(wù)留給片上的微控制器用軟件實(shí)現(xiàn)。這樣降低了SoC的硬件復(fù)雜度以及制造成本,同時(shí)系統(tǒng)也可以獲得最大的靈活性。

3  SoC的軟硬件協(xié)同設(shè)計(jì)

3.1  對微控制器核的配置和擴(kuò)展

  DW8051_core是Synopsys公司提供的一個(gè)與8051指令兼容的8位微控制器IP核。它采用4個(gè)時(shí)鐘周期為1個(gè)指令周期的模式,在時(shí)鐘周期相同的情況下,處理能力是標(biāo)準(zhǔn)8051的3倍。DW8051_core訪問程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器的MEM地址總線是16位總線,避免了傳統(tǒng)8051結(jié)構(gòu)中數(shù)據(jù)總線和地址總線低位的時(shí)分復(fù)用問題。

  由于DW8051_core是一個(gè)IP軟核(soft core),所以可以對它進(jìn)行配置和擴(kuò)展。在綜合(synthesis)的時(shí)候,通過對參數(shù)文件的設(shè)置,可以選擇配置內(nèi)部RAM是128字節(jié)還是256字節(jié);可以選擇是否使用定時(shí)/計(jì)數(shù)器2,使用1個(gè)串口還是2個(gè)串口等。用戶還可以按照DW8051_core手冊的要求使用硬件描述語言編寫硬件邏輯,擴(kuò)展SFR總線和中斷系統(tǒng)(最多可以擴(kuò)展到13級中斷)[3]。

  在SoC設(shè)計(jì)中,只使用到了微控制器核的1個(gè)硬件定時(shí)器(Timer0),1個(gè)外部中斷(Interrupt0),1個(gè)串行口(UART),并沒有使用DW8051_core的全部功能。那些冗余的功能只會(huì)增加系統(tǒng)的硬件負(fù)擔(dān),所以按照最精簡的原則配置DW8051_core:使用內(nèi)部128字節(jié)RAM,不使用定時(shí)/計(jì)數(shù)器2,不使用內(nèi)部ROM,只使用1個(gè)串口,不擴(kuò)展中斷。在DW8051_parameter.vhd文件中,作如下的參數(shù)設(shè)定[3]可以完成上述配置:

  package DW8051_parameter is
  constant ram_256 : integer := 0;
  constant timer2 : integer := 0;
  constant rom_addr_size : integer := 0;
  constant serial : integer := 0;
  constant extd_intr : integer := 0;
  end DW8051_parameter;

  SoC中的FSK/DTMF調(diào)制解調(diào)器、LCD接口、鍵盤掃描、數(shù)據(jù)存儲(chǔ)器擴(kuò)展頁面尋址接口以及線路狀態(tài)控制接口等,都作為片內(nèi)外設(shè)連接在DW8051_core所特有的SFR內(nèi)部總線上。8 KB的片上RAM和片外512 KB的Flash存儲(chǔ)器AM29LV040都連接在DW8051_core的MEM總線上,如圖1所示。

按此在新窗口瀏覽圖片
圖1  經(jīng)過擴(kuò)展的DW8051_core SFR總線以及SoC系統(tǒng)結(jié)構(gòu)

3.2  外設(shè)在SFR總線上的地址映射

  DW8051_core通過SFR地址總線sfr_addr[0:7],SFR讀信號sfr_rd,SFR寫信號sfr_wr,SFR數(shù)據(jù)輸出總線sfr_data_out[0:7],數(shù)據(jù)輸入總線sfr_data_in[0:7]來訪問映射到SFR總線上的片上外設(shè)。每一個(gè)外設(shè)都通過SFR地址映射成SFR總線上的一個(gè)寄存器,如圖2所示。

  對這些擴(kuò)展SFR寄存器的訪問和對普通寄存器的訪問在形式上并沒有區(qū)別。當(dāng)應(yīng)用程序使用Keil的C51編譯器時(shí),修改reg51.h文件可以讓編譯器確認(rèn)用戶所擴(kuò)展的SFR寄存器。對擴(kuò)展SFR外設(shè)地址的分配可以根據(jù)設(shè)計(jì)需要而不同,但是只能使用DW8051_core沒有保留和占用的地址,否則會(huì)發(fā)生沖突。在reg51.h文件中添加以下語句讓編譯器確認(rèn)擴(kuò)展的寄存器:

  sfr SEND_MODEM_DATA = 0xf1;/* 擴(kuò)展,發(fā)送Modem數(shù)據(jù),只寫 */
  sfr READ_FSK_DECODE = 0xf1;/* 擴(kuò)展,讀FSK解調(diào)數(shù)據(jù),只讀 */
  sfr READ_DTMF_DECODE = 0xf2;/* 擴(kuò)展,讀DTMF解調(diào)數(shù)據(jù),只讀 */
  sfr MODEM_STATUS = 0xf3;/* 擴(kuò)展,Modem狀態(tài),只讀 */
  sfr MODEM_CTRL = 0xf2;/* 擴(kuò)展,Modem控制,只寫 */
  sfr KEYPAD_VALUE = 0xf4;/* 擴(kuò)展,讀鍵盤值,只讀 */
  sfr FLASH_PAGE = 0xf5; /* 擴(kuò)展,頁面尋址,只寫 */
  sfr LCD_DATA = 0xf6; /* 擴(kuò)展,LCD數(shù)據(jù),讀寫 */
  sfr LCD_CTRL = 0xf7; /* 擴(kuò)展,LCD控制,只寫 */
  sfr CIRCUIT_STATUS = 0xff; /* 擴(kuò)展,線路狀態(tài),只讀 */
  sfr CIRCUIT_CTRL = 0xff; /* 擴(kuò)展,線路控制,只寫 */

  為了節(jié)約SFR總線地址資源,一些擴(kuò)展的SFR寄存器在硬件上設(shè)計(jì)為只能寫、不可讀,另外一些被設(shè)計(jì)為只能讀、不可寫。這樣,二者可以復(fù)用同一個(gè)SFR總線地址,比如MODEM_CTRL和READ_DTMF_DECODE寄存器;但是這樣在需要先將那些“只寫”寄存器的內(nèi)容讀出,運(yùn)算后再進(jìn)行寫回操作的時(shí)候就很不方便。這里采用了鏡像變量的方法,為每一個(gè)“只寫”寄存器建立一個(gè)全局變量,每次寫寄存器操作后,都對這個(gè)全局變量進(jìn)行同樣的寫操作,時(shí)刻保持變量值和寄存器的內(nèi)容一致,在需要讀出的時(shí)候就使用此全局變量。MODEM_CTRL寄存器的bit0控制Modem是DTMF還是FSK模式。下面以對這一位的操作為例說明。

  建立它的鏡像全局變量:

  unsigned char xdata modem_ctrl_mirror;

  定義控制位:

  #define MODEM_B0_MODE0x01// 1-DTMF, 0-FSK

按此在新窗口瀏覽圖片
圖2  片上外設(shè)在SFR總線上的物理連接

 

  設(shè)置Modem為FSK模式:

void Modem_SetMode_FSK() {
  MODEM_CTRL = modem_ctrl_mirror & (~MODEM_B0_MODE);
  modem_ctrl_mirror = modem_ctrl_mirror & (~MODEM_B0_MODE);
}

  在初始化程序中對這些“只寫”寄存器及其鏡像全局變量進(jìn)行賦值。

void DevicesInit() {
  MODEM_CTRL = MODEM_CTRL_INI;
  modem_ctrl_mirror = MODEM_CTRL_INI;
}

3.3  存儲(chǔ)空間的劃分和映射

  在物理上,把8KB的片內(nèi)RAM分為兩部分,0000H~1BFFH(共7 KB)映射到數(shù)據(jù)空間,1C00H~1FFFH(共1 KB)映射到程序空間,并覆蓋Flash中程序空間的1C00H~1FFFH區(qū)域;把512 KB的Flash存儲(chǔ)器也分成兩部分,00000H~0FFFFH(共64 KB)映射到程序空間,剩下的10000H~7FFFFH(共448 KB)都映射到數(shù)據(jù)空間。

  對微控制器核來說,可以尋址64 KB的程序空間和64 KB的數(shù)據(jù)存儲(chǔ)空間。對整個(gè)SoC而言,因?yàn)镕lash中的程序空間有1 KB被RAM程序空間覆蓋掉,所以邏輯上它的程序空間依然是64 KB,但數(shù)據(jù)空間變?yōu)? KB+448 KB,共455 KB。微控制器核通過擴(kuò)展的SFR寄存器FLASH_PAGE按32 KB×16頁的頁面方式訪問Flash存儲(chǔ)器,其中包括程序空間和數(shù)據(jù)空間,如圖3所示。

按此在新窗口瀏覽圖片
圖3  程序空間和數(shù)據(jù)空間的劃分和映射

  在對Flash存儲(chǔ)器件進(jìn)行寫操作后的某一段時(shí)間內(nèi)(從幾十μs~幾百μs),對它進(jìn)行讀操作是不能讀出一個(gè)確切值的,這是Flash存儲(chǔ)器件的一個(gè)特性。本設(shè)計(jì)中程序和數(shù)據(jù)存放在同一個(gè)AM29LV040 Flash存儲(chǔ)器中。在對Flash存儲(chǔ)器進(jìn)行寫操作時(shí),要不斷地從其中讀出進(jìn)行寫操作的程序指令,然后對它本身進(jìn)行寫操作。微控制器核在20 MHz的時(shí)鐘頻率下,指令周期大約是200 ns,即每隔200 ns左右,SoC就要從Flash存儲(chǔ)器中讀取一條指令。這顯然和上述的Flash存儲(chǔ)器特性發(fā)生了沖突。

  通過對編譯環(huán)境的設(shè)定,可以把進(jìn)行寫Flash操作的函數(shù)unsigned char WriteData_FLASH (unsigned char * dest, unsigned char *scr, unsigned int len) 和Flash扇區(qū)擦除函數(shù)unsigned char EraseSector_FLASH (unsigned char sector_index)定位到程序空間的1C00H~1FFFH,并備份到數(shù)據(jù)空間的0EC00H~0EFFFH。在應(yīng)用程序的設(shè)備初始化函數(shù)void DevicesInit()中,調(diào)用加載函數(shù)void LoadFLASHOpToRAM(),把對Flash進(jìn)行寫或者擦除操作的這1KB的程序代碼從Flash加載到RAM的程序空間。以后凡是涉及到對Flash的寫或者擦除操作,都由硬件邏輯切換總線到RAM去執(zhí)行這一段程序代碼。這樣,以不大的RAM開銷,解決了不能同時(shí)對Flash進(jìn)行讀和寫操作的矛盾。函數(shù)void LoadFLASHOpToRAM()的代碼如下:

#define PROG_RAM_DATA0xEC00
#define PROG_RAM_DATA_PAGE9
static unsigned char xdata RAM_prog[1024] _at_ 0x1C00;
void LoadFLASHOpToRAM(){
  unsigned char xdata * p;
  FLASH_PAGE = PROG_RAM_DATA_PAGE;
  p = (unsigned char xdata *)PROG_RAM_DATA;
  memcpy(RAM_prog,p,1024);
}

4  總結(jié)

  本文詳細(xì)講述了在基于微控制器IP核PSTN短消息終端SoC設(shè)計(jì)中軟硬件協(xié)同設(shè)計(jì)的方法。在合理劃分硬件和軟件任務(wù)的基礎(chǔ)上,使設(shè)計(jì)更好地達(dá)到了系統(tǒng)性能的要求。現(xiàn)在SoC已經(jīng)在Xilinx VirtexII 2v1000 FPGA驗(yàn)證平臺(tái)上順利運(yùn)行,并成功進(jìn)行了和服務(wù)器的互聯(lián)互通測試。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久深夜福利| 欧美午夜一区| 亚洲伊人久久综合| 亚洲欧洲一区二区天堂久久| 一区二区日韩精品| 亚洲精品乱码久久久久久黑人 | 国产精品成人午夜| 欧美精品在线视频观看| 欧美成人精品不卡视频在线观看 | 一本大道久久精品懂色aⅴ| 亚洲欧洲在线看| 亚洲国产精品第一区二区三区| 精东粉嫩av免费一区二区三区| 国产亚洲激情| 国产一区二区三区直播精品电影 | 亚洲午夜电影| 亚洲一区二区三区在线播放| 亚洲一区二区三区777| 亚洲免费视频网站| 亚洲男人的天堂在线观看| 亚洲午夜精品国产| 亚洲欧美日本在线| 欧美一区二区三区精品电影| 欧美在线三级| 快射av在线播放一区| 欧美 日韩 国产精品免费观看| 欧美777四色影视在线| 欧美大片va欧美在线播放| 欧美成人在线影院| 欧美片网站免费| 欧美四级在线| 国产欧美婷婷中文| 国内精品美女在线观看| 亚洲第一视频网站| 亚洲精品久久久久久一区二区 | 久久精品日韩| 亚洲人午夜精品免费| 日韩视频亚洲视频| 亚洲欧美成人| 久久国产欧美精品| 久久综合影音| 欧美日本在线播放| 国产精品日韩欧美一区| 国产一区二区精品| 亚洲国产成人精品久久久国产成人一区 | 久久久久久久综合色一本| 麻豆freexxxx性91精品| 欧美精品日韩一本| 国产精品久久777777毛茸茸| 在线观看91精品国产入口| 欧美日韩亚洲综合| 欧美三级在线视频| 国产精品一二三四| 国产综合在线看| 亚洲欧洲中文日韩久久av乱码| 亚洲最新在线| 欧美一区二区日韩一区二区| 91久久国产精品91久久性色| 亚洲视频在线二区| 久久精品99国产精品日本| 欧美不卡一区| 国产精品私房写真福利视频| 影音先锋日韩精品| 亚洲无线视频| 亚洲经典视频在线观看| 香蕉久久夜色精品国产| 美女日韩欧美| 国产精品亚洲片夜色在线| 亚洲高清免费在线| 久久精品国产免费| 欧美精品在线看| 国产精品99免费看| 在线播放亚洲| 亚洲欧美中文字幕| 99re66热这里只有精品4| 欧美一区二区视频在线观看| 欧美激情成人在线| 国产亚洲欧美日韩精品| 夜夜夜久久久| 亚洲欧洲日本一区二区三区| 欧美在线免费一级片| 欧美日韩一区二区三区高清| 合欧美一区二区三区| 亚洲天堂av高清| 日韩视频欧美视频| 久久综合亚洲社区| 国产日韩精品一区二区| 日韩一级大片在线| 亚洲人体大胆视频| 久久综合国产精品台湾中文娱乐网| 欧美性大战xxxxx久久久| 亚洲国产成人精品视频| 欧美一区二区精品久久911| 亚洲一二三区视频在线观看| 欧美ed2k| 韩国自拍一区| 午夜免费日韩视频| 亚洲综合色自拍一区| 欧美日韩视频一区二区| 亚洲国产三级| 亚洲激情小视频| 久久亚洲综合色| 国产日韩亚洲欧美| 亚洲一区二区不卡免费| 亚洲一二三级电影| 欧美日韩午夜| 最新国产成人av网站网址麻豆| 亚洲国产精品成人一区二区| 久久精品青青大伊人av| 国产精品综合av一区二区国产馆| 一区二区高清在线| 在线一区二区三区四区五区| 欧美绝品在线观看成人午夜影视| 在线视频成人| 亚洲欧洲久久| 欧美成人一区二免费视频软件| 午夜久久一区| 久久一区二区三区国产精品 | 亚洲欧美日韩中文播放| 亚洲欧美日韩国产成人精品影院 | 西瓜成人精品人成网站| 一区二区精品国产| 欧美精品videossex性护士| 亚洲第一福利视频| 亚洲黄色影院| 欧美电影打屁股sp| 亚洲国产精品久久久久秋霞蜜臀| 亚洲国产精品ⅴa在线观看| 每日更新成人在线视频| 一区二区三区在线看| 亚洲国产另类精品专区| 嫩草国产精品入口| 亚洲激情图片小说视频| 日韩一二在线观看| 欧美日韩1区2区| 99v久久综合狠狠综合久久| 一区二区三区鲁丝不卡| 欧美午夜片欧美片在线观看| 亚洲一区二区三区中文字幕在线| 午夜视频久久久| 国产亚洲一区二区三区在线播放| 欧美中文字幕| 欧美91精品| 99视频精品在线| 午夜欧美大片免费观看| 国产亚洲成av人在线观看导航 | 亚洲国产福利在线| 欧美国产日本韩| 99re成人精品视频| 欧美一区成人| 国产综合网站| 99av国产精品欲麻豆| 欧美午夜寂寞影院| 先锋a资源在线看亚洲| 久久阴道视频| 亚洲精品日本| 性一交一乱一区二区洋洋av| 国内偷自视频区视频综合| 亚洲精品欧美| 国产精品xxxav免费视频| 性做久久久久久久久| 美女主播一区| 夜夜精品视频一区二区| 欧美在线视频一区二区| 亚洲高清视频的网址| 亚洲午夜国产一区99re久久 | 亚洲婷婷国产精品电影人久久| 久久激情五月激情| 亚洲国产视频直播| 小辣椒精品导航| 亚洲国产日韩欧美| 午夜日韩福利| 亚洲欧洲精品一区二区| 午夜在线播放视频欧美| 在线欧美福利| 性欧美videos另类喷潮| 亚洲国产日本| 久久国产精品久久国产精品 | 亚洲系列中文字幕| 狠狠色狠狠色综合人人| 亚洲少妇诱惑| 精品二区视频| 午夜在线a亚洲v天堂网2018| 亚洲国产成人在线| 亚洲欧美成人一区二区在线电影| 亚洲成人原创| 久久成人免费电影| 日韩天堂在线视频| 久久综合色一综合色88| 亚洲一区二区三区涩| 国产视频在线一区二区| 亚洲国产精品一区二区尤物区| 欧美国产日韩一区二区在线观看| 亚洲一区二区三区四区在线观看| 午夜激情一区| 亚洲第一在线综合网站| 亚洲欧美日韩精品综合在线观看 | 午夜精品久久久久久久久久久久久| 免费在线看一区| 午夜精品一区二区三区电影天堂|