1.1.1 编写目的
本文档用来确定Nios的软件架构,以便帮助软件工程师更好的完成中控机的业务逻辑功能。
1.1.2 使用范围
本文档适用于流媒体总线有线数字会议系统,中控机和终端开发工程师,以及相关产品经理和项目经理。
Nios : Nios嵌入式处理器是ALTERA公司推出的采用哈佛结构、具有32位指令集的第二代片上可编程的软核处理器,其最大优势和特点是模块化的硬件结构,以及由此带来的灵活性和可裁减性。
SOPC : System-on-a-Programmable-Chip,即可编程片上系统。用可编程逻辑技术把整个系统放到一块硅片上,称作SOPC。可编程片上系统(SOPC)是一种特殊的嵌入式系统:首先它是片上系统(SOC),即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。
FPGA : FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
TDM :TDM就是时分复用模式。时分复用是指一种通过不同信道或时隙中的交叉位脉冲,同时在同一个通信媒体上传输多个数字化数据、语音和视频信号等的技术。
1) 实现脱机或联机流程下,会议系统的报到、表决、发言、摄像头追踪等功能;
2) 联机流程下,实现对FPGA、终端、前面板等模块的在线升级功能;
3) 连接终端的六路通道实现独立并行工作,互不干扰;
4) 通过网口或者串口与上位机进行通信;
5) 实现十六路语音数据的混音输出(不需要Nios 软件进行干预)。
中控机的整体设计方案中,依据硬件和功能划分如下
1. FPGA芯片为ALTERA的S3C55,芯片的功能可以分为三个部分:
a. FPGA :实现Nios 与外界(PC机的网口,串口,终端,前面板)通信的基本功能,不做业务逻辑控制;
b. SOPC : 搭建一个可裁剪定制的CPU+RAM+存储接口+外围电路 硬件平台;
c. Nios软件 :在SOPC 搭建的嵌入式处理器上运行的软件,负责各种业务逻辑的实现。
2. DSP芯片为TI的5509,用来实现混音算法;
3. 音频AD/DA芯片,用于语音的输入和输出。
FPGA与前面板通过串口通信,NIOS与FPGA通过轮询管脚电平方式读取数据。
FPGA与上位机有两个接口,一个为串口通信,一个为网口通信。NIOS与FPGA之间通过轮询管脚电平方式读取数据。
FPGA与终端通过网口通信。下行时,NIOS与FPGA通过2ms定时中断(FPGA提供)发送数据;上行时,通过轮询管脚电平方式读取数据。
上图蓝色部分为FPGA编程实现的电路部分,NIOS II部分为SOPC创建的CPU内核以及其上运行的软件。
1.上位机 与中控机的通信接口为 UART 和 网口,串口和网口的通信功能由FPGA来实现,Nios 来实现对业务逻辑的控制;
2.终端 与中控机的通信接口为 PRSM Bus,PRSM的通信功能由FPGA来完成,Nios 来实现对业务逻辑的控制;
3.前面板 与中控机主板的通信接口为串口,通信功能由FPGA来完成,Nios 来实现对业务逻辑的控制;
4.中控机音频增益部分控制的通信接口为IO控制,通信功能和逻辑控制由Nios 来实现。
PRSM Bus 会议系统按照MVC架构划分如上图所示,最核心的中控机承担MODEL的角色
除中控机本身业务需求(报到,表决,发言等)外,还需注意如下几点:
首先PRSM Bus 会议系统是一个TDM在同一条线路中实现通信,两毫秒的时钟为一个节拍,所以Nios 软件与终端间的通信就要按两毫秒的节拍来;
其次,中控机有六个独立的通道,每个通道连接的最大设备为254台,六个通道相互独立,可以并行工作;
第三,在一个物理通道内,同一个两毫秒节拍内中控机只能下发一条通信数据,所以中控机下发任务是抢占式的,其中上位机下行的消息优先级最高,其次是前面板的消息,第三位的是终端的应答消息,最后是中控机的正常轮询任务;
第四,0区1号地址是特殊地址,可以用于连接唯一的主席机,脱机状态主席机可以进行简单的会议控制;
第五,上位机接口(网口,串口)以及前面板的串口都接收数据的时候都采用流式解析方式,即每收到一个字节都进入解析程序进行判断数据合法性;
Nios 软件整体上采用面向对象的思想,自顶向下各个类依次如下图:
Nios 软件分为三层,自底向上依次为:
a. 驱动层: 跟硬件BSP 直接相关,基于BSP层函数实现硬件驱动层接口;
b. 硬件抽象层:用于隔离业务层和驱动层,该层代码的功能是对硬件的操作,但是隐藏了硬件相关的细节;
c. 业务层: 主要用于实现 PRSM Bus 协议。
按照面向对象的思想进行代码编写,所以数据结构类似于上面的总体架构图,下面列举几个主要的数据结构:
1) 主结构体 FLX_CCU
2) FLX_CCU_CAMERA
3) FLX_CCU_LCD
4) FLX_CCU_PC
5) FLX_CCU_TERMINAL
6) FLX_CCU_MANAGE
7) FLX_CCU_MANAGE_REGISTE
8) FLX_CCU_MANAGE_SPEAK
9) FLX_CCU_MANAGE_TERMINAL
10) FLX_CCU_MANAGE_VOTE
3.4.1模块划分依据面向对象的思想,对象FLX_CCU ,包含五个对象
a. FLX_CCU_CAMERA,负责与集控主机进行通信,完成摄像联动;
b. FLX_CCU_LCD,负责与前面板进行通信,完成显示信息和设置参数;
c. FLX_CCU_PC,负责与上位机进行通信,完成会议相关的控制功能;
d. FLX_CCU_TERMINAL,负责与终端设备进行通信;
e. FLX_CCU_MANAGE,负责对系统(除上位机)的整体状态,功能进行管理;
这些子模块只完成基本的功能,例如 FLX_CCU_LCD ,完成基本收发数据功能,并且完成收发数据的基本处理(接收数据的包格式合法性判别,发送的数据按包格式打包),不处理业务,也就是不判断收发数据的内容。
注意,上图中的函数指针为对象的方法,需要向对待接口一样,将这些方法功能一一实现,否则会出现空指针的非法访问。
结构如下图:
3.4.2模块间通信
各个模块完成自己模块的功能,模块间通信(实际就是业务的处理)在子模块的上一层来完成,这样就保证了模块内部内聚性和模块间的低耦合性。
如图3.4.1的结构图,所有模块间的通信都是发生在业务层的最顶层对象内FLX_CCU,所以业务逻辑可以作为FLX_CCU 对象的方法。
如上图所示,共需要四个数据处理的方法:
1) 解析并响应上位机串口接收的数据;
2) 解析并响应上位机网口接收的数据;
3) 解析并响应前面板串口接收的数据;
4) 解析并响应终端设备PRSM Bus口接收的数据.