历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2018年02月13日 | 基于SoC的PSTN短消息终端系统的软硬件设计

2018-02-13 来源:eefocus

    1 前 言

    PSTN短消息终端SoC是为固定电话网短消息业务而设计的一种数字终端处理芯片。片上集成了微控制器、RAM、FSK/DTMF调制解调器、 LCD接口、键盘扫描、数据存储器扩展页面寻址接口以及线路状态控制接口;可以完成FSK和DTMF格式的短消息上传、下传,CID(Calling IdenTIty Delivery,主叫识别信息传送)号码的接收,振铃信号检测,话机状态控制等功能[1],提供了PSTN短消息终端的单芯片解决方案。其中,使用了 DW8051_core IP核作为SoC的微控制器核心。

 

    SoC(System on Chip,片上系统)不仅指它的硬件平台,还包括运行在其上的软件成分。如果系统采用全硬件设计的方案,优点是速度快、效率高,但是研制周期长,从而成本也高;用软件实现则更为灵活,研制周期短。缺点是速度慢,效率比较低。因此,SoC设计必须在硬件与软件功能划分上有一个合理的权衡,并进行协同设计 [2]。

    2 SoC系统任务的软硬件功能划分

    系统任务按功能可以分为通信、人机交互、Flash存储器管理和外设管理四部分。通信的物理层功能即DTMF/FSK信号的调制解调,涉及插值、加权、相关等DSP运算。考虑到通信的实时性要求和所使用8位微控制器的数据处理能力,这些运算由专门设计的Modem硬件逻辑实现;而在数据链路层,比如建立和释放与服务器的连接、超时控制、接收FSK数据帧、拆包、差错控制、提取返回消息层的信息和相应标志位的建立等,都交给微处理器由软件实现。人机交互中的键盘扫描要不断判断是否有按键动作发生,用软件实现效率低,这里也用专门的硬件逻辑实现。其他人机交互功能,如菜单操作、短信编辑等,则都由软件实现。Flash存储器管理和外设管理在硬件提供了接口寄存器的情况下,由软件实现。

    把实时性强、运算量大和重复性强的功能交给硬件去实现,然后在满足系统性能要求的情况下,把尽可能多的任务留给片上的微控制器用软件实现。这样降低了SoC的硬件复杂度以及制造成本,同时系统也可以获得最大的灵活性。

    3 SoC的软硬件协同设计

    3.1 对微控制器核的配置和扩展

    DW8051_core是Synopsys公司提供的一个与8051指令兼容的8位微控制器IP核。它采用4个时钟周期为1个指令周期的模式,在时钟周期相同的情况下,处理能力是标准8051的3倍。DW8051_core访问程序存储器和数据存储器的MEM地址总线是16位总线,避免了传统 8051结构中数据总线和地址总线低位的时分复用问题。

    由于DW8051_core是一个IP软核(SOFt core),所以可以对它进行配置和扩展。在综合(synthesis)的时候,通过对参数文件的设置,可以选择配置内部RAM是128字节还是256字节;可以选择是否使用定时/计数器2,使用1个串口还是2个串口等。用户还可以按照DW8051_core手册的要求使用硬件描述语言编写硬件逻辑,扩展 SFR总线和中断系统(最多可以扩展到13级中断)[3]。

    在SoC设计中,只使用到了微控制器核的1个硬件定时器(Timer0),1个外部中断(Interrupt0),1个串行口(UART),并没有使用DW8051_core的全部功能。那些冗余的功能只会增加系统的硬件负担,所以按照最精简的原则配置DW8051_core:使用内部128字节RAM,不使用定时/计数器2,不使用内部ROM,只使用1个串口,不扩展中断。在DW8051_parameter.vhd文件中,作如下的参数设定 [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调制解调器、LCD接口、键盘扫描、数据存储器扩展页面寻址接口以及线路状态控制接口等,都作为片内外设连接在 DW8051_core所特有的SFR内部总线上。8 KB的片上RAM和片外512 KB的Flash存储器AM29LV040都连接在DW8051_core的MEM总线上,如图1所示。

     

DW8051_core SFR总线以及SoC系统结构 www.elecfans.com

     

    图1 经过扩展的DW8051_core SFR总线以及SoC系统结构

    3.2 外设在SFR总线上的地址映射

    DW8051_core通过SFR地址总线sfr_addr[0:7],SFR读信号sfr_rd,SFR写信号sfr_wr,SFR数据输出总线sfr_data_out[0:7],数据输入总线sfr_data_in[0:7]来访问映射到SFR总线上的片上外设。每一个外设都通过SFR地址映射成SFR总线上的一个寄存器,如图2所示。

    对这些扩展SFR寄存器的访问和对普通寄存器的访问在形式上并没有区别。当应用程序使用Keil的C51编译器时,修改reg51.h文件可以让编译器确认用户所扩展的SFR寄存器。对扩展SFR外设地址的分配可以根据设计需要而不同,但是只能使用DW8051_core没有保留和占用的地址,否则会发生冲突。在reg51.h文件中添加以下语句让编译器确认扩展的寄存器:

    sfr SEND_MODEM_DATA = 0xf1;/* 扩展,发送Modem数据,只写 */

    sfr READ_FSK_DECODE = 0xf1;/* 扩展,读FSK解调数据,只读 */

    sfr READ_DTMF_DECODE = 0xf2;/* 扩展,读DTMF解调数据,只读 */

    sfr MODEM_STATUS = 0xf3;/* 扩展,Modem状态,只读 */

    sfr MODEM_CTRL = 0xf2;/* 扩展,Modem控制,只写 */

    sfr KEYPAD_VALUE = 0xf4;/* 扩展,读键盘值,只读 */

    sfr FLASH_PAGE = 0xf5; /* 扩展,页面寻址,只写 */

    sfr LCD_DATA = 0xf6; /* 扩展,LCD数据,读写 */

    sfr LCD_CTRL = 0xf7; /* 扩展,LCD控制,只写 */

    sfr CIRCUIT_STATUS = 0xff; /* 扩展,线路状态,只读 */

    sfr CIRCUIT_CTRL = 0xff; /* 扩展,线路控制,只写 */

    为了节约SFR总线地址资源,一些扩展的SFR寄存器在硬件上设计为只能写、不可读,另外一些被设计为只能读、不可写。这样,二者可以复用同一个SFR总线地址,比如MODEM_CTRL和READ_DTMF_DECODE寄存器;但是这样在需要先将那些“只写”寄存器的内容读出,运算后再进行写回操作的时候就很不方便。这里采用了镜像变量的方法,为每一个“只写”寄存器建立一个全局变量,每次写寄存器操作后,都对这个全局变量进行同样的写操作,时刻保持变量值和寄存器的内容一致,在需要读出的时候就使用此全局变量。MODEM_CTRL寄存器的bit0控制Modem是DTMF还是FSK模式。下面以对这一位的操作为例说明。

    建立它的镜像全局变量:

    unsigned char xdata modem_ctrl_mirror;

    定义控制位:

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

片上外设在SFR总线上的物理连接

    图2 片上外设在SFR总线上的物理连接

    设置Modem为FSK模式:

    void Modem_SetMode_FSK() {

    MODEM_CTRL = modem_ctrl_mirror & (~MODEM_B0_MODE);

    modem_ctrl_mirror = modem_ctrl_mirror & (~MODEM_B0_MODE);

    }

    在初始化程序中对这些“只写”寄存器及其镜像全局变量进行赋值。

    void DevICesInit() {

    MODEM_CTRL = MODEM_CTRL_INI;

    modem_ctrl_mirror = MODEM_CTRL_INI;

    }

    3.3 存储空间的划分和映射

    在物理上,把8KB的片内RAM分为两部分,0000H~1BFFH(共7 KB)映射到数据空间,1C00H~1FFFH(共1 KB)映射到程序空间,并覆盖Flash中程序空间的1C00H~1FFFH区域;把512 KB的Flash存储器也分成两部分,00000H~0FFFFH(共64 KB)映射到程序空间,剩下的10000H~7FFFFH(共448 KB)都映射到数据空间。

 

    对微控制器核来说,可以寻址64 KB的程序空间和64 KB的数据存储空间。对整个SoC而言,因为Flash中的程序空间有1 KB被RAM程序空间覆盖掉,所以逻辑上它的程序空间依然是64 KB,但数据空间变为7 KB+448 KB,共455 KB。微控制器核通过扩展的SFR寄存器FLASH_PAGE按32 KB×16页的页面方式访问Flash存储器,其中包括程序空间和数据空间,如图3所示。

程序空间和数据空间的划分和映射

    图3 程序空间和数据空间的划分和映射

    在对Flash存储器件进行写操作后的某一段时间内(从几十μs~几百μs),对它进行读操作是不能读出一个确切值的,这是Flash存储器件的一个特性。本设计中程序和数据存放在同一个AM29LV040 Flash存储器中。在对Flash存储器进行写操作时,要不断地从其中读出进行写操作的程序指令,然后对它本身进行写操作。微控制器核在20 MHz的时钟频率下,指令周期大约是200 ns,即每隔200 ns左右,SoC就要从Flash存储器中读取一条指令。这显然和上述的Flash存储器特性发生了冲突。

    通过对编译环境的设定,可以把进行写Flash操作的函数unsigned char WritEDAta_FLASH (unsigned char * dest, unsigned char *scr, unsigned int len) 和Flash扇区擦除函数unsigned char EraseSector_FLASH (unsigned char sector_index)定位到程序空间的1C00H~1FFFH,并备份到数据空间的0EC00H~0EFFFH。在应用程序的设备初始化函数 void DevICesInit()中,调用加载函数void LoadFLASHOpToRAM(),把对Flash进行写或者擦除操作的这1KB的程序代码从Flash加载到RAM的程序空间。以后凡是涉及到对 Flash的写或者擦除操作,都由硬件逻辑切换总线到RAM去执行这一段程序代码。这样,以不大的RAM开销,解决了不能同时对Flash进行读和写操作的矛盾。函数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 总结

    本文详细讲述了在基于微控制器IP核PSTN短消息终端SoC设计中软硬件协同设计的方法。在合理划分硬件和软件任务的基础上,使设计更好地达到了系统性能的要求。


推荐阅读

史海拾趣

DZUS公司的发展小趣事

面对日益严峻的环境保护问题,DZUS公司积极响应国家号召,制定了可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和破坏。同时,公司还加大了对可再生能源的研发和应用力度,致力于推动绿色生产和可持续发展。这些举措使DZUS公司成为了行业的环保标杆,并赢得了社会各界的广泛赞誉。

帝特(DTECH)公司的发展小趣事

帝特在国内市场取得一定成绩后,开始积极拓展国际市场。公司在中国区开设了广州、深圳分公司,并在泰国和马来西亚等地设立了分公司和专卖店。通过全球化的战略布局,帝特的产品销售网络遍布东南亚、中东、非洲和美洲等国家和地区,公司的知名度和市场份额均得到了显著提升。

GHz Technology ( Microsemi )公司的发展小趣事

近年来,帝特积极寻求与行业内优秀企业的合作机会。2024年3月,帝特科技与技象科技在广州帝特总部签署战略合作框架协议,双方就物联网通信产品展开深入合作。这一合作不仅有助于帝特在物联网领域的技术积累和业务拓展,也为公司未来的发展注入了新的活力。

Capax Technologies Inc公司的发展小趣事

Capax Technologies Inc的崛起始于一次技术突破。公司研发团队成功开发出一种新型半导体材料,显著提高了电子设备的性能和能效。这一创新成果迅速在行业内引起关注,Capax Technologies Inc因此获得了大量订单和投资。随着技术的不断迭代和优化,Capax Technologies Inc逐渐在电子行业中崭露头角,成为一家备受瞩目的创新型企业。

High Voltage Power Solutions Inc公司的发展小趣事

Capax Technologies Inc的成功还得益于与各大企业的紧密合作。公司与多家知名的电子设备制造商建立了长期稳定的合作关系,为其提供高品质的组件和技术支持。通过与合作伙伴的共同努力,Capax Technologies Inc的产品得以广泛应用在各类电子设备中,进一步提升了公司的知名度和市场份额。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

随着产品质量的不断提升和市场需求的不断扩大,ANSHAN公司开始积极拓展国内外市场。公司通过与国内外知名企业建立合作关系,参加国际电子产品展览会等方式,不断提升品牌知名度和影响力。同时,公司还注重售后服务体系建设,为客户提供全方位、高效的服务支持。这些举措有效提升了公司的市场竞争力,使ANSHAN成为电子行业中备受瞩目的品牌。

问答坊 | AI 解惑

模拟电路教程.EXE

模拟电路教程.EXE…

查看全部问答>

终于拿到SPARTAN 6 试用,超级感动

昨晚刚拿到开发板。真是超级感动:( ,小志姐竟然亲自送来,我一定鞠躬尽瘁死而后已:@ ,努力写好试用报告。论坛的兄弟姐妹们大家也尽情期待吧,这块开发板真是相当的不错。希望大家如果有好想法给我点建议,我会在试用期帮忙整一下的…

查看全部问答>

高手来指点(windows ce4.2串口开发问题)

我是新手,最近在学windows ce4.2下的串口通信,借鉴了很多书,最后终于写出来了,可是在evc下的程序一下到emulator或者班子上,所有关于程序的操作都会使串口有数据输出,而不管我的程序是否与串口有关,到底是怎么回事,大家帮帮我啊。…

查看全部问答>

新手求助: 汇编语言link时的错误不知如何解决

刚刚接触430编程,编译了一个汇编语言的例子 ;----------------------------------------------------------------------------- ORG 08000h ;------------------------------------------------------------- ...…

查看全部问答>

可综合的verilog语法子集

在其他地方看到的,感觉比较适合初学者整理一下思路喔~~   常用的RTL语法结构如下: ●模块声明: module……endmodule ●端口声明:input,output,inout(inout的用法比较特殊,需要注意) ●信号类型:wire,reg,tri等,integer常用语f ...…

查看全部问答>

利用继电器,对大电流进行通断控制需要考虑什么因素

对36V,75A的直流电流利用继电器进行通断控制,需要考虑哪些因素?谢谢…

查看全部问答>

MSP430G2553的两路独立PWM波的问题

          最近在刚学习MSP430G2553      写了个两路独立的可调PWM波  代码   学习的时候还是在论坛上看的别人的    本来都调试出来 ...…

查看全部问答>