cuter

【再说FPGA】ISE 14.2 的 memory editor在哪里 VS C程序打印coe文件

0
阅读(7042)

    前一篇文章也稍微说了一下关于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,路径稍微有点不一样,如下图所示:

I$D$K8`B5BQ4]4A%IK2`7`L

    我的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”如下图所示:

image      打开ISE的命令行之后,直接输入mem_edit,回车,就可以弹出memory editor了:

0PYEFDO6E9[0$W8XWFV8$F4

    搞定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,输入的指令如下图所示:

88AJPY]~_9F_8ULGKYW6IDD

 

 

    查看一下sin_rom.exe所在文件夹:

F$28A7T)PUETQ7ENR_D3RAV

    查看一下生成的sin_lut2.coe:

        开头:

{V92NHTR{@P(`BV6I3}~[04

       结尾:

[9F(C(4NW77BUED4XUFI(TX

    除去开头的两行,总共1024个数据,大致浏览一下数据,也没问题,OK了~