Matlab&Vivado生成ROM IP核

王志君老师布置的作业卷积的硬件实现和陈云霁老师的softmax函数的加速。

在完成卷积时参考了博主鹅要长大 的文章,以及王志君老师,陈云霁老师课堂所讲,王老师是集技术经验与美貌于一身的好老师,陈老师是大牛级别。这里一并感谢。

做一开头,因为要用ROM IP核。

**主要的步骤:

  1. 用matlab将灰度图像生成txt文件
  2. 生成coe文件
  3. 用vivado创建IP核
  4. Generator例化后会生成一个.mif文件
  5. modulesim的仿真

**
1.用matlab将灰度图像生成txt文件

%%灰度图像生成txt文件
[file,path]=uigetfile({'*.jpg';'*.bmp';'*.png'},'选择图片');
I_rgb=imread([path,file]);
subplot(221),imshow(I_rgb),title('原图')

I_gray=rgb2gray(I_rgb);
subplot(222),imshow(I_gray),title('灰度图')

fid=fopen('./lena.txt','wt');                          %打开文件lena.txt
for i=1:size(I_gray,1)                                 %遍历像素
    for j=1:size(I_gray,2)
        fprintf(fid,'%d',I_gray(i,j));
    end
    fprintf(fid,'\n');                                 %每行回车
end
fid=fclose(fid);                                       %关闭文件
I_data=load('./lena.txt')                              %放在当前的目录下

结果
Matlab&Vivado生成ROM IP核_第1张图片
2.生成coe文件

%生成.coe_file
[m,n]=size(I_gray);
N=m*n;                                                       %数据长度,即存储器的深度
word_len=8;                                                  %每个单元的位数
data=reshape(I_gray',1,N);                                   %变成特定的矩阵,1行n列

fid=fopen('lena.coe','wt');                                  %打开lena.coe文件
fprintf(fid,'MEMORY_INITIALIZATION_RADIX=16;\n');            %这两行不变,进制数
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n');              %数据

for i=1:N-1
    fprintf(fid,'%x,\n',data(i));
end
fprintf(fid,'%x;\n',data(N));                                 %每个数据回车
fclose(fid);

结果
Matlab&Vivado生成ROM IP核_第2张图片
3.用vivado创建IP核
1.选择IP Catalog
Matlab&Vivado生成ROM IP核_第3张图片
2.Memories & Storages Elements->RAMs & RAMs & BRAM->block memory generator Matlab&Vivado生成ROM IP核_第4张图片
Matlab&Vivado生成ROM IP核_第5张图片
Matlab&Vivado生成ROM IP核_第6张图片
Matlab&Vivado生成ROM IP核_第7张图片
文件添加进去就OK

reference:
https://www.cnblogs.com/happyamyhope/

越是憧憬,越要风雨兼程。

你可能感兴趣的:(verilog,Matlab)