基于System Generator的FPGA开发总结

前一阵一直在忙,所以没有来得及写博文。弄完杂七杂八的事情,又继续fpga的研究。使用verilog hdl语言和原理图输入来完成fpga设计的方法都试验过了,更高级的还有基于system generator和基于edk/microblaze的方法。为了将以往已经开发的matlab仿真通过的电机控制算法快速转换为可供fpga使用的算法,首先研究了基于system generator的fpga开发,并有选择性地实现了几个算法,证明了其有效性。在这里先把开发过程中的一些心得写出来,欢迎大家分享、交流。
预先介绍一下软硬件环境:
ise版本为xilinx ise design suite 12.1(包含system generator12.1,但是那个著名的acceldsp组件找不到了);matlab版本为matlab r2010a win32版(simulink为7.5版),硬件开发板有digilentinc的spartan3e xc3s500e开发板和自己制作的spartan3 xc3s400实验板。
首先是安装matlab,这里要注意的是matlab的安装路径必须与英文开头,中间可以包含数字;其次是路径中不能有空格,否则system generator将无法识别matlab的路径。然后安装ise 12.1,完成之后点击“c:\documents and settings\all users\「开始」菜单\程序\xilinx ise design suite 12.1”里面的“system generator matlab configurator”,如果matlab安装正确,system generator会识别出maltab,否则需要手动选择maltab的路径;这里还有个版本限制,即ise/ system generator12.1只能完全支持maltab2009a/b,对maltab2010a只能beta支持(中间遇到问题就是resource estimator用了一次之后就再也不能正常运行了,不知道是不是beta的原因)。
然后就可以启动matlab,新建一个mdl仿真文件,并打开simulink library browser,切换到xilinx blocket,如果是第一次打开xilinx blocket,需要有一个建立xilinx缓存的过程,时间比较长,不要把它当成电脑的假死。另外还有两个xilinx的菜单是xilinx reference blockset v12.1和xilinx blockset v12.1,这个以后再详细讲。
下面进入开发步骤了。首先,每个工程里面都要有一个system generator的工具箱(在xilinx blocket—tools里面),在这里可以配置的有
[1]. system generator生成的工程类型,比如ise工程、edk工程等,甚至可以直接生产.bit配置文件;
[2]. 器件的型号,包括封装、速度等;
[3]. system generator的输出路径(文件夹);
[4]. 综合工具(如xst、synplify等,经常找不到synplify,干脆就xst好了);
[5]. 编程语言选择:只有vhdl和verilog hdl;
[6]. 可以选择是否生产测试文件;
[7]. 配置fpga的时钟,并选择时钟管理方式,这里给出了时钟管脚的配置,不过应该先不填,不然在后面的综合中会有很多警告;其次是若选择了dcm方式,则只能支持virtex4\5的器件(用spartan3、3e编译时提示的;奇怪是为什么没有说支持最新的spartan6、virtex6器件);
[8]. 最后是选择simulink的仿真周期,以及各个模块的显示方式(比如选择default显示各个模块的默认值,选择sampling frequency则在各模块的输入输出引脚上显示其时钟频率,如50mhz、10mhz等)。
完成system generator的配置之后,剩下的仿真环境的搭建、运行步骤和simulink的普通应用是一样的,只不过必须是从xilinx的菜单下拖出来的模块才能被物理实现(即可综合);对应simulink库中的其他模块和xilinx模块之间的连接,要使用gateway in和gateway out做为接口。
搭建完整个系统之后,把需要观察的变量通过gateway out接到示波器上,点击simulink的运行按钮,就可以观测结果了。system generator的差错机制非常严格,即使是数据位数不对都会停止仿真并报错。
仿真无误之后,可以运行的操作更加丰富,比如调用modelsim进行仿真(system generator的输出文件夹中已自动生产了.do文件),调用resource estimator预估资源(过程比较漫长,因为需要综合等过程)等。完成之后在system generator工具箱中点击generate,就可以在输出文件夹中生产ise的工程了(.xise)。
打开生产的ise工程,接下来的操作跟平时没有什么区别,只不过这里的代码全部是自动生成的:)。当然,还有一点需要特别交待的就是,生成的工程中的约束文件中,只有时序约束,是没有管脚约束的(虽然没有管脚约束,也可以综合、映射、生成下载文件,有点奇怪)。可以给工程添加输入输出、信号,然后在floorplan里面分配管脚。再经过综合、映射、生成下载文件,烧写到prom里面,就可以运行了。
最后附上一点在system generator开发、调试过程中的一点小经验:
[1]. 一些xilinx blocket没有的逻辑结构,比如说case---switch语句,用模块搭比较麻烦,这时可以用matlab的m文件书写,并保存为matlab的函数,然后使用xilinx blocket的mcode模块调用,这样比搭模块还要简单的多;
[2]. 浮点数的处理是个大麻烦,幸运的是xilinx blocket提供了xfix语句,可以将浮点转换为需要的宽度、位数的定点,比如a = xfix({xlunsigned, 8, 3}, 1.53),就把浮点数1.53转换为无符号数,其前8位代表整数,后3位代表小数;
[3]. xilinx blocket一些模块是不消耗硬件资源的,比如scale模块;另一些则是消耗的,比如shift模块;这些详细说明在每个模块的帮助里面都有;
[4]. xilinx blocket中有的模块,不一定在所选择的器件上适用,比如dsp48、dsp48e等,此时需要结合具体器件的特点。

如何TransCAD软件导入常用交通规划软件的网络数据?
彩电特殊关机亮点/彩斑的检修思路
iPhone7上市时间确定 国行iPhone7两款均为32GB起步
我的颜值担当小米6,就问你还有多久来?会和小米平板3一起么
制冷机组cop一般多少 制冷系统cop怎么计算
基于System Generator的FPGA开发总结
用于物联网应用的调制解调器
iOS10.3正式版将支持更快屏幕刷新? 测试版系统漏玄机
国芯思辰|基本半导体650V 20A碳化硅肖特基二极管B1D20065K替代IDH20G65C5应用于PFC电路
适合采用区块链技术的领域有哪些
TRUEC2技术的高性能LED射灯方案
下拉电阻的作用原理
FreeRTOS的事件标志组
关于EMC问题的测试
使用IP平台开发FPGA并进行应用设计
Cortex-A8处理器:AM335x的特点及应用介绍
三星无线充电器创造及发展变迁史详解
通过稀疏支持和Transformer优化增强AI推理
spad502叶绿素仪简介,它的功能特点有哪些
液晶显示器,液晶显示器色彩饱和度