【再说FPGA】ISE 14.2 的 memory editor在哪里 VS C程序打印coe文件
0赞前一篇文章也稍微说了一下关于memory editor的问题——“结果卡在rom的初始化文件上面了——为了装15G的ISE,我把matlab删了,一狠心vc也删了,没法写程序生成数据,就想用memory editor稍微编辑一下一个简单的coe文件,结果一直找不到memory editor……各种搜,都是比较老的版本,行不通。”
memory editor虽然不能够快速、批量的生成数据,但是,如果需要的数据量较少,或者是无规则数据还是有用的,在网上搜解决办法的时候,也见到不少有需要用memory editor的网友各种提问。
不多说了,搞定之后发现问题很简单,但过程小纠结:
在ISE 10.x及之前的版本,memory editor可以通过CORE Generator。打开,看网上大多数说法是在Tool菜单下有个memory editor(我没有试过)。在ISE 11.1及之后的版本在CORE Generator里就没有memory editor的接口了。官方有个"answer"是这么说的:
-----------------------------------------分割线------------------------------------------
In ISE Design Suite 11.1 and later, Memory Editor will be available as a standalone application. To use Memory Editor with software releases after ISE Design Suite 10.x, use mem_edit.bat (Windows platforms) or mem_edit (Linux platforms). This script is available in the $XILINX/bin/<OS> directory.
-----------------------------------------分割线------------------------------------------
我在自己的Xilinx安装路径下找到了mem_edit.bat,路径稍微有点不一样,如下图所示:
我的ISE为14.2,XP操作系统(<OS>=nt),路径是$XILINX\14.2\ISE_DE\ISE\bin\<OS>。
找到后,高兴了一下,看起来是个批处理文件,于是双击运行……黑框一闪即逝,等待的结果却是什么都没出现。
打开文件看看,也看不明白……
打开Windows的命令行,输入mem_edit.bat,也没反应。
纠结啊,搜了搜也搜不到啥,突然想起来,之前在SDK调试软件的时候用过SDK带的一个shell,也是命令行,所以想到是不是ISE也有个命令行什么的,于是就在程序里寻觅了一下,结果还真的有,在“开始 –> 所有程序 -> Xilinx Design Tools -> ISE Design Suite 14.2 –> Accessories –> ISE Design Suite Command Prompt”如下图所示:
打开ISE的命令行之后,直接输入mem_edit,回车,就可以弹出memory editor了:
搞定memory editor之后,随便改了开头几个数据,然后VGA测试了一下,OK~
简单的、少量数据用memory editor编辑一下可以了,那批量的、有规律数据怎么办呢?以正弦波形数据的生成为例,设计了一个简单的C程序,生成了coe文件:
coe文件的格式不多说了,给个例子吧:
coe文件示例****************************************************************** ********* Example of Dual Port Block Memory .COE file ********** ****************************************************************** ; Sample memory initialization file for Dual Port Block Memory, ; v3.0 or later. ; ; This .COE file specifies the contents for a block memory ; of depth=16, and width=4. In this case, values are specified ; in hexadecimal format. memory_initialization_radix=2; memory_initialization_vector= 1111, 1111, 1111, 1111, 1111, 0000, 0101, 0011, 0000, 1111, 1111, 1111, 1111, 1111, 1111, 1111;
具体的文件格式,在Xilinx官方网站上可以找到,这里我做了一个pdf,在附件里上传。
用C语言设计了一个简单的控制台程序,按照coe文件的格式打印出所需要的波形数据,程序如下:
生成coe文件的c程序//----------------------------------------------- // file: main.c // description: 本程序用于产生正弦波数据值,深度为1024,数据位宽为8bits // 根据需求,更改两个宏定义就可以生成自己需要的数据了 // 打印格式为ceo文件 // author: cuter //----------------------------------------------- #include <stdio.h> #include <math.h> #define NUM_OF_BYTES 1024 #define DATA_WIDTH 8 void main () { int i;float s;double j=1; printf("MEMORY_INITIALIZATION_RADIX = 10;\n"); // 数据为10进制表示 printf("MEMORY_INITIALIZATION_VECTOR=\n"); for(i=0;i<NUM_OF_BYTES;i++) // 存储深度为10位,1024个数据 { s=sin(atan(j)*8*i/NUM_OF_BYTES); // sin(2*pi*i/1024) // printf("%d", (int)((s+1)*255/2)); // 255数据位宽为8位 printf("%d",(int)((s+1)*((1<<DATA_WIDTH)-1)/2)); // 其实就是上一句的参数写法 if( i == 1023 ) printf(";\n"); // 最后一个数据后面打印分号 else printf(",\n"); // 中间数据后面打印逗号 } }
编译生成可执行文件后,打开命令行,将路径切换到可执行文件所在的文件夹,输入如下指令:
你的可执行文件名称 > coe文件名称.coe
我的可执行文件名为sin_rom,coe文件名为sin_lut2.coe,输入的指令如下图所示:
查看一下sin_rom.exe所在文件夹:
查看一下生成的sin_lut2.coe:
开头:
结尾:
除去开头的两行,总共1024个数据,大致浏览一下数据,也没问题,OK了~