在SoPC上实现的波形发生器
引 言
sopc可编程片上系统是一种特殊的嵌入式微处理器系统。首先,它是片上系统(soc),即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,以fpga为硬件基础,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件系统在线可编程的功能。
ip(intellectual property)知识产权是soc设计中非常重要的内容。资源复用(ip reuse)是指在集成电路设计过程中,通过继承、共享或购买所需的部分或全部知识产权内核(ip core)进行设计、综合和验证,从而加速流片设计过程的设计方法。ip技术包含两个方面的内容:ip核的生成和ip核的重用。本设计中采用vhdl语言,构建一个功能强大的完整dds模块,并根据ibm coreconnect总线连接规范,在dds模块外面添加opb(onchip peripheral bus)片上外设总线接口,封装为自定义ip,添加到硬件系统中。
对于本设计来说,利用sopc和ip的优势是可以利用最少的元器件,创建一个易配置、易扩展、易修改并且易于继承使用的集成系统。该系统的创建是基于xilinx公司提供的嵌入式开发工具包edk(embedded development kit)来实现的。edk自带了microblaze软核和powerpc硬核微处理器及大量免费ip,有利于构建简易系统。针对microblaze及powerpc提供的c语言编译器,可使系统的功能实现更加简易。对基于microblaze的系统,microblaze通过opb总线与外设ip及外部存储器控制接口相连接,通过lmb(local memory bus)总线与fpga片上块存储器bram(block ram)相连接,还可以通过emc(external memory control)等存储器控制ip扩展片外ram或rom。
1 系统的架构
本设计采用sopc可编程片上系统的思想,利用xilinx的spartan3系列xc3s400 fpga,通过edk开发工具包的集成开发环境xps(xilinx platform studio)完成了fpga硬件系统设计及基于此硬件系统的软件开发。图1是基于edk的系统开发设计流程图,设计分为硬件设计和软件设计两部分。硬件设计符合基于hdl硬件描述语言的eda开发流程,是根据硬件系统合理使用总线ip和外设ip,并为各个实例定义地址范围以及输出端口和时钟,经过综合及布线后形成硬件配置文件。软件设计与传统的嵌入式软件开发设计类似,是在硬件设计的基础上根据处理器所支持的指令集以及编译环境编写程序代码,然后对代码编译烧写及调试。

该设计通过fpga实现所有数字部分。系统的示意图如图2所示。



在fpga内部,以microblaze为控制核心,以dds ip为波形发生功能实现核心,同时加入了其他的ip核,诸如调试用的mdm(microprocessor debug module),用于与pc进行通信的uart(universal asynchronous receiver & transmitter)通用异步传输模块,以及lcd显示和4×4按键控制模块,实现了系统的高度集成。fpga硬件系统为数字系统产生数字量,外围电路加上高速数模转换器件dac902,把波形数据转换为模拟波形,即实现了完整的可编程片上系统的波形发生器。
2 硬件系统的具体实现
本设计以32位microblaze软核处理器为系统的核心部分,负责指令的执行。各种ip包括自主编写的以及edk自带的,使用xps下的add/edit cores工具,通过相应类型的总线连接到microblaze上。其中uart、lcd、gpio和自主编写的dds的ip都是通过opb(onchip peripheral bus)片上外设总线连接到处理器上的。程序存储器ram则是由fpga内部的bram实现,并通过lmb(local memory bus)本地存储器总线与microblaze相连接。自主编写的ip与总线间的接口符合coreconnect规范,实现了ip间的无缝结合,方便了数据的读写及时序控制。图3给出了在fpga内部由各种ip组合成的可编程硬件系统。
硬件系统所包含的器件如图3右部分所示。microblaze_0是该系统的cpu,其中的debug_module为调试模块,dlmb_cntlr和 ilmb_cntlr为片上bram控制器。lmb_bram为片上bram,它通过lmb总线与 bram控制器相连,接受cpu的读写访问。ddfs是为实现dds编写的ip模块。rs232为uart模块,用于与其他设备的通信以及程序调试。lcd ip负责128×64点阵液晶的显示控制。 col和row是例化后的gpio接口,用于连接4×4键盘。
2.1 microblaze软核处理器
microblaze是xilinx提供的32位微处理器ip核,是哈佛结构的risc微处理器,有较高的性能。它可以在性价比很高的spartaniii系列fpga上实现。edk为其提供了mbgcc,支持c及c++语言。 microblaze架构如图4所示。
该处理器含有32个32位的通用寄存器,2个专用寄存器,独立的32位数据和指令总线,并与ibm的opb总线完全兼容,具有32位的指令宽度支持三个操作数和两种寻址模式,以及可选的硬件乘除法及浮点运算单元。
2.2 dds ip的实现
数字直接频率合成技术(direct digital frequency synthesis,简称dds或ddfs)的基本原理是利用采样定理,通过查表法产生波形,其基本电路原理如图5所示。
dds的频率及步进容易控制,且合成的频率取决于累加器及查找表的速度,采用fpga可以很好的发挥这项优势,获得精细的步进及宽频带。使用hdl硬件描述语言,可以很方便的描述出dds的fpga硬件实例。在基本的dds模块上,添加相应的控制寄存器,通过向不同的寄存器内写入相应的控制字,实现频率以及幅度的可控性。最后通过ibm coreconnect技术,在dds模块外面添加总线接口,作为自定义ip,成功地将其挂载到系统总线上,便可以方便的对其进行读写操作,实现dds模块与microblaze的通信。图6是从用户逻辑到成为符合ibm coreconnect技术规范的dds ip的实现过程。
dds的vhdl代码作为子模块与opb_core_ssp0_ref.vhd模块共同构成opb_dds ip core,其中ipif(ip interface )符合ibm coreconnect规范,负责dds逻辑与opb总线之间的通信。在edk中,通过create/import ip工具把opb_dds添加到系统中,并为其分配地址,建立端口连接,之后就可以使用该ip了。dds ip配合控制程序可产生各种波形,并对频率、幅度进行精确的控制。
2.3 其余部分
系统所需要的lcd显示、dac控制等模块,均通过与生成dds ip相同的方式,编写为符合ibm coreconnect总线规范的ip,以供使用。
在硬件系统构建完毕之后,使用platgen工具生成网表文件和bitgen工具生成相应的硬件配置文件。若将工程导入到ise软件中,可以进行优化设置,还可以将工程导入到其他的综合工具如synplify pro进行实现。ip核的编写是在ise中完成的。无论对于整个系统还是一个单独的ip,都可以利用modelsim工具进行行为及时序仿真。最后,为此系统描写xbd(xilinx board description)板级描述文件,通过此文件,edk可以通过bsb(base system builder)模式自动生成基本的硬件系统,并对所添加的端口进行约束,这样可以实现资源的继承性使用。


3 软件系统的实现
edk提供了免费的gnu c compiler,可以支持标准c。同时,edk为多种ip以api的形式提供了驱动函数,有利于程序的开发。xps所集成的软件工程管理工具允许在一个硬件平台上同时开发多个软件工程。完成软件代码的编写后,使用edk集成的xmd和gdb调试器对代码进行仿真和调试,也可以配合chipscope(片内逻辑分析仪)进行硬件及软件的协同调试。xmd通过mdm模块和jtag口连接目标板上的cpu,gdb可以对程序进行单步调试或断点设置。针对本设计及应用,编写了系统控制及液晶显示程序。程序编译后生成为elf文件,通过update bitstream工具把程序同硬件配置文件合成为download.bit文件,把此文件下载到目标板后,fpga首先根据硬件配置信息建立硬件系统,并把程序代码映射到片内bram中,最后启动microblaze,运行程序。
4 总结
本系统基于fpga,以microblaze为核心,加入具有良好特性的dds ip,并辅以必要的外围电路,构成了高度集成化的系统。另外,sopc系统的柔性配置,使得可以基于此系统扩展片外存储器,并可以实现rtos操作系统的移植,以实现更丰富的功能和完成更复杂的任务。
评论