在选定系统需要的IP资源后,就可以通过SoPCBuilder很快地在FPGA上构建一个嵌入式系统。首先,定制软核处理器,设定为standard标准型NIOSⅡCPU,4 kB指令缓冲器,支持JTAG下载调试;16 M FLASH用来存放用户数据和程序;16 M DDR SDRAM用来作为系统运行时程序的存储空间;定制Avalon三态总线架构,将LAN91C111设置为Avalon总线的从器件,通过Avalon总线与NIOSⅡ系统相连,并定制LAN91C111的驱动模块,实现系统对于该芯片的控制。
搭建完系统的模块后,需要为各个模块设定中断号,让CPU在运行过程中判断内部和外部各种中断的优先级,其中系统定时器的中断优先级最高,然后各个模块的中断优先级从高到低依次为JTAG模块、外部按钮输入、EPCS配置芯片、LAN91C111芯片。同时需要将FLASH存储器的基地址设为0x000000,以便使系统每次都能从FLASH中开始执行指令。这样,在使用SoPC Builder中的组件编辑器将用户外设和系统连接起来后,就可以运行SoPC Builder生成系统的硬件描述语言文件,编写相关的Verilog HDL模块,将系统模块和外部器件连接,然后通过QuartusⅡ软件编译整个FPGA设计项目。
4 系统的软件程序设计
在智能家居控制系统中,需要完成网络数据传输和控制控能,因此在软件设计中,需要完成2个方面:网络服务功能,建立客户端和本系统之间的网络连接;响应以太网消息数据,进行对应的电路控制。
在设计中使用LwIP(Lightweight TCP/IP Stack)组件实现系统的网络控制功能,同时需要移植操作系统支持LwIP组件的使用,在系统中选择移植μC/OS-Ⅱ操作系统,在软件的设计中添加上RTOS和LwIP这2个组件,就能很方便地实现本系统的网络数据传输与控制功能。
在NiosⅡIDE中建立新的工程后,首先在“SystemLibrary Properties”(系统库属性)中选择RTOS Options进行操作系统的参数设置。在μC/OS-Ⅱ中除了用户创建的任务外,系统还自带2个必须的任务,分别为统计任务和空闲任务,用来进行系统的管理,所以考虑以后系统升级的方便,在对系统最大任务数进行设置时,最大任务数设为10。同时最低优先级设为20,在这里数字越高代表任务优先级越低,这个参数不受限于系统所带的任务数。然后,在系统库属性中选择Software Components进行LwIP网络协议栈的参数设置,在系统中使用的协议有UDP和TCP协议,并使用DHCP服务完成对系统自动分配IP的功能,其他参数保存为默认值。对μC/OS-Ⅱ和LwIP设置完成后,就是编写系统的相关功能任务。
在系统中主要设计了4个自定义任务,分别为:
(1)系统初始化管理任务:用来初始化操作系统的数据结构和创建其他任务。该任务在初始化完成后自动删除。
(2)网络DHCP服务管理任务:主要用来检查DHCP服务是否成功,即系统是否成功分配到IP。该任务在完成后也自动删除。任务流程图如图2所示:
(3)远程控制管理任务:主要用来在服务器和客户端之间建立Socket连接,在服务器端接收从客户端发送来的控制命令,并判断这些命令来进行相应操作。任务流程图如图3所示:
(4)服务器端中断管理任务:主要在服务器端处理用户产生的各种中断,然后向客户端发送相应命令执行对应操作。任务流程图如图4所示。