cuter

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

0
阅读(6638)

前一篇文章也稍微说了一下关于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/ directory.

-----------------------------------------分割线------------------------------------------

我在自己的Xilinx安装路径下找到了mem_edit.bat,路径稍微有点不一样,如下图所示:

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

我的ISE为14.2,XP操作系统(=nt),路径是$XILINX\14.2\ISE_DE\ISE\bin\

找到后,高兴了一下,看起来是个批处理文件,于是双击运行……黑框一闪即逝,等待的结果却是什么都没出现。

打开文件看看,也看不明白……

打开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 fileforDual Port Block Memory, ; v3.0 or later. ; ; This .COE file specifies the contentsfora block memory ; of depth=16, and width=4. In thiscase, 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  #include  #define NUM_OF_BYTES  1024 #define DATA_WIDTH   8voidmain () {inti;floats;doublej=1;printf("MEMORY_INITIALIZATION_RADIX = 10;\n");  // 数据为10进制表示printf("MEMORY_INITIALIZATION_VECTOR=\n");for(i=0;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<// 其实就是上一句的参数写法if( i == 1023 )printf(";\n");  // 最后一个数据后面打印分号elseprintf(",\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了~

Baidu
map