电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA/CPLD » 如何初始化用IP生成的双口RAM?


共10条 1/1 1 跳转至

如何初始化用IP生成的双口RAM?

工程师
2009-11-14 09:33:04    评分
我用ISE的core generator 生成了一个双口RAM,想对它进行初始化,怎么操作呢?
            我用ISE生成它时有一个加载初始化文件的配置,但我不知道怎么编辑生成这个初始化文件。
           另外,我使用modelsim进行仿真,将所有的源文件(包括用core generator 生成的)都拷贝出来新建了个工程(也就是直接用modelsim仿真,而不是通过ISE的工程调用modelsim来仿真,当然,需要的各种库我已经编译好了),如果这样又怎样对生成的双口RAM初始化呢?
谢谢



关键词: 如何     初始化     生成     双口    

高工
2009-11-14 10:51:44    评分
2楼
你指的是在Memory Initialization是Load Init File的Coe File吗?

工程师
2009-11-14 11:09:56    评分
3楼

是的,设置页面见下图
我新建了个.mem的文件,不知道是不是,也不知道该怎么写。
这个是直接在ISE下设置的,如果单独放到modelsim的工程中又该如何初始化呢?


高工
2009-11-14 11:38:25    评分
4楼
好像是.coe文件吧,给你个示例,memory_initialization_radix表示位宽。最后面那一系列数字就是表中的值。如果较多,可用Matlab等生成

memory_initialization_radix=10;
memory_initialization_vector =
           65535,
           65535,
           65533,
           65530,
           65526,
           65520,
           65513,
           65505,
           65496,
           65485,
           65474,
           65461,
           65447,
           65431,
           65414,
           65397,
           65377,
           65357,
           65335,
           65313,
           65289,
           65263,
           65237,
           65209,
           65180,
           65150,
           65119,
           65086,
           65052,
           65017,
           64981,
           64943,
           64905,
           64865,
           64824,
           64781,
           64738,
           64693,
           64647,
           64600,
           64552;

工程师
2009-11-18 09:59:30    评分
5楼
以下是我用MATLAB生成初始化数据的代码:
x=linspace(0,511,512);
fid=fopen('c:/init_men.txt','wt');
fprintf(fid,'%16.0f\n',x);
fclose(fid)
生成的数据如图:
现在我的疑惑是:1.由于数据量较大,每行前面的空格怎么用简单的方法去掉?
                                2.每行末尾的逗号如何用快捷的方法添加?
    研究了下记事本的查找替换功能,没弄出来,不知道版主是怎么处理的呢?

高工
2009-11-18 10:11:40    评分
6楼
逗号在Matlab里直接加上就行,空格留着无所谓。最后一行的逗号再手动改成分号。

x=linspace(0,511,512);
fid=fopen('c:/init_men.txt','wt');
fprintf(fid,'%16.0f,\n',x);
fclose(fid)

工程师
2009-11-18 10:17:23    评分
7楼

是这样,谢谢!


高工
2009-11-26 13:30:47    评分
8楼

在给你一个例子,改一下你们的数据就可以用了。生成的文件也无需修改,直接导入就行

% Generate sin & cos table for DDS

%%
clear all;
close all;

%%
x = linspace( 0, 2*pi, 1024 );

y_cos = fix( (cos(x)+1)*512 );

for k = 1:length(y_cos)
    if y_cos(k)>=1024
        y_cos(k) = 1023;
    end
end

%%
fid = fopen( 'cos_coe.coe', 'wt' );

fprintf( fid, 'memory_initialization_radix=10;\n', y_cos );
fprintf( fid, 'memory_initialization_vector =\n', y_cos );
fprintf( fid, '%10.0f,\n', y_cos(1:end-1) );
fprintf( fid, '%10.0f;', y_cos(end) );
fclose( fid );

plot(y_cos);
grid on;

dbin = dec2bin(y_cos,10);


工程师
2009-11-26 16:43:05    评分
9楼
很好的例子,谢谢!

高工
2009-11-26 23:18:54    评分
10楼
不用客气,直接放在Matlab中就可以运行了

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]